forked from enlightenment/efl
evas: Add scale feature for embedded bitmap fonts.
Summary: When evas selects a strike of embedded bitmap font, calculate ratio and use it for scaling embedded bitmap. @feature Reviewers: jpeg, tasn, woohyun, raster, herdsman Reviewed By: raster Subscribers: charlesmilette, Francesco149, cedric Differential Revision: https://phab.enlightenment.org/D2713
This commit is contained in:
parent
bb887f9869
commit
1750410650
|
@ -37,6 +37,18 @@ enum Efl.Text.Font.Slant {
|
|||
italic, [[Italic font slant]]
|
||||
}
|
||||
|
||||
/* FIXME: It needs to support "normal" option for non-color bitmap font.
|
||||
For supporting "normal" option, S/W glyph drawing engine should be updated.
|
||||
*/
|
||||
enum Efl.Text.Font.Bitmap_Scalable {
|
||||
[[Scalable of bitmap fonts
|
||||
|
||||
@since 1.21
|
||||
]]
|
||||
none = 0, [[Disable scalable feature for bitmap fonts.]]
|
||||
color = (1 << 0), [[Enable scalable feature for color bitmap fonts.]]
|
||||
}
|
||||
|
||||
interface Efl.Text.Font {
|
||||
[[Font settings of the text
|
||||
|
||||
|
@ -114,5 +126,17 @@ interface Efl.Text.Font {
|
|||
lang: string; [[Language]]
|
||||
}
|
||||
}
|
||||
|
||||
@property font_bitmap_scalable {
|
||||
[[The bitmap fonts have fixed size glyphs for several available sizes.
|
||||
Basically, it is not scalable. But, it needs to be scalable for some use cases.
|
||||
(ex. colorful emoji fonts)
|
||||
|
||||
Default is $Efl.Text.Font.Bitmap_Scalable.none\.
|
||||
]]
|
||||
values {
|
||||
scalable: Efl.Text.Font.Bitmap_Scalable; [[Scalable]]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -282,6 +282,7 @@ Efl.Text.Font, Efl.Text.Style, Efl.Text.Format, Efl.Text.Cursor, Efl.Text.Annota
|
|||
Efl.Text.Font.font_weight { get; set; }
|
||||
Efl.Text.Font.font_slant { get; set; }
|
||||
Efl.Text.Font.font_width { get; set; }
|
||||
Efl.Text.Font.font_bitmap_scalable { get; set; }
|
||||
Efl.Text.Style.normal_color { get; set; }
|
||||
Efl.Text.Style.backing_type { get; set; }
|
||||
Efl.Text.Style.backing_color { get; set; }
|
||||
|
|
|
@ -32,6 +32,7 @@ struct _Fndat
|
|||
Evas_Font_Set *font;
|
||||
int ref;
|
||||
Font_Rend_Flags wanted_rend;
|
||||
Efl_Text_Font_Bitmap_Scalable bitmap_scalable;
|
||||
|
||||
#ifdef HAVE_FONTCONFIG
|
||||
FcFontSet *set;
|
||||
|
@ -235,7 +236,7 @@ evas_font_free(Evas *eo_evas, void *font)
|
|||
#ifdef HAVE_FONTCONFIG
|
||||
static Evas_Font_Set *
|
||||
_evas_load_fontconfig(Evas_Font_Set *font, Evas *eo_evas, FcFontSet *set, int size,
|
||||
Font_Rend_Flags wanted_rend)
|
||||
Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable)
|
||||
{
|
||||
Evas_Public_Data *evas = efl_data_scope_get(eo_evas, EVAS_CANVAS_CLASS);
|
||||
int i;
|
||||
|
@ -248,9 +249,9 @@ _evas_load_fontconfig(Evas_Font_Set *font, Evas *eo_evas, FcFontSet *set, int si
|
|||
FcPatternGet(set->fonts[i], FC_FILE, 0, &filename);
|
||||
|
||||
if (font)
|
||||
evas->engine.func->font_add(_evas_engine_context(evas), font, (char *)filename.u.s, size, wanted_rend);
|
||||
evas->engine.func->font_add(_evas_engine_context(evas), font, (char *)filename.u.s, size, wanted_rend, bitmap_scalable);
|
||||
else
|
||||
font = evas->engine.func->font_load(_evas_engine_context(evas), (char *)filename.u.s, size, wanted_rend);
|
||||
font = evas->engine.func->font_load(_evas_engine_context(evas), (char *)filename.u.s, size, wanted_rend, bitmap_scalable);
|
||||
}
|
||||
|
||||
return font;
|
||||
|
@ -550,7 +551,7 @@ evas_font_name_parse(Evas_Font_Description *fdesc, const char *name)
|
|||
}
|
||||
|
||||
void *
|
||||
evas_font_load(Evas *eo_evas, Evas_Font_Description *fdesc, const char *source, Evas_Font_Size size)
|
||||
evas_font_load(Evas *eo_evas, Evas_Font_Description *fdesc, const char *source, Evas_Font_Size size, Efl_Text_Font_Bitmap_Scalable bitmap_scalable)
|
||||
{
|
||||
Evas_Public_Data *evas = efl_data_scope_get(eo_evas, EVAS_CANVAS_CLASS);
|
||||
#ifdef HAVE_FONTCONFIG
|
||||
|
@ -585,8 +586,9 @@ evas_font_load(Evas *eo_evas, Evas_Font_Description *fdesc, const char *source,
|
|||
if (((!source) && (!fd->source)) ||
|
||||
((source) && (fd->source) && (!strcmp(source, fd->source))))
|
||||
{
|
||||
if ((size == fd->size) &&
|
||||
(wanted_rend == fd->wanted_rend))
|
||||
if ((size == fd->size) &&
|
||||
(wanted_rend == fd->wanted_rend) &&
|
||||
(bitmap_scalable == fd->bitmap_scalable))
|
||||
{
|
||||
fonts_cache = eina_list_promote_list(fonts_cache, l);
|
||||
fd->ref++;
|
||||
|
@ -605,7 +607,7 @@ evas_font_load(Evas *eo_evas, Evas_Font_Description *fdesc, const char *source,
|
|||
#ifdef HAVE_FONTCONFIG
|
||||
if (found_fd)
|
||||
{
|
||||
font = _evas_load_fontconfig(font, evas->evas, found_fd->set, size, wanted_rend);
|
||||
font = _evas_load_fontconfig(font, evas->evas, found_fd->set, size, wanted_rend, bitmap_scalable);
|
||||
goto on_find;
|
||||
}
|
||||
#endif
|
||||
|
@ -638,7 +640,7 @@ evas_font_load(Evas *eo_evas, Evas_Font_Description *fdesc, const char *source,
|
|||
#ifdef HAVE_FONTCONFIG
|
||||
if (found_fd)
|
||||
{
|
||||
font = _evas_load_fontconfig(font, evas->evas, found_fd->set, size, wanted_rend);
|
||||
font = _evas_load_fontconfig(font, evas->evas, found_fd->set, size, wanted_rend, bitmap_scalable);
|
||||
goto on_find;
|
||||
}
|
||||
#endif
|
||||
|
@ -656,7 +658,7 @@ evas_font_load(Evas *eo_evas, Evas_Font_Description *fdesc, const char *source,
|
|||
fake_name = evas_file_path_join(source, nm);
|
||||
if (fake_name)
|
||||
{
|
||||
font = evas->engine.func->font_load(_evas_engine_context(evas), fake_name, size, wanted_rend);
|
||||
font = evas->engine.func->font_load(_evas_engine_context(evas), fake_name, size, wanted_rend, bitmap_scalable);
|
||||
if (!font) /* Load from fake name failed, probably not cached */
|
||||
{
|
||||
/* read original!!! */
|
||||
|
@ -669,7 +671,7 @@ evas_font_load(Evas *eo_evas, Evas_Font_Description *fdesc, const char *source,
|
|||
fdata = eet_read(ef, nm, &fsize);
|
||||
if (fdata)
|
||||
{
|
||||
font = evas->engine.func->font_memory_load(_evas_engine_context(evas), source, nm, size, fdata, fsize, wanted_rend);
|
||||
font = evas->engine.func->font_memory_load(_evas_engine_context(evas), source, nm, size, fdata, fsize, wanted_rend, bitmap_scalable);
|
||||
free(fdata);
|
||||
}
|
||||
eet_close(ef);
|
||||
|
@ -681,7 +683,7 @@ evas_font_load(Evas *eo_evas, Evas_Font_Description *fdesc, const char *source,
|
|||
if (!font) /* Source load failed */
|
||||
{
|
||||
if (evas_file_path_is_full_path((char *)nm)) /* Try filename */
|
||||
font = evas->engine.func->font_load(_evas_engine_context(evas), (char *)nm, size, wanted_rend);
|
||||
font = evas->engine.func->font_load(_evas_engine_context(evas), (char *)nm, size, wanted_rend, bitmap_scalable);
|
||||
else /* search font path */
|
||||
{
|
||||
Eina_List *ll;
|
||||
|
@ -694,7 +696,7 @@ evas_font_load(Evas *eo_evas, Evas_Font_Description *fdesc, const char *source,
|
|||
f_file = evas_font_dir_cache_find(dir, (char *)nm);
|
||||
if (f_file)
|
||||
{
|
||||
font = evas->engine.func->font_load(_evas_engine_context(evas), f_file, size, wanted_rend);
|
||||
font = evas->engine.func->font_load(_evas_engine_context(evas), f_file, size, wanted_rend, bitmap_scalable);
|
||||
if (font) break;
|
||||
}
|
||||
}
|
||||
|
@ -708,7 +710,7 @@ evas_font_load(Evas *eo_evas, Evas_Font_Description *fdesc, const char *source,
|
|||
f_file = evas_font_dir_cache_find(dir, (char *)nm);
|
||||
if (f_file)
|
||||
{
|
||||
font = evas->engine.func->font_load(_evas_engine_context(evas), f_file, size, wanted_rend);
|
||||
font = evas->engine.func->font_load(_evas_engine_context(evas), f_file, size, wanted_rend, bitmap_scalable);
|
||||
if (font) break;
|
||||
}
|
||||
}
|
||||
|
@ -729,7 +731,7 @@ evas_font_load(Evas *eo_evas, Evas_Font_Description *fdesc, const char *source,
|
|||
if (fake_name)
|
||||
{
|
||||
/* FIXME: make an engine func */
|
||||
if (!evas->engine.func->font_add(_evas_engine_context(evas), font, fake_name, size, wanted_rend))
|
||||
if (!evas->engine.func->font_add(_evas_engine_context(evas), font, fake_name, size, wanted_rend, bitmap_scalable))
|
||||
{
|
||||
/* read original!!! */
|
||||
ef = eet_open(source, EET_FILE_MODE_READ);
|
||||
|
@ -741,7 +743,7 @@ evas_font_load(Evas *eo_evas, Evas_Font_Description *fdesc, const char *source,
|
|||
fdata = eet_read(ef, nm, &fsize);
|
||||
if ((fdata) && (fsize > 0))
|
||||
{
|
||||
ok = evas->engine.func->font_memory_add(_evas_engine_context(evas), font, source, nm, size, fdata, fsize, wanted_rend);
|
||||
ok = evas->engine.func->font_memory_add(_evas_engine_context(evas), font, source, nm, size, fdata, fsize, wanted_rend, bitmap_scalable);
|
||||
}
|
||||
eet_close(ef);
|
||||
free(fdata);
|
||||
|
@ -755,7 +757,7 @@ evas_font_load(Evas *eo_evas, Evas_Font_Description *fdesc, const char *source,
|
|||
if (!ok)
|
||||
{
|
||||
if (evas_file_path_is_full_path((char *)nm))
|
||||
evas->engine.func->font_add(_evas_engine_context(evas), font, (char *)nm, size, wanted_rend);
|
||||
evas->engine.func->font_add(_evas_engine_context(evas), font, (char *)nm, size, wanted_rend, bitmap_scalable);
|
||||
else
|
||||
{
|
||||
Eina_List *ll;
|
||||
|
@ -769,7 +771,7 @@ evas_font_load(Evas *eo_evas, Evas_Font_Description *fdesc, const char *source,
|
|||
f_file = evas_font_dir_cache_find(dir, (char *)nm);
|
||||
if (f_file)
|
||||
{
|
||||
fn = (RGBA_Font *)evas->engine.func->font_add(_evas_engine_context(evas), font, f_file, size, wanted_rend);
|
||||
fn = (RGBA_Font *)evas->engine.func->font_add(_evas_engine_context(evas), font, f_file, size, wanted_rend, bitmap_scalable);
|
||||
if (fn)
|
||||
break;
|
||||
}
|
||||
|
@ -784,7 +786,7 @@ evas_font_load(Evas *eo_evas, Evas_Font_Description *fdesc, const char *source,
|
|||
f_file = evas_font_dir_cache_find(dir, (char *)nm);
|
||||
if (f_file)
|
||||
{
|
||||
fn = (RGBA_Font *)evas->engine.func->font_add(_evas_engine_context(evas), font, f_file, size, wanted_rend);
|
||||
fn = (RGBA_Font *)evas->engine.func->font_add(_evas_engine_context(evas), font, f_file, size, wanted_rend, bitmap_scalable);
|
||||
if (fn)
|
||||
break;
|
||||
}
|
||||
|
@ -854,7 +856,7 @@ evas_font_load(Evas *eo_evas, Evas_Font_Description *fdesc, const char *source,
|
|||
}
|
||||
else
|
||||
{
|
||||
font = _evas_load_fontconfig(font, evas->evas, set, size, wanted_rend);
|
||||
font = _evas_load_fontconfig(font, evas->evas, set, size, wanted_rend, bitmap_scalable);
|
||||
}
|
||||
}
|
||||
else /* Add a fallback list from fontconfig according to the found font. */
|
||||
|
@ -881,7 +883,7 @@ evas_font_load(Evas *eo_evas, Evas_Font_Description *fdesc, const char *source,
|
|||
}
|
||||
else
|
||||
{
|
||||
font = _evas_load_fontconfig(font, evas->evas, set, size, wanted_rend);
|
||||
font = _evas_load_fontconfig(font, evas->evas, set, size, wanted_rend, bitmap_scalable);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
@ -899,6 +901,7 @@ evas_font_load(Evas *eo_evas, Evas_Font_Description *fdesc, const char *source,
|
|||
fd->font = font;
|
||||
fd->wanted_rend = wanted_rend;
|
||||
fd->size = size;
|
||||
fd->bitmap_scalable = bitmap_scalable;
|
||||
fd->ref = 1;
|
||||
fonts_cache = eina_list_prepend(fonts_cache, fd);
|
||||
#ifdef HAVE_FONTCONFIG
|
||||
|
|
|
@ -48,6 +48,7 @@ struct _Evas_Text_Data
|
|||
|
||||
Evas_Font_Size size;
|
||||
Evas_Text_Style_Type style;
|
||||
Efl_Text_Font_Bitmap_Scalable bitmap_scalable;
|
||||
} cur, prev;
|
||||
|
||||
struct {
|
||||
|
@ -417,15 +418,59 @@ _evas_text_efl_text_properties_font_source_get(Eo *eo_obj EINA_UNUSED, Evas_Text
|
|||
return o->cur.source;
|
||||
}
|
||||
|
||||
EOLIAN static void
|
||||
_evas_text_efl_text_properties_font_set(Eo *eo_obj, Evas_Text_Data *o, const char *font, Evas_Font_Size size)
|
||||
static void
|
||||
_evas_text_font_reload(Eo *eo_obj, Evas_Text_Data *o)
|
||||
{
|
||||
Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
|
||||
Eina_Bool pass = EINA_FALSE, freeze = EINA_FALSE;
|
||||
Eina_Bool source_invisible = EINA_FALSE;
|
||||
Evas_Font_Description *fdesc;
|
||||
Eina_List *was = NULL;
|
||||
|
||||
if (!(obj->layer->evas->is_frozen))
|
||||
{
|
||||
pass = evas_event_passes_through(eo_obj, obj);
|
||||
freeze = evas_event_freezes_through(eo_obj, obj);
|
||||
source_invisible = evas_object_is_source_invisible(eo_obj, obj);
|
||||
if ((!pass) && (!freeze) && (!source_invisible))
|
||||
was = _evas_pointer_list_in_rect_get(obj->layer->evas, eo_obj, obj,
|
||||
1, 1);
|
||||
}
|
||||
|
||||
/* DO IT */
|
||||
if (o->font)
|
||||
{
|
||||
evas_font_free(obj->layer->evas->evas, o->font);
|
||||
o->font = NULL;
|
||||
}
|
||||
|
||||
o->font = evas_font_load(obj->layer->evas->evas, o->cur.fdesc, o->cur.source,
|
||||
(int)(((double) o->cur.size) * obj->cur->scale), o->cur.bitmap_scalable);
|
||||
{
|
||||
o->ascent = 0;
|
||||
o->descent = 0;
|
||||
o->max_ascent = 0;
|
||||
o->max_descent = 0;
|
||||
}
|
||||
_evas_object_text_items_clear(o);
|
||||
_evas_object_text_recalc(eo_obj, o->cur.text);
|
||||
o->changed = 1;
|
||||
if (o->has_filter)
|
||||
evas_filter_changed_set(eo_obj, EINA_TRUE);
|
||||
evas_object_change(eo_obj, obj);
|
||||
evas_object_clip_dirty(eo_obj, obj);
|
||||
evas_object_coords_recalc(eo_obj, obj);
|
||||
if (!obj->layer->evas->is_frozen && !pass && !freeze && obj->cur->visible)
|
||||
_evas_canvas_event_pointer_in_list_mouse_move_feed(obj->layer->evas, was, eo_obj, obj, 1, 1, EINA_TRUE, NULL);
|
||||
eina_list_free(was);
|
||||
evas_object_inform_call_resize(eo_obj);
|
||||
}
|
||||
|
||||
EOLIAN static void
|
||||
_evas_text_efl_text_properties_font_set(Eo *eo_obj, Evas_Text_Data *o, const char *font, Evas_Font_Size size)
|
||||
{
|
||||
Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
|
||||
Evas_Font_Description *fdesc;
|
||||
|
||||
if ((!font) || (size <= 0)) return;
|
||||
|
||||
evas_object_async_block(obj);
|
||||
|
@ -455,43 +500,7 @@ _evas_text_efl_text_properties_font_set(Eo *eo_obj, Evas_Text_Data *o, const cha
|
|||
eina_stringshare_replace(&o->cur.font, font);
|
||||
o->prev.font = NULL;
|
||||
|
||||
if (!(obj->layer->evas->is_frozen))
|
||||
{
|
||||
pass = evas_event_passes_through(eo_obj, obj);
|
||||
freeze = evas_event_freezes_through(eo_obj, obj);
|
||||
source_invisible = evas_object_is_source_invisible(eo_obj, obj);
|
||||
if ((!pass) && (!freeze) && (!source_invisible))
|
||||
was = _evas_pointer_list_in_rect_get(obj->layer->evas, eo_obj, obj,
|
||||
1, 1);
|
||||
}
|
||||
|
||||
/* DO IT */
|
||||
if (o->font)
|
||||
{
|
||||
evas_font_free(obj->layer->evas->evas, o->font);
|
||||
o->font = NULL;
|
||||
}
|
||||
|
||||
o->font = evas_font_load(obj->layer->evas->evas, o->cur.fdesc, o->cur.source,
|
||||
(int)(((double) o->cur.size) * obj->cur->scale));
|
||||
{
|
||||
o->ascent = 0;
|
||||
o->descent = 0;
|
||||
o->max_ascent = 0;
|
||||
o->max_descent = 0;
|
||||
}
|
||||
_evas_object_text_items_clear(o);
|
||||
_evas_object_text_recalc(eo_obj, o->cur.text);
|
||||
o->changed = 1;
|
||||
if (o->has_filter)
|
||||
evas_filter_changed_set(eo_obj, EINA_TRUE);
|
||||
evas_object_change(eo_obj, obj);
|
||||
evas_object_clip_dirty(eo_obj, obj);
|
||||
evas_object_coords_recalc(eo_obj, obj);
|
||||
if (!obj->layer->evas->is_frozen && !pass && !freeze && obj->cur->visible)
|
||||
_evas_canvas_event_pointer_in_list_mouse_move_feed(obj->layer->evas, was, eo_obj, obj, 1, 1, EINA_TRUE, NULL);
|
||||
eina_list_free(was);
|
||||
evas_object_inform_call_resize(eo_obj);
|
||||
_evas_text_font_reload(eo_obj, o);
|
||||
}
|
||||
|
||||
EOLIAN static void
|
||||
|
@ -1618,6 +1627,7 @@ evas_object_text_init(Evas_Object *eo_obj)
|
|||
Evas_Text_Data *o = obj->private_data;
|
||||
/* alloc obj private data */
|
||||
o->prev.ellipsis = o->cur.ellipsis = -1.0;
|
||||
o->prev.bitmap_scalable = o->cur.bitmap_scalable = EFL_TEXT_FONT_BITMAP_SCALABLE_COLOR;
|
||||
o->prev = o->cur;
|
||||
#ifdef BIDI_SUPPORT
|
||||
o->bidi_par_props = evas_bidi_paragraph_props_new();
|
||||
|
@ -2442,6 +2452,21 @@ _evas_text_efl_canvas_object_paragraph_direction_get(Eo *eo_obj EINA_UNUSED,
|
|||
return o->paragraph_direction;
|
||||
}
|
||||
|
||||
EOLIAN static void
|
||||
_evas_text_efl_text_font_font_bitmap_scalable_set(Eo *eo_obj, Evas_Text_Data *o, Efl_Text_Font_Bitmap_Scalable bitmap_scalable)
|
||||
{
|
||||
if (o->cur.bitmap_scalable == bitmap_scalable) return;
|
||||
o->prev.bitmap_scalable = o->cur.bitmap_scalable;
|
||||
o->cur.bitmap_scalable = bitmap_scalable;
|
||||
_evas_text_font_reload(eo_obj, o);
|
||||
}
|
||||
|
||||
EOLIAN static Efl_Text_Font_Bitmap_Scalable
|
||||
_evas_text_efl_text_font_font_bitmap_scalable_get(Eo *eo_obj EINA_UNUSED, Evas_Text_Data *o)
|
||||
{
|
||||
return o->cur.bitmap_scalable;
|
||||
}
|
||||
|
||||
#define EVAS_TEXT_EXTRA_OPS \
|
||||
EFL_OBJECT_OP_FUNC(efl_dbg_info_get, _evas_text_efl_object_dbg_info_get)
|
||||
|
||||
|
|
|
@ -512,6 +512,7 @@ struct _Evas_Object_Textblock_Format
|
|||
const char *source; /**< Pointer to object from which to search for the font. */
|
||||
Evas_Font_Set *font; /**< Pointer to font set. */
|
||||
Evas_Font_Size size; /**< Size of the font. */
|
||||
Efl_Text_Font_Bitmap_Scalable bitmap_scalable; /**< Scalable for bitmap font. */
|
||||
} font;
|
||||
struct {
|
||||
struct {
|
||||
|
@ -629,6 +630,7 @@ struct _Evas_Object_Textblock
|
|||
Efl_Text_Style_Effect_Type effect;
|
||||
Efl_Text_Style_Shadow_Direction shadow_direction;
|
||||
Efl_Text_Format_Wrap wrap;
|
||||
Efl_Text_Font_Bitmap_Scalable bitmap_scalable;
|
||||
} info;
|
||||
} default_format;
|
||||
double valign;
|
||||
|
@ -2826,7 +2828,7 @@ _format_dup(Evas_Object *eo_obj, const Evas_Object_Textblock_Format *fmt)
|
|||
|
||||
/* FIXME: just ref the font here... */
|
||||
fmt2->font.font = evas_font_load(obj->layer->evas->evas, fmt2->font.fdesc,
|
||||
fmt2->font.source, (int)(((double) fmt2->font.size) * obj->cur->scale));
|
||||
fmt2->font.source, (int)(((double) fmt2->font.size) * obj->cur->scale), fmt2->font.bitmap_scalable);
|
||||
|
||||
if (fmt->gfx_filter)
|
||||
{
|
||||
|
@ -3365,6 +3367,7 @@ _layout_format_push(Ctxt *c, Evas_Object_Textblock_Format *fmt,
|
|||
c->format_stack = eina_list_prepend(c->format_stack, fmt);
|
||||
*fmt = c->o->default_format.format;
|
||||
fmt->ref = 1;
|
||||
fmt->font.bitmap_scalable = _FMT_INFO(bitmap_scalable);
|
||||
|
||||
// Apply font if specified
|
||||
if (_FMT_INFO(font))
|
||||
|
@ -3389,7 +3392,7 @@ _layout_format_push(Ctxt *c, Evas_Object_Textblock_Format *fmt,
|
|||
fmt->font.fdesc->width = _FMT_INFO(font_width);
|
||||
fmt->font.fdesc->lang = _FMT_INFO(font_lang);
|
||||
fmt->font.font = evas_font_load(evas_obj->layer->evas->evas, fmt->font.fdesc,
|
||||
fmt->font.source, (int)(((double) _FMT_INFO(size)) * evas_obj->cur->scale));
|
||||
fmt->font.source, (int)(((double) _FMT_INFO(size)) * evas_obj->cur->scale), fmt->font.bitmap_scalable);
|
||||
}
|
||||
if (_FMT_INFO(gfx_filter_name))
|
||||
{
|
||||
|
@ -4490,7 +4493,7 @@ _format_finalize(Evas_Object *eo_obj, Evas_Object_Textblock_Format *fmt)
|
|||
of = fmt->font.font;
|
||||
|
||||
fmt->font.font = evas_font_load(obj->layer->evas->evas, fmt->font.fdesc,
|
||||
fmt->font.source, (int)(((double) fmt->font.size) * obj->cur->scale));
|
||||
fmt->font.source, (int)(((double) fmt->font.size) * obj->cur->scale), fmt->font.bitmap_scalable);
|
||||
if (of) evas_font_free(obj->layer->evas->evas, of);
|
||||
}
|
||||
|
||||
|
@ -6760,6 +6763,7 @@ _efl_canvas_text_efl_object_constructor(Eo *eo_obj, Efl_Canvas_Text_Data *class_
|
|||
_FMT(linerelgap) = 0.0;
|
||||
_FMT(password) = 1;
|
||||
_FMT(ellipsis) = -1;
|
||||
_FMT_INFO(bitmap_scalable) = EFL_TEXT_FONT_BITMAP_SCALABLE_COLOR;
|
||||
|
||||
return eo_obj;
|
||||
}
|
||||
|
@ -15159,6 +15163,20 @@ _efl_canvas_text_efl_text_font_font_width_get(Eo *obj EINA_UNUSED, Efl_Canvas_Te
|
|||
return _FMT_INFO(font_width);
|
||||
}
|
||||
|
||||
EOLIAN static void
|
||||
_efl_canvas_text_efl_text_font_font_bitmap_scalable_set(Eo *obj, Efl_Canvas_Text_Data *o, Efl_Text_Font_Bitmap_Scalable bitmap_scalable)
|
||||
{
|
||||
if (_FMT_INFO(bitmap_scalable) == bitmap_scalable) return;
|
||||
_FMT_INFO(bitmap_scalable) = bitmap_scalable;
|
||||
_canvas_text_format_changed(obj, o);
|
||||
}
|
||||
|
||||
EOLIAN static Efl_Text_Font_Bitmap_Scalable
|
||||
_efl_canvas_text_efl_text_font_font_bitmap_scalable_get(Eo *obj EINA_UNUSED, Efl_Canvas_Text_Data *o)
|
||||
{
|
||||
return _FMT_INFO(bitmap_scalable);
|
||||
}
|
||||
|
||||
/* Efl.Text.Style interface implementation */
|
||||
|
||||
/* Helper: sets color fields of style 'x' and informs if any are changed. */
|
||||
|
|
|
@ -36,6 +36,7 @@ struct _Evas_Textgrid_Data
|
|||
|
||||
Eina_Array palette_standard;
|
||||
Eina_Array palette_extended;
|
||||
Efl_Text_Font_Bitmap_Scalable bitmap_scalable;
|
||||
} cur, prev;
|
||||
|
||||
int ascent;
|
||||
|
@ -156,6 +157,7 @@ evas_object_textgrid_init(Evas_Object *eo_obj)
|
|||
|
||||
Evas_Textgrid_Data *o = obj->private_data;
|
||||
o->magic = MAGIC_OBJ_TEXTGRID;
|
||||
o->prev.bitmap_scalable = o->cur.bitmap_scalable = EFL_TEXT_FONT_BITMAP_SCALABLE_COLOR;
|
||||
o->prev = o->cur;
|
||||
eina_array_step_set(&o->cur.palette_standard, sizeof (Eina_Array), 16);
|
||||
eina_array_step_set(&o->cur.palette_extended, sizeof (Eina_Array), 16);
|
||||
|
@ -1005,7 +1007,8 @@ _alternate_font_weight_slant(Evas_Object_Protected_Data *obj,
|
|||
fdesc,
|
||||
o->cur.font_source,
|
||||
(int)(((double) o->cur.font_size) *
|
||||
obj->cur->scale));
|
||||
obj->cur->scale),
|
||||
o->cur.bitmap_scalable);
|
||||
if (font)
|
||||
{
|
||||
Eina_Unicode W[2] = { 'O', 0 };
|
||||
|
@ -1054,11 +1057,8 @@ _alternate_font_weight_slant(Evas_Object_Protected_Data *obj,
|
|||
return ret;
|
||||
}
|
||||
|
||||
EOLIAN static void
|
||||
_evas_textgrid_efl_text_properties_font_set(Eo *eo_obj,
|
||||
Evas_Textgrid_Data *o,
|
||||
const char *font_name,
|
||||
Evas_Font_Size font_size)
|
||||
static void
|
||||
_evas_textgrid_font_reload(Eo *eo_obj, Evas_Textgrid_Data *o)
|
||||
{
|
||||
Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
|
||||
Eina_Bool pass = EINA_FALSE, freeze = EINA_FALSE;
|
||||
|
@ -1066,30 +1066,7 @@ _evas_textgrid_efl_text_properties_font_set(Eo *eo_obj,
|
|||
Evas_Font_Description *fdesc;
|
||||
Eina_List *was = NULL;
|
||||
|
||||
if ((!font_name) || (!*font_name) || (font_size <= 0))
|
||||
return;
|
||||
|
||||
evas_object_async_block(obj);
|
||||
fdesc = evas_font_desc_new();
|
||||
/* Set default language according to locale. */
|
||||
eina_stringshare_replace(&(fdesc->lang),
|
||||
evas_font_lang_normalize("auto"));
|
||||
evas_font_name_parse(fdesc, font_name);
|
||||
if (o->cur.font_description_normal &&
|
||||
!evas_font_desc_cmp(fdesc, o->cur.font_description_normal) &&
|
||||
(font_size == o->cur.font_size))
|
||||
{
|
||||
evas_font_desc_unref(fdesc);
|
||||
return;
|
||||
}
|
||||
|
||||
if (o->cur.font_description_normal)
|
||||
evas_font_desc_unref(o->cur.font_description_normal);
|
||||
o->cur.font_description_normal = fdesc;
|
||||
|
||||
o->cur.font_size = font_size;
|
||||
eina_stringshare_replace(&o->cur.font_name, font_name);
|
||||
o->prev.font_name = NULL;
|
||||
fdesc = o->cur.font_description_normal;
|
||||
|
||||
if (!(obj->layer->evas->is_frozen))
|
||||
{
|
||||
|
@ -1111,7 +1088,8 @@ _evas_textgrid_efl_text_properties_font_set(Eo *eo_obj,
|
|||
o->cur.font_description_normal,
|
||||
o->cur.font_source,
|
||||
(int)(((double) o->cur.font_size) *
|
||||
obj->cur->scale));
|
||||
obj->cur->scale),
|
||||
o->cur.bitmap_scalable);
|
||||
if (o->font_normal)
|
||||
{
|
||||
Eina_Unicode W[2] = { 'O', 0 };
|
||||
|
@ -1244,6 +1222,43 @@ _evas_textgrid_efl_text_properties_font_set(Eo *eo_obj,
|
|||
evas_object_change(eo_obj, obj);
|
||||
}
|
||||
|
||||
EOLIAN static void
|
||||
_evas_textgrid_efl_text_properties_font_set(Eo *eo_obj,
|
||||
Evas_Textgrid_Data *o,
|
||||
const char *font_name,
|
||||
Evas_Font_Size font_size)
|
||||
{
|
||||
Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
|
||||
Evas_Font_Description *fdesc;
|
||||
|
||||
if ((!font_name) || (!*font_name) || (font_size <= 0))
|
||||
return;
|
||||
|
||||
evas_object_async_block(obj);
|
||||
fdesc = evas_font_desc_new();
|
||||
/* Set default language according to locale. */
|
||||
eina_stringshare_replace(&(fdesc->lang),
|
||||
evas_font_lang_normalize("auto"));
|
||||
evas_font_name_parse(fdesc, font_name);
|
||||
if (o->cur.font_description_normal &&
|
||||
!evas_font_desc_cmp(fdesc, o->cur.font_description_normal) &&
|
||||
(font_size == o->cur.font_size))
|
||||
{
|
||||
evas_font_desc_unref(fdesc);
|
||||
return;
|
||||
}
|
||||
|
||||
if (o->cur.font_description_normal)
|
||||
evas_font_desc_unref(o->cur.font_description_normal);
|
||||
o->cur.font_description_normal = fdesc;
|
||||
|
||||
o->cur.font_size = font_size;
|
||||
eina_stringshare_replace(&o->cur.font_name, font_name);
|
||||
o->prev.font_name = NULL;
|
||||
|
||||
_evas_textgrid_font_reload(eo_obj, o);
|
||||
}
|
||||
|
||||
EOLIAN static void
|
||||
_evas_textgrid_efl_text_properties_font_get(Eo *eo_obj EINA_UNUSED, Evas_Textgrid_Data *o, const char **font_name, Evas_Font_Size *font_size)
|
||||
{
|
||||
|
@ -1500,6 +1515,21 @@ evas_object_textgrid_font_get(const Eo *obj, const char **font_name, Evas_Font_S
|
|||
efl_text_properties_font_get((Eo *) obj, font_name, font_size);
|
||||
}
|
||||
|
||||
EOLIAN static void
|
||||
_evas_textgrid_efl_text_font_font_bitmap_scalable_set(Eo *eo_obj, Evas_Textgrid_Data *o, Efl_Text_Font_Bitmap_Scalable bitmap_scalable)
|
||||
{
|
||||
if (o->cur.bitmap_scalable == bitmap_scalable) return;
|
||||
o->prev.bitmap_scalable = o->cur.bitmap_scalable;
|
||||
o->cur.bitmap_scalable = bitmap_scalable;
|
||||
_evas_textgrid_font_reload(eo_obj, o);
|
||||
}
|
||||
|
||||
EOLIAN static Efl_Text_Font_Bitmap_Scalable
|
||||
_evas_textgrid_efl_text_font_font_bitmap_scalable_get(Eo *eo_obj EINA_UNUSED, Evas_Textgrid_Data *o)
|
||||
{
|
||||
return o->cur.bitmap_scalable;
|
||||
}
|
||||
|
||||
#define EVAS_TEXTGRID_EXTRA_OPS \
|
||||
EFL_OBJECT_OP_FUNC(efl_dbg_info_get, _evas_textgrid_efl_object_dbg_info_get)
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
type @extern Evas.Text_Style_Type : __undefined_type; [[External text style type]]
|
||||
|
||||
class Evas.Text (Efl.Canvas.Object, Efl.Text, Efl.Text.Properties, Efl.Canvas.Filter.Internal)
|
||||
class Evas.Text (Efl.Canvas.Object, Efl.Text, Efl.Text.Properties, Efl.Text.Font, Efl.Canvas.Filter.Internal)
|
||||
{
|
||||
[[Evas text class]]
|
||||
legacy_prefix: evas_object_text;
|
||||
|
@ -274,6 +274,7 @@ class Evas.Text (Efl.Canvas.Object, Efl.Text, Efl.Text.Properties, Efl.Canvas.Fi
|
|||
Efl.Text.text { get; set; }
|
||||
Efl.Text.Properties.font { get; set; }
|
||||
Efl.Text.Properties.font_source { get; set; }
|
||||
Efl.Text.Font.font_bitmap_scalable { get; set; }
|
||||
Efl.Gfx.Filter.filter_program { set; }
|
||||
Efl.Canvas.Filter.Internal.filter_dirty;
|
||||
Efl.Canvas.Filter.Internal.filter_input_alpha;
|
||||
|
|
|
@ -20,7 +20,7 @@ enum Evas.Textgrid.Font_Style {
|
|||
/* XXX: Actual definition is in C. */
|
||||
struct Evas.Textgrid.Cell; [[Evas textgrid cell data structure]]
|
||||
|
||||
class Evas.Textgrid (Efl.Canvas.Object, Efl.Text.Properties)
|
||||
class Evas.Textgrid (Efl.Canvas.Object, Efl.Text.Properties, Efl.Text.Font)
|
||||
{
|
||||
[[Evas textgrid class]]
|
||||
legacy_prefix: evas_object_textgrid;
|
||||
|
@ -200,5 +200,6 @@ class Evas.Textgrid (Efl.Canvas.Object, Efl.Text.Properties)
|
|||
Efl.Object.destructor;
|
||||
Efl.Text.Properties.font { get; set; }
|
||||
Efl.Text.Properties.font_source { get; set; }
|
||||
Efl.Text.Font.font_bitmap_scalable { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@ EAPI void evas_common_draw_context_font_ext_set (RGBA_D
|
|||
void *data,
|
||||
void *(*gl_new) (void *data, RGBA_Font_Glyph *fg),
|
||||
void (*gl_free) (void *ext_dat),
|
||||
void (*gl_draw) (void *data, void *dest, void *context, RGBA_Font_Glyph *fg, int x, int y),
|
||||
void (*gl_draw) (void *data, void *dest, void *context, RGBA_Font_Glyph *fg, int x, int y, int w, int h),
|
||||
void *(*gl_image_new) (void *gc, RGBA_Font_Glyph *fg, int alpha, Evas_Colorspace cspace),
|
||||
void (*gl_image_free) (void *image),
|
||||
void (*gl_image_draw) (void *gc, void *im, int dx, int dy, int dw, int dh, int smooth));
|
||||
|
|
|
@ -215,7 +215,7 @@ evas_common_draw_context_font_ext_set(RGBA_Draw_Context *dc,
|
|||
void *data,
|
||||
void *(*gl_new) (void *data, RGBA_Font_Glyph *fg),
|
||||
void (*gl_free) (void *ext_dat),
|
||||
void (*gl_draw) (void *data, void *dest, void *context, RGBA_Font_Glyph *fg, int x, int y),
|
||||
void (*gl_draw) (void *data, void *dest, void *context, RGBA_Font_Glyph *fg, int x, int y, int w, int h),
|
||||
void *(*gl_image_new) (void *gc, RGBA_Font_Glyph *fg, int alpha, Evas_Colorspace cspace),
|
||||
void (*gl_image_free) (void *image),
|
||||
void (*gl_image_draw) (void *gc, void *im, int dx, int dy, int dw, int dh, int smooth))
|
||||
|
|
|
@ -46,27 +46,27 @@ EAPI int evas_common_font_source_load_complete (RGBA_Font_Source *
|
|||
EAPI RGBA_Font_Source *evas_common_font_source_find (const char *name);
|
||||
EAPI void evas_common_font_source_free (RGBA_Font_Source *fs);
|
||||
EAPI void evas_common_font_size_use (RGBA_Font *fn);
|
||||
EAPI RGBA_Font_Int *evas_common_font_int_load (const char *name, int size, Font_Rend_Flags wanted_rend);
|
||||
EAPI RGBA_Font_Int *evas_common_font_int_load (const char *name, int size, Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable);
|
||||
EAPI RGBA_Font_Int *evas_common_font_int_load_init (RGBA_Font_Int *fn);
|
||||
EAPI RGBA_Font_Int *evas_common_font_int_load_complete (RGBA_Font_Int *fi);
|
||||
EAPI RGBA_Font *evas_common_font_memory_load (const char *source, const char *name, int size, const void *data, int data_size, Font_Rend_Flags wanted_rend);
|
||||
EAPI RGBA_Font *evas_common_font_load (const char *name, int size, Font_Rend_Flags wanted_rend);
|
||||
EAPI RGBA_Font *evas_common_font_add (RGBA_Font *fn, const char *name, int size, Font_Rend_Flags wanted_rend);
|
||||
EAPI RGBA_Font *evas_common_font_memory_add (RGBA_Font *fn, const char *source, const char *name, int size, const void *data, int data_size, Font_Rend_Flags wanted_rend);
|
||||
EAPI RGBA_Font *evas_common_font_memory_load (const char *source, const char *name, int size, const void *data, int data_size, Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable);
|
||||
EAPI RGBA_Font *evas_common_font_load (const char *name, int size, Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable);
|
||||
EAPI RGBA_Font *evas_common_font_add (RGBA_Font *fn, const char *name, int size, Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable);
|
||||
EAPI RGBA_Font *evas_common_font_memory_add (RGBA_Font *fn, const char *source, const char *name, int size, const void *data, int data_size, Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable);
|
||||
EAPI void evas_common_font_free (RGBA_Font *fn);
|
||||
EAPI void evas_common_font_int_unref (RGBA_Font_Int *fi);
|
||||
EAPI void evas_common_font_hinting_set (RGBA_Font *fn, Font_Hint_Flags hinting);
|
||||
EAPI Eina_Bool evas_common_hinting_available (Font_Hint_Flags hinting);
|
||||
EAPI RGBA_Font *evas_common_font_memory_hinting_load (const char *source, const char *name, int size, const void *data, int data_size, Font_Hint_Flags hinting, Font_Rend_Flags wanted_rend);
|
||||
EAPI RGBA_Font *evas_common_font_hinting_load (const char *name, int size, Font_Hint_Flags hinting, Font_Rend_Flags wanted_rend);
|
||||
EAPI RGBA_Font *evas_common_font_hinting_add (RGBA_Font *fn, const char *name, int size, Font_Hint_Flags hinting, Font_Rend_Flags wanted_rend);
|
||||
EAPI RGBA_Font *evas_common_font_memory_hinting_add (RGBA_Font *fn, const char *source, const char *name, int size, const void *data, int data_size, Font_Hint_Flags hinting, Font_Rend_Flags wanted_rend);
|
||||
EAPI RGBA_Font *evas_common_font_memory_hinting_load (const char *source, const char *name, int size, const void *data, int data_size, Font_Hint_Flags hinting, Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable);
|
||||
EAPI RGBA_Font *evas_common_font_hinting_load (const char *name, int size, Font_Hint_Flags hinting, Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable);
|
||||
EAPI RGBA_Font *evas_common_font_hinting_add (RGBA_Font *fn, const char *name, int size, Font_Hint_Flags hinting, Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable);
|
||||
EAPI RGBA_Font *evas_common_font_memory_hinting_add (RGBA_Font *fn, const char *source, const char *name, int size, const void *data, int data_size, Font_Hint_Flags hinting, Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable);
|
||||
EAPI void evas_common_font_int_modify_cache_by (RGBA_Font_Int *fi, int dir);
|
||||
EAPI int evas_common_font_cache_get (void);
|
||||
EAPI void evas_common_font_cache_set (int size);
|
||||
EAPI void evas_common_font_flush (void);
|
||||
EAPI void evas_common_font_flush_last (void);
|
||||
EAPI RGBA_Font_Int *evas_common_font_int_find (const char *name, int size, Font_Rend_Flags wanted_rend);
|
||||
EAPI RGBA_Font_Int *evas_common_font_int_find (const char *name, int size, Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable);
|
||||
EAPI void evas_common_font_all_clear (void);
|
||||
EAPI void evas_common_font_ext_clear (void);
|
||||
|
||||
|
@ -85,7 +85,7 @@ EAPI int evas_common_font_query_run_font_end_get(RGBA_Font *fn, RG
|
|||
EAPI void evas_common_font_ascent_descent_get(RGBA_Font *fn, const Evas_Text_Props *text_props, int *ascent, int *descent);
|
||||
|
||||
EAPI void *evas_common_font_glyph_compress(void *data, int num_grays, int pixel_mode, int pitch_data, int w, int h, int *size_ret);
|
||||
EAPI void evas_common_font_glyph_draw(RGBA_Font_Glyph *fg, RGBA_Draw_Context *dc, RGBA_Image *dst, int dst_pitch, int x, int y, int cx, int cy, int cw, int ch);
|
||||
EAPI void evas_common_font_glyph_draw(RGBA_Font_Glyph *fg, RGBA_Draw_Context *dc, RGBA_Image *dst, int dst_pitch, int dx, int dy, int dw, int dh, int cx, int cy, int cw, int ch);
|
||||
EAPI DATA8 *evas_common_font_glyph_uncompress(RGBA_Font_Glyph *fg, int *wret, int *hret);
|
||||
|
||||
void evas_common_font_load_init(void);
|
||||
|
|
|
@ -482,14 +482,19 @@ EAPI void
|
|||
evas_common_font_glyph_draw(RGBA_Font_Glyph *fg,
|
||||
RGBA_Draw_Context *dc,
|
||||
RGBA_Image *dst_image, int dst_pitch,
|
||||
int x, int y, int cx, int cy, int cw, int ch)
|
||||
int dx, int dy, int dw, int dh, int cx, int cy, int cw, int ch)
|
||||
{
|
||||
RGBA_Font_Glyph_Out *fgo = fg->glyph_out;
|
||||
int w, h, x1, x2, y1, y2, i, *iptr;
|
||||
int x, y, w, h, x1, x2, y1, y2, i, *iptr;
|
||||
DATA32 *dst = dst_image->image.data;
|
||||
DATA32 coltab[16], col;
|
||||
DATA16 mtab[16], v;
|
||||
|
||||
// FIXME: Use dw, dh for scaling glyphs...
|
||||
(void) dw;
|
||||
(void) dh;
|
||||
x = dx;
|
||||
y = dy;
|
||||
w = fgo->bitmap.width; h = fgo->bitmap.rows;
|
||||
// skip if totally clipped out
|
||||
if ((y >= (cy + ch)) || ((y + h) <= cy) ||
|
||||
|
@ -582,7 +587,7 @@ evas_common_font_glyph_draw(RGBA_Font_Glyph *fg,
|
|||
|
||||
ptr = dst + (x + x1) + ((y + row) * dst_pitch);
|
||||
buf_ptr = buf + (row * w) + x1;
|
||||
func(buf_ptr, mask, 0, ptr, x2 - x1);
|
||||
func(buf_ptr, mask, 0, ptr, w);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
|
@ -24,16 +24,25 @@ evas_common_font_draw_init(void)
|
|||
}
|
||||
|
||||
static void *
|
||||
_evas_font_image_new_from_data(int w, int h, DATA32 *image_data, int alpha, Evas_Colorspace cspace)
|
||||
_evas_font_image_new(RGBA_Font_Glyph *fg, int alpha, Evas_Colorspace cspace)
|
||||
{
|
||||
DATA32 *image_data;
|
||||
int src_w, src_h;
|
||||
|
||||
if (!fg) return NULL;
|
||||
|
||||
image_data = (DATA32 *)fg->glyph_out->bitmap.buffer;
|
||||
src_w = fg->glyph_out->bitmap.width;
|
||||
src_h = fg->glyph_out->bitmap.rows;
|
||||
|
||||
#ifdef EVAS_CSERVE2
|
||||
if (evas_cserve2_use_get())
|
||||
{
|
||||
Evas_Cache2 *cache = evas_common_image_cache2_get();
|
||||
return evas_cache2_image_data(cache, w, h, image_data, alpha, cspace);
|
||||
return evas_cache2_image_data(cache, src_w, src_h, image_data, alpha, cspace);
|
||||
}
|
||||
#endif
|
||||
return evas_cache_image_data(evas_common_image_cache_get(), w, h, image_data, alpha, cspace);
|
||||
return evas_cache_image_data(evas_common_image_cache_get(), src_w, src_h, image_data, alpha, cspace);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -50,12 +59,15 @@ _evas_font_image_free(void *image)
|
|||
}
|
||||
|
||||
static void
|
||||
_evas_font_image_draw(void *context, void *surface, void *image, int src_x, int src_y, int src_w, int src_h, int dst_x, int dst_y, int dst_w, int dst_h, int smooth)
|
||||
_evas_font_image_draw(void *context, void *surface, void *image, RGBA_Font_Glyph *fg, int x, int y, int w, int h, int smooth)
|
||||
{
|
||||
RGBA_Image *im;
|
||||
int src_w, src_h;
|
||||
|
||||
if (!image) return;
|
||||
if (!image || !fg) return;
|
||||
im = image;
|
||||
src_w = fg->glyph_out->bitmap.width;
|
||||
src_h = fg->glyph_out->bitmap.rows;
|
||||
|
||||
#ifdef BUILD_PIPE_RENDER
|
||||
if ((eina_cpu_count() > 1))
|
||||
|
@ -66,24 +78,24 @@ _evas_font_image_draw(void *context, void *surface, void *image, int src_x, int
|
|||
#endif
|
||||
evas_common_rgba_image_scalecache_prepare((Image_Entry *)(im),
|
||||
surface, context, smooth,
|
||||
src_x, src_y, src_w, src_h,
|
||||
dst_x, dst_y, dst_w, dst_h);
|
||||
0, 0, src_w, src_h,
|
||||
x, y, w, h);
|
||||
|
||||
evas_common_pipe_image_draw(im, surface, context, smooth,
|
||||
src_x, src_y, src_w, src_h,
|
||||
dst_x, dst_y, dst_w, dst_h);
|
||||
0, 0, src_w, src_h,
|
||||
x, y, w, h);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
evas_common_rgba_image_scalecache_prepare
|
||||
(&im->cache_entry, surface, context, smooth,
|
||||
src_x, src_y, src_w, src_h,
|
||||
dst_x, dst_y, dst_w, dst_h);
|
||||
0, 0, src_w, src_h,
|
||||
x, y, w, h);
|
||||
evas_common_rgba_image_scalecache_do
|
||||
(&im->cache_entry, surface, context, smooth,
|
||||
src_x, src_y, src_w, src_h,
|
||||
dst_x, dst_y, dst_w, dst_h);
|
||||
0, 0, src_w, src_h,
|
||||
x, y, w, h);
|
||||
|
||||
evas_common_cpu_end_opt();
|
||||
}
|
||||
|
@ -111,9 +123,20 @@ evas_common_font_rgba_draw(RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y,
|
|||
int chr_x, chr_y, w, h;
|
||||
|
||||
fg = glyph->fg;
|
||||
|
||||
w = fg->glyph_out->bitmap.width;
|
||||
h = fg->glyph_out->bitmap.rows;
|
||||
|
||||
if (FT_HAS_FIXED_SIZES(fg->fi->src->ft.face))
|
||||
{
|
||||
if ((fg->fi->bitmap_scalable & EFL_TEXT_FONT_BITMAP_SCALABLE_COLOR) &&
|
||||
FT_HAS_COLOR(fg->fi->src->ft.face))
|
||||
{
|
||||
w *= fg->fi->scale_factor;
|
||||
h *= fg->fi->scale_factor;
|
||||
}
|
||||
}
|
||||
|
||||
if ((!fg->ext_dat) && (dc->font_ext.func.gl_new))
|
||||
{
|
||||
/* extension calls */
|
||||
|
@ -132,9 +155,7 @@ evas_common_font_rgba_draw(RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y,
|
|||
}
|
||||
else
|
||||
{
|
||||
fg->ext_dat = _evas_font_image_new_from_data
|
||||
(w, h, (DATA32 *)fg->glyph_out->bitmap.buffer,
|
||||
EINA_TRUE, EVAS_COLORSPACE_ARGB8888);
|
||||
fg->ext_dat = _evas_font_image_new(fg, EINA_TRUE, EVAS_COLORSPACE_ARGB8888);
|
||||
fg->ext_dat_free = _evas_font_image_free;
|
||||
}
|
||||
}
|
||||
|
@ -150,10 +171,11 @@ evas_common_font_rgba_draw(RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y,
|
|||
if ((fg->ext_dat) && (dc->font_ext.func.gl_draw))
|
||||
dc->font_ext.func.gl_draw(dc->font_ext.data, dst,
|
||||
dc, fg,
|
||||
chr_x, y - (chr_y - y));
|
||||
chr_x, y - (chr_y - y), w, h);
|
||||
else
|
||||
// TODO: scale with evas_font_compress_draw.c...
|
||||
evas_common_font_glyph_draw(fg, dc, dst, im_w,
|
||||
chr_x, y - (chr_y - y),
|
||||
chr_x, y - (chr_y - y), w, h,
|
||||
ext_x, ext_y,
|
||||
ext_w, ext_h);
|
||||
}
|
||||
|
@ -165,7 +187,7 @@ evas_common_font_rgba_draw(RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y,
|
|||
chr_x, y - (chr_y - y), w, h, EINA_TRUE);
|
||||
else
|
||||
_evas_font_image_draw
|
||||
(dc, dst, fg->ext_dat, 0, 0, w, h,
|
||||
(dc, dst, fg->ext_dat, fg,
|
||||
chr_x, y - (chr_y - y), w, h, EINA_TRUE);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -42,9 +42,16 @@ _evas_font_cache_int_cmp(const RGBA_Font_Int *k1, int k1_length EINA_UNUSED,
|
|||
if (k1->src->name == k2->src->name)
|
||||
{
|
||||
if (k1->size == k2->size)
|
||||
return k1->wanted_rend - k2->wanted_rend;
|
||||
{
|
||||
if (k1->wanted_rend == k2->wanted_rend)
|
||||
return k1->bitmap_scalable - k2->bitmap_scalable;
|
||||
else
|
||||
return k1->wanted_rend - k2->wanted_rend;
|
||||
}
|
||||
else
|
||||
return k1->size - k2->size;
|
||||
{
|
||||
return k1->size - k2->size;
|
||||
}
|
||||
}
|
||||
return strcmp(k1->src->name, k2->src->name);
|
||||
}
|
||||
|
@ -57,6 +64,7 @@ _evas_font_cache_int_hash(const RGBA_Font_Int *key, int key_length EINA_UNUSED)
|
|||
hash = eina_hash_djb2(key->src->name, eina_stringshare_strlen(key->src->name) + 1);
|
||||
hash ^= eina_hash_int32(&key->size, sizeof (int));
|
||||
hash ^= eina_hash_int32(&wanted_rend, sizeof (int));
|
||||
hash ^= eina_hash_int32(&key->bitmap_scalable, sizeof (int));
|
||||
return hash;
|
||||
}
|
||||
|
||||
|
@ -322,13 +330,13 @@ _evas_common_font_int_cache_init(RGBA_Font_Int *fi)
|
|||
}
|
||||
|
||||
EAPI RGBA_Font_Int *
|
||||
evas_common_font_int_memory_load(const char *source, const char *name, int size, const void *data, int data_size, Font_Rend_Flags wanted_rend)
|
||||
evas_common_font_int_memory_load(const char *source, const char *name, int size, const void *data, int data_size, Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable)
|
||||
{
|
||||
RGBA_Font_Int *fi;
|
||||
char *fake_name;
|
||||
|
||||
fake_name = evas_file_path_join(source, name);
|
||||
fi = evas_common_font_int_find(fake_name, size, wanted_rend);
|
||||
fi = evas_common_font_int_find(fake_name, size, wanted_rend, bitmap_scalable);
|
||||
if (fi)
|
||||
{
|
||||
free(fake_name);
|
||||
|
@ -350,6 +358,7 @@ evas_common_font_int_memory_load(const char *source, const char *name, int size,
|
|||
return NULL;
|
||||
}
|
||||
fi->size = size;
|
||||
fi->bitmap_scalable = bitmap_scalable;
|
||||
_evas_common_font_int_cache_init(fi);
|
||||
fi = evas_common_font_int_load_init(fi);
|
||||
evas_common_font_int_load_complete(fi);
|
||||
|
@ -374,11 +383,12 @@ evas_common_font_int_memory_load(const char *source, const char *name, int size,
|
|||
|
||||
EAPI RGBA_Font_Int *
|
||||
evas_common_font_int_load(const char *name, int size,
|
||||
Font_Rend_Flags wanted_rend)
|
||||
Font_Rend_Flags wanted_rend,
|
||||
Efl_Text_Font_Bitmap_Scalable bitmap_scalable)
|
||||
{
|
||||
RGBA_Font_Int *fi;
|
||||
|
||||
fi = evas_common_font_int_find(name, size, wanted_rend);
|
||||
fi = evas_common_font_int_find(name, size, wanted_rend, bitmap_scalable);
|
||||
if (fi) return fi;
|
||||
fi = calloc(1, sizeof(RGBA_Font_Int));
|
||||
if (!fi) return NULL;
|
||||
|
@ -393,6 +403,7 @@ evas_common_font_int_load(const char *name, int size,
|
|||
}
|
||||
fi->size = size;
|
||||
fi->wanted_rend = wanted_rend;
|
||||
fi->bitmap_scalable = bitmap_scalable;
|
||||
_evas_common_font_int_cache_init(fi);
|
||||
fi = evas_common_font_int_load_init(fi);
|
||||
#ifdef EVAS_CSERVE2
|
||||
|
@ -437,6 +448,7 @@ evas_common_font_int_load_complete(RGBA_Font_Int *fi)
|
|||
FT_Activate_Size(fi->ft.size);
|
||||
}
|
||||
fi->real_size = fi->size * 64;
|
||||
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 +480,20 @@ 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);
|
||||
|
||||
if (!error)
|
||||
{
|
||||
if (FT_HAS_COLOR(fi->src->ft.face) &&
|
||||
fi->bitmap_scalable & EFL_TEXT_FONT_BITMAP_SCALABLE_COLOR)
|
||||
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)
|
||||
|
@ -543,13 +566,13 @@ evas_common_font_int_load_complete(RGBA_Font_Int *fi)
|
|||
}
|
||||
|
||||
EAPI RGBA_Font *
|
||||
evas_common_font_memory_load(const char *source, const char *name, int size, const void *data, int data_size, Font_Rend_Flags wanted_rend)
|
||||
evas_common_font_memory_load(const char *source, const char *name, int size, const void *data, int data_size, Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable)
|
||||
{
|
||||
RGBA_Font *fn;
|
||||
RGBA_Font_Int *fi;
|
||||
|
||||
fi = evas_common_font_int_memory_load(source, name, size, data, data_size,
|
||||
wanted_rend);
|
||||
wanted_rend, bitmap_scalable);
|
||||
if (!fi) return NULL;
|
||||
fn = calloc(1, sizeof(RGBA_Font));
|
||||
if (!fn)
|
||||
|
@ -577,12 +600,12 @@ evas_common_font_memory_load(const char *source, const char *name, int size, con
|
|||
// fi->fs
|
||||
|
||||
EAPI RGBA_Font *
|
||||
evas_common_font_load(const char *name, int size, Font_Rend_Flags wanted_rend)
|
||||
evas_common_font_load(const char *name, int size, Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable)
|
||||
{
|
||||
RGBA_Font *fn;
|
||||
RGBA_Font_Int *fi;
|
||||
|
||||
fi = evas_common_font_int_load(name, size, wanted_rend);
|
||||
fi = evas_common_font_int_load(name, size, wanted_rend, bitmap_scalable);
|
||||
if (!fi) return NULL;
|
||||
/* First font, complete load */
|
||||
if (!fi->ft.size)
|
||||
|
@ -619,12 +642,12 @@ evas_common_font_load(const char *name, int size, Font_Rend_Flags wanted_rend)
|
|||
}
|
||||
|
||||
EAPI RGBA_Font *
|
||||
evas_common_font_add(RGBA_Font *fn, const char *name, int size, Font_Rend_Flags wanted_rend)
|
||||
evas_common_font_add(RGBA_Font *fn, const char *name, int size, Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable)
|
||||
{
|
||||
RGBA_Font_Int *fi;
|
||||
|
||||
if (!fn) return NULL;
|
||||
fi = evas_common_font_int_load(name, size, wanted_rend);
|
||||
fi = evas_common_font_int_load(name, size, wanted_rend, bitmap_scalable);
|
||||
if (fi)
|
||||
{
|
||||
fn->fonts = eina_list_append(fn->fonts, fi);
|
||||
|
@ -641,13 +664,13 @@ evas_common_font_add(RGBA_Font *fn, const char *name, int size, Font_Rend_Flags
|
|||
}
|
||||
|
||||
EAPI RGBA_Font *
|
||||
evas_common_font_memory_add(RGBA_Font *fn, const char *source, const char *name, int size, const void *data, int data_size, Font_Rend_Flags wanted_rend)
|
||||
evas_common_font_memory_add(RGBA_Font *fn, const char *source, const char *name, int size, const void *data, int data_size, Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable)
|
||||
{
|
||||
RGBA_Font_Int *fi;
|
||||
|
||||
if (!fn)
|
||||
return NULL;
|
||||
fi = evas_common_font_int_memory_load(source, name, size, data, data_size, wanted_rend);
|
||||
fi = evas_common_font_int_memory_load(source, name, size, data, data_size, wanted_rend, bitmap_scalable);
|
||||
if (fi)
|
||||
{
|
||||
fn->fonts = eina_list_append(fn->fonts, fi);
|
||||
|
@ -744,38 +767,38 @@ evas_common_hinting_available(Font_Hint_Flags hinting)
|
|||
}
|
||||
|
||||
EAPI RGBA_Font *
|
||||
evas_common_font_memory_hinting_load(const char *source, const char *name, int size, const void *data, int data_size, Font_Hint_Flags hinting, Font_Rend_Flags wanted_rend)
|
||||
evas_common_font_memory_hinting_load(const char *source, const char *name, int size, const void *data, int data_size, Font_Hint_Flags hinting, Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable)
|
||||
{
|
||||
RGBA_Font *fn;
|
||||
|
||||
fn = evas_common_font_memory_load(source, name, size, data, data_size, wanted_rend);
|
||||
fn = evas_common_font_memory_load(source, name, size, data, data_size, wanted_rend, bitmap_scalable);
|
||||
if (fn) evas_common_font_hinting_set(fn, hinting);
|
||||
return fn;
|
||||
}
|
||||
|
||||
EAPI RGBA_Font *
|
||||
evas_common_font_hinting_load(const char *name, int size, Font_Hint_Flags hinting, Font_Rend_Flags wanted_rend)
|
||||
evas_common_font_hinting_load(const char *name, int size, Font_Hint_Flags hinting, Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable)
|
||||
{
|
||||
RGBA_Font *fn;
|
||||
|
||||
fn = evas_common_font_load(name, size, wanted_rend);
|
||||
fn = evas_common_font_load(name, size, wanted_rend, bitmap_scalable);
|
||||
if (fn) evas_common_font_hinting_set(fn, hinting);
|
||||
return fn;
|
||||
}
|
||||
|
||||
EAPI RGBA_Font *
|
||||
evas_common_font_hinting_add(RGBA_Font *fn, const char *name, int size, Font_Hint_Flags hinting, Font_Rend_Flags wanted_rend)
|
||||
evas_common_font_hinting_add(RGBA_Font *fn, const char *name, int size, Font_Hint_Flags hinting, Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable)
|
||||
{
|
||||
fn = evas_common_font_add(fn, name, size, wanted_rend);
|
||||
fn = evas_common_font_add(fn, name, size, wanted_rend, bitmap_scalable);
|
||||
if (fn) evas_common_font_hinting_set(fn, hinting);
|
||||
return fn;
|
||||
}
|
||||
|
||||
EAPI RGBA_Font *
|
||||
evas_common_font_memory_hinting_add(RGBA_Font *fn, const char *source, const char *name, int size, const void *data, int data_size, Font_Hint_Flags hinting, Font_Rend_Flags wanted_rend)
|
||||
evas_common_font_memory_hinting_add(RGBA_Font *fn, const char *source, const char *name, int size, const void *data, int data_size, Font_Hint_Flags hinting, Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable)
|
||||
{
|
||||
fn = evas_common_font_memory_add(fn, source, name, size, data, data_size,
|
||||
wanted_rend);
|
||||
wanted_rend, bitmap_scalable);
|
||||
if (fn) evas_common_font_hinting_set(fn, hinting);
|
||||
return fn;
|
||||
}
|
||||
|
@ -939,7 +962,8 @@ evas_common_font_flush_last(void)
|
|||
|
||||
EAPI RGBA_Font_Int *
|
||||
evas_common_font_int_find(const char *name, int size,
|
||||
Font_Rend_Flags wanted_rend)
|
||||
Font_Rend_Flags wanted_rend,
|
||||
Efl_Text_Font_Bitmap_Scalable bitmap_scalable)
|
||||
{
|
||||
RGBA_Font_Int tmp_fi;
|
||||
RGBA_Font_Source tmp_fn;
|
||||
|
@ -949,6 +973,7 @@ evas_common_font_int_find(const char *name, int size,
|
|||
tmp_fi.src = &tmp_fn;
|
||||
tmp_fi.size = size;
|
||||
tmp_fi.wanted_rend = wanted_rend;
|
||||
tmp_fi.bitmap_scalable = bitmap_scalable;
|
||||
fi = eina_hash_find(fonts, &tmp_fi);
|
||||
if (fi)
|
||||
{
|
||||
|
|
|
@ -115,6 +115,14 @@ evas_common_font_instance_ascent_get(RGBA_Font_Int *fi)
|
|||
WRN("NOT SCALABLE!");
|
||||
}
|
||||
val = (int)fi->src->ft.face->size->metrics.ascender;
|
||||
|
||||
if (FT_HAS_FIXED_SIZES(fi->src->ft.face))
|
||||
{
|
||||
if (FT_HAS_COLOR(fi->src->ft.face) &&
|
||||
fi->bitmap_scalable & EFL_TEXT_FONT_BITMAP_SCALABLE_COLOR)
|
||||
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)
|
||||
|
@ -137,6 +145,14 @@ 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;
|
||||
|
||||
if (FT_HAS_FIXED_SIZES(fi->src->ft.face))
|
||||
{
|
||||
if (FT_HAS_COLOR(fi->src->ft.face) &&
|
||||
fi->bitmap_scalable & EFL_TEXT_FONT_BITMAP_SCALABLE_COLOR)
|
||||
val *= fi->scale_factor;
|
||||
}
|
||||
|
||||
return FONT_METRIC_ROUNDUP(val);
|
||||
// if (fi->src->ft.face->units_per_EM == 0)
|
||||
// return val;
|
||||
|
@ -165,6 +181,14 @@ 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;
|
||||
|
||||
if (FT_HAS_FIXED_SIZES(fi->src->ft.face))
|
||||
{
|
||||
if (FT_HAS_COLOR(fi->src->ft.face) &&
|
||||
fi->bitmap_scalable & EFL_TEXT_FONT_BITMAP_SCALABLE_COLOR)
|
||||
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;
|
||||
|
@ -192,6 +216,14 @@ 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;
|
||||
|
||||
if (FT_HAS_FIXED_SIZES(fi->src->ft.face))
|
||||
{
|
||||
if (FT_HAS_COLOR(fi->src->ft.face) &&
|
||||
fi->bitmap_scalable & EFL_TEXT_FONT_BITMAP_SCALABLE_COLOR)
|
||||
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;
|
||||
|
@ -244,6 +276,14 @@ evas_common_font_get_line_advance(RGBA_Font *fn)
|
|||
fi->src->current_size = fi->size;
|
||||
}
|
||||
val = (int)fi->src->ft.face->size->metrics.height;
|
||||
|
||||
if (FT_HAS_FIXED_SIZES(fi->src->ft.face))
|
||||
{
|
||||
if ((fi->bitmap_scalable & EFL_TEXT_FONT_BITMAP_SCALABLE_COLOR) &&
|
||||
FT_HAS_COLOR(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))
|
||||
|
@ -558,6 +598,19 @@ 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);
|
||||
|
||||
if (FT_HAS_FIXED_SIZES(fi->src->ft.face))
|
||||
{
|
||||
if (FT_HAS_COLOR(fi->src->ft.face) &&
|
||||
fi->bitmap_scalable & EFL_TEXT_FONT_BITMAP_SCALABLE_COLOR)
|
||||
{
|
||||
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;
|
||||
|
|
|
@ -749,7 +749,7 @@ struct _RGBA_Draw_Context
|
|||
struct {
|
||||
void *(*gl_new) (void *data, RGBA_Font_Glyph *fg);
|
||||
void (*gl_free) (void *ext_dat);
|
||||
void (*gl_draw) (void *data, void *dest, void *context, RGBA_Font_Glyph *fg, int x, int y);
|
||||
void (*gl_draw) (void *data, void *dest, void *context, RGBA_Font_Glyph *fg, int x, int y, int w, int h);
|
||||
void *(*gl_image_new) (void *gc, RGBA_Font_Glyph *fg, int alpha, Evas_Colorspace cspace);
|
||||
void (*gl_image_free) (void *image);
|
||||
void (*gl_image_draw) (void *gc, void *im, int dx, int dy, int dw, int dh, int smooth);
|
||||
|
@ -1010,6 +1010,7 @@ struct _RGBA_Font_Int
|
|||
Eina_Hash *kerning;
|
||||
Fash_Glyph *fash;
|
||||
unsigned int size;
|
||||
float scale_factor;
|
||||
int real_size;
|
||||
int max_h;
|
||||
int references;
|
||||
|
@ -1033,6 +1034,8 @@ struct _RGBA_Font_Int
|
|||
|
||||
int generation;
|
||||
|
||||
Efl_Text_Font_Bitmap_Scalable bitmap_scalable;
|
||||
|
||||
unsigned char sizeok : 1;
|
||||
unsigned char inuse : 1;
|
||||
};
|
||||
|
|
|
@ -1501,10 +1501,10 @@ struct _Evas_Func
|
|||
void *(*image_plane_assign) (void *data, void *image, int x, int y);
|
||||
void (*image_plane_release) (void *data, void *image, void *plane);
|
||||
|
||||
Evas_Font_Set *(*font_load) (void *engine, const char *name, int size, Font_Rend_Flags wanted_rend);
|
||||
Evas_Font_Set *(*font_memory_load) (void *engine, const char *source, const char *name, int size, const void *fdata, int fdata_size, Font_Rend_Flags wanted_rend);
|
||||
Evas_Font_Set *(*font_add) (void *engine, Evas_Font_Set *font, const char *name, int size, Font_Rend_Flags wanted_rend);
|
||||
Evas_Font_Set *(*font_memory_add) (void *engine, Evas_Font_Set *font, const char *source, const char *name, int size, const void *fdata, int fdata_size, Font_Rend_Flags wanted_rend);
|
||||
Evas_Font_Set *(*font_load) (void *engine, const char *name, int size, Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable);
|
||||
Evas_Font_Set *(*font_memory_load) (void *engine, const char *source, const char *name, int size, const void *fdata, int fdata_size, Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable);
|
||||
Evas_Font_Set *(*font_add) (void *engine, Evas_Font_Set *font, const char *name, int size, Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable);
|
||||
Evas_Font_Set *(*font_memory_add) (void *engine, Evas_Font_Set *font, const char *source, const char *name, int size, const void *fdata, int fdata_size, Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable);
|
||||
void (*font_free) (void *engine, Evas_Font_Set *font);
|
||||
int (*font_ascent_get) (void *engine, Evas_Font_Set *font);
|
||||
int (*font_descent_get) (void *engine, Evas_Font_Set *font);
|
||||
|
@ -1774,7 +1774,7 @@ void evas_font_desc_unref(Evas_Font_Description *fdesc);
|
|||
int evas_font_desc_cmp(const Evas_Font_Description *a, const Evas_Font_Description *b);
|
||||
Evas_Font_Description *evas_font_desc_ref(Evas_Font_Description *fdesc);
|
||||
const char *evas_font_lang_normalize(const char *lang);
|
||||
void * evas_font_load(Evas *evas, Evas_Font_Description *fdesc, const char *source, Evas_Font_Size size);
|
||||
void * evas_font_load(Evas *evas, Evas_Font_Description *fdesc, const char *source, Evas_Font_Size size, Efl_Text_Font_Bitmap_Scalable bitmap_scalable);
|
||||
void evas_font_load_hinting_set(Evas *evas, void *font, int hinting);
|
||||
void evas_object_smart_member_cache_invalidate(Evas_Object *obj, Eina_Bool pass_events, Eina_Bool freeze_events, Eina_Bool sourve_invisible);
|
||||
void evas_text_style_pad_get(Evas_Text_Style_Type style, int *l, int *r, int *t, int *b);
|
||||
|
|
|
@ -748,7 +748,7 @@ Evas_GL_Image *evas_gl_common_image_virtual_scaled_get(Evas_GL_Image *scaled,
|
|||
|
||||
void *evas_gl_font_texture_new(void *gc, RGBA_Font_Glyph *fg);
|
||||
void evas_gl_font_texture_free(void *);
|
||||
void evas_gl_font_texture_draw(void *gc, void *surface, void *dc, RGBA_Font_Glyph *fg, int x, int y);
|
||||
void evas_gl_font_texture_draw(void *gc, void *surface, void *dc, RGBA_Font_Glyph *fg, int x, int y, int w, int h);
|
||||
void *evas_gl_font_image_new(void *gc, RGBA_Font_Glyph *fg, int alpha, Evas_Colorspace cspace);
|
||||
void evas_gl_font_image_free(void *im);
|
||||
void evas_gl_font_image_draw(void *gc, void *im, int dx, int dy, int dw, int dh, int smooth);
|
||||
|
|
|
@ -57,7 +57,7 @@ evas_gl_font_texture_free(void *tex)
|
|||
}
|
||||
|
||||
void
|
||||
evas_gl_font_texture_draw(void *context, void *surface EINA_UNUSED, void *draw_context, RGBA_Font_Glyph *fg, int x, int y)
|
||||
evas_gl_font_texture_draw(void *context, void *surface EINA_UNUSED, void *draw_context, RGBA_Font_Glyph *fg, int x, int y, int w, int h)
|
||||
{
|
||||
Evas_Engine_GL_Context *gc = context;
|
||||
RGBA_Draw_Context *dc = draw_context;
|
||||
|
@ -108,25 +108,25 @@ evas_gl_font_texture_draw(void *context, void *surface EINA_UNUSED, void *draw_c
|
|||
{
|
||||
int nx, ny, nw, nh;
|
||||
|
||||
nx = x; ny = y; nw = tex->w; nh = tex->h;
|
||||
nx = x; ny = y; nw = w; nh = h;
|
||||
RECTS_CLIP_TO_RECT(nx, ny, nw, nh,
|
||||
gc->dc->clip.x, gc->dc->clip.y,
|
||||
gc->dc->clip.w, gc->dc->clip.h);
|
||||
if ((nw < 1) || (nh < 1)) return;
|
||||
if ((nx == x) && (ny == y) && (nw == tex->w) && (nh == tex->h))
|
||||
if ((nx == x) && (ny == y) && (nw == w) && (nh == h))
|
||||
{
|
||||
evas_gl_common_context_font_push(gc, tex,
|
||||
0.0, 0.0, 0.0, 0.0,
|
||||
// sx, sy, sw, sh,
|
||||
x, y, tex->w, tex->h,
|
||||
x, y, w, h,
|
||||
mtex, mx, my, mw, mh, mask_smooth, mask_color,
|
||||
r, g, b, a);
|
||||
return;
|
||||
}
|
||||
ssx = (double)sx + ((double)(sw * (nx - x)) / (double)(tex->w));
|
||||
ssy = (double)sy + ((double)(sh * (ny - y)) / (double)(tex->h));
|
||||
ssw = ((double)sw * (double)(nw)) / (double)(tex->w);
|
||||
ssh = ((double)sh * (double)(nh)) / (double)(tex->h);
|
||||
ssx = (double)sx + ((double)(sw * (nx - x)) / (double)(w));
|
||||
ssy = (double)sy + ((double)(sh * (ny - y)) / (double)(h));
|
||||
ssw = ((double)sw * (double)(nw)) / (double)(w);
|
||||
ssh = ((double)sh * (double)(nh)) / (double)(h);
|
||||
evas_gl_common_context_font_push(gc, tex,
|
||||
ssx, ssy, ssw, ssh,
|
||||
nx, ny, nw, nh,
|
||||
|
@ -138,7 +138,7 @@ evas_gl_font_texture_draw(void *context, void *surface EINA_UNUSED, void *draw_c
|
|||
evas_gl_common_context_font_push(gc, tex,
|
||||
0.0, 0.0, 0.0, 0.0,
|
||||
// sx, sy, sw, sh,
|
||||
x, y, tex->w, tex->h,
|
||||
x, y, w, h,
|
||||
mtex, mx, my, mw, mh, mask_smooth, mask_color,
|
||||
r, g, b, a);
|
||||
}
|
||||
|
@ -147,7 +147,7 @@ evas_gl_font_texture_draw(void *context, void *surface EINA_UNUSED, void *draw_c
|
|||
/* save out clip info */
|
||||
c = gc->dc->clip.use; cx = gc->dc->clip.x; cy = gc->dc->clip.y; cw = gc->dc->clip.w; ch = gc->dc->clip.h;
|
||||
evas_common_draw_context_clip_clip(gc->dc, 0, 0, gc->shared->w, gc->shared->h);
|
||||
evas_common_draw_context_clip_clip(gc->dc, x, y, tex->w, tex->h);
|
||||
evas_common_draw_context_clip_clip(gc->dc, x, y, w, h);
|
||||
/* our clip is 0 size.. abort */
|
||||
if ((gc->dc->clip.w <= 0) || (gc->dc->clip.h <= 0))
|
||||
{
|
||||
|
@ -160,23 +160,23 @@ evas_gl_font_texture_draw(void *context, void *surface EINA_UNUSED, void *draw_c
|
|||
int nx, ny, nw, nh;
|
||||
|
||||
rct = _evas_gl_common_cutout_rects->rects + i;
|
||||
nx = x; ny = y; nw = tex->w; nh = tex->h;
|
||||
nx = x; ny = y; nw = w; nh = h;
|
||||
RECTS_CLIP_TO_RECT(nx, ny, nw, nh, rct->x, rct->y, rct->w, rct->h);
|
||||
if ((nw < 1) || (nh < 1)) continue;
|
||||
if ((nx == x) && (ny == y) && (nw == tex->w) && (nh == tex->h))
|
||||
if ((nx == x) && (ny == y) && (nw == w) && (nh == h))
|
||||
{
|
||||
evas_gl_common_context_font_push(gc, tex,
|
||||
0.0, 0.0, 0.0, 0.0,
|
||||
// sx, sy, sw, sh,
|
||||
x, y, tex->w, tex->h,
|
||||
x, y, w, h,
|
||||
mtex, mx, my, mw, mh, mask_smooth, mask_color,
|
||||
r, g, b, a);
|
||||
continue;
|
||||
}
|
||||
ssx = (double)sx + ((double)(sw * (nx - x)) / (double)(tex->w));
|
||||
ssy = (double)sy + ((double)(sh * (ny - y)) / (double)(tex->h));
|
||||
ssw = ((double)sw * (double)(nw)) / (double)(tex->w);
|
||||
ssh = ((double)sh * (double)(nh)) / (double)(tex->h);
|
||||
ssx = (double)sx + ((double)(sw * (nx - x)) / (double)(w));
|
||||
ssy = (double)sy + ((double)(sh * (ny - y)) / (double)(h));
|
||||
ssw = ((double)sw * (double)(nw)) / (double)(w);
|
||||
ssh = ((double)sh * (double)(nh)) / (double)(h);
|
||||
evas_gl_common_context_font_push(gc, tex,
|
||||
ssx, ssy, ssw, ssh,
|
||||
nx, ny, nw, nh,
|
||||
|
|
|
@ -3192,30 +3192,33 @@ eng_image_cache_get(void *data EINA_UNUSED)
|
|||
|
||||
static Evas_Font_Set *
|
||||
eng_font_load(void *data EINA_UNUSED, const char *name, int size,
|
||||
Font_Rend_Flags wanted_rend)
|
||||
Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable)
|
||||
{
|
||||
return (Evas_Font_Set *) evas_common_font_load(name, size, wanted_rend);
|
||||
return (Evas_Font_Set *) evas_common_font_load(name, size, wanted_rend, bitmap_scalable);
|
||||
}
|
||||
|
||||
static Evas_Font_Set *
|
||||
eng_font_memory_load(void *data EINA_UNUSED, const char *source, const char *name, int size, const void *fdata, int fdata_size, Font_Rend_Flags wanted_rend)
|
||||
eng_font_memory_load(void *data EINA_UNUSED, const char *source, const char *name, int size, const void *fdata, int fdata_size,
|
||||
Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable)
|
||||
{
|
||||
return (Evas_Font_Set *) evas_common_font_memory_load(source, name, size,
|
||||
fdata, fdata_size, wanted_rend);
|
||||
fdata, fdata_size, wanted_rend, bitmap_scalable);
|
||||
}
|
||||
|
||||
static Evas_Font_Set *
|
||||
eng_font_add(void *data EINA_UNUSED, Evas_Font_Set *font, const char *name, int size, Font_Rend_Flags wanted_rend)
|
||||
eng_font_add(void *data EINA_UNUSED, Evas_Font_Set *font, const char *name, int size, Font_Rend_Flags wanted_rend,
|
||||
Efl_Text_Font_Bitmap_Scalable bitmap_scalable)
|
||||
{
|
||||
return (Evas_Font_Set *) evas_common_font_add((RGBA_Font *) font, name,
|
||||
size, wanted_rend);
|
||||
size, wanted_rend, bitmap_scalable);
|
||||
}
|
||||
|
||||
static Evas_Font_Set *
|
||||
eng_font_memory_add(void *data EINA_UNUSED, Evas_Font_Set *font, const char *source, const char *name, int size, const void *fdata, int fdata_size, Font_Rend_Flags wanted_rend)
|
||||
eng_font_memory_add(void *data EINA_UNUSED, Evas_Font_Set *font, const char *source, const char *name, int size, const void *fdata, int fdata_size,
|
||||
Font_Rend_Flags wanted_rend, Efl_Text_Font_Bitmap_Scalable bitmap_scalable)
|
||||
{
|
||||
return (Evas_Font_Set *) evas_common_font_memory_add((RGBA_Font *) font,
|
||||
source, name, size, fdata, fdata_size, wanted_rend);
|
||||
source, name, size, fdata, fdata_size, wanted_rend, bitmap_scalable);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
Loading…
Reference in New Issue