mirror of
https://github.com/CTCaer/hekate
synced 2024-11-16 08:59:26 +00:00
185526d134
BDK will allow developers to use the full collection of drivers, with limited editing, if any, for making payloads for Nintendo Switch. Using a single source for everything will also help decoupling Switch specific code and easily port it to other Tegra X1/X1+ platforms. And maybe even to lower targets. Everything is now centrilized into bdk folder. Every module or project can utilize it by simply including it. This is just the start and it will continue to improve.
79 lines
1.7 KiB
C
79 lines
1.7 KiB
C
/**
|
|
* @file lv_circ.c
|
|
* Circle drawing algorithm (with Bresenham)
|
|
* Only a 1/8 circle is calculated. Use CIRC_OCT1_X, CIRC_OCT1_Y macros to get
|
|
* the other octets.
|
|
*/
|
|
|
|
/*********************
|
|
* INCLUDES
|
|
*********************/
|
|
#include "lv_circ.h"
|
|
|
|
/*********************
|
|
* DEFINES
|
|
*********************/
|
|
|
|
/**********************
|
|
* TYPEDEFS
|
|
**********************/
|
|
|
|
/**********************
|
|
* STATIC PROTOTYPES
|
|
**********************/
|
|
|
|
/**********************
|
|
* STATIC VARIABLES
|
|
**********************/
|
|
|
|
/**********************
|
|
* MACROS
|
|
**********************/
|
|
|
|
/**********************
|
|
* GLOBAL FUNCTIONS
|
|
**********************/
|
|
|
|
/**
|
|
* Initialize the circle drawing
|
|
* @param c pointer to a point. The coordinates will be calculated here
|
|
* @param tmp point to a variable. It will store temporary data
|
|
* @param radius radius of the circle
|
|
*/
|
|
void lv_circ_init(lv_point_t * c, lv_coord_t * tmp, lv_coord_t radius)
|
|
{
|
|
c->x = radius;
|
|
c->y = 0;
|
|
*tmp = 1 - radius;
|
|
}
|
|
|
|
/**
|
|
* Test the circle drawing is ready or not
|
|
* @param c same as in circ_init
|
|
* @return true if the circle is not ready yet
|
|
*/
|
|
bool lv_circ_cont(lv_point_t * c)
|
|
{
|
|
return c->y <= c->x ? true : false;
|
|
}
|
|
|
|
/**
|
|
* Get the next point from the circle
|
|
* @param c same as in circ_init. The next point stored here.
|
|
* @param tmp same as in circ_init.
|
|
*/
|
|
void lv_circ_next(lv_point_t * c, lv_coord_t * tmp)
|
|
{
|
|
c->y++;
|
|
|
|
if(*tmp <= 0) {
|
|
(*tmp) += 2 * c->y + 1; // Change in decision criterion for y -> y+1
|
|
} else {
|
|
c->x--;
|
|
(*tmp) += 2 * (c->y - c->x) + 1; // Change for y -> y+1, x -> x-1
|
|
}
|
|
}
|
|
|
|
/**********************
|
|
* STATIC FUNCTIONS
|
|
**********************/
|