forked from enlightenment/efl
Edje textblock: Improved textblock fit and added support for size_range.
It's a bit quirky at the moment as you have to set the base font size (text.size) although this doesn't have any effect on textblocks.
This commit is contained in:
parent
2e001a25bf
commit
91ae899232
|
@ -1,3 +1,8 @@
|
||||||
|
2013-02-15 Tom Hacohen (TAsn)
|
||||||
|
|
||||||
|
* Edje textblock: Improved textblock fit and added support for
|
||||||
|
size_range.
|
||||||
|
|
||||||
2013-02-15 Jiyoun Park (jypark)
|
2013-02-15 Jiyoun Park (jypark)
|
||||||
|
|
||||||
* Add infrastructure to handle message between ecore and parent ecore in Ecore_Evas.
|
* Add infrastructure to handle message between ecore and parent ecore in Ecore_Evas.
|
||||||
|
|
2
NEWS
2
NEWS
|
@ -64,6 +64,7 @@ Additions:
|
||||||
* Add eio_eet_sync symbols.
|
* Add eio_eet_sync symbols.
|
||||||
* Add infrastructure to handle buggy touchscreen in Ecore_Input_Evas.
|
* Add infrastructure to handle buggy touchscreen in Ecore_Input_Evas.
|
||||||
* Add infrastructure to handle message between ecore and parent ecore in Ecore_Evas.
|
* Add infrastructure to handle message between ecore and parent ecore in Ecore_Evas.
|
||||||
|
* Edje textblock: Added support for size_range.
|
||||||
|
|
||||||
Deprecations:
|
Deprecations:
|
||||||
* ecore_x:
|
* ecore_x:
|
||||||
|
@ -167,3 +168,4 @@ Fixes:
|
||||||
* Fix memory leak in error case in ethumb.
|
* Fix memory leak in error case in ethumb.
|
||||||
* fix bug not to display preedit string with PREEDIT_TYPE_NONE style
|
* fix bug not to display preedit string with PREEDIT_TYPE_NONE style
|
||||||
* Fix bug candidate word couldn't be selected with up/down key in the preedit status
|
* Fix bug candidate word couldn't be selected with up/down key in the preedit status
|
||||||
|
* Edje textblock: Improved textblock fit.
|
||||||
|
|
|
@ -1144,6 +1144,26 @@ _edje_part_recalc_single_step(Edje_Part_Description_Common *desc,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static double
|
||||||
|
_edje_part_recalc_single_textblock_scale_range_adjust(Edje_Part_Description_Text *chosen_desc, double base_scale, double scale)
|
||||||
|
{
|
||||||
|
double size, min, max;
|
||||||
|
|
||||||
|
if (chosen_desc->text.size == 0)
|
||||||
|
return scale;
|
||||||
|
|
||||||
|
min = base_scale * chosen_desc->text.size_range_min;
|
||||||
|
max = chosen_desc->text.size_range_max * base_scale;
|
||||||
|
size = chosen_desc->text.size * scale;
|
||||||
|
|
||||||
|
if ((size > max) && (max > 0))
|
||||||
|
scale = max / (double) chosen_desc->text.size;
|
||||||
|
else if (size < min)
|
||||||
|
scale = min / (double) chosen_desc->text.size;
|
||||||
|
|
||||||
|
return scale;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_edje_part_recalc_single_textblock(FLOAT_T sc,
|
_edje_part_recalc_single_textblock(FLOAT_T sc,
|
||||||
Edje *ed,
|
Edje *ed,
|
||||||
|
@ -1277,35 +1297,56 @@ _edje_part_recalc_single_textblock(FLOAT_T sc,
|
||||||
if (minh && (*maxh < *minh)) *maxh = *minh;
|
if (minh && (*maxh < *minh)) *maxh = *minh;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((chosen_desc->text.fit_x) || (chosen_desc->text.fit_y))
|
if ((chosen_desc->text.fit_x) || (chosen_desc->text.fit_y))
|
||||||
{
|
{
|
||||||
double s = 1.0;
|
double base_s = 1.0;
|
||||||
|
double orig_s;
|
||||||
|
double s = base_s;
|
||||||
|
|
||||||
if (ep->part->scale) s = TO_DOUBLE(sc);
|
if (ep->part->scale) base_s = TO_DOUBLE(sc);
|
||||||
eo_do(ep->object,
|
eo_do(ep->object,
|
||||||
evas_obj_scale_set(s),
|
evas_obj_scale_set(base_s),
|
||||||
evas_obj_textblock_size_formatted_get(&tw, &th));
|
evas_obj_textblock_size_formatted_get(&tw, &th));
|
||||||
|
|
||||||
|
orig_s = base_s;
|
||||||
|
/* Now make it bigger so calculations will be more accurate
|
||||||
|
* and less influenced by hinting... */
|
||||||
|
{
|
||||||
|
orig_s = _edje_part_recalc_single_textblock_scale_range_adjust(chosen_desc, base_s, orig_s * params->w / (double) tw);
|
||||||
|
eo_do(ep->object,
|
||||||
|
evas_obj_scale_set(orig_s),
|
||||||
|
evas_obj_textblock_size_formatted_get(&tw, &th));
|
||||||
|
}
|
||||||
if (chosen_desc->text.fit_x)
|
if (chosen_desc->text.fit_x)
|
||||||
{
|
{
|
||||||
if ((tw > 0) && (tw > params->w))
|
if (tw > 0)
|
||||||
{
|
{
|
||||||
s = (s * params->w) / (double)tw;
|
s = _edje_part_recalc_single_textblock_scale_range_adjust(chosen_desc, base_s, orig_s * params->w / tw);
|
||||||
eo_do(ep->object,
|
eo_do(ep->object,
|
||||||
evas_obj_scale_set(s),
|
evas_obj_scale_set(s),
|
||||||
evas_obj_textblock_size_formatted_get(&tw, &th));
|
evas_obj_textblock_size_formatted_get(NULL, NULL));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (chosen_desc->text.fit_y)
|
if (chosen_desc->text.fit_y)
|
||||||
{
|
{
|
||||||
if ((th > 0) && (th > params->h))
|
if (th > 0)
|
||||||
{
|
{
|
||||||
s = (s * params->h) / (double)th;
|
double tmp_s = _edje_part_recalc_single_textblock_scale_range_adjust(chosen_desc, base_s, orig_s * params->h / (double) th);
|
||||||
|
/* If we already have X fit, restrict Y to be no bigger
|
||||||
|
* than what we got with X. */
|
||||||
|
if (!((chosen_desc->text.fit_x) && (tmp_s > s)))
|
||||||
|
{
|
||||||
|
s = tmp_s;
|
||||||
|
}
|
||||||
|
|
||||||
eo_do(ep->object,
|
eo_do(ep->object,
|
||||||
evas_obj_scale_set(s),
|
evas_obj_scale_set(s),
|
||||||
evas_obj_textblock_size_formatted_get(&tw, &th));
|
evas_obj_textblock_size_formatted_get(NULL, NULL));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
evas_object_textblock_valign_set(ep->object, TO_DOUBLE(chosen_desc->text.align.y));
|
evas_object_textblock_valign_set(ep->object, TO_DOUBLE(chosen_desc->text.align.y));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue