Sang Vu Van
/
New
mesh phone
font_new.cpp@0:c674504a6536, 2012-07-02 (annotated)
- Committer:
- SangSTBK
- Date:
- Mon Jul 02 03:41:36 2012 +0000
- Revision:
- 0:c674504a6536
mesh
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
SangSTBK | 0:c674504a6536 | 1 | #include "mbed.h" |
SangSTBK | 0:c674504a6536 | 2 | #include <stdio.h> |
SangSTBK | 0:c674504a6536 | 3 | #include "font_new.h" |
SangSTBK | 0:c674504a6536 | 4 | |
SangSTBK | 0:c674504a6536 | 5 | void Write_Command(unsigned char command); |
SangSTBK | 0:c674504a6536 | 6 | void SendData(unsigned long color); |
SangSTBK | 0:c674504a6536 | 7 | void WindowSet(int s_x, int e_x,int s_y,int e_y); |
SangSTBK | 0:c674504a6536 | 8 | |
SangSTBK | 0:c674504a6536 | 9 | void put_pixcels( int xs, int width, int ys, int height, unsigned char *c, int f_color, int b_color ); |
SangSTBK | 0:c674504a6536 | 10 | void put_pixcels_alpha( int xs, int width, int ys, int height, unsigned char *c, int color, int key ); |
SangSTBK | 0:c674504a6536 | 11 | |
SangSTBK | 0:c674504a6536 | 12 | int FontDrawSpace( int width, int height, int xpos, int ypos, int f_color, int b_color ); |
SangSTBK | 0:c674504a6536 | 13 | |
SangSTBK | 0:c674504a6536 | 14 | typedef struct _draw_font_parameters { |
SangSTBK | 0:c674504a6536 | 15 | font *font_ptr; |
SangSTBK | 0:c674504a6536 | 16 | int inter_char_space; |
SangSTBK | 0:c674504a6536 | 17 | int alpha_mode; |
SangSTBK | 0:c674504a6536 | 18 | int f_color; |
SangSTBK | 0:c674504a6536 | 19 | int b_color; |
SangSTBK | 0:c674504a6536 | 20 | } |
SangSTBK | 0:c674504a6536 | 21 | draw_font_parameters; |
SangSTBK | 0:c674504a6536 | 22 | draw_font_parameters dfp; |
SangSTBK | 0:c674504a6536 | 23 | |
SangSTBK | 0:c674504a6536 | 24 | font Calibri14; |
SangSTBK | 0:c674504a6536 | 25 | font Calibri28; |
SangSTBK | 0:c674504a6536 | 26 | font Calibri72; |
SangSTBK | 0:c674504a6536 | 27 | font Calibri78_1; |
SangSTBK | 0:c674504a6536 | 28 | |
SangSTBK | 0:c674504a6536 | 29 | void FontDrawInit( void ) |
SangSTBK | 0:c674504a6536 | 30 | { |
SangSTBK | 0:c674504a6536 | 31 | Calibri14.height = 23; |
SangSTBK | 0:c674504a6536 | 32 | Calibri14.max_width = 17; |
SangSTBK | 0:c674504a6536 | 33 | Calibri14.space_width = 7; |
SangSTBK | 0:c674504a6536 | 34 | Calibri14.data_table = c14_data_table; |
SangSTBK | 0:c674504a6536 | 35 | Calibri14.offset_table = c14_offset_table; |
SangSTBK | 0:c674504a6536 | 36 | Calibri14.index_table = c14_index_table; |
SangSTBK | 0:c674504a6536 | 37 | Calibri14.width_table = c14_width_table; |
SangSTBK | 0:c674504a6536 | 38 | |
SangSTBK | 0:c674504a6536 | 39 | Calibri28.height = 45; |
SangSTBK | 0:c674504a6536 | 40 | Calibri28.max_width = 34; |
SangSTBK | 0:c674504a6536 | 41 | Calibri28.space_width = 10; |
SangSTBK | 0:c674504a6536 | 42 | Calibri28.data_table = c28_data_table; |
SangSTBK | 0:c674504a6536 | 43 | Calibri28.offset_table = c28_offset_table; |
SangSTBK | 0:c674504a6536 | 44 | Calibri28.index_table = c28_index_table; |
SangSTBK | 0:c674504a6536 | 45 | Calibri28.width_table = c28_width_table; |
SangSTBK | 0:c674504a6536 | 46 | |
SangSTBK | 0:c674504a6536 | 47 | Calibri72.height = 117; |
SangSTBK | 0:c674504a6536 | 48 | Calibri72.max_width = 87; |
SangSTBK | 0:c674504a6536 | 49 | Calibri72.space_width = 20; |
SangSTBK | 0:c674504a6536 | 50 | Calibri72.data_table = c72_data_table; |
SangSTBK | 0:c674504a6536 | 51 | Calibri72.offset_table = c72_offset_table; |
SangSTBK | 0:c674504a6536 | 52 | Calibri72.index_table = c72_index_table; |
SangSTBK | 0:c674504a6536 | 53 | Calibri72.width_table = c72_width_table; |
SangSTBK | 0:c674504a6536 | 54 | |
SangSTBK | 0:c674504a6536 | 55 | Calibri78_1.height = 117; |
SangSTBK | 0:c674504a6536 | 56 | Calibri78_1.max_width = 49; |
SangSTBK | 0:c674504a6536 | 57 | Calibri78_1.space_width = 20; |
SangSTBK | 0:c674504a6536 | 58 | Calibri78_1.data_table = c78_1_data_table; |
SangSTBK | 0:c674504a6536 | 59 | Calibri78_1.offset_table = c78_1_offset_table; |
SangSTBK | 0:c674504a6536 | 60 | Calibri78_1.index_table = c78_1_index_table; |
SangSTBK | 0:c674504a6536 | 61 | Calibri78_1.width_table = c78_1_width_table; |
SangSTBK | 0:c674504a6536 | 62 | |
SangSTBK | 0:c674504a6536 | 63 | dfp.font_ptr = &Calibri14; |
SangSTBK | 0:c674504a6536 | 64 | dfp.inter_char_space = 0; |
SangSTBK | 0:c674504a6536 | 65 | dfp.alpha_mode = 0; |
SangSTBK | 0:c674504a6536 | 66 | dfp.f_color = 0x0000FF; |
SangSTBK | 0:c674504a6536 | 67 | dfp.b_color = 0xFFFFFF; |
SangSTBK | 0:c674504a6536 | 68 | |
SangSTBK | 0:c674504a6536 | 69 | #if 0 |
SangSTBK | 0:c674504a6536 | 70 | // printf( "c14_data_table : %p\r\n", c14_data_table ); |
SangSTBK | 0:c674504a6536 | 71 | // printf( "c14_data_table : %p\r\n", Calibri14.data_table ); |
SangSTBK | 0:c674504a6536 | 72 | // printf( "c14_offset_table : %p\r\n", Calibri14.offset_table ); |
SangSTBK | 0:c674504a6536 | 73 | // printf( "c14_index_table : %p\r\n", Calibri14.index_table ); |
SangSTBK | 0:c674504a6536 | 74 | // printf( "c14_width_table : %p\r\n", Calibri14.width_table ); |
SangSTBK | 0:c674504a6536 | 75 | |
SangSTBK | 0:c674504a6536 | 76 | // printf( "(dfp.font_ptr->)data_table : %p\r\n", dfp.font_ptr->data_table ); |
SangSTBK | 0:c674504a6536 | 77 | #endif |
SangSTBK | 0:c674504a6536 | 78 | } |
SangSTBK | 0:c674504a6536 | 79 | |
SangSTBK | 0:c674504a6536 | 80 | //#ifdef TEST |
SangSTBK | 0:c674504a6536 | 81 | //extern unsigned char screen[ SC_WIDTH * SC_HEIGHT ]; |
SangSTBK | 0:c674504a6536 | 82 | //#endif |
SangSTBK | 0:c674504a6536 | 83 | |
SangSTBK | 0:c674504a6536 | 84 | void put_pixcels( int xs, int width, int ys, int height, unsigned char *c, int f_color, int b_color ) |
SangSTBK | 0:c674504a6536 | 85 | { |
SangSTBK | 0:c674504a6536 | 86 | int i; |
SangSTBK | 0:c674504a6536 | 87 | int j; |
SangSTBK | 0:c674504a6536 | 88 | |
SangSTBK | 0:c674504a6536 | 89 | #ifdef TEST |
SangSTBK | 0:c674504a6536 | 90 | for ( j = 0; j < height; j++ ) |
SangSTBK | 0:c674504a6536 | 91 | for ( i = 0; i < width; i++ ) |
SangSTBK | 0:c674504a6536 | 92 | *(screen + ((((height - 1) - j) + ys) * SC_WIDTH) + i + xs) = (unsigned char)((*c++ == 'F') ? f_color : b_color); |
SangSTBK | 0:c674504a6536 | 93 | #else |
SangSTBK | 0:c674504a6536 | 94 | WindowSet( xs, (xs + width) - 1, ys, (ys + height) - 1 ); |
SangSTBK | 0:c674504a6536 | 95 | |
SangSTBK | 0:c674504a6536 | 96 | Write_Command( 0x2c ); |
SangSTBK | 0:c674504a6536 | 97 | |
SangSTBK | 0:c674504a6536 | 98 | for ( j = 0; j < height; j++ ) |
SangSTBK | 0:c674504a6536 | 99 | for ( i = 0; i < width; i++ ) |
SangSTBK | 0:c674504a6536 | 100 | SendData( (*c++ == 'F') ? f_color : b_color ); |
SangSTBK | 0:c674504a6536 | 101 | #endif |
SangSTBK | 0:c674504a6536 | 102 | } |
SangSTBK | 0:c674504a6536 | 103 | |
SangSTBK | 0:c674504a6536 | 104 | |
SangSTBK | 0:c674504a6536 | 105 | void put_pixcels_alpha( int xs, int width, int ys, int height, unsigned char *c, int color, int key ) |
SangSTBK | 0:c674504a6536 | 106 | { |
SangSTBK | 0:c674504a6536 | 107 | int i; |
SangSTBK | 0:c674504a6536 | 108 | int j; |
SangSTBK | 0:c674504a6536 | 109 | |
SangSTBK | 0:c674504a6536 | 110 | #ifdef TEST |
SangSTBK | 0:c674504a6536 | 111 | |
SangSTBK | 0:c674504a6536 | 112 | for ( j = 0; j < height; j++ ) |
SangSTBK | 0:c674504a6536 | 113 | { |
SangSTBK | 0:c674504a6536 | 114 | for ( i = 0; i < width; i++ ) |
SangSTBK | 0:c674504a6536 | 115 | { |
SangSTBK | 0:c674504a6536 | 116 | if ( *c == 'F' ) |
SangSTBK | 0:c674504a6536 | 117 | *(screen + ((((height - 1) - j) + ys) * SC_WIDTH) + i + xs) = color; |
SangSTBK | 0:c674504a6536 | 118 | c++; |
SangSTBK | 0:c674504a6536 | 119 | } |
SangSTBK | 0:c674504a6536 | 120 | } |
SangSTBK | 0:c674504a6536 | 121 | |
SangSTBK | 0:c674504a6536 | 122 | #else |
SangSTBK | 0:c674504a6536 | 123 | |
SangSTBK | 0:c674504a6536 | 124 | for ( j = 0; j < height; j++ ) |
SangSTBK | 0:c674504a6536 | 125 | { |
SangSTBK | 0:c674504a6536 | 126 | for ( i = 0; i < width; i++ ) |
SangSTBK | 0:c674504a6536 | 127 | { |
SangSTBK | 0:c674504a6536 | 128 | if ( *c != key ) |
SangSTBK | 0:c674504a6536 | 129 | { |
SangSTBK | 0:c674504a6536 | 130 | WindowSet( xs + i, xs + i, ys + j, ys + j ); |
SangSTBK | 0:c674504a6536 | 131 | Write_Command( 0x2c ); |
SangSTBK | 0:c674504a6536 | 132 | SendData( *c++ ); |
SangSTBK | 0:c674504a6536 | 133 | } |
SangSTBK | 0:c674504a6536 | 134 | } |
SangSTBK | 0:c674504a6536 | 135 | } |
SangSTBK | 0:c674504a6536 | 136 | |
SangSTBK | 0:c674504a6536 | 137 | #endif |
SangSTBK | 0:c674504a6536 | 138 | |
SangSTBK | 0:c674504a6536 | 139 | } |
SangSTBK | 0:c674504a6536 | 140 | |
SangSTBK | 0:c674504a6536 | 141 | int FontDrawStringWidth( char *s, font *font_ptr ) |
SangSTBK | 0:c674504a6536 | 142 | { |
SangSTBK | 0:c674504a6536 | 143 | int str_width = 0; |
SangSTBK | 0:c674504a6536 | 144 | char c; |
SangSTBK | 0:c674504a6536 | 145 | |
SangSTBK | 0:c674504a6536 | 146 | while ( c = *s++ ) |
SangSTBK | 0:c674504a6536 | 147 | { |
SangSTBK | 0:c674504a6536 | 148 | if ( ' ' == c ) |
SangSTBK | 0:c674504a6536 | 149 | { |
SangSTBK | 0:c674504a6536 | 150 | str_width += font_ptr->space_width; |
SangSTBK | 0:c674504a6536 | 151 | } |
SangSTBK | 0:c674504a6536 | 152 | else |
SangSTBK | 0:c674504a6536 | 153 | { |
SangSTBK | 0:c674504a6536 | 154 | str_width += font_ptr->width_table[ font_ptr->index_table[ c ] ]; |
SangSTBK | 0:c674504a6536 | 155 | |
SangSTBK | 0:c674504a6536 | 156 | if ( dfp.inter_char_space ) |
SangSTBK | 0:c674504a6536 | 157 | str_width += dfp.inter_char_space; |
SangSTBK | 0:c674504a6536 | 158 | } |
SangSTBK | 0:c674504a6536 | 159 | } |
SangSTBK | 0:c674504a6536 | 160 | |
SangSTBK | 0:c674504a6536 | 161 | return ( str_width ); |
SangSTBK | 0:c674504a6536 | 162 | } |
SangSTBK | 0:c674504a6536 | 163 | |
SangSTBK | 0:c674504a6536 | 164 | |
SangSTBK | 0:c674504a6536 | 165 | unsigned char pad[ 90 * 120 ]; |
SangSTBK | 0:c674504a6536 | 166 | |
SangSTBK | 0:c674504a6536 | 167 | |
SangSTBK | 0:c674504a6536 | 168 | int FontDrawChar( char c, int xpos, int ypos, int f_color, int b_color, font *font_ptr ) |
SangSTBK | 0:c674504a6536 | 169 | { |
SangSTBK | 0:c674504a6536 | 170 | unsigned char index; |
SangSTBK | 0:c674504a6536 | 171 | unsigned int offset; |
SangSTBK | 0:c674504a6536 | 172 | int width; |
SangSTBK | 0:c674504a6536 | 173 | int height; |
SangSTBK | 0:c674504a6536 | 174 | unsigned char *data; |
SangSTBK | 0:c674504a6536 | 175 | int i; |
SangSTBK | 0:c674504a6536 | 176 | int j; |
SangSTBK | 0:c674504a6536 | 177 | |
SangSTBK | 0:c674504a6536 | 178 | index = font_ptr->index_table[ c ]; |
SangSTBK | 0:c674504a6536 | 179 | offset = font_ptr->offset_table[ index ]; |
SangSTBK | 0:c674504a6536 | 180 | |
SangSTBK | 0:c674504a6536 | 181 | height = font_ptr->height; |
SangSTBK | 0:c674504a6536 | 182 | |
SangSTBK | 0:c674504a6536 | 183 | if ( ' ' == c ) |
SangSTBK | 0:c674504a6536 | 184 | return ( FontDrawSpace( font_ptr->space_width, height, xpos, ypos, f_color, b_color ) ); |
SangSTBK | 0:c674504a6536 | 185 | |
SangSTBK | 0:c674504a6536 | 186 | width = font_ptr->width_table[ index ]; |
SangSTBK | 0:c674504a6536 | 187 | |
SangSTBK | 0:c674504a6536 | 188 | //#if 0 |
SangSTBK | 0:c674504a6536 | 189 | // printf( "char = '%c' on %d / %d - %d / %d - %p\r\n", c, xpos, ypos, f_color, b_color, font_ptr ); |
SangSTBK | 0:c674504a6536 | 190 | // printf( "c14_data_table : %p\r\n", c14_data_table ); |
SangSTBK | 0:c674504a6536 | 191 | // printf( "c14_offset_table : %p\r\n", c14_offset_table ); |
SangSTBK | 0:c674504a6536 | 192 | // printf( "c14_index_table : %p\r\n", c14_index_table ); |
SangSTBK | 0:c674504a6536 | 193 | // printf( "c14_width_table : %p\r\n", c14_width_table ); |
SangSTBK | 0:c674504a6536 | 194 | // printf( "(dfp.font_ptr->)data_table : %p\r\n", dfp.font_ptr->data_table ); |
SangSTBK | 0:c674504a6536 | 195 | // printf( "font_ptr->height : %p\r\n", font_ptr->height ); |
SangSTBK | 0:c674504a6536 | 196 | // printf( "font_ptr->max_width : %p\r\n", font_ptr->max_width ); |
SangSTBK | 0:c674504a6536 | 197 | // printf( "font_ptr->space_width : %p\r\n", font_ptr->space_width ); |
SangSTBK | 0:c674504a6536 | 198 | // printf( "font_ptr->data_table : %p\r\n", font_ptr->data_table ); |
SangSTBK | 0:c674504a6536 | 199 | // printf( "font_ptr->offset_table : %p (%p)\r\n", font_ptr->offset_table, font_ptr->offset_table - (unsigned int *)font_ptr->data_table ); |
SangSTBK | 0:c674504a6536 | 200 | // printf( "font_ptr->index_table : %p (%p)\r\n", font_ptr->index_table, font_ptr->index_table - font_ptr->data_table ); |
SangSTBK | 0:c674504a6536 | 201 | // printf( "font_ptr->width_table : %p (%p)\r\n", font_ptr->width_table, font_ptr->width_table - font_ptr->data_table ); |
SangSTBK | 0:c674504a6536 | 202 | // printf( "index = %u\r\n", index ); |
SangSTBK | 0:c674504a6536 | 203 | // printf( "offset = %u\r\n", offset ); |
SangSTBK | 0:c674504a6536 | 204 | // printf( "width = %u\r\n", width ); |
SangSTBK | 0:c674504a6536 | 205 | // printf( "height = %u\r\n", height ); |
SangSTBK | 0:c674504a6536 | 206 | // printf( "\r\n" ); |
SangSTBK | 0:c674504a6536 | 207 | //#endif |
SangSTBK | 0:c674504a6536 | 208 | data = (unsigned char *)(&(font_ptr->data_table[ offset ])); |
SangSTBK | 0:c674504a6536 | 209 | |
SangSTBK | 0:c674504a6536 | 210 | //#define CHAR_FLIP_NORMAL_HORIZONTAL |
SangSTBK | 0:c674504a6536 | 211 | |
SangSTBK | 0:c674504a6536 | 212 | #define CHAR_FLIP_NORMAL_VERTICAL |
SangSTBK | 0:c674504a6536 | 213 | |
SangSTBK | 0:c674504a6536 | 214 | for ( i = 0; i < width; i++ ) |
SangSTBK | 0:c674504a6536 | 215 | { |
SangSTBK | 0:c674504a6536 | 216 | for ( j = 0; j < height; j++ ) |
SangSTBK | 0:c674504a6536 | 217 | { |
SangSTBK | 0:c674504a6536 | 218 | #if defined( CHAR_FLIP_NORMAL_HORIZONTAL ) && !defined( CHAR_FLIP_NORMAL_VERTICAL ) |
SangSTBK | 0:c674504a6536 | 219 | *(pad + (j * width) + ((width - 1) - i)) = (*(data + (i * ((height + 7) / 8)) + (j / 8)) << (j % 8)) & 0x80 ? 'F' : 'B'; |
SangSTBK | 0:c674504a6536 | 220 | #elif !defined( CHAR_FLIP_NORMAL_HORIZONTAL ) && defined( CHAR_FLIP_NORMAL_VERTICAL ) |
SangSTBK | 0:c674504a6536 | 221 | *(pad + (((height - 1) - j) * width) + i) = (*(data + (i * ((height + 7) / 8)) + (j / 8)) << (j % 8)) & 0x80 ? 'F' : 'B'; |
SangSTBK | 0:c674504a6536 | 222 | #elif defined( CHAR_FLIP_NORMAL_HORIZONTAL ) && defined( CHAR_FLIP_NORMAL_VERTICAL ) |
SangSTBK | 0:c674504a6536 | 223 | *(pad + (((height - 1) - j) * width) + ((width - 1) - i)) = (*(data + (i * ((height + 7) / 8)) + (j / 8)) << (j % 8)) & 0x80 ? 'F' : 'B'; |
SangSTBK | 0:c674504a6536 | 224 | #else |
SangSTBK | 0:c674504a6536 | 225 | *(pad + (j * width) + i) = (*(data + (i * ((height + 7) / 8)) + (j / 8)) << (j % 8)) & 0x80 ? 'F' : 'B'; |
SangSTBK | 0:c674504a6536 | 226 | #endif |
SangSTBK | 0:c674504a6536 | 227 | |
SangSTBK | 0:c674504a6536 | 228 | |
SangSTBK | 0:c674504a6536 | 229 | |
SangSTBK | 0:c674504a6536 | 230 | #if 0 |
SangSTBK | 0:c674504a6536 | 231 | #if 0 |
SangSTBK | 0:c674504a6536 | 232 | *(pad + (j * width) + i) = (*(data + (i * ((height + 7) / 8)) + (j / 8)) << (j % 8)) & 0x80 ? 'F' : 'B'; |
SangSTBK | 0:c674504a6536 | 233 | #else |
SangSTBK | 0:c674504a6536 | 234 | *(pad + (((height - 1) - j) * width) + i) = (*(data + (i * ((height + 7) / 8)) + (j / 8)) << (j % 8)) & 0x80 ? 'F' : 'B'; |
SangSTBK | 0:c674504a6536 | 235 | #endif |
SangSTBK | 0:c674504a6536 | 236 | #endif |
SangSTBK | 0:c674504a6536 | 237 | } |
SangSTBK | 0:c674504a6536 | 238 | } |
SangSTBK | 0:c674504a6536 | 239 | |
SangSTBK | 0:c674504a6536 | 240 | if ( dfp.alpha_mode ) |
SangSTBK | 0:c674504a6536 | 241 | put_pixcels_alpha( xpos, width, ypos, height, pad, f_color, b_color ); |
SangSTBK | 0:c674504a6536 | 242 | else |
SangSTBK | 0:c674504a6536 | 243 | put_pixcels( xpos, width, ypos, height, pad, f_color, b_color ); |
SangSTBK | 0:c674504a6536 | 244 | |
SangSTBK | 0:c674504a6536 | 245 | if ( dfp.inter_char_space ) |
SangSTBK | 0:c674504a6536 | 246 | width += FontDrawSpace( dfp.inter_char_space, height, xpos + width, ypos, f_color, b_color ); |
SangSTBK | 0:c674504a6536 | 247 | |
SangSTBK | 0:c674504a6536 | 248 | return ( width ); |
SangSTBK | 0:c674504a6536 | 249 | } |
SangSTBK | 0:c674504a6536 | 250 | |
SangSTBK | 0:c674504a6536 | 251 | |
SangSTBK | 0:c674504a6536 | 252 | int FontDrawSpace( int width, int height, int xpos, int ypos, int f_color, int b_color ) |
SangSTBK | 0:c674504a6536 | 253 | { |
SangSTBK | 0:c674504a6536 | 254 | int i; |
SangSTBK | 0:c674504a6536 | 255 | unsigned char pad[ width * height ]; |
SangSTBK | 0:c674504a6536 | 256 | |
SangSTBK | 0:c674504a6536 | 257 | if ( dfp.alpha_mode ) |
SangSTBK | 0:c674504a6536 | 258 | return ( width ); |
SangSTBK | 0:c674504a6536 | 259 | |
SangSTBK | 0:c674504a6536 | 260 | for ( i = 0; i < width * height; i++ ) |
SangSTBK | 0:c674504a6536 | 261 | *(pad + i) = b_color; |
SangSTBK | 0:c674504a6536 | 262 | |
SangSTBK | 0:c674504a6536 | 263 | put_pixcels( xpos, width, ypos, height, pad, f_color, b_color ); |
SangSTBK | 0:c674504a6536 | 264 | |
SangSTBK | 0:c674504a6536 | 265 | return ( width ); |
SangSTBK | 0:c674504a6536 | 266 | } |
SangSTBK | 0:c674504a6536 | 267 | |
SangSTBK | 0:c674504a6536 | 268 | |
SangSTBK | 0:c674504a6536 | 269 | void FontDrawString( char *s, int xpos, int ypos, int f_color, int b_color, font *font_ptr ) |
SangSTBK | 0:c674504a6536 | 270 | { |
SangSTBK | 0:c674504a6536 | 271 | char c; |
SangSTBK | 0:c674504a6536 | 272 | |
SangSTBK | 0:c674504a6536 | 273 | while ( c = *s++ ) |
SangSTBK | 0:c674504a6536 | 274 | xpos += FontDrawChar( c, xpos, ypos, f_color, b_color, font_ptr ); |
SangSTBK | 0:c674504a6536 | 275 | } |
SangSTBK | 0:c674504a6536 | 276 | |
SangSTBK | 0:c674504a6536 | 277 | void FontDraw_SetInterCharSpace( int space ) |
SangSTBK | 0:c674504a6536 | 278 | { |
SangSTBK | 0:c674504a6536 | 279 | dfp.inter_char_space = space; |
SangSTBK | 0:c674504a6536 | 280 | } |
SangSTBK | 0:c674504a6536 | 281 | |
SangSTBK | 0:c674504a6536 | 282 | |
SangSTBK | 0:c674504a6536 | 283 | void FontDraw_SetAlphaMode( int mode ) |
SangSTBK | 0:c674504a6536 | 284 | { |
SangSTBK | 0:c674504a6536 | 285 | dfp.alpha_mode = mode; |
SangSTBK | 0:c674504a6536 | 286 | } |
SangSTBK | 0:c674504a6536 | 287 | |
SangSTBK | 0:c674504a6536 | 288 | void FontDraw_SetFont( font f ) |
SangSTBK | 0:c674504a6536 | 289 | { |
SangSTBK | 0:c674504a6536 | 290 | dfp.font_ptr = &f; |
SangSTBK | 0:c674504a6536 | 291 | } |
SangSTBK | 0:c674504a6536 | 292 | |
SangSTBK | 0:c674504a6536 | 293 | void FontDraw_SetForegroundColor( int v ) |
SangSTBK | 0:c674504a6536 | 294 | { |
SangSTBK | 0:c674504a6536 | 295 | dfp.f_color = v; |
SangSTBK | 0:c674504a6536 | 296 | } |
SangSTBK | 0:c674504a6536 | 297 | |
SangSTBK | 0:c674504a6536 | 298 | void FontDraw_SetBackgroundColor( int v ) |
SangSTBK | 0:c674504a6536 | 299 | { |
SangSTBK | 0:c674504a6536 | 300 | dfp.b_color = v; |
SangSTBK | 0:c674504a6536 | 301 | } |
SangSTBK | 0:c674504a6536 | 302 | |
SangSTBK | 0:c674504a6536 | 303 | void FontDraw_puts( int x, int y, char *s ) |
SangSTBK | 0:c674504a6536 | 304 | { |
SangSTBK | 0:c674504a6536 | 305 | FontDrawString( s, x, y, dfp.f_color, dfp.b_color, dfp.font_ptr ); |
SangSTBK | 0:c674504a6536 | 306 | } |
SangSTBK | 0:c674504a6536 | 307 | |
SangSTBK | 0:c674504a6536 | 308 | |
SangSTBK | 0:c674504a6536 | 309 | #include <stdarg.h> |
SangSTBK | 0:c674504a6536 | 310 | |
SangSTBK | 0:c674504a6536 | 311 | void FontDraw_printf( int x, int y, char *format, ... ) |
SangSTBK | 0:c674504a6536 | 312 | { |
SangSTBK | 0:c674504a6536 | 313 | char s[ 80 ]; |
SangSTBK | 0:c674504a6536 | 314 | va_list args; |
SangSTBK | 0:c674504a6536 | 315 | |
SangSTBK | 0:c674504a6536 | 316 | va_start( args, format ); |
SangSTBK | 0:c674504a6536 | 317 | vsnprintf( s, 32, format, args ); |
SangSTBK | 0:c674504a6536 | 318 | va_end( args ); |
SangSTBK | 0:c674504a6536 | 319 | |
SangSTBK | 0:c674504a6536 | 320 | FontDraw_puts( x, y, s ); |
SangSTBK | 0:c674504a6536 | 321 | } |