From b6f51da478f49986e7f2e2277502d45055f849cb Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Tue, 3 Feb 2009 05:07:58 +0000 Subject: [PATCH] allow individual objects to have differing scaling factors (object scale overrides edje global scale) SVN revision: 38908 --- legacy/edje/src/lib/Edje.h | 4 +++- legacy/edje/src/lib/edje_calc.c | 19 +++++++++++-------- legacy/edje/src/lib/edje_private.h | 1 + legacy/edje/src/lib/edje_text.c | 28 +++++++++++++++++----------- legacy/edje/src/lib/edje_util.c | 22 ++++++++++++++++++++++ 5 files changed, 54 insertions(+), 20 deletions(-) diff --git a/legacy/edje/src/lib/Edje.h b/legacy/edje/src/lib/Edje.h index 825fcabdc5..717cc02063 100644 --- a/legacy/edje/src/lib/Edje.h +++ b/legacy/edje/src/lib/Edje.h @@ -181,7 +181,9 @@ extern "C" { EAPI const char *edje_fontset_append_get (void); EAPI void edje_scale_set (double scale); EAPI double edje_scale_get (void); - + EAPI void edje_object_scale_set (Evas_Object *obj, double scale); + EAPI double edje_object_scale_get (const Evas_Object *obj); + /* edje_load.c */ EAPI Eina_List *edje_file_collection_list (const char *file); EAPI void edje_file_collection_list_free (Eina_List *lst); diff --git a/legacy/edje/src/lib/edje_calc.c b/legacy/edje/src/lib/edje_calc.c index 997cebb8fb..8b1a580ccf 100644 --- a/legacy/edje/src/lib/edje_calc.c +++ b/legacy/edje/src/lib/edje_calc.c @@ -270,13 +270,16 @@ _edje_part_recalc_single(Edje *ed, int flags) { int minw = 0, minh = 0, maxw = 0, maxh = 0; + double sc; flags = FLAG_XY; + sc = ed->scale; + if (sc == 0.0) sc = _edje_scale; // if (flags & FLAG_X) { minw = desc->min.w; - if (ep->part->scale) minw = (int)(((double)minw) * _edje_scale); + if (ep->part->scale) minw = (int)(((double)minw) * sc); if (ep->swallow_params.min.w > desc->min.w) minw = ep->swallow_params.min.w; @@ -287,7 +290,7 @@ _edje_part_recalc_single(Edje *ed, maxw = desc->max.w; if (maxw > 0) { - if (ep->part->scale) maxw = (int)(((double)maxw) * _edje_scale); + if (ep->part->scale) maxw = (int)(((double)maxw) * sc); if (maxw < 1) maxw = 1; } } @@ -300,7 +303,7 @@ _edje_part_recalc_single(Edje *ed, maxw = desc->max.w; if (maxw > 0) { - if (ep->part->scale) maxw = (int)(((double)maxw) * _edje_scale); + if (ep->part->scale) maxw = (int)(((double)maxw) * sc); if (maxw < 1) maxw = 1; } if (ep->swallow_params.max.w < maxw) @@ -315,7 +318,7 @@ _edje_part_recalc_single(Edje *ed, // if (flags & FLAG_Y) { minh = desc->min.h; - if (ep->part->scale) minh = (int)(((double)minh) * _edje_scale); + if (ep->part->scale) minh = (int)(((double)minh) * sc); if (ep->swallow_params.min.h > desc->min.h) minh = ep->swallow_params.min.h; @@ -326,7 +329,7 @@ _edje_part_recalc_single(Edje *ed, maxh = desc->max.h; if (maxh > 0) { - if (ep->part->scale) maxh = (int)(((double)maxh) * _edje_scale); + if (ep->part->scale) maxh = (int)(((double)maxh) * sc); if (maxh < 1) maxh = 1; } } @@ -339,7 +342,7 @@ _edje_part_recalc_single(Edje *ed, maxh = desc->max.h; if (maxh > 0) { - if (ep->part->scale) maxh = (int)(((double)maxh) * _edje_scale); + if (ep->part->scale) maxh = (int)(((double)maxh) * sc); if (maxh < 1) maxh = 1; } if (ep->swallow_params.max.h < maxh) @@ -647,7 +650,7 @@ _edje_part_recalc_single(Edje *ed, } if (ep->part->scale) - evas_object_scale_set(ep->object, _edje_scale); + evas_object_scale_set(ep->object, sc); if (stl) { @@ -786,7 +789,7 @@ _edje_part_recalc_single(Edje *ed, } } if (ep->part->scale) - evas_object_scale_set(ep->object, _edje_scale); + evas_object_scale_set(ep->object, sc); if (inlined_font) evas_object_text_font_source_set(ep->object, ed->path); else evas_object_text_font_source_set(ep->object, NULL); diff --git a/legacy/edje/src/lib/edje_private.h b/legacy/edje/src/lib/edje_private.h index 5fc4a814bc..7a1600783e 100644 --- a/legacy/edje/src/lib/edje_private.h +++ b/legacy/edje/src/lib/edje_private.h @@ -684,6 +684,7 @@ struct _Edje int block; int load_error; int freeze; + double scale; struct { void (*func) (void *data, Evas_Object *obj, const char *part); diff --git a/legacy/edje/src/lib/edje_text.c b/legacy/edje/src/lib/edje_text.c index ff775b18fd..673ff95d56 100644 --- a/legacy/edje/src/lib/edje_text.c +++ b/legacy/edje/src/lib/edje_text.c @@ -147,11 +147,15 @@ _edje_text_fit_x(Edje *ed, Edje_Real_Part *ep, char *buf; int c1 = -1, c2 = -1, loop = 0, extra; size_t orig_len; + double sc; + sc = ed->scale; + if (sc == 0.0) sc = _edje_scale; + *free_text = 0; if (sw <= 1) return ""; - if (ep->part->scale) evas_object_scale_set(ep->object, _edje_scale); + if (ep->part->scale) evas_object_scale_set(ep->object, sc); evas_object_text_font_set(ep->object, font, size); evas_object_text_text_set(ep->object, text); @@ -331,8 +335,10 @@ _edje_text_recalc_apply(Edje *ed, Edje_Real_Part *ep, Evas_Coord tw, th; Evas_Coord sw, sh; int inlined_font = 0, free_text = 0; + double sc; - + sc = ed->scale; + if (sc == 0.0) sc = _edje_scale; text = chosen_desc->text.text; font = _edje_text_class_font_get(ed, chosen_desc, &size, &sfont); @@ -413,7 +419,7 @@ _edje_text_recalc_apply(Edje *ed, Edje_Real_Part *ep, if (inlined_font) evas_object_text_font_source_set(ep->object, ed->path); else evas_object_text_font_source_set(ep->object, NULL); - if (ep->part->scale) evas_object_scale_set(ep->object, _edje_scale); + if (ep->part->scale) evas_object_scale_set(ep->object, sc); evas_object_text_font_set(ep->object, font, size); evas_object_text_text_set(ep->object, text); part_get_geometry(ep, &tw, &th); @@ -430,7 +436,7 @@ _edje_text_recalc_apply(Edje *ed, Edje_Real_Part *ep, if (inlined_font) evas_object_text_font_source_set(ep->object, ed->path); else evas_object_text_font_source_set(ep->object, NULL); - if (ep->part->scale) evas_object_scale_set(ep->object, _edje_scale); + if (ep->part->scale) evas_object_scale_set(ep->object, sc); evas_object_text_font_set(ep->object, font, size); part_get_geometry(ep, &tw, &th); if ((size > 0) && (tw == 0)) break; @@ -449,7 +455,7 @@ _edje_text_recalc_apply(Edje *ed, Edje_Real_Part *ep, if (inlined_font) evas_object_text_font_source_set(ep->object, ed->path); else evas_object_text_font_source_set(ep->object, NULL); - if (ep->part->scale) evas_object_scale_set(ep->object, _edje_scale); + if (ep->part->scale) evas_object_scale_set(ep->object, sc); evas_object_text_font_set(ep->object, font, size); part_get_geometry(ep, &tw, &th); if ((size > 0) && (tw == 0)) break; @@ -467,7 +473,7 @@ _edje_text_recalc_apply(Edje *ed, Edje_Real_Part *ep, if (inlined_font) evas_object_text_font_source_set(ep->object, ed->path); else evas_object_text_font_source_set(ep->object, NULL); - if (ep->part->scale) evas_object_scale_set(ep->object, _edje_scale); + if (ep->part->scale) evas_object_scale_set(ep->object, sc); evas_object_text_font_set(ep->object, font, size); evas_object_text_text_set(ep->object, text); part_get_geometry(ep, &tw, &th); @@ -488,7 +494,7 @@ _edje_text_recalc_apply(Edje *ed, Edje_Real_Part *ep, if (inlined_font) evas_object_text_font_source_set(ep->object, ed->path); else evas_object_text_font_source_set(ep->object, NULL); - if (ep->part->scale) evas_object_scale_set(ep->object, _edje_scale); + if (ep->part->scale) evas_object_scale_set(ep->object, sc); evas_object_text_font_set(ep->object, font, size); part_get_geometry(ep, &tw, &th); if ((size > 0) && (th == 0)) break; @@ -499,7 +505,7 @@ _edje_text_recalc_apply(Edje *ed, Edje_Real_Part *ep, { int current; - if (ep->part->scale) evas_object_scale_set(ep->object, _edje_scale); + if (ep->part->scale) evas_object_scale_set(ep->object, sc); evas_object_text_font_set(ep->object, font, 10); part_get_geometry(ep, &tw, &th); @@ -524,7 +530,7 @@ _edje_text_recalc_apply(Edje *ed, Edje_Real_Part *ep, { current = (top + bottom) / 2; - if (ep->part->scale) evas_object_scale_set(ep->object, _edje_scale); + if (ep->part->scale) evas_object_scale_set(ep->object, sc); evas_object_text_font_set(ep->object, font, current); part_get_geometry(ep, &tw, &th); @@ -538,7 +544,7 @@ _edje_text_recalc_apply(Edje *ed, Edje_Real_Part *ep, { current++; - if (ep->part->scale) evas_object_scale_set(ep->object, _edje_scale); + if (ep->part->scale) evas_object_scale_set(ep->object, sc); evas_object_text_font_set(ep->object, font, current); part_get_geometry(ep, &tw, &th); } while (th <= sh); @@ -570,7 +576,7 @@ _edje_text_recalc_apply(Edje *ed, Edje_Real_Part *ep, if (inlined_font) evas_object_text_font_source_set(ep->object, ed->path); else evas_object_text_font_source_set(ep->object, NULL); - if (ep->part->scale) evas_object_scale_set(ep->object, _edje_scale); + if (ep->part->scale) evas_object_scale_set(ep->object, sc); evas_object_text_font_set(ep->object, font, size); evas_object_text_text_set(ep->object, text); part_get_geometry(ep, &tw, &th); diff --git a/legacy/edje/src/lib/edje_util.c b/legacy/edje/src/lib/edje_util.c index 70b8eb6660..85ea21d05d 100644 --- a/legacy/edje/src/lib/edje_util.c +++ b/legacy/edje/src/lib/edje_util.c @@ -163,6 +163,28 @@ edje_scale_get(void) return _edje_scale; } +EAPI void +edje_object_scale_set(Evas_Object *obj, double scale) +{ + Edje *ed; + + ed = _edje_fetch(obj); + if (!ed) return; + if (ed->scale == scale) return; + ed->scale = scale; + edje_object_calc_force(obj); +} + +EAPI double +edje_object_scale_get(const Evas_Object *obj) +{ + Edje *ed; + + ed = _edje_fetch(obj); + if (!ed) return 0.0; + return ed->scale; +} + /* FIXDOC: Verify/Expand */ /** Get Edje object data * @param obj A valid Evas_Object handle