Embedded SDK
Embedded SDK
nbgl_fonts.h
Go to the documentation of this file.
1 
7 #ifndef NBGL_FONTS_H
8 #define NBGL_FONTS_H
9 
10 #ifdef __cplusplus
11 extern "C" {
12 #endif
13 
14 /*********************
15  * INCLUDES
16  *********************/
17 #include "nbgl_types.h"
18 #ifdef HAVE_LANGUAGE_PACK
19 #include "ux_loc_nbgl.h"
20 #endif // HAVE_LANGUAGE_PACK
21 
22 /*********************
23  * DEFINES
24  *********************/
25 #define PIC_CHAR(x) ((const nbgl_font_character_t *) PIC(x))
26 #define PIC_BMP(x) ((uint8_t const *) PIC(x))
27 
28 #ifndef HAVE_LANGUAGE_PACK
29 #define LANGUAGE_PACK void
30 #endif // HAVE_LANGUAGE_PACK
31 
36 #ifdef TARGET_STAX
37 #define SMALL_REGULAR_FONT BAGL_FONT_INTER_REGULAR_24px
38 #define SMALL_BOLD_FONT BAGL_FONT_INTER_SEMIBOLD_24px
39 #define LARGE_MEDIUM_FONT BAGL_FONT_INTER_MEDIUM_32px
40 #define SMALL_REGULAR_1BPP_FONT BAGL_FONT_INTER_REGULAR_24px_1bpp
41 #define SMALL_BOLD_1BPP_FONT BAGL_FONT_INTER_SEMIBOLD_24px_1bpp
42 #define LARGE_MEDIUM_1BPP_FONT BAGL_FONT_INTER_MEDIUM_32px_1bpp
43 
44 #else // TARGET_STAX
45 
46 #ifdef TARGET_FLEX
47 #define SMALL_REGULAR_FONT BAGL_FONT_INTER_REGULAR_28px
48 #define SMALL_BOLD_FONT BAGL_FONT_INTER_SEMIBOLD_28px
49 #define LARGE_MEDIUM_FONT BAGL_FONT_INTER_MEDIUM_36px
50 #define SMALL_REGULAR_1BPP_FONT BAGL_FONT_INTER_REGULAR_28px_1bpp
51 #define SMALL_BOLD_1BPP_FONT BAGL_FONT_INTER_SEMIBOLD_28px_1bpp
52 #define LARGE_MEDIUM_1BPP_FONT BAGL_FONT_INTER_MEDIUM_36px_1bpp
53 #endif
54 #endif // TARGET_STAX
55 
56 /**********************
57  * TYPEDEFS
58  **********************/
59 
64 // WARNING: please DON'T CHANGE the order/values of the fields below!
65 // (otherwise python tools that generate data will need to be modified too)
66 typedef struct {
67  uint32_t bitmap_offset;
68  uint32_t encoding : 1;
69  uint32_t width : 6;
70  uint32_t x_min_offset : 4;
71  uint32_t y_min_offset : 6;
72  uint32_t x_max_offset : 4;
73  uint32_t y_max_offset : 6;
75 
80 typedef struct {
81  uint32_t bitmap_len;
89  uint8_t
91  uint8_t
94  *const characters;
95  uint8_t const *bitmap;
96 } nbgl_font_t;
97 
98 #define BAGL_ENCODING_LATIN1 0
99 #define BAGL_ENCODING_UTF8 1
100 #define BAGL_ENCODING_DEFAULT BAGL_ENCODING_UTF8
101 
106 // WARNING: please DON'T CHANGE the order of the fields below!
107 // (otherwise python tools that generate data will need to be modified too)
108 typedef struct {
109  uint32_t char_unicode : 21;
110  uint32_t encoding : 1;
111  uint32_t width : 6;
112  uint32_t x_min_offset : 4;
113  uint32_t y_min_offset : 6;
114  uint32_t x_max_offset : 4;
115  uint32_t y_max_offset : 6;
116  uint32_t bitmap_offset : 16;
122 typedef struct {
131  uint8_t unused[3];
132 #if !defined(HAVE_LANGUAGE_PACK)
133  // When using language packs, those 2 pointers does not exists
135  *const characters;
136  uint8_t const *bitmap;
137 #endif
139 
140 typedef enum {
156  BAGL_FONT_LAST // MUST ALWAYS BE THE LAST, FOR AUTOMATED INVALID VALUE CHECKS
158 
159 typedef struct nbgl_unicode_ctx_s {
162  const uint8_t *bitmap;
165 
166 /**********************
167  * GLOBAL PROTOTYPES
168  **********************/
170 uint16_t nbgl_getSingleLineTextWidth(nbgl_font_id_e fontId, const char *text);
171 uint16_t nbgl_getSingleLineTextWidthInLen(nbgl_font_id_e fontId, const char *text, uint16_t maxLen);
172 uint16_t nbgl_getTextWidth(nbgl_font_id_e fontId, const char *text);
173 uint8_t nbgl_getCharWidth(nbgl_font_id_e fontId, const char *text);
176 uint16_t nbgl_getTextNbLines(const char *text);
177 uint16_t nbgl_getTextHeight(nbgl_font_id_e fontId, const char *text);
178 uint16_t nbgl_getTextLength(const char *text);
180  const char *text,
181  uint16_t maxWidth,
182  uint16_t *len,
183  uint16_t *width,
184  bool wrapping);
186  const char *text,
187  uint16_t maxWidth,
188  bool wrapping);
190  const char *text,
191  uint16_t maxWidth,
192  bool wrapping);
194  const char *text,
195  uint16_t maxWidth,
196  uint16_t *len,
197  uint16_t *width);
199  const char *text,
200  uint16_t maxWidth,
201  uint16_t maxNbLines,
202  uint16_t *len,
203  bool wrapping);
204 void nbgl_textWrapOnNbLines(nbgl_font_id_e fontId, char *text, uint16_t maxWidth, uint8_t nbLines);
206  const char *origText,
207  uint16_t maxWidth,
208  uint8_t nbLines,
209  char *reducedText,
210  uint16_t reducedTextLen);
212  const char *text,
213  uint8_t nbLinesPerPage,
214  uint16_t maxWidth);
215 
216 uint32_t nbgl_popUnicodeChar(const uint8_t **text, uint16_t *text_length, bool *is_unicode);
217 #ifdef HAVE_UNICODE_SUPPORT
218 nbgl_unicode_ctx_t *nbgl_getUnicodeFont(nbgl_font_id_e font_id);
219 const nbgl_font_unicode_character_t *nbgl_getUnicodeFontCharacter(uint32_t unicode);
220 uint32_t nbgl_getUnicodeFontCharacterByteCount(void);
221 void nbgl_refreshUnicodeFont(const LANGUAGE_PACK *lp);
222 #endif // HAVE_UNICODE_SUPPORT
223 
224 /**********************
225  * MACROS
226  **********************/
227 #define IS_UNICODE(__value) ((__value) > 0xF0)
228 
229 #ifdef __cplusplus
230 } /* extern "C" */
231 #endif
232 
233 #endif /* NBGL_FONTS_H */
struct nbgl_unicode_ctx_s nbgl_unicode_ctx_t
void nbgl_textWrapOnNbLines(nbgl_font_id_e fontId, char *text, uint16_t maxWidth, uint8_t nbLines)
Modifies the given text to wrap it on the given max width (in pixels), in the given nbLines If possib...
Definition: nbgl_fonts.c:1060
void nbgl_getTextMaxLenAndWidth(nbgl_font_id_e fontId, const char *text, uint16_t maxWidth, uint16_t *len, uint16_t *width, bool wrapping)
compute the max width of the first line of the given text fitting in maxWidth
Definition: nbgl_fonts.c:474
uint16_t nbgl_getTextNbLines(const char *text)
return the number of lines in the given text, according to the found ' 's
Definition: nbgl_fonts.c:414
uint8_t nbgl_getTextNbPagesInWidth(nbgl_font_id_e fontId, const char *text, uint8_t nbLinesPerPage, uint16_t maxWidth)
compute the number of pages of nbLinesPerPage lines per page of the given text fitting in the given m...
Definition: nbgl_fonts.c:877
uint32_t nbgl_popUnicodeChar(const uint8_t **text, uint16_t *text_length, bool *is_unicode)
Get the coming unicode value on the given UTF-8 string. If the value is a simple ASCII character,...
Definition: nbgl_fonts.c:142
uint16_t nbgl_getSingleLineTextWidth(nbgl_font_id_e fontId, const char *text)
return the max width in pixels of the given text until the first or \0 is encountered
Definition: nbgl_fonts.c:326
uint8_t nbgl_getCharWidth(nbgl_font_id_e fontId, const char *text)
return the width in pixels of the given UTF-8 character
Definition: nbgl_fonts.c:364
bool nbgl_getTextMaxLenInNbLines(nbgl_font_id_e fontId, const char *text, uint16_t maxWidth, uint16_t maxNbLines, uint16_t *len, bool wrapping)
compute the len of the given text (in bytes) fitting in the given maximum nb lines,...
Definition: nbgl_fonts.c:564
nbgl_font_id_e
Definition: nbgl_fonts.h:140
@ BAGL_FONT_OPEN_SANS_REGULAR_11px_1bpp
Definition: nbgl_fonts.h:149
@ BAGL_FONT_INTER_REGULAR_28px_1bpp
Definition: nbgl_fonts.h:153
@ BAGL_FONT_INTER_SEMIBOLD_28px
Definition: nbgl_fonts.h:151
@ BAGL_FONT_INTER_REGULAR_24px_1bpp
Definition: nbgl_fonts.h:144
@ BAGL_FONT_OPEN_SANS_EXTRABOLD_11px_1bpp
Definition: nbgl_fonts.h:147
@ BAGL_FONT_INTER_REGULAR_24px
Definition: nbgl_fonts.h:141
@ BAGL_FONT_INTER_REGULAR_28px
Definition: nbgl_fonts.h:150
@ BAGL_FONT_INTER_MEDIUM_32px
Definition: nbgl_fonts.h:143
@ BAGL_FONT_INTER_MEDIUM_36px
Definition: nbgl_fonts.h:152
@ BAGL_FONT_INTER_MEDIUM_36px_1bpp
Definition: nbgl_fonts.h:155
@ BAGL_FONT_INTER_SEMIBOLD_24px
Definition: nbgl_fonts.h:142
@ BAGL_FONT_INTER_MEDIUM_32px_1bpp
Definition: nbgl_fonts.h:146
@ BAGL_FONT_OPEN_SANS_LIGHT_16px_1bpp
Definition: nbgl_fonts.h:148
@ BAGL_FONT_LAST
Definition: nbgl_fonts.h:156
@ BAGL_FONT_INTER_SEMIBOLD_24px_1bpp
Definition: nbgl_fonts.h:145
@ BAGL_FONT_INTER_SEMIBOLD_28px_1bpp
Definition: nbgl_fonts.h:154
bool nbgl_getTextMaxLenAndWidthFromEnd(nbgl_font_id_e fontId, const char *text, uint16_t maxWidth, uint16_t *len, uint16_t *width)
compute the len and width of the given text fitting in the maxWidth, starting from end of text
Definition: nbgl_fonts.c:673
uint8_t nbgl_getFontHeight(nbgl_font_id_e fontId)
return the height in pixels of the font with the given font ID
Definition: nbgl_fonts.c:390
void nbgl_textReduceOnNbLines(nbgl_font_id_e fontId, const char *origText, uint16_t maxWidth, uint8_t nbLines, char *reducedText, uint16_t reducedTextLen)
Create a reduced version of given ASCII text to wrap it on the given max width (in pixels),...
Definition: nbgl_fonts.c:1169
uint16_t nbgl_getTextWidth(nbgl_font_id_e fontId, const char *text)
return the max width in pixels of the given text (can be multiline)
Definition: nbgl_fonts.c:352
#define LANGUAGE_PACK
Definition: nbgl_fonts.h:29
uint16_t nbgl_getTextHeightInWidth(nbgl_font_id_e fontId, const char *text, uint16_t maxWidth, bool wrapping)
return the height of the given multiline text, with the given font.
Definition: nbgl_fonts.c:1040
uint16_t nbgl_getTextLength(const char *text)
return the number of bytes of the given text, excluding final ' ' or '\0'
Definition: nbgl_fonts.c:446
uint16_t nbgl_getTextNbLinesInWidth(nbgl_font_id_e fontId, const char *text, uint16_t maxWidth, bool wrapping)
compute the number of lines of the given text fitting in the given maxWidth
Definition: nbgl_fonts.c:723
uint16_t nbgl_getTextHeight(nbgl_font_id_e fontId, const char *text)
return the height of the given multiline text, with the given font.
Definition: nbgl_fonts.c:433
const nbgl_font_t * nbgl_getFont(nbgl_font_id_e fontId)
uint8_t nbgl_getFontLineHeight(nbgl_font_id_e fontId)
return the height in pixels of the line of font with the given font ID
Definition: nbgl_fonts.c:402
uint16_t nbgl_getSingleLineTextWidthInLen(nbgl_font_id_e fontId, const char *text, uint16_t maxLen)
return the max width in pixels of the given text until the first or \0 is encountered,...
Definition: nbgl_fonts.c:340
common types for Graphical Library
fonts nicknames to be used for various wallet size targets (non-Nano)
Definition: nbgl_fonts.h:66
uint32_t width
width of character in pixels
Definition: nbgl_fonts.h:69
uint32_t encoding
method used to encode bitmap data
Definition: nbgl_fonts.h:68
uint32_t x_min_offset
x_min = x_min_offset
Definition: nbgl_fonts.h:70
uint32_t bitmap_offset
offset of this character in chars buffer
Definition: nbgl_fonts.h:67
uint32_t y_min_offset
y_min = (y_min + y_min_offset)
Definition: nbgl_fonts.h:71
uint32_t x_max_offset
x_max = width - x_max_offset
Definition: nbgl_fonts.h:72
uint32_t y_max_offset
y_max = (height - y_max_offset)
Definition: nbgl_fonts.h:73
structure defining an ASCII font
Definition: nbgl_fonts.h:80
uint8_t char_kerning
kerning for the font
Definition: nbgl_fonts.h:86
uint8_t crop
If false, x_min_offset+y_min_offset=bytes to skip.
Definition: nbgl_fonts.h:87
uint8_t first_char
ASCII code of the first character in bitmap and in characters fields.
Definition: nbgl_fonts.h:90
uint8_t font_id
ID of the font, from nbgl_font_id_e.
Definition: nbgl_fonts.h:82
uint32_t bitmap_len
Size in bytes of the associated bitmap.
Definition: nbgl_fonts.h:81
uint8_t const * bitmap
array containing bitmaps of all characters
Definition: nbgl_fonts.h:95
const nbgl_font_character_t *const characters
array containing definitions of all characters
Definition: nbgl_fonts.h:94
uint8_t height
height of all characters in pixels
Definition: nbgl_fonts.h:84
uint8_t line_height
height of a line for all characters in pixels
Definition: nbgl_fonts.h:85
uint8_t last_char
ASCII code of the last character in bitmap and in characters fields.
Definition: nbgl_fonts.h:92
uint8_t y_min
Most top Y coordinate of any char in the font.
Definition: nbgl_fonts.h:88
uint8_t bpp
number of bits per pixels
Definition: nbgl_fonts.h:83
structure defining a unicode character (except the bitmap)
Definition: nbgl_fonts.h:108
uint32_t encoding
method used to encode bitmap data
Definition: nbgl_fonts.h:110
uint32_t char_unicode
plane value from 0 to 16 then 16-bit code.
Definition: nbgl_fonts.h:109
uint32_t width
width of character in pixels
Definition: nbgl_fonts.h:111
uint32_t x_min_offset
x_min = x_min_offset
Definition: nbgl_fonts.h:112
uint32_t y_min_offset
y_min = (y_min + y_min_offset)
Definition: nbgl_fonts.h:113
uint32_t y_max_offset
y_max = (height - y_max_offset)
Definition: nbgl_fonts.h:115
uint32_t x_max_offset
x_max = width - x_max_offset
Definition: nbgl_fonts.h:114
uint32_t bitmap_offset
offset of this character in chars buffer
Definition: nbgl_fonts.h:116
structure defining a unicode font
Definition: nbgl_fonts.h:122
uint8_t crop
If false, x_min_offset+y_min_offset=bytes to skip.
Definition: nbgl_fonts.h:129
uint8_t y_min
Most top Y coordinate of any char in the font.
Definition: nbgl_fonts.h:130
uint8_t const * bitmap
Definition: nbgl_fonts.h:136
uint16_t bitmap_len
Size in bytes of all characters bitmaps.
Definition: nbgl_fonts.h:123
uint8_t height
height of all characters in pixels
Definition: nbgl_fonts.h:126
uint8_t font_id
ID of the font, from nbgl_font_id_e.
Definition: nbgl_fonts.h:124
uint8_t char_kerning
kerning for the font
Definition: nbgl_fonts.h:128
const nbgl_font_unicode_character_t *const characters
array containing definitions of all characters
Definition: nbgl_fonts.h:135
uint8_t line_height
height of a line for all characters in pixels
Definition: nbgl_fonts.h:127
uint8_t bpp
Number of bits per pixels, (interpreted as nbgl_bpp_t)
Definition: nbgl_fonts.h:125
const nbgl_font_unicode_character_t * characters
Definition: nbgl_fonts.h:161
const nbgl_font_unicode_t * font
Definition: nbgl_fonts.h:160
uint32_t unicode_character_byte_count
Definition: nbgl_fonts.h:163
const uint8_t * bitmap
Definition: nbgl_fonts.h:162
unsigned short uint16_t
Definition: usbd_conf.h:54
unsigned char uint8_t
Definition: usbd_conf.h:53