151 lines
4.7 KiB
C
151 lines
4.7 KiB
C
/**
|
|
* @file lv_draw_img.h
|
|
*
|
|
*/
|
|
|
|
#ifndef LV_DRAW_IMAGE_H
|
|
#define LV_DRAW_IMAGE_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/*********************
|
|
* INCLUDES
|
|
*********************/
|
|
#include "lv_draw.h"
|
|
#include "lv_image_decoder.h"
|
|
#include "lv_image_buf.h"
|
|
#include "../misc/lv_style.h"
|
|
|
|
/*********************
|
|
* DEFINES
|
|
*********************/
|
|
|
|
/**********************
|
|
* MACROS
|
|
**********************/
|
|
|
|
/**********************
|
|
* TYPEDEFS
|
|
**********************/
|
|
|
|
typedef struct {
|
|
lv_color_t alpha_color;
|
|
const lv_color32_t * palette;
|
|
uint32_t palette_size : 9;
|
|
} lv_draw_image_sup_t;
|
|
|
|
typedef struct _lv_draw_image_dsc_t {
|
|
lv_draw_dsc_base_t base;
|
|
|
|
const void * src;
|
|
lv_image_header_t header;
|
|
|
|
int32_t rotation;
|
|
int32_t scale_x;
|
|
int32_t scale_y;
|
|
int32_t skew_x;
|
|
int32_t skew_y;
|
|
lv_point_t pivot;
|
|
|
|
lv_color_t recolor;
|
|
lv_opa_t recolor_opa;
|
|
|
|
lv_opa_t opa;
|
|
lv_blend_mode_t blend_mode : 4;
|
|
|
|
uint16_t antialias : 1;
|
|
uint16_t tile : 1;
|
|
lv_draw_image_sup_t * sup;
|
|
|
|
/** Might be used to indicate the original size of the image if only a small portion is rendered now.
|
|
* Used when a part of a layer is rendered to show the total layer size*/
|
|
lv_area_t original_area;
|
|
const lv_image_dsc_t * bitmap_mask_src;
|
|
} lv_draw_image_dsc_t;
|
|
|
|
/**
|
|
* PErform the actual rendering of a decoded image
|
|
* @param draw_unit pointer to a draw unit
|
|
* @param draw_dsc the draw descriptor of the image
|
|
* @param decoder_dsc pointer to the decoded image's descriptor
|
|
* @param sup supplementary data
|
|
* @param img_coords the absolute coordinates of the image
|
|
* @param clipped_img_area the absolute clip coordinates
|
|
*/
|
|
typedef void (*lv_draw_image_core_cb)(lv_draw_unit_t * draw_unit, const lv_draw_image_dsc_t * draw_dsc,
|
|
const lv_image_decoder_dsc_t * decoder_dsc, lv_draw_image_sup_t * sup,
|
|
const lv_area_t * img_coords, const lv_area_t * clipped_img_area);
|
|
|
|
/**********************
|
|
* GLOBAL PROTOTYPES
|
|
**********************/
|
|
|
|
/**
|
|
* Initialize an image draw descriptor.
|
|
* @param dsc pointer to a draw descriptor
|
|
*/
|
|
void lv_draw_image_dsc_init(lv_draw_image_dsc_t * dsc);
|
|
|
|
/**
|
|
* Try to get an image draw descriptor from a draw task.
|
|
* @param task draw task
|
|
* @return the task's draw descriptor or NULL if the task is not of type LV_DRAW_TASK_TYPE_IMAGE
|
|
*/
|
|
lv_draw_image_dsc_t * lv_draw_task_get_image_dsc(lv_draw_task_t * task);
|
|
|
|
/**
|
|
* Create an image draw task
|
|
* @param layer pointer to a layer
|
|
* @param dsc pointer to an initialized draw descriptor
|
|
* @param coords the coordinates of the image
|
|
*/
|
|
void lv_draw_image(lv_layer_t * layer, const lv_draw_image_dsc_t * dsc, const lv_area_t * coords);
|
|
|
|
/**
|
|
* Create a draw task to blend a layer to an other layer
|
|
* @param layer pointer to a layer
|
|
* @param dsc pointer to an initialized draw descriptor
|
|
* @param coords the coordinates of the layer
|
|
*/
|
|
void lv_draw_layer(lv_layer_t * layer, const lv_draw_image_dsc_t * dsc, const lv_area_t * coords);
|
|
|
|
/**
|
|
* Get the type of an image source
|
|
* @param src pointer to an image source:
|
|
* - pointer to an 'lv_image_t' variable (image stored internally and compiled into the code)
|
|
* - a path to a file (e.g. "S:/folder/image.bin")
|
|
* - or a symbol (e.g. LV_SYMBOL_CLOSE)
|
|
* @return type of the image source LV_IMAGE_SRC_VARIABLE/FILE/SYMBOL/UNKNOWN
|
|
*/
|
|
lv_image_src_t lv_image_src_get_type(const void * src);
|
|
|
|
/**
|
|
* Can be used by draw units to handle the decoding and
|
|
* prepare everything for the actual image rendering
|
|
* @param draw_unit pointer to a draw unit
|
|
* @param draw_dsc the draw descriptor of the image
|
|
* @param coords the absolute coordinates of the image
|
|
* @param draw_core_cb a callback to perform the actual rendering
|
|
*/
|
|
void _lv_draw_image_normal_helper(lv_draw_unit_t * draw_unit, const lv_draw_image_dsc_t * draw_dsc,
|
|
const lv_area_t * coords, lv_draw_image_core_cb draw_core_cb);
|
|
|
|
/**
|
|
* Can be used by draw units for TILED images to handle the decoding and
|
|
* prepare everything for the actual image rendering
|
|
* @param draw_unit pointer to a draw unit
|
|
* @param draw_dsc the draw descriptor of the image
|
|
* @param coords the absolute coordinates of the image
|
|
* @param draw_core_cb a callback to perform the actual rendering
|
|
*/
|
|
void _lv_draw_image_tiled_helper(lv_draw_unit_t * draw_unit, const lv_draw_image_dsc_t * draw_dsc,
|
|
const lv_area_t * coords, lv_draw_image_core_cb draw_core_cb);
|
|
|
|
#ifdef __cplusplus
|
|
} /*extern "C"*/
|
|
#endif
|
|
|
|
#endif /*LV_DRAW_IMAGE_H*/
|