183 lines
7.3 KiB
C
Executable File
183 lines
7.3 KiB
C
Executable File
/**
|
|
* @file lv_grad.h
|
|
*
|
|
*/
|
|
|
|
#ifndef LV_GRAD_H
|
|
#define LV_GRAD_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/*********************
|
|
* INCLUDES
|
|
*********************/
|
|
#include "../lv_conf_internal.h"
|
|
#include "lv_color.h"
|
|
#include "lv_area.h"
|
|
|
|
/*********************
|
|
* DEFINES
|
|
*********************/
|
|
|
|
/**********************
|
|
* TYPEDEFS
|
|
**********************/
|
|
|
|
/**
|
|
* The direction of the gradient.
|
|
*/
|
|
typedef enum {
|
|
LV_GRAD_DIR_NONE, /**< No gradient (the `grad_color` property is ignored)*/
|
|
LV_GRAD_DIR_VER, /**< Simple vertical (top to bottom) gradient*/
|
|
LV_GRAD_DIR_HOR, /**< Simple horizontal (left to right) gradient*/
|
|
LV_GRAD_DIR_LINEAR, /**< Linear gradient defined by start and end points. Can be at any angle.*/
|
|
LV_GRAD_DIR_RADIAL, /**< Radial gradient defined by start and end circles*/
|
|
LV_GRAD_DIR_CONICAL, /**< Conical gradient defined by center point, start and end angles*/
|
|
} lv_grad_dir_t;
|
|
|
|
/**
|
|
* Gradient behavior outside the defined range.
|
|
*/
|
|
typedef enum {
|
|
LV_GRAD_EXTEND_PAD, /**< Repeat the same color*/
|
|
LV_GRAD_EXTEND_REPEAT, /**< Repeat the pattern*/
|
|
LV_GRAD_EXTEND_REFLECT, /**< Repeat the pattern mirrored*/
|
|
} lv_grad_extend_t;
|
|
|
|
/** A gradient stop definition.
|
|
* This matches a color and a position in a virtual 0-255 scale.
|
|
*/
|
|
typedef struct {
|
|
lv_color_t color; /**< The stop color */
|
|
lv_opa_t opa; /**< The opacity of the color*/
|
|
uint8_t frac; /**< The stop position in 1/255 unit */
|
|
} lv_grad_stop_t;
|
|
|
|
/** A descriptor of a gradient. */
|
|
typedef struct {
|
|
lv_grad_stop_t stops[LV_GRADIENT_MAX_STOPS]; /**< A gradient stop array */
|
|
uint8_t stops_count; /**< The number of used stops in the array */
|
|
lv_grad_dir_t dir : 4; /**< The gradient direction.
|
|
* Any of LV_GRAD_DIR_NONE, LV_GRAD_DIR_VER, LV_GRAD_DIR_HOR,
|
|
* LV_GRAD_TYPE_LINEAR, LV_GRAD_TYPE_RADIAL, LV_GRAD_TYPE_CONICAL */
|
|
lv_grad_extend_t extend : 3; /**< Behaviour outside the defined range.
|
|
* LV_GRAD_EXTEND_NONE, LV_GRAD_EXTEND_PAD, LV_GRAD_EXTEND_REPEAT, LV_GRAD_EXTEND_REFLECT */
|
|
#if LV_USE_DRAW_SW_COMPLEX_GRADIENTS
|
|
union {
|
|
/*Linear gradient parameters*/
|
|
struct {
|
|
lv_point_t start; /**< Linear gradient vector start point */
|
|
lv_point_t end; /**< Linear gradient vector end point */
|
|
} linear;
|
|
/*Radial gradient parameters*/
|
|
struct {
|
|
lv_point_t focal; /**< Center of the focal (starting) circle in local coordinates */
|
|
/* (can be the same as the ending circle to create concentric circles) */
|
|
lv_point_t focal_extent; /**< Point on the circle (can be the same as the center) */
|
|
lv_point_t end; /**< Center of the ending circle in local coordinates */
|
|
lv_point_t end_extent; /**< Point on the circle determining the radius of the gradient */
|
|
} radial;
|
|
/*Conical gradient parameters*/
|
|
struct {
|
|
lv_point_t center; /**< Conical gradient center point */
|
|
int16_t start_angle; /**< Start angle 0..3600 */
|
|
int16_t end_angle; /**< End angle 0..3600 */
|
|
} conical;
|
|
} params;
|
|
void * state;
|
|
#endif
|
|
} lv_grad_dsc_t;
|
|
|
|
|
|
/**********************
|
|
* GLOBAL PROTOTYPES
|
|
**********************/
|
|
|
|
/**
|
|
* Initialize gradient color map from a table
|
|
* @param grad pointer to a gradient descriptor
|
|
* @param colors color array
|
|
* @param fracs position array (0..255): if NULL, then colors are distributed evenly
|
|
* @param opa opacity array: if NULL, then LV_OPA_COVER is assumed
|
|
* @param num_stops number of gradient stops (1..LV_GRADIENT_MAX_STOPS)
|
|
*/
|
|
void lv_grad_init_stops(lv_grad_dsc_t * grad, const lv_color_t colors[], const lv_opa_t opa[],
|
|
const uint8_t fracs[], int num_stops);
|
|
|
|
/**
|
|
* Helper function to initialize a horizontal gradient.
|
|
* @param dsc gradient descriptor
|
|
*/
|
|
void lv_grad_horizontal_init(lv_grad_dsc_t * dsc);
|
|
|
|
/**
|
|
* Helper function to initialize a vertical gradient.
|
|
* @param dsc gradient descriptor
|
|
*/
|
|
void lv_grad_vertical_init(lv_grad_dsc_t * dsc);
|
|
|
|
#if LV_USE_DRAW_SW_COMPLEX_GRADIENTS
|
|
|
|
/**
|
|
* Helper function to initialize linear gradient
|
|
* @param dsc gradient descriptor
|
|
* @param from_x start x position: can be a coordinate or an lv_pct() value
|
|
* predefined constants LV_GRAD_LEFT, LV_GRAD_RIGHT, LV_GRAD_TOP, LV_GRAD_BOTTOM, LV_GRAD_CENTER can be used as well
|
|
* @param from_y start y position
|
|
* @param to_x end x position
|
|
* @param to_y end y position
|
|
* @param extend one of LV_GRAD_EXTEND_PAD, LV_GRAD_EXTEND_REPEAT or LV_GRAD_EXTEND_REFLECT
|
|
*/
|
|
void lv_grad_linear_init(lv_grad_dsc_t * dsc, int32_t from_x, int32_t from_y, int32_t to_x, int32_t to_y,
|
|
lv_grad_extend_t extend);
|
|
|
|
/**
|
|
* Helper function to initialize radial gradient
|
|
* @param dsc gradient descriptor
|
|
* @param center_x center x position: can be a coordinate or an lv_pct() value
|
|
* predefined constants LV_GRAD_LEFT, LV_GRAD_RIGHT, LV_GRAD_TOP, LV_GRAD_BOTTOM, LV_GRAD_CENTER can be used as well
|
|
* @param center_y center y position
|
|
* @param to_x point on the end circle x position
|
|
* @param to_y point on the end circle y position
|
|
* @param extend one of LV_GRAD_EXTEND_PAD, LV_GRAD_EXTEND_REPEAT or LV_GRAD_EXTEND_REFLECT
|
|
*/
|
|
void lv_grad_radial_init(lv_grad_dsc_t * dsc, int32_t center_x, int32_t center_y, int32_t to_x, int32_t to_y,
|
|
lv_grad_extend_t extend);
|
|
|
|
/**
|
|
* Set focal (starting) circle of a radial gradient
|
|
* @param dsc gradient descriptor
|
|
* @param center_x center x position: can be a coordinate or an lv_pct() value
|
|
* predefined constants LV_GRAD_LEFT, LV_GRAD_RIGHT, LV_GRAD_TOP, LV_GRAD_BOTTOM, LV_GRAD_CENTER can be used as well
|
|
* @param center_y center y position
|
|
* @param radius radius of the starting circle (NOTE: this must be a scalar number, not percentage)
|
|
*/
|
|
void lv_grad_radial_set_focal(lv_grad_dsc_t * dsc, int32_t center_x, int32_t center_y, int32_t radius);
|
|
|
|
/**
|
|
* Helper function to initialize conical gradient
|
|
* @param dsc gradient descriptor
|
|
* @param center_x center x position: can be a coordinate or an lv_pct() value
|
|
* predefined constants LV_GRAD_LEFT, LV_GRAD_RIGHT, LV_GRAD_TOP, LV_GRAD_BOTTOM, LV_GRAD_CENTER can be used as well
|
|
* @param center_y center y position
|
|
* @param start_angle start angle in degrees
|
|
* @param end_angle end angle in degrees
|
|
* @param extend one of LV_GRAD_EXTEND_PAD, LV_GRAD_EXTEND_REPEAT or LV_GRAD_EXTEND_REFLECT
|
|
*/
|
|
void lv_grad_conical_init(lv_grad_dsc_t * dsc, int32_t center_x, int32_t center_y, int32_t start_angle,
|
|
int32_t end_angle, lv_grad_extend_t extend);
|
|
|
|
#endif /*LV_USE_DRAW_SW_COMPLEX_GRADIENTS*/
|
|
|
|
/**********************
|
|
* MACROS
|
|
**********************/
|
|
|
|
#ifdef __cplusplus
|
|
} /*extern "C"*/
|
|
#endif
|
|
|
|
#endif /*LV_GRAD_H*/
|