30#ifndef __ARM_2D_HELPER_FONT_H__
31#define __ARM_2D_HELPER_FONT_H__
35#include "arm_2d_helper.h"
42# pragma clang diagnostic push
43# pragma clang diagnostic ignored "-Wunknown-warning-option"
44# pragma clang diagnostic ignored "-Wreserved-identifier"
45# pragma clang diagnostic ignored "-Wmissing-declarations"
46# pragma clang diagnostic ignored "-Wpadded"
47#elif __IS_COMPILER_ARM_COMPILER_5__
48# pragma diag_suppress 64
49#elif __IS_COMPILER_GCC__
50# pragma GCC diagnostic push
51# pragma GCC diagnostic ignored "-Wformat="
52# pragma GCC diagnostic ignored "-Wpedantic"
53# pragma GCC diagnostic ignored "-Wpadded"
58#ifndef __GLCD_CFG_COLOUR_DEPTH__
59# warning Please specify the colour depth by defining the macro __GLCD_CFG_COLOUR_DEPTH__, default value 16 is used for now
60# define __GLCD_CFG_COLOUR_DEPTH__ 16
68#if __GLCD_CFG_COLOUR_DEPTH__ == 8
69# define COLOUR_INT_TYPE uint8_t
71#elif __GLCD_CFG_COLOUR_DEPTH__ == 16
72# define COLOUR_INT_TYPE uint16_t
74#elif __GLCD_CFG_COLOUR_DEPTH__ == 32
75# define COLOUR_INT_TYPE uint32_t
78# error Unsupported colour depth!
84#ifndef __GLCD_CFG_SCEEN_WIDTH__
85#warning Please specify the screen width by defining the macro __GLCD_CFG_SCEEN_WIDTH__, default value 320 is used for now
86#define __GLCD_CFG_SCEEN_WIDTH__ 320
89#ifndef __GLCD_CFG_SCEEN_HEIGHT__
90# warning Please specify the screen height by defining the macro __GLCD_CFG_SCEEN_HEIGHT__, default value 240 is used for now
91# define __GLCD_CFG_SCEEN_HEIGHT__ 320
102#define arm_lcd_banner_printf(__REGION, __FONT_PTR, __FORMAT_STR, ...) \
104 if (NULL != (__FONT_PTR)) { \
105 arm_lcd_text_set_font((const arm_2d_font_t *)(__FONT_PTR)); \
107 arm_2d_region_t ARM_2D_SAFE_NAME(tTargetRegion) = (__REGION); \
108 arm_2d_align_centre( \
109 ARM_2D_SAFE_NAME(tTargetRegion), \
110 arm_lcd_get_string_line_box((__STR),(__FONT_PTR))) {\
111 arm_lcd_text_set_draw_region(&__centre_region); \
112 arm_lcd_printf(__FORMAT_STR, ##__VA_ARGS__); \
117#define __arm_print_banner3(__STR, __REGION, __FONT_PTR) \
119 if (NULL != (__FONT_PTR)) { \
120 arm_lcd_text_set_font((const arm_2d_font_t *)(__FONT_PTR)); \
122 arm_2d_region_t ARM_2D_SAFE_NAME(tTargetRegion) = (__REGION); \
123 arm_2d_align_centre( \
124 ARM_2D_SAFE_NAME(tTargetRegion), \
125 arm_lcd_get_string_line_box((__STR),(__FONT_PTR))) {\
126 arm_lcd_text_set_draw_region(&__centre_region); \
127 arm_lcd_puts(__STR); \
131#define __arm_print_banner2(__STR, __REGION) \
132 __arm_print_banner3(__STR, __REGION, NULL)
134#define __arm_print_banner1(__STR) \
136 arm_2d_tile_t *ARM_2D_SAFE_NAME(ptTile) \
137 = arm_2d_get_default_frame_buffer(); \
138 arm_2d_canvas(ARM_2D_SAFE_NAME(ptTile), __banner_canvas) { \
139 __arm_print_banner3(__STR, __banner_canvas, NULL); \
143#define arm_print_banner(...) \
144 ARM_CONNECT2( __arm_print_banner, \
145 __ARM_VA_NUM_ARGS(__VA_ARGS__))(__VA_ARGS__)
147#define arm_lcd_print_banner(...) arm_print_banner(__VA_ARGS__)
149#define arm_lcd_get_string_line_box(__STR, ...) \
150 __arm_lcd_get_string_line_box( \
152 (const arm_2d_font_t *)(NULL, ##__VA_ARGS__))
154#define arm_lcd_get_string_box(__STR, ...) \
155 __arm_lcd_get_string_box( \
157 (const arm_2d_font_t *)(NULL, ##__VA_ARGS__))
159#define IMPL_FONT_DRAW_CHAR(__NAME) \
160 arm_fsm_rt_t __NAME(const arm_2d_tile_t *ptTile, \
161 const arm_2d_region_t *ptRegion, \
162 const arm_2d_font_t *ptFont, \
163 arm_2d_tile_t *ptileChar, \
164 COLOUR_INT tForeColour, \
165 uint_fast8_t chOpacity, \
168#define IMPL_FONT_GET_CHAR_DESCRIPTOR(__NAME) \
169 arm_2d_char_descriptor_t *__NAME( \
170 const arm_2d_font_t *ptFont, \
171 arm_2d_char_descriptor_t *ptDescriptor, \
172 uint8_t *pchCharCode)
190 uint8_t *pchCharCode);
197 COLOUR_INT tForeColour,
198 uint_fast8_t chOpacity,
212 uint8_t chStartCode[4];
220 uint16_t hwDefaultCharIndex;
235arm_2d_font_get_char_descriptor_handler_t
236 ARM_2D_A1_FONT_GET_CHAR_DESCRIPTOR_HANDLER;
251 switch(__CLZ( ~((uint32_t)pchChar[0] << 24) )) {
257 if ((pchChar[1] & 0xC0) == 0x80) {
262 if (((pchChar[1] & 0xC0) == 0x80)
263 && ((pchChar[2] & 0xC0) == 0x80)) {
268 if (((pchChar[1] & 0xC0) == 0x80)
269 && ((pchChar[2] & 0xC0) == 0x80)
270 && ((pchChar[3] & 0xC0) == 0x80)) {
291 switch(__CLZ( ~((uint32_t)pchChar[0] << 24) )) {
330 uint8_t *pchCharCode);
349int arm_lcd_printf(const
char *format, ...);
403void arm_lcd_clear_text_buffer(
void);
407void arm_lcd_puts_label( const
char *pchString,
413int arm_lcd_printf_label(
arm_2d_align_t tAlignment, const
char *format, ...);
416void arm_lcd_puts(const
char *str);
419void arm_lcd_text_location(int16_t iRow, uint16_t iColumn);
422void arm_lcd_text_insert_line_space(int16_t iWidth);
425void arm_lcd_text_reset_display_region_tracking(
void);
447 uint8_t **ppchCharCode,
448 uint_fast8_t chOpacity);
451void arm_lcd_putchar(const
char *str);
454void arm_lcd_text_set_colour( COLOUR_INT wForeground,
455 COLOUR_INT wBackground);
458void arm_lcd_text_set_opacity(uint8_t chOpacity);
461void arm_lcd_text_set_scale(
float fScale);
464int8_t arm_lcd_text_set_char_spacing(int8_t chNewSpacing);
467int8_t arm_lcd_text_set_line_spacing(int8_t chNewSpacing);
491void arm_lcd_text_set_target_framebuffer(const
arm_2d_tile_t *ptFrameBuffer);
536IMPL_FONT_DRAW_CHAR(__arm_2d_lcd_text_default_a8_font_draw_char);
539IMPL_FONT_DRAW_CHAR(__arm_2d_lcd_text_default_a4_font_draw_char);
542IMPL_FONT_DRAW_CHAR(__arm_2d_lcd_text_default_a2_font_draw_char);
545IMPL_FONT_DRAW_CHAR(__arm_2d_lcd_text_default_a1_font_draw_char);
549#if defined(__clang__)
550# pragma clang diagnostic pop
551#elif __IS_COMPILER_GCC__
552# pragma GCC diagnostic pop