evas: Add scale feature for embedded bitmap fonts. 49/48249/5 accepted/tizen/mobile/20150918.024713 accepted/tizen/tv/20150918.024727 accepted/tizen/wearable/20150918.024738 submit/tizen/20150917.071344
authorYoungbok Shin <youngb.shin@samsung.com>
Mon, 22 Jun 2015 10:45:58 +0000 (19:45 +0900)
committerJaeun Choi <jaeun12.choi@samsung.com>
Thu, 17 Sep 2015 05:24:07 +0000 (22:24 -0700)
Change-Id: If53dbe417dae3e84a23e4e6875df0668382b62f4
Origin: spin

src/lib/evas/common/evas_font_draw.c
src/lib/evas/common/evas_font_load.c
src/lib/evas/common/evas_font_main.c
src/lib/evas/include/evas_common_private.h

index 90b2b4c..ea6d498 100644 (file)
@@ -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);
+                       //
                     }
                }
           }
index 041fe00..66ae31e 100644 (file)
@@ -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)
index 7562d28..ee7dfc4 100644 (file)
@@ -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;
index 1807313..7a64142 100644 (file)
@@ -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;