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 IMPL_FONT_DRAW_CHAR(__NAME) \
155 arm_fsm_rt_t __NAME(const arm_2d_tile_t *ptTile, \
156 const arm_2d_region_t *ptRegion, \
157 const arm_2d_font_t *ptFont, \
158 arm_2d_tile_t *ptileChar, \
159 COLOUR_INT tForeColour, \
160 uint_fast8_t chOpacity, \
163#define IMPL_FONT_GET_CHAR_DESCRIPTOR(__NAME) \
164 arm_2d_char_descriptor_t *__NAME( \
165 const arm_2d_font_t *ptFont, \
166 arm_2d_char_descriptor_t *ptDescriptor, \
167 uint8_t *pchCharCode)
185 uint8_t *pchCharCode);
192 COLOUR_INT tForeColour,
193 uint_fast8_t chOpacity,
207 uint8_t chStartCode[4];
215 uint16_t hwDefaultCharIndex;
230arm_2d_font_get_char_descriptor_handler_t
231 ARM_2D_A1_FONT_GET_CHAR_DESCRIPTOR_HANDLER;
246 switch(__CLZ( ~((uint32_t)pchChar[0] << 24) )) {
252 if ((pchChar[1] & 0xC0) == 0x80) {
257 if (((pchChar[1] & 0xC0) == 0x80)
258 && ((pchChar[2] & 0xC0) == 0x80)) {
263 if (((pchChar[1] & 0xC0) == 0x80)
264 && ((pchChar[2] & 0xC0) == 0x80)
265 && ((pchChar[3] & 0xC0) == 0x80)) {
286 switch(__CLZ( ~((uint32_t)pchChar[0] << 24) )) {
325 uint8_t *pchCharCode);
344int arm_lcd_printf(const
char *format, ...);
399void arm_lcd_puts_label( const
char *pchString,
405int arm_lcd_printf_label(
arm_2d_align_t tAlignment, const
char *format, ...);
408void arm_lcd_puts(const
char *str);
411void arm_lcd_text_location(uint8_t chY, uint8_t chX);
414void arm_lcd_text_insert_line_space(int16_t iWidth);
417void arm_lcd_text_reset_display_region_tracking(
void);
439 uint8_t **ppchCharCode,
440 uint_fast8_t chOpacity);
443void arm_lcd_putchar(const
char *str);
446void arm_lcd_text_set_colour( COLOUR_INT wForeground,
447 COLOUR_INT wBackground);
450void arm_lcd_text_set_opacity(uint8_t chOpacity);
453void arm_lcd_text_set_scale(
float fScale);
456int8_t arm_lcd_text_set_char_spacing(int8_t chNewSpacing);
459int8_t arm_lcd_text_set_line_spacing(int8_t chNewSpacing);
483void arm_lcd_text_set_target_framebuffer(const
arm_2d_tile_t *ptFrameBuffer);
508IMPL_FONT_DRAW_CHAR(__arm_2d_lcd_text_default_a8_font_draw_char);
511IMPL_FONT_DRAW_CHAR(__arm_2d_lcd_text_default_a4_font_draw_char);
514IMPL_FONT_DRAW_CHAR(__arm_2d_lcd_text_default_a2_font_draw_char);
517IMPL_FONT_DRAW_CHAR(__arm_2d_lcd_text_default_a1_font_draw_char);
521#if defined(__clang__)
522# pragma clang diagnostic pop
523#elif __IS_COMPILER_GCC__
524# pragma GCC diagnostic pop