void u8g2_DrawVLine(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len) { #ifdef U8G2_WITH_INTERSECTION if ( u8g2_IsIntersection(u8g2, x, y, x+1, y+len) == 0 ) return; #endif /* U8G2_WITH_INTERSECTION */ u8g2_DrawHVLine(u8g2, x, y, len, 1); }
/* optimized */ int8_t u8g2_font_decode_glyph(u8g2_t *u8g2, const uint8_t *glyph_data) { uint8_t a, b; int8_t x, y; int8_t d; int8_t h; u8g2_font_decode_t *decode = &(u8g2->font_decode); u8g2_font_setup_decode(u8g2, glyph_data); h = u8g2->font_decode.glyph_height; x = u8g2_font_decode_get_signed_bits(decode, u8g2->font_info.bits_per_char_x); y = u8g2_font_decode_get_signed_bits(decode, u8g2->font_info.bits_per_char_y); d = u8g2_font_decode_get_signed_bits(decode, u8g2->font_info.bits_per_delta_x); if ( decode->glyph_width > 0 ) { #ifdef U8G2_WITH_FONT_ROTATION decode->target_x = u8g2_add_vector_x(decode->target_x, x, -(h+y), decode->dir); decode->target_y = u8g2_add_vector_y(decode->target_y, x, -(h+y), decode->dir); #else decode->target_x += x; decode->target_y -= h+y; #endif //u8g2_add_vector(&(decode->target_x), &(decode->target_y), x, -(h+y), decode->dir); #ifdef U8G2_WITH_INTERSECTION { u8g2_uint_t x0, x1, y0, y1; x0 = decode->target_x; y0 = decode->target_y; x1 = x0; y1 = y0; #ifdef U8G2_WITH_FONT_ROTATION switch(decode->dir) { case 0: x1 += decode->glyph_width; y1 += h; break; case 1: x0 -= h; x0++; /* shift down, because of assymetric boundaries for the interseciton test */ x1++; y1 += decode->glyph_width; break; case 2: x0 -= decode->glyph_width; x0++; /* shift down, because of assymetric boundaries for the interseciton test */ x1++; y0 -= h; y0++; /* shift down, because of assymetric boundaries for the interseciton test */ y1++; break; case 3: x1 += h; y0 -= decode->glyph_width; y0++; /* shift down, because of assymetric boundaries for the interseciton test */ y1++; break; } #else /* U8G2_WITH_FONT_ROTATION */ x1 += decode->glyph_width; y1 += h; #endif if ( u8g2_IsIntersection(u8g2, x0, y0, x1, y1) == 0 ) return d; } #endif /* U8G2_WITH_INTERSECTION */ /* reset local x/y position */ decode->x = 0; decode->y = 0; /* decode glyph */ for(;;) { a = u8g2_font_decode_get_unsigned_bits(decode, u8g2->font_info.bits_per_0); b = u8g2_font_decode_get_unsigned_bits(decode, u8g2->font_info.bits_per_1); do { u8g2_font_decode_len(u8g2, a, 0); u8g2_font_decode_len(u8g2, b, 1); } while( u8g2_font_decode_get_unsigned_bits(decode, 1) != 0 ); if ( decode->y >= h ) break; } /* restore the u8g2 draw color, because this is modified by the decode algo */ u8g2->draw_color = decode->fg_color; } return d; }