X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=bigscreen%2Ffonts.cpp;h=bbc4c1a0d4305e5133c7626d8ace838435080439;hb=2b2861e26f123a07b2794d4a66b6e62868b288d1;hp=0381157c687097dfe59642deb976b301b23c42a5;hpb=cad5aff5a3a21bb8c95d8a265e93687234f46a43;p=ccbs diff --git a/bigscreen/fonts.cpp b/bigscreen/fonts.cpp index 0381157..bbc4c1a 100644 --- a/bigscreen/fonts.cpp +++ b/bigscreen/fonts.cpp @@ -60,7 +60,7 @@ void init_freetype() } // this should really be done somehow else :-) -static unsigned screen_width = SCREEN_WIDTH, screen_height = SCREEN_HEIGHT; +static unsigned screen_width, screen_height; void set_screen_size(unsigned width, unsigned height) { screen_width = width; @@ -75,6 +75,7 @@ unsigned my_draw_text(const widestring &str, unsigned char *buf, double size, co int r = atoi(get_theme_config(theme_element, "red").c_str()); int g = atoi(get_theme_config(theme_element, "green").c_str()); int b = atoi(get_theme_config(theme_element, "blue").c_str()); + bool use_lcd = atoi(get_theme_config("screen", "lcd").c_str()); // Find font faces. std::vector fonts; @@ -101,12 +102,13 @@ unsigned my_draw_text(const widestring &str, unsigned char *buf, double size, co if (glyph_index == 0) continue; -#if SCREEN_LCD - if (FT_Load_Glyph(*j, glyph_index, FT_LOAD_RENDER | FT_LOAD_TARGET_LCD)) -#else - if (FT_Load_Glyph(*j, glyph_index, FT_LOAD_RENDER)) -#endif - throw std::runtime_error("Couldn't load glyph"); + if (use_lcd) { + if (FT_Load_Glyph(*j, glyph_index, FT_LOAD_RENDER | FT_LOAD_TARGET_LCD)) + throw std::runtime_error("Couldn't load glyph"); + } else { + if (FT_Load_Glyph(*j, glyph_index, FT_LOAD_RENDER)) + throw std::runtime_error("Couldn't load glyph"); + } slot = (*j)->glyph; break; } @@ -124,38 +126,33 @@ unsigned my_draw_text(const widestring &str, unsigned char *buf, double size, co if (dsty < 0 || dsty > signed(screen_height-1)) continue; unsigned char *dst = buf + dsty * screen_width*4 + (x + xpos + slot->bitmap_left)*4; -#if SCREEN_LCD - unsigned char *src = bm->buffer + y * bm->pitch; - int width = (x + xpos + slot->bitmap_left + bm->width/3 >= signed(screen_width)) ? ((screen_width-1) - x - xpos - slot->bitmap_left) : bm->width/3; -#else unsigned char *src = bm->buffer + y * bm->pitch; - int width = (x + xpos + slot->bitmap_left + bm->width >= signed(screen_width)) ? ((screen_width-1) - x - xpos - slot->bitmap_left) : bm->width; -#endif - -#if SCREEN_LCD - for (xx = 0; xx < width; xx++) { - *dst = (*dst * (256-src[2]) + b * src[2]) >> 8; - ++dst; - *dst = (*dst * (256-src[1]) + g * src[1]) >> 8; - ++dst; - *dst = (*dst * (256-src[0]) + r * src[0]) >> 8; - ++dst; - *dst++ = 0; - - src += 3; - } -#else - for (xx = 0; xx < width; xx++) { - *dst = (*dst * (256-*src) + b * *src) >> 8; - ++dst; - *dst = (*dst * (256-*src) + g * *src) >> 8; - ++dst; - *dst = (*dst * (256-*src) + r * *src) >> 8; - ++dst; - *dst++ = 0; - ++src; + if (use_lcd) { + int width = (x + xpos + slot->bitmap_left + bm->width/3 >= signed(screen_width)) ? ((screen_width-1) - x - xpos - slot->bitmap_left) : bm->width/3; + for (xx = 0; xx < width; xx++) { + *dst = (*dst * (256-src[2]) + b * src[2]) >> 8; + ++dst; + *dst = (*dst * (256-src[1]) + g * src[1]) >> 8; + ++dst; + *dst = (*dst * (256-src[0]) + r * src[0]) >> 8; + ++dst; + *dst++ = 0; + + src += 3; + } + } else { + int width = (x + xpos + slot->bitmap_left + bm->width >= signed(screen_width)) ? ((screen_width-1) - x - xpos - slot->bitmap_left) : bm->width; + for (xx = 0; xx < width; xx++) { + *dst = (*dst * (256-*src) + b * *src) >> 8; + ++dst; + *dst = (*dst * (256-*src) + g * *src) >> 8; + ++dst; + *dst = (*dst * (256-*src) + r * *src) >> 8; + ++dst; + *dst++ = 0; + ++src; + } } -#endif } }