From: Youngbok Shin Date: Mon, 22 Jun 2015 10:45:58 +0000 (+0900) Subject: evas: Add scale feature for embedded bitmap fonts. X-Git-Tag: accepted/tizen/mobile/20150918.024713^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F49%2F48249%2F5;p=platform%2Fupstream%2Fefl.git evas: Add scale feature for embedded bitmap fonts. Change-Id: If53dbe417dae3e84a23e4e6875df0668382b62f4 Origin: spin --- diff --git a/src/lib/evas/common/evas_font_draw.c b/src/lib/evas/common/evas_font_draw.c index 90b2b4c..ea6d498 100644 --- a/src/lib/evas/common/evas_font_draw.c +++ b/src/lib/evas/common/evas_font_draw.c @@ -165,22 +165,29 @@ evas_common_font_rgba_draw(RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y, } else if ((fg->ext_dat) && FT_HAS_COLOR(fg->fi->src->ft.face)) { + // TIZEN_ONLY(20150622): Add scale feature for embedded bitmap fonts. + /* if (dc->font_ext.func.gl_image_draw) - { - dc->font_ext.func.gl_image_draw(dc->font_ext.data, - fg->ext_dat, - 0, 0, w, h, - chr_x, y - (chr_y - y), w, h, - EINA_TRUE); - } + dc->font_ext.func.gl_image_draw + (dc->font_ext.data, fg->ext_dat, 0, 0, w, h, + chr_x, y - (chr_y - y), draw_w, draw_h, EINA_TRUE); else - { - _evas_font_image_draw(dc, dst, - fg->ext_dat, - 0, 0, w, h, - chr_x, y - (chr_y - y), w, h, - EINA_TRUE); - } + _evas_font_image_draw + (dc, dst, fg->ext_dat, 0, 0, w, h, + chr_x, y - (chr_y - y), draw_w, draw_h, EINA_TRUE); + */ + int draw_w = w * fg->fi->scale_factor; + int draw_h = h * fg->fi->scale_factor; + + if (dc->font_ext.func.gl_image_draw) + dc->font_ext.func.gl_image_draw + (dc->font_ext.data, fg->ext_dat, 0, 0, w, h, + chr_x, y - (chr_y - y), draw_w, draw_h, EINA_TRUE); + else + _evas_font_image_draw + (dc, dst, fg->ext_dat, 0, 0, w, h, + chr_x, y - (chr_y - y), draw_w, draw_h, EINA_TRUE); + // } } } diff --git a/src/lib/evas/common/evas_font_load.c b/src/lib/evas/common/evas_font_load.c index 041fe00..66ae31e 100644 --- a/src/lib/evas/common/evas_font_load.c +++ b/src/lib/evas/common/evas_font_load.c @@ -437,6 +437,9 @@ evas_common_font_int_load_complete(RGBA_Font_Int *fi) FT_Activate_Size(fi->ft.size); } fi->real_size = fi->size * 64; + // TIZEN_ONLY(20150622): Add scale feature for embedded bitmap fonts. + fi->scale_factor = 1.0; + // error = FT_Set_Char_Size(fi->src->ft.face, 0, fi->real_size, font_dpi, font_dpi); if (error) error = FT_Set_Pixel_Sizes(fi->src->ft.face, 0, fi->real_size); @@ -468,9 +471,18 @@ evas_common_font_int_load_complete(RGBA_Font_Int *fi) FTLOCK(); if (FT_HAS_FIXED_SIZES(fi->src->ft.face)) - error = FT_Select_Size(fi->src->ft.face, strike_index); + { + error = FT_Select_Size(fi->src->ft.face, strike_index); + + // TIZEN_ONLY(20150622): Add scale feature for embedded bitmap fonts. + if (!error) + fi->scale_factor = (float)fi->size * 64.0 / (float)fi->real_size; + // + } else - error = FT_Set_Pixel_Sizes(fi->src->ft.face, 0, fi->real_size); + { + error = FT_Set_Pixel_Sizes(fi->src->ft.face, 0, fi->real_size); + } FTUNLOCK(); if (error) diff --git a/src/lib/evas/common/evas_font_main.c b/src/lib/evas/common/evas_font_main.c index 7562d28..ee7dfc4 100644 --- a/src/lib/evas/common/evas_font_main.c +++ b/src/lib/evas/common/evas_font_main.c @@ -106,6 +106,12 @@ evas_common_font_instance_ascent_get(RGBA_Font_Int *fi) WRN("NOT SCALABLE!"); } val = (int)fi->src->ft.face->size->metrics.ascender; + + // TIZEN_ONLY(20150622): Add scale feature for embedded bitmap fonts. + if (FT_HAS_FIXED_SIZES(fi->src->ft.face)) + val *= fi->scale_factor; + // + return FONT_METRIC_ROUNDUP(val); // printf("%i | %i\n", val, val >> 6); // if (fi->src->ft.face->units_per_EM == 0) @@ -128,6 +134,12 @@ evas_common_font_instance_descent_get(RGBA_Font_Int *fi) fi->src->current_size = fi->size; } val = -(int)fi->src->ft.face->size->metrics.descender; + + // TIZEN_ONLY(20150622): Add scale feature for embedded bitmap fonts. + if (FT_HAS_FIXED_SIZES(fi->src->ft.face)) + val *= fi->scale_factor; + // + return FONT_METRIC_ROUNDUP(val); // if (fi->src->ft.face->units_per_EM == 0) // return val; @@ -156,6 +168,12 @@ evas_common_font_instance_max_ascent_get(RGBA_Font_Int *fi) val = FONT_METRIC_ROUNDUP((int)fi->src->ft.face->size->metrics.ascender); else val = (int)fi->src->ft.face->bbox.yMax; + + // TIZEN_ONLY(20150622): Add scale feature for embedded bitmap fonts. + if (FT_HAS_FIXED_SIZES(fi->src->ft.face)) + val *= fi->scale_factor; + // + if (fi->src->ft.face->units_per_EM == 0) return val; dv = (fi->src->ft.orig_upem * 2048) / fi->src->ft.face->units_per_EM; @@ -183,6 +201,12 @@ evas_common_font_instance_max_descent_get(RGBA_Font_Int *fi) val = FONT_METRIC_ROUNDUP(-(int)fi->src->ft.face->size->metrics.descender); else val = -(int)fi->src->ft.face->bbox.yMin; + + // TIZEN_ONLY(20150622): Add scale feature for embedded bitmap fonts. + if (FT_HAS_FIXED_SIZES(fi->src->ft.face)) + val *= fi->scale_factor; + // + if (fi->src->ft.face->units_per_EM == 0) return val; dv = (fi->src->ft.orig_upem * 2048) / fi->src->ft.face->units_per_EM; @@ -235,6 +259,12 @@ evas_common_font_get_line_advance(RGBA_Font *fn) fi->src->current_size = fi->size; } val = (int)fi->src->ft.face->size->metrics.height; + + // TIZEN_ONLY(20150622): Add scale feature for embedded bitmap fonts. + if (FT_HAS_FIXED_SIZES(fi->src->ft.face)) + val *= fi->scale_factor; + // + if ((fi->src->ft.face->bbox.yMax == 0) && (fi->src->ft.face->bbox.yMin == 0) && (fi->src->ft.face->units_per_EM == 0)) @@ -549,6 +579,17 @@ evas_common_font_int_cache_glyph_get(RGBA_Font_Int *fi, FT_UInt idx) fg->width = EVAS_FONT_ROUND_26_6_TO_INT(outbox.xMax - outbox.xMin); fg->x_bear = EVAS_FONT_ROUND_26_6_TO_INT(outbox.xMin); fg->y_bear = EVAS_FONT_ROUND_26_6_TO_INT(outbox.yMax); + + // TIZEN_ONLY(20150622): Add scale feature for embedded bitmap fonts. + if (FT_HAS_FIXED_SIZES(fi->src->ft.face)) + { + fg->glyph->advance.x *= fi->scale_factor; + fg->glyph->advance.y *= fi->scale_factor; + fg->width *= fi->scale_factor; + fg->x_bear *= fi->scale_factor; + fg->y_bear *= fi->scale_factor; + } + // } fg->index = idx; diff --git a/src/lib/evas/include/evas_common_private.h b/src/lib/evas/include/evas_common_private.h index 1807313..7a64142 100644 --- a/src/lib/evas/include/evas_common_private.h +++ b/src/lib/evas/include/evas_common_private.h @@ -944,6 +944,9 @@ struct _RGBA_Font_Int Eina_Hash *kerning; Fash_Glyph *fash; unsigned int size; + // TIZEN_ONLY(20150622): Add scale feature for embedded bitmap fonts. + float scale_factor; + // int real_size; int max_h; int references;