forked from mirrors/qmk_userspace
[Cleanup] Quantum Painter (#19825)
Co-authored-by: Nick Brassel <nick@tzarc.org>
This commit is contained in:
parent
e640fd65ff
commit
cd542a0f67
25 changed files with 171 additions and 169 deletions
|
@ -164,7 +164,7 @@ typedef bool (*code_point_handler)(qff_font_handle_t *qff_font, uint32_t code_po
|
|||
|
||||
// Helper that sets up the palette (if required) and returns the offset in the stream that the data starts
|
||||
static inline bool qp_drawtext_prepare_font_for_render(painter_device_t device, qff_font_handle_t *qff_font, qp_pixel_t fg_hsv888, qp_pixel_t bg_hsv888, uint32_t *data_offset) {
|
||||
struct painter_driver_t *driver = (struct painter_driver_t *)device;
|
||||
painter_driver_t *driver = (painter_driver_t *)device;
|
||||
|
||||
// Drop out if we can't actually place the data we read out anywhere
|
||||
if (!data_offset) {
|
||||
|
@ -319,13 +319,13 @@ static inline bool qp_iterate_code_points(qff_font_handle_t *qff_font, const cha
|
|||
// String width calculation
|
||||
|
||||
// Callback state
|
||||
struct code_point_iter_calcwidth_state {
|
||||
typedef struct code_point_iter_calcwidth_state_t {
|
||||
int16_t width;
|
||||
};
|
||||
} code_point_iter_calcwidth_state_t;
|
||||
|
||||
// Codepoint handler callback: width calc
|
||||
static inline bool qp_font_code_point_handler_calcwidth(qff_font_handle_t *qff_font, uint32_t code_point, uint8_t width, uint8_t height, void *cb_arg) {
|
||||
struct code_point_iter_calcwidth_state *state = (struct code_point_iter_calcwidth_state *)cb_arg;
|
||||
code_point_iter_calcwidth_state_t *state = (code_point_iter_calcwidth_state_t *)cb_arg;
|
||||
|
||||
// Increment the overall width by this glyph's width
|
||||
state->width += width;
|
||||
|
@ -337,19 +337,19 @@ static inline bool qp_font_code_point_handler_calcwidth(qff_font_handle_t *qff_f
|
|||
// String drawing implementation
|
||||
|
||||
// Callback state
|
||||
struct code_point_iter_drawglyph_state {
|
||||
painter_device_t device;
|
||||
int16_t xpos;
|
||||
int16_t ypos;
|
||||
qp_internal_byte_input_callback input_callback;
|
||||
struct qp_internal_byte_input_state * input_state;
|
||||
struct qp_internal_pixel_output_state *output_state;
|
||||
};
|
||||
typedef struct code_point_iter_drawglyph_state_t {
|
||||
painter_device_t device;
|
||||
int16_t xpos;
|
||||
int16_t ypos;
|
||||
qp_internal_byte_input_callback input_callback;
|
||||
qp_internal_byte_input_state_t * input_state;
|
||||
qp_internal_pixel_output_state_t *output_state;
|
||||
} code_point_iter_drawglyph_state_t;
|
||||
|
||||
// Codepoint handler callback: drawing
|
||||
static inline bool qp_font_code_point_handler_drawglyph(qff_font_handle_t *qff_font, uint32_t code_point, uint8_t width, uint8_t height, void *cb_arg) {
|
||||
struct code_point_iter_drawglyph_state *state = (struct code_point_iter_drawglyph_state *)cb_arg;
|
||||
struct painter_driver_t * driver = (struct painter_driver_t *)state->device;
|
||||
code_point_iter_drawglyph_state_t *state = (code_point_iter_drawglyph_state_t *)cb_arg;
|
||||
painter_driver_t * driver = (painter_driver_t *)state->device;
|
||||
|
||||
// Reset the input state's RLE mode -- the stream should already be correctly positioned by qp_iterate_code_points()
|
||||
state->input_state->rle.mode = MARKER_BYTE; // ignored if not using RLE
|
||||
|
@ -386,7 +386,7 @@ int16_t qp_textwidth(painter_font_handle_t font, const char *str) {
|
|||
}
|
||||
|
||||
// Create the codepoint iterator state
|
||||
struct code_point_iter_calcwidth_state state = {.width = 0};
|
||||
code_point_iter_calcwidth_state_t state = {.width = 0};
|
||||
// Iterate each codepoint, return the calculated width if successful.
|
||||
return qp_iterate_code_points(qff_font, str, qp_font_code_point_handler_calcwidth, &state) ? state.width : 0;
|
||||
}
|
||||
|
@ -405,7 +405,7 @@ int16_t qp_drawtext(painter_device_t device, uint16_t x, uint16_t y, painter_fon
|
|||
|
||||
int16_t qp_drawtext_recolor(painter_device_t device, uint16_t x, uint16_t y, painter_font_handle_t font, const char *str, uint8_t hue_fg, uint8_t sat_fg, uint8_t val_fg, uint8_t hue_bg, uint8_t sat_bg, uint8_t val_bg) {
|
||||
qp_dprintf("qp_drawtext_recolor: entry\n");
|
||||
struct painter_driver_t *driver = (struct painter_driver_t *)device;
|
||||
painter_driver_t *driver = (painter_driver_t *)device;
|
||||
if (!driver->validate_ok) {
|
||||
qp_dprintf("qp_drawtext_recolor: fail (validation_ok == false)\n");
|
||||
return 0;
|
||||
|
@ -423,8 +423,8 @@ int16_t qp_drawtext_recolor(painter_device_t device, uint16_t x, uint16_t y, pai
|
|||
}
|
||||
|
||||
// Set up the byte input state and input callback
|
||||
struct qp_internal_byte_input_state input_state = {.device = device, .src_stream = &qff_font->stream};
|
||||
qp_internal_byte_input_callback input_callback = qp_internal_prepare_input_state(&input_state, qff_font->compression_scheme);
|
||||
qp_internal_byte_input_state_t input_state = {.device = device, .src_stream = &qff_font->stream};
|
||||
qp_internal_byte_input_callback input_callback = qp_internal_prepare_input_state(&input_state, qff_font->compression_scheme);
|
||||
if (input_callback == NULL) {
|
||||
qp_dprintf("qp_drawtext_recolor: fail (invalid font compression scheme)\n");
|
||||
qp_comms_stop(device);
|
||||
|
@ -432,18 +432,18 @@ int16_t qp_drawtext_recolor(painter_device_t device, uint16_t x, uint16_t y, pai
|
|||
}
|
||||
|
||||
// Set up the pixel output state
|
||||
struct qp_internal_pixel_output_state output_state = {.device = device, .pixel_write_pos = 0, .max_pixels = qp_internal_num_pixels_in_buffer(device)};
|
||||
qp_internal_pixel_output_state_t output_state = {.device = device, .pixel_write_pos = 0, .max_pixels = qp_internal_num_pixels_in_buffer(device)};
|
||||
|
||||
// Set up the codepoint iteration state
|
||||
struct code_point_iter_drawglyph_state state = {// Common
|
||||
.device = device,
|
||||
.xpos = x,
|
||||
.ypos = y,
|
||||
// Input
|
||||
.input_callback = input_callback,
|
||||
.input_state = &input_state,
|
||||
// Output
|
||||
.output_state = &output_state};
|
||||
code_point_iter_drawglyph_state_t state = {// Common
|
||||
.device = device,
|
||||
.xpos = x,
|
||||
.ypos = y,
|
||||
// Input
|
||||
.input_callback = input_callback,
|
||||
.input_state = &input_state,
|
||||
// Output
|
||||
.output_state = &output_state};
|
||||
|
||||
qp_pixel_t fg_hsv888 = {.hsv888 = {.h = hue_fg, .s = sat_fg, .v = val_fg}};
|
||||
qp_pixel_t bg_hsv888 = {.hsv888 = {.h = hue_bg, .s = sat_bg, .v = val_bg}};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue