From: Enlightenment S. <no-...@en...> - 2009-02-03 05:08:06
|
Log: allow individual objects to have differing scaling factors (object scale overrides edje global scale) Author: raster Date: 2009-02-02 21:07:58 -0800 (Mon, 02 Feb 2009) New Revision: 38908 Modified: trunk/edje/src/lib/Edje.h trunk/edje/src/lib/edje_calc.c trunk/edje/src/lib/edje_private.h trunk/edje/src/lib/edje_text.c trunk/edje/src/lib/edje_util.c Modified: trunk/edje/src/lib/Edje.h =================================================================== --- trunk/edje/src/lib/Edje.h 2009-02-02 18:30:41 UTC (rev 38907) +++ trunk/edje/src/lib/Edje.h 2009-02-03 05:07:58 UTC (rev 38908) @@ -181,7 +181,9 @@ 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); Modified: trunk/edje/src/lib/edje_calc.c =================================================================== --- trunk/edje/src/lib/edje_calc.c 2009-02-02 18:30:41 UTC (rev 38907) +++ trunk/edje/src/lib/edje_calc.c 2009-02-03 05:07:58 UTC (rev 38908) @@ -270,13 +270,16 @@ 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 @@ 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 @@ 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 @@ // 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 @@ 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 @@ 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 @@ } 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 @@ } } 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); Modified: trunk/edje/src/lib/edje_private.h =================================================================== --- trunk/edje/src/lib/edje_private.h 2009-02-02 18:30:41 UTC (rev 38907) +++ trunk/edje/src/lib/edje_private.h 2009-02-03 05:07:58 UTC (rev 38908) @@ -684,6 +684,7 @@ int block; int load_error; int freeze; + double scale; struct { void (*func) (void *data, Evas_Object *obj, const char *part); Modified: trunk/edje/src/lib/edje_text.c =================================================================== --- trunk/edje/src/lib/edje_text.c 2009-02-02 18:30:41 UTC (rev 38907) +++ trunk/edje/src/lib/edje_text.c 2009-02-03 05:07:58 UTC (rev 38908) @@ -147,11 +147,15 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ { 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 @@ { 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 @@ { 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 @@ 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); Modified: trunk/edje/src/lib/edje_util.c =================================================================== --- trunk/edje/src/lib/edje_util.c 2009-02-02 18:30:41 UTC (rev 38907) +++ trunk/edje/src/lib/edje_util.c 2009-02-03 05:07:58 UTC (rev 38908) @@ -163,6 +163,28 @@ 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 |