void gui_Init(u8g2_t *u8g2, uint8_t is_por) { if ( is_por == 0 ) { /* not a POR reset, so load current values */ gui_LoadData(); /* do NOT init the display, otherwise there will be some flicker visible */ /* however, the GPIO subsystem still has to be setup, so call the other init procedures */ /* this acts like a warm start for the display */ /* the display setup code for the display is NOT send */ u8x8_gpio_Init(u8g2_GetU8x8(u8g2)); u8x8_cad_Init(u8g2_GetU8x8(u8g2)); u8x8_gpio_SetReset(u8g2_GetU8x8(u8g2), 1); //u8g2_InitDisplay(u8g2); //u8x8_d_helper_display_init(u8g2_GetU8x8(u8g2)); // u8g2_SetPowerSave(u8g2, 0); // this will be done later } else { /* POR reset, so do NOT load any values (they will be 0 in the best case) */ /* instead do a proper reset of the display */ // u8x8_InitDisplay(u8g2_GetU8x8(&u8g2)); u8g2_InitDisplay(u8g2); // u8x8_SetPowerSave(u8g2_GetU8x8(&u8g2), 0); u8g2_SetPowerSave(u8g2, 0); } menu_Init(&gui_menu, u8g2); gui_SignalTimeChange(); }
int main(void) { uint8_t i, cnt; u8g2_SetupBuffer_Utf8(&u8g2, &u8g2_cb_r0); u8x8_InitDisplay(u8g2_GetU8x8(&u8g2)); u8x8_SetPowerSave(u8g2_GetU8x8(&u8g2), 0); u8g2_SetFont(&u8g2, u8g2_font_helvB10_tr); #ifdef U8G2_WITH_HVLINE_COUNT u8g2.hv_cnt = 0UL; #endif /* U8G2_WITH_HVLINE_COUNT */ u8g2_FirstPage(&u8g2); i = 0; cnt = u8x8_GetStringLineCnt(str); do { for( i = 0; i < cnt; i++ ) { u8g2_DrawStr(&u8g2, 0, i*12+11, u8x8_GetStringLine(i, str)); } } while( u8g2_NextPage(&u8g2) ); #ifdef U8G2_WITH_HVLINE_COUNT printf("hv cnt: %ld\n", u8g2.hv_cnt); #endif /* U8G2_WITH_HVLINE_COUNT */ utf8_show(); return 0; }
int main(void) { u8g2_SetupBuffer_SDL_128x64_4(&u8g2, &u8g2_cb_r0); u8x8_InitDisplay(u8g2_GetU8x8(&u8g2)); u8x8_SetPowerSave(u8g2_GetU8x8(&u8g2), 0); u8g2_SetFont(&u8g2, u8g2_font_helvB08_tr); u8g2_SetFontDirection(&u8g2, 0); u8g2_SetFontRefHeightAll(&u8g2); u8g2_UserInterfaceSelectionList(&u8g2, "Title", 0, "abc\ndef\nghi\njkl\n12345\n67890"); /* do { k = u8g_sdl_get_key(); } while( k < 0 ); if ( k == 273 ) y -= 7; if ( k == 274 ) y += 7; if ( k == 276 ) x -= 7; if ( k == 275 ) x += 7; if ( k == 'e' ) y -= 1; if ( k == 'x' ) y += 1; if ( k == 's' ) x -= 1; if ( k == 'd' ) x += 1; if ( k == 'q' ) break; */ return 0; }
u8g2_uint_t u8g2_DrawExtUTF8(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, uint8_t to_left, const uint16_t *kerning_table, const char *str) { u8g2->u8x8.next_cb = u8x8_utf8_next; uint16_t e_prev = 0x0ffff; uint16_t e; u8g2_uint_t delta, sum, k; u8x8_utf8_init(u8g2_GetU8x8(u8g2)); sum = 0; for(;;) { e = u8g2->u8x8.next_cb(u8g2_GetU8x8(u8g2), (uint8_t)*str); if ( e == 0x0ffff ) break; str++; if ( e != 0x0fffe ) { delta = u8g2_GetGlyphWidth(u8g2, e); if ( to_left ) { k = u8g2_GetKerningByTable(u8g2, kerning_table, e, e_prev); delta -= k; x -= delta; } else { k = u8g2_GetKerningByTable(u8g2, kerning_table, e_prev, e); delta -= k; } e_prev = e; if ( to_left ) { } else { x += delta; } u8g2_DrawGlyph(u8g2, x, y, e); if ( to_left ) { } else { //x += delta; //x -= k; } sum += delta; } } return sum; }
static void u8g2_send_tile_row(u8g2_t *u8g2, uint8_t src_tile_row, uint8_t dest_tile_row) { uint8_t *ptr; uint16_t offset; uint8_t w; w = u8g2_GetU8x8(u8g2)->display_info->tile_width; offset = src_tile_row; ptr = u8g2->tile_buf_ptr; offset *= w; offset *= 8; ptr += offset; u8x8_DrawTile(u8g2_GetU8x8(u8g2), 0, dest_tile_row, w, ptr); }
int main(void) { u8g2_SetupBuffer_SDL_128x64(&u8g2, &u8g2_cb_r0); u8x8_InitDisplay(u8g2_GetU8x8(&u8g2)); u8x8_SetPowerSave(u8g2_GetU8x8(&u8g2), 0); u8g2_DrawHVLine(&u8g2, 5, 20, 40, 0); u8g2_DrawHVLine(&u8g2, 5, 22, 40, 0); u8g2_DrawHVLine(&u8g2, 5, 24, 40, 0); u8g2_DrawHVLine(&u8g2, 5, 24, 40, 1); /* clipping tests */ u8g2_DrawHVLine(&u8g2, 60000, 10000, 39, 0); u8g2_DrawHVLine(&u8g2, 140, 40, 40, 0); u8g2_DrawHVLine(&u8g2, 120, 41, 40, 0); u8g2_DrawHVLine(&u8g2, 120, 42, 0xff8f, 0); /* rare case */ u8g2_DrawHVLine(&u8g2, 120, 43, 6, 0); u8g2_DrawHVLine(&u8g2, 0, 40, 10, 0); u8g2_DrawHVLine(&u8g2, -2, 41, 5, 0); u8g2_DrawHVLine(&u8g2, -3, 42, 5, 0); u8g2_DrawHVLine(&u8g2, -8, 43, 5, 0); u8g2_DrawHVLine(&u8g2, 0, 44, 10, 0); u8g2_DrawHVLine(&u8g2, 99, 70, 40, 1); u8g2_DrawHVLine(&u8g2, 98, 60, 40, 1); u8g2_DrawHVLine(&u8g2, 97, 60, 0xfff0, 1); /* rare case */ u8g2_DrawHVLine(&u8g2, 96, 60, 3, 1); u8g2_SendBuffer(&u8g2); u8x8_Set8x8Font(u8g2_GetU8x8(&u8g2), bdf_font); u8x8_Draw8x8String(u8g2_GetU8x8(&u8g2), 0, 0, "Hello World!"); while( u8g_sdl_get_key() < 0 ) ; return 0; }
void write_tga_map(const char *filename) { static u8g2_t u8g2; int x, y, i; unsigned tile; if ( map_phase != PHASE_MAPDATA ) return; u8x8_tga_info.tile_width = map_width*2; u8x8_tga_info.tile_height = map_height*2; u8x8_tga_info.pixel_width = map_width*16; u8x8_tga_info.pixel_height = map_height*16; u8g2_SetupBuffer_TGA(&u8g2, &u8g2_cb_r0); u8x8_InitDisplay(u8g2_GetU8x8(&u8g2)); u8x8_SetPowerSave(u8g2_GetU8x8(&u8g2), 0); u8g2_SetFont(&u8g2, scrollosprites); u8g2_FirstPage(&u8g2); do { for( y = 0; y < map_height; y++ ) { for( x = 0; x < map_width; x++ ) { tile = map2[y][x]; /* check if there is a fg_tile, if so, use that tile instead */ for( i = 0; i < tile_cnt; i++ ) { if ( tile_list[i].item_index >= 0 ) { if ( tile_list[i].ascii == map[y][x] ) { tile = item_list[tile_list[i].item_index].fg_tile; } } } u8g2_DrawGlyph(&u8g2, x*16, y*16+16, tile); } } } while( u8g2_NextPage(&u8g2) ); tga_save(filename); }
void u8g2_draw_pixel(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y) { uint8_t *ptr; uint8_t bit_pos, mask; uint16_t offset; assert(x >= u8g2->buf_x0); assert(x < u8g2->buf_x1); assert(y >= u8g2->buf_y0); assert(y < u8g2->buf_y1); ptr = u8g2->tile_buf_ptr; /* bytes are vertical, lsb on top (y=0), msb at bottom (y=7) */ bit_pos = y; /* overflow truncate is ok here... */ bit_pos &= 7; /* ... because only the lowest 3 bits are needed */ y &= ~7; /* zero the lowest 3 bits, y is tile-row * 8 from now on */ offset = y; /* y might be 8 or 16 bit, but we need 16 bit, so use a 16 bit variable */ offset *= u8g2_GetU8x8(u8g2)->display_info->tile_width; ptr += offset; ptr += x; mask = 1; mask <<= bit_pos; if ( u8g2->draw_color != 0 ) { *ptr |= mask; } else { mask ^= 255; *ptr &= mask; } }
void u8g2_SetupBuffer_TGA(u8g2_t *u8g2, const u8g2_cb_t *u8g2_cb) { static uint8_t buf[(DEFAULT_WIDTH)*8*8]; u8x8_Setup_TGA(u8g2_GetU8x8(u8g2)); u8g2_SetupBuffer(u8g2, buf, 8, u8g2_ll_hvline_vertical_top_lsb, u8g2_cb); }
/* x,y position within the buffer */ static void u8g2_draw_pixel_vertical_top_lsb(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y) { uint16_t offset; uint8_t *ptr; uint8_t bit_pos, mask; //assert(x >= u8g2->buf_x0); //assert(x < u8g2_GetU8x8(u8g2)->display_info->tile_width*8); //assert(y >= u8g2->buf_y0); //assert(y < u8g2_GetU8x8(u8g2)->display_info->tile_height*8); /* bytes are vertical, lsb on top (y=0), msb at bottom (y=7) */ bit_pos = y; /* overflow truncate is ok here... */ bit_pos &= 7; /* ... because only the lowest 3 bits are needed */ mask = 1; mask <<= bit_pos; offset = y; /* y might be 8 or 16 bit, but we need 16 bit, so use a 16 bit variable */ offset &= ~7; offset *= u8g2_GetU8x8(u8g2)->display_info->tile_width; ptr = u8g2->tile_buf_ptr; ptr += offset; ptr += x; if ( u8g2->draw_color <= 1 ) *ptr |= mask; if ( u8g2->draw_color != 1 ) *ptr ^= mask; }
void u8g2_SetupBitmap(u8g2_t *u8g2, const u8g2_cb_t *u8g2_cb, uint16_t pixel_width, uint16_t pixel_height) { /* allocate bitmap, assign the device callback to u8x8 */ u8x8_SetupBitmap(u8g2_GetU8x8(u8g2), pixel_width, pixel_height); /* configure u8g2 in full buffer mode */ u8g2_SetupBuffer(u8g2, u8x8_bitmap.u8g2_buf, (pixel_height+7)/8, u8g2_ll_hvline_vertical_top_lsb, u8g2_cb); }
/*============================================*/ void u8g2_ClearBuffer(u8g2_t *u8g2) { size_t cnt; cnt = u8g2_GetU8x8(u8g2)->display_info->tile_width; cnt *= u8g2->tile_buf_height; cnt *= 8; memset(u8g2->tile_buf_ptr, 0, cnt); }
uint8_t u8g2_NextPage(u8g2_t *u8g2) { uint8_t row; u8g2_send_buffer(u8g2); row = u8g2->tile_curr_row; row += u8g2->tile_buf_height; if ( row >= u8g2_GetU8x8(u8g2)->display_info->tile_height ) { u8x8_RefreshDisplay( u8g2_GetU8x8(u8g2) ); return 0; } if ( u8g2->is_auto_page_clear ) { u8g2_ClearBuffer(u8g2); } u8g2_SetBufferCurrTileRow(u8g2, row); return 1; }
static u8g2_uint_t u8g2_draw_string(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, const char *str) { uint16_t e; u8g2_uint_t delta, sum; u8x8_utf8_init(u8g2_GetU8x8(u8g2)); sum = 0; for(;;) { e = u8g2->u8x8.next_cb(u8g2_GetU8x8(u8g2), (uint8_t)*str); if ( e == 0x0ffff ) break; str++; if ( e != 0x0fffe ) { delta = u8g2_DrawGlyph(u8g2, x, y, e); #ifdef U8G2_WITH_FONT_ROTATION switch(u8g2->font_decode.dir) { case 0: x += delta; break; case 1: y += delta; break; case 2: x -= delta; break; case 3: y -= delta; break; } #else x += delta; #endif sum += delta; } } return sum; }
int main(void) { u8g2_SetupBuffer_Utf8(&u8g2, &u8g2_cb_r0); u8x8_InitDisplay(u8g2_GetU8x8(&u8g2)); u8x8_SetPowerSave(u8g2_GetU8x8(&u8g2), 0); u8g2_SetFont(&u8g2, u8g2_font_unifont_t_chinese2); u8g2_SetFontDirection(&u8g2, 0); u8g2_FirstPage(&u8g2); do { u8g2_DrawUTF8(&u8g2, 2, 15, "你好世界"); u8g2_DrawStr(&u8g2, 2, 30, "Hello World"); } while( u8g2_NextPage(&u8g2) ); utf8_show(); return 0; }
int main(void) { int y; u8g2_SetupBuffer_Utf8(&u8g2, &u8g2_cb_r0); u8x8_InitDisplay(u8g2_GetU8x8(&u8g2)); u8x8_SetPowerSave(u8g2_GetU8x8(&u8g2), 0); u8g2_SetFont(&u8g2, u8g2_font_5x7_tr); u8g2_SetFontDirection(&u8g2, 0); #ifdef U8G2_WITH_HVLINE_COUNT u8g2.hv_cnt = 0UL; #endif /* U8G2_WITH_HVLINE_COUNT */ u8g2_FirstPage(&u8g2); do { for( y = 3; y < 21; y++ ) { u8g2_DrawHLine(&u8g2, 3, y, 11); } u8g2_DrawStr(&u8g2, 17, 8, "Test Inter-"); u8g2_DrawStr(&u8g2, 17, 16, "section:"); u8g2_DrawStr(&u8g2, 17, 24, "One Block"); } while( u8g2_NextPage(&u8g2) ); #ifdef U8G2_WITH_HVLINE_COUNT printf("hv cnt: %ld\n", u8g2.hv_cnt); #endif /* U8G2_WITH_HVLINE_COUNT */ utf8_show(); return 0; }
static u8g2_uint_t u8g2_string_width(u8g2_t *u8g2, const char *str) { uint16_t e; u8g2_uint_t w, dx; u8g2->font_decode.glyph_width = 0; u8x8_utf8_init(u8g2_GetU8x8(u8g2)); /* reset the total width to zero, this will be expanded during calculation */ w = 0; dx = 0; // printf("str=<%s>\n", str); for(;;) { e = u8g2->u8x8.next_cb(u8g2_GetU8x8(u8g2), (uint8_t)*str); if ( e == 0x0ffff ) break; str++; if ( e != 0x0fffe ) { dx = u8g2_GetGlyphWidth(u8g2, e); /* delta x value of the glyph */ w += dx; } } /* adjust the last glyph, check for issue #16: do not adjust if width is 0 */ if ( u8g2->font_decode.glyph_width != 0 ) { w -= dx; w += u8g2->font_decode.glyph_width; /* the real pixel width of the glyph, sideeffect of GetGlyphWidth */ /* issue #46: we have to add the x offset also */ w += u8g2->glyph_x_offset; /* this value is set as a side effect of u8g2_GetGlyphWidth() */ } // printf("w=%d \n", w); return w; }
int main(void) { uint8_t value = 0; u8g2_SetupBuffer_SDL_128x64_4(&u8g2, &u8g2_cb_r0); u8x8_InitDisplay(u8g2_GetU8x8(&u8g2)); u8x8_SetPowerSave(u8g2_GetU8x8(&u8g2), 0); //u8g2_SetFont(&u8g2, u8g2_font_helvB08_tr); u8g2_SetFont(&u8g2, u8g2_font_6x10_tr); u8g2_SetFontDirection(&u8g2, 0); u8g2_SetFontRefHeightAll(&u8g2); u8g2_UserInterfaceInputValue(&u8g2, "Title\n-----\n", "X=", &value, 0, 19, 2, "m"); /* do { k = u8g_sdl_get_key(); } while( k < 0 ); if ( k == 273 ) y -= 7; if ( k == 274 ) y += 7; if ( k == 276 ) x -= 7; if ( k == 275 ) x += 7; if ( k == 'e' ) y -= 1; if ( k == 'x' ) y += 1; if ( k == 's' ) x -= 1; if ( k == 'd' ) x += 1; if ( k == 'q' ) break; */ return 0; }
void u8g2_ll_hvline_horizontal_right_lsb(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len, uint8_t dir) { uint16_t offset; uint8_t *ptr; uint8_t bit_pos; uint8_t mask; uint8_t tile_width = u8g2_GetU8x8(u8g2)->display_info->tile_width; bit_pos = x; /* overflow truncate is ok here... */ bit_pos &= 7; /* ... because only the lowest 3 bits are needed */ mask = 128; mask >>= bit_pos; offset = y; /* y might be 8 or 16 bit, but we need 16 bit, so use a 16 bit variable */ offset *= tile_width; offset += x>>3; ptr = u8g2->tile_buf_ptr; ptr += offset; if ( dir == 0 ) { do { if ( u8g2->draw_color <= 1 ) *ptr |= mask; if ( u8g2->draw_color != 1 ) *ptr ^= mask; mask >>= 1; if ( mask == 0 ) { mask = 128; ptr++; } //x++; len--; } while( len != 0 ); } else { do { if ( u8g2->draw_color <= 1 )
static void u8g2_send_buffer(u8g2_t *u8g2) { uint8_t src_row; uint8_t src_max; uint8_t dest_row; uint8_t dest_max; src_row = 0; src_max = u8g2->tile_buf_height; dest_row = u8g2->tile_curr_row; dest_max = u8g2_GetU8x8(u8g2)->display_info->tile_height; do { u8g2_send_tile_row(u8g2, src_row, dest_row); src_row++; dest_row++; } while( src_row < src_max && dest_row < dest_max ); }
static u8g2_uint_t u8g2_calculate_exact_string_width(u8g2_t *u8g2, const char *str) { u8g2_uint_t w; uint16_t enc; uint8_t gw; int8_t ox, dx; /* reset the total minimal width to zero, this will be expanded during calculation */ w = 0; /* check for empty string, width is already 0 */ do { enc = u8g2->u8x8.next_cb(u8g2_GetU8x8(u8g2), (uint8_t)*str); str++; } while( enc == 0x0fffe ); if ( enc== 0x0ffff ) return w; /* get the glyph information of the first char. This must be valid, because we already checked for the empty string */ /* if *s is not inside the font, then the cached parameters of the glyph are all zero */ u8g2_GetGlyphHorizontalProperties(u8g2, enc, &gw, &ox, &dx); /* strlen(s) == 1: width = width(s[0]) */ /* strlen(s) == 2: width = - offx(s[0]) + deltax(s[0]) + offx(s[1]) + width(s[1]) */ /* strlen(s) == 3: width = - offx(s[0]) + deltax(s[0]) + deltax(s[1]) + offx(s[2]) + width(s[2]) */ /* assume that the string has size 2 or more, than start with negative offset-x */ /* for string with size 1, this will be nullified after the loop */ w = -ox; for(;;) { /* check and stop if the end of the string is reached */ do { enc = u8g2->u8x8.next_cb(u8g2_GetU8x8(u8g2), (uint8_t)*str); str++; } while( enc == 0x0fffe ); if ( enc== 0x0ffff ) break; u8g2_GetGlyphHorizontalProperties(u8g2, enc, &gw, &ox, &dx); /* if there are still more characters, add the delta to the next glyph */ w += dx; } /* finally calculate the width of the last char */ /* here is another exception, if the last char is a black, use the dx value instead */ if ( enc != ' ' ) { /* if g was not updated in the for loop (strlen() == 1), then the initial offset x gets removed */ w += gw; w += ox; } else { w += dx; } return w; }
/* x,y Upper left position of the line within the local buffer (not the display!) len length of the line in pixel, len must not be 0 dir 0: horizontal line (left to right) 1: vertical line (top to bottom) asumption: all clipping done */ void u8g2_ll_hvline_vertical_top_lsb(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len, uint8_t dir) { uint16_t offset; uint8_t *ptr; uint8_t bit_pos, mask; uint8_t or_mask, xor_mask; //assert(x >= u8g2->buf_x0); //assert(x < u8g2_GetU8x8(u8g2)->display_info->tile_width*8); //assert(y >= u8g2->buf_y0); //assert(y < u8g2_GetU8x8(u8g2)->display_info->tile_height*8); /* bytes are vertical, lsb on top (y=0), msb at bottom (y=7) */ bit_pos = y; /* overflow truncate is ok here... */ bit_pos &= 7; /* ... because only the lowest 3 bits are needed */ mask = 1; mask <<= bit_pos; or_mask = 0; xor_mask = 0; if ( u8g2->draw_color <= 1 ) or_mask = mask; if ( u8g2->draw_color != 1 ) xor_mask = mask; offset = y; /* y might be 8 or 16 bit, but we need 16 bit, so use a 16 bit variable */ offset &= ~7; offset *= u8g2_GetU8x8(u8g2)->display_info->tile_width; ptr = u8g2->tile_buf_ptr; ptr += offset; ptr += x; if ( dir == 0 ) { do { *ptr |= or_mask; *ptr ^= xor_mask; ptr++; len--; } while( len != 0 ); } else { do { *ptr |= or_mask; *ptr ^= xor_mask; bit_pos++; bit_pos &= 7; len--; if ( bit_pos == 0 ) { ptr+=u8g2->pixel_buf_width; /* 6 Jan 17: Changed u8g2->width to u8g2->pixel_buf_width, issue #148 */ if ( u8g2->draw_color <= 1 ) or_mask = 1; if ( u8g2->draw_color != 1 ) xor_mask = 1; } else { or_mask <<= 1; xor_mask <<= 1; } } while( len != 0 ); } }
/* same as u8g2_send_buffer but also send the DISPLAY_REFRESH message (used by SSD1606) */ void u8g2_SendBuffer(u8g2_t *u8g2) { u8g2_send_buffer(u8g2); u8x8_RefreshDisplay( u8g2_GetU8x8(u8g2) ); }
int main(void) { int x, y; int k; int i; u8g2_SetupBuffer_TGA_LCD(&u8g2, &u8g2_cb_r0); u8x8_InitDisplay(u8g2_GetU8x8(&u8g2)); u8x8_SetPowerSave(u8g2_GetU8x8(&u8g2), 0); u8g2_SetFont(&u8g2, u8g2_font_helvB18_tr); x = 50; y = 30+0; #ifdef U8G2_WITH_HVLINE_COUNT u8g2.hv_cnt = 0UL; #endif /* U8G2_WITH_HVLINE_COUNT */ /* u8g2_ClearBuffer(&u8g2); u8g2_SetFontDirection(&u8g2, 0); u8g2_DrawStr(&u8g2, x, y, "ABC"); u8g2_SetFontDirection(&u8g2, 1); u8g2_DrawStr(&u8g2, x, y, "abc"); u8g2_SetFontDirection(&u8g2, 2); u8g2_DrawStr(&u8g2, x, y, "abc"); u8g2_SetFontDirection(&u8g2, 3); u8g2_DrawStr(&u8g2, x, y, "abc"); u8g2_SendBuffer(&u8g2); */ u8g2_FirstPage(&u8g2); i = 0; do { u8g2_SetFontDirection(&u8g2, 0); u8g2_DrawStr(&u8g2, x, y, "ABC"); u8g2_SetFontDirection(&u8g2, 1); u8g2_DrawStr(&u8g2, x, y, "abc"); u8g2_SetFontDirection(&u8g2, 2); u8g2_DrawStr(&u8g2, x, y, "abc"); u8g2_SetFontDirection(&u8g2, 3); u8g2_DrawStr(&u8g2, x, y, "abc"); if ( i == 1 ) { u8g2_DrawHVLine(&u8g2, u8g2.user_x0, u8g2.user_y0, 1, 0); u8g2_DrawHVLine(&u8g2, u8g2.user_x0, u8g2.user_y1-1, 1, 0); u8g2_DrawHVLine(&u8g2, u8g2.user_x1-1, u8g2.user_y1-1, 1, 0); u8g2_DrawHVLine(&u8g2, u8g2.user_x1-1, u8g2.user_y0, 1, 0); } i++; } while( u8g2_NextPage(&u8g2) ); #ifdef U8G2_WITH_HVLINE_COUNT printf("hv cnt: %ld\n", u8g2.hv_cnt); #endif /* U8G2_WITH_HVLINE_COUNT */ tga_save("u8g2.tga"); return 0; }
int main(void) { int x, y; int k; int i; u8g2_SetupBuffer_SDL_128x64_4(&u8g2, &u8g2_cb_r0); u8x8_InitDisplay(u8g2_GetU8x8(&u8g2)); u8x8_SetPowerSave(u8g2_GetU8x8(&u8g2), 0); u8g2_SetFont(&u8g2, u8g2_font_helvB18_tn); x = 50; y = 30; for(;;) { #ifdef U8G2_WITH_HVLINE_COUNT u8g2.hv_cnt = 0UL; #endif /* U8G2_WITH_HVLINE_COUNT */ /* u8g2_ClearBuffer(&u8g2); u8g2_SetFontDirection(&u8g2, 0); u8g2_DrawStr(&u8g2, x, y, "ABC"); u8g2_SetFontDirection(&u8g2, 1); u8g2_DrawStr(&u8g2, x, y, "abc"); u8g2_SetFontDirection(&u8g2, 2); u8g2_DrawStr(&u8g2, x, y, "abc"); u8g2_SetFontDirection(&u8g2, 3); u8g2_DrawStr(&u8g2, x, y, "abc"); u8g2_SendBuffer(&u8g2); */ u8g2_FirstPage(&u8g2); i = 0; do { u8g2_SetFontDirection(&u8g2, 0); u8g2_DrawStr(&u8g2, x, y, "123"); u8g2_SetFontDirection(&u8g2, 1); u8g2_DrawStr(&u8g2, x, y, "123"); u8g2_SetFontDirection(&u8g2, 2); u8g2_DrawStr(&u8g2, x, y, "123"); u8g2_SetFontDirection(&u8g2, 3); u8g2_DrawStr(&u8g2, x, y, "123"); if ( i == 1 ) { u8g2_DrawHVLine(&u8g2, u8g2.user_x0, u8g2.user_y0, 1, 0); u8g2_DrawHVLine(&u8g2, u8g2.user_x0, u8g2.user_y1-1, 1, 0); u8g2_DrawHVLine(&u8g2, u8g2.user_x1-1, u8g2.user_y1-1, 1, 0); u8g2_DrawHVLine(&u8g2, u8g2.user_x1-1, u8g2.user_y0, 1, 0); } i++; } while( u8g2_NextPage(&u8g2) ); #ifdef U8G2_WITH_HVLINE_COUNT printf("hv cnt: %ld\n", u8g2.hv_cnt); #endif /* U8G2_WITH_HVLINE_COUNT */ do { k = u8g_sdl_get_key(); } while( k < 0 ); if ( k == 273 ) y -= 7; if ( k == 274 ) y += 7; if ( k == 276 ) x -= 7; if ( k == 275 ) x += 7; if ( k == 'e' ) y -= 1; if ( k == 'x' ) y += 1; if ( k == 's' ) x -= 1; if ( k == 'd' ) x += 1; if ( k == 'q' ) break; } //u8x8_Set8x8Font(u8g2_GetU8x8(&u8g2), bdf_font); //u8x8_Draw8x8String(u8g2_GetU8x8(&u8g2), 0, 0, "Hello World!"); return 0; }