diff --git a/lib/font_renderer/font_renderer.cpp b/lib/font_renderer/font_renderer.cpp index d0107711..4d236269 100644 --- a/lib/font_renderer/font_renderer.cpp +++ b/lib/font_renderer/font_renderer.cpp @@ -208,6 +208,9 @@ int FontRendererBakeFontBitmap(FontRenderer *font_renderer, int font_height, glyph_info.yoff = -pad_y; glyph_info.xadvance = (x_next - x) / subpixel_scale; +#ifdef FONT_RENDERER_DEBUG + glyph_info.ybaseline = pixels_height - 1 - y_baseline; +#endif if (glyph_info.x1 > glyph_info.x0) { glyph_lut_convolution(ren_buf, lcd_lut, cover_swap_buffer, glyph_info); } diff --git a/lib/font_renderer/font_renderer.h b/lib/font_renderer/font_renderer.h index 0d03bad9..c0c1fa43 100644 --- a/lib/font_renderer/font_renderer.h +++ b/lib/font_renderer/font_renderer.h @@ -11,6 +11,9 @@ extern "C" { typedef struct { unsigned short x0, y0, x1, y1; float xoff, yoff, xadvance; +#ifdef FONT_RENDERER_DEBUG + int ybaseline; +#endif } GlyphBitmapInfo; struct FontRendererImpl; diff --git a/src/renderer.c b/src/renderer.c index 58ea0156..6abb1597 100644 --- a/src/renderer.c +++ b/src/renderer.c @@ -152,6 +152,22 @@ void debug_bitmap_draw_rect(RenImage *image, GlyphBitmapInfo *glyph) { c[y * w].g = c[y * w].g >> 1; c[y * w].b = c[y * w].b >> 1; } + c = image->pixels + glyph->ybaseline * w; + for (int x = x0 * subpixel; x < x1 * subpixel; x++) { + c[x].g = c[x].g >> 1; + c[x].r = c[x].r >> 1; + } + const int x_or = x0 - glyph->xoff, y_or = y0 - glyph->yoff; + c = image->pixels + y_or * w; + for (int x = x_or * subpixel; x < x1 * subpixel; x++) { + c[x].b = c[x].b >> 1; + c[x].r = c[x].r >> 1; + } + c = image->pixels + x_or * subpixel; + for (int y = y_or; y < y1; y++) { + c[y * w].b = c[y * w].b >> 1; + c[y * w].r = c[y * w].r >> 1; + } } #endif