forked from enlightenment/efl
Elm label: Various fixes and cleanups.
1. Fixed ellipsis to work correctly. 2. Changed it to sync the background size to the text part size. 3. Font resizing also works nicely now. 4. Split internal text to format and actual text. SVN revision: 60132
This commit is contained in:
parent
60a3b54405
commit
00b8e22769
|
@ -1397,7 +1397,7 @@ collections {
|
|||
data.item: "max_font_size" "60";
|
||||
styles {
|
||||
style { name: "textblock_style";
|
||||
base: "font=Sans font_size=10 color=#000 wrap=word text_class=label";
|
||||
base: "font=Sans font_size=10 color=#000 text_class=label";
|
||||
tag: "br" "\n";
|
||||
tag: "ps" "ps";
|
||||
tag: "hilight" "+ font=Sans:style=Bold";
|
||||
|
@ -1429,63 +1429,6 @@ collections {
|
|||
rel2.relative: 1.0 1.0;
|
||||
text {
|
||||
style: "textblock_style";
|
||||
min: 1 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
group { name: "elm/label/base_wrap/default";
|
||||
data.item: "default_font_size" "10";
|
||||
data.item: "min_font_size" "6";
|
||||
data.item: "max_font_size" "60";
|
||||
parts {
|
||||
part { name: "label.swallow.background";
|
||||
type: SWALLOW;
|
||||
description { state: "default" 0.0;
|
||||
visible: 1;
|
||||
rel1 { relative: 0 0; to: "elm.text"; }
|
||||
rel2 { relative: 1 1; to: "elm.text"; }
|
||||
}
|
||||
}
|
||||
part { name: "elm.text";
|
||||
type: TEXTBLOCK;
|
||||
mouse_events: 0;
|
||||
scale: 1;
|
||||
description { state: "default" 0.0;
|
||||
text {
|
||||
style: "textblock_style";
|
||||
min: 0 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
group { name: "elm/label/base_wrap_ellipsis/default";
|
||||
data.item: "default_font_size" "10";
|
||||
data.item: "min_font_size" "6";
|
||||
data.item: "max_font_size" "60";
|
||||
parts {
|
||||
part { name: "label.swallow.background";
|
||||
type: SWALLOW;
|
||||
description { state: "default" 0.0;
|
||||
visible: 1;
|
||||
rel1 { relative: 0 0; to: "elm.text"; }
|
||||
rel2 { relative: 1 1; to: "elm.text"; }
|
||||
}
|
||||
}
|
||||
part { name: "elm.text";
|
||||
type: TEXTBLOCK;
|
||||
mouse_events: 0;
|
||||
scale: 1;
|
||||
multiline: 1;
|
||||
description { state: "default" 0.0;
|
||||
fixed: 0 1;
|
||||
text {
|
||||
style: "textblock_style";
|
||||
min: 0 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1529,33 +1472,6 @@ collections {
|
|||
}
|
||||
}
|
||||
|
||||
group { name: "elm/label/base_wrap/marker";
|
||||
data.item: "default_font_size" "10";
|
||||
data.item: "min_font_size" "6";
|
||||
data.item: "max_font_size" "60";
|
||||
parts {
|
||||
part { name: "label.swallow.background";
|
||||
type: SWALLOW;
|
||||
description { state: "default" 0.0;
|
||||
visible: 1;
|
||||
rel1 { relative: 0 0; to: "elm.text"; }
|
||||
rel2 { relative: 1 1; to: "elm.text"; }
|
||||
}
|
||||
}
|
||||
part { name: "elm.text";
|
||||
type: TEXTBLOCK;
|
||||
mouse_events: 0;
|
||||
scale: 1;
|
||||
description { state: "default" 0.0;
|
||||
text {
|
||||
style: "textblock_style2";
|
||||
min: 0 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
group { name: "elm/label/base/slide_long";
|
||||
data.item: "default_font_size" "10";
|
||||
data.item: "min_font_size" "6";
|
||||
|
|
|
@ -15,6 +15,7 @@ struct _Widget_Data
|
|||
Evas_Object *lbl;
|
||||
Evas_Object *bg;
|
||||
const char *label;
|
||||
const char *format;
|
||||
Ecore_Job *deferred_recalc_job;
|
||||
double slide_duration;
|
||||
Evas_Coord lastw;
|
||||
|
@ -36,8 +37,8 @@ static void _sizing_eval(Evas_Object *obj);
|
|||
static int _get_value_in_key_string(const char *oldstring, const char *key, char **value);
|
||||
static int _strbuf_key_value_replace(Eina_Strbuf *srcbuf, const char *key, const char *value, int deleteflag);
|
||||
static int _stringshare_key_value_replace(const char **srcstring, const char *key, const char *value, int deleteflag);
|
||||
static int _is_width_over(Evas_Object *obj, Eina_Bool multiline);
|
||||
static void _ellipsis_label_to_width(Evas_Object *obj, Eina_Bool multiline);
|
||||
static int _is_width_over(Evas_Object *obj);
|
||||
static void _ellipsis_label_to_width(Evas_Object *obj);
|
||||
static void _label_sliding_change(Evas_Object *obj);
|
||||
|
||||
static void
|
||||
|
@ -66,8 +67,8 @@ _elm_win_recalc_job(void *data)
|
|||
}
|
||||
|
||||
if ((wd->ellipsis) && (wd->linewrap) && (wd->wrap_h > 0) &&
|
||||
(_is_width_over(data, 1) == 1))
|
||||
_ellipsis_label_to_width(data, 1);
|
||||
(_is_width_over(data) == 1))
|
||||
_ellipsis_label_to_width(data);
|
||||
|
||||
maxh = minh;
|
||||
evas_object_size_hint_max_set(data, -1, maxh);
|
||||
|
@ -90,18 +91,8 @@ _theme_change(Evas_Object *obj)
|
|||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
if (!wd) return;
|
||||
|
||||
if (wd->linewrap)
|
||||
{
|
||||
if (wd->ellipsis)
|
||||
_elm_theme_object_set(obj, wd->lbl, "label", "base_wrap_ellipsis",
|
||||
elm_widget_style_get(obj));
|
||||
else
|
||||
_elm_theme_object_set(obj, wd->lbl, "label", "base_wrap",
|
||||
elm_widget_style_get(obj));
|
||||
}
|
||||
else
|
||||
_elm_theme_object_set(obj, wd->lbl, "label", "base",
|
||||
elm_widget_style_get(obj));
|
||||
_elm_theme_object_set(obj, wd->lbl, "label", "base",
|
||||
elm_widget_style_get(obj));
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -120,7 +111,8 @@ _theme_hook(Evas_Object *obj)
|
|||
_elm_widget_mirrored_reload(obj);
|
||||
_mirrored_set(obj, elm_widget_mirrored_get(obj));
|
||||
_theme_change(obj);
|
||||
edje_object_part_text_set(wd->lbl, "elm.text", wd->label);
|
||||
edje_object_part_text_set(wd->lbl, "elm.text", wd->format);
|
||||
edje_object_part_text_append(wd->lbl, "elm.text", wd->label);
|
||||
edje_object_scale_set(wd->lbl, elm_widget_scale_get(obj) *
|
||||
_elm_config->scale);
|
||||
_label_sliding_change(obj);
|
||||
|
@ -134,6 +126,18 @@ _sizing_eval(Evas_Object *obj)
|
|||
Evas_Coord minw = -1, minh = -1, maxw = -1, maxh = -1;
|
||||
Evas_Coord resw, resh;
|
||||
if (!wd) return;
|
||||
|
||||
{
|
||||
Evas_Coord ox, oy, ow, oh;
|
||||
evas_object_geometry_get(obj, &ox, &oy, &ow, &oh);
|
||||
if (wd->wrap_w > 0)
|
||||
ow = wd->wrap_w;
|
||||
if (wd->wrap_h > 0)
|
||||
oh = wd->wrap_h;
|
||||
evas_object_move(wd->lbl, ox, oy);
|
||||
evas_object_resize(wd->lbl, ow, oh);
|
||||
}
|
||||
|
||||
if (wd->linewrap)
|
||||
{
|
||||
evas_object_geometry_get(wd->lbl, NULL, NULL, &resw, &resh);
|
||||
|
@ -150,22 +154,31 @@ _sizing_eval(Evas_Object *obj)
|
|||
evas_object_geometry_get(wd->lbl, NULL, NULL, &resw, &resh);
|
||||
edje_object_size_min_calc(wd->lbl, &minw, &minh);
|
||||
if (wd->wrap_w > 0 && minw > wd->wrap_w) minw = wd->wrap_w;
|
||||
if (wd->wrap_h > 0 && minh > wd->wrap_h) minh = wd->wrap_h;
|
||||
evas_object_size_hint_min_set(obj, minw, minh);
|
||||
maxh = minh;
|
||||
evas_object_size_hint_max_set(obj, maxw, maxh);
|
||||
if ((wd->ellipsis) && (_is_width_over(obj, 0) == 1))
|
||||
_ellipsis_label_to_width(obj, 0);
|
||||
if ((wd->ellipsis) && (_is_width_over(obj) == 1))
|
||||
_ellipsis_label_to_width(obj);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_resize(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
|
||||
_lbl_resize(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
|
||||
{
|
||||
Widget_Data *wd = elm_widget_data_get(data);
|
||||
if (!wd) return;
|
||||
if (wd->linewrap) _sizing_eval(data);
|
||||
}
|
||||
|
||||
static void
|
||||
_move_resize(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
|
||||
{
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
if (!wd) return;
|
||||
_sizing_eval(obj);
|
||||
}
|
||||
|
||||
static int
|
||||
_get_value_in_key_string(const char *oldstring, const char *key, char **value)
|
||||
{
|
||||
|
@ -349,52 +362,61 @@ _stringshare_key_value_replace(const char **srcstring, const char *key, const ch
|
|||
}
|
||||
|
||||
static int
|
||||
_is_width_over(Evas_Object *obj, Eina_Bool multiline)
|
||||
_is_width_over(Evas_Object *obj)
|
||||
{
|
||||
Evas_Coord x, y, w, h;
|
||||
Evas_Coord vx, vy, vw, vh;
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
if (!wd) return 0;
|
||||
const char *ellipsis_string = "...";
|
||||
int mincount = sizeof(ellipsis_string) - 1;
|
||||
char *plaintxt;
|
||||
int plainlen = 0;
|
||||
|
||||
plaintxt = _elm_util_mkup_to_text(edje_object_part_text_get(wd->lbl, "elm.text"));
|
||||
if (plaintxt)
|
||||
edje_object_part_geometry_get(wd->lbl, "elm.text", &x, &y, NULL, NULL);
|
||||
/* Calc the formatted size with ellipsis turned off */
|
||||
if (wd->ellipsis)
|
||||
{
|
||||
plainlen = strlen(plaintxt);
|
||||
free(plaintxt);
|
||||
}
|
||||
// too short to ellipsis
|
||||
if (plainlen <= mincount) return 0;
|
||||
const Evas_Object *tb;
|
||||
char *_kvalue;
|
||||
double ellipsis;
|
||||
Eina_Bool found_key = EINA_FALSE;
|
||||
if (_get_value_in_key_string(wd->format, "ellipsis", &_kvalue) == 0)
|
||||
{
|
||||
ellipsis = atof(_kvalue);
|
||||
found_key = EINA_TRUE;
|
||||
}
|
||||
|
||||
edje_object_part_geometry_get(wd->lbl, "elm.text", &x, &y, &w, &h);
|
||||
if (_stringshare_key_value_replace(&wd->format,
|
||||
"ellipsis", NULL, 1) == 0)
|
||||
{
|
||||
edje_object_part_text_set(wd->lbl, "elm.text", wd->format);
|
||||
edje_object_part_text_append(wd->lbl, "elm.text", wd->label);
|
||||
}
|
||||
|
||||
tb = edje_object_part_object_get(wd->lbl, "elm.text");
|
||||
evas_object_textblock_size_formatted_get(tb, &w, &h);
|
||||
|
||||
if (found_key)
|
||||
{
|
||||
Eina_Strbuf *elpbuf;
|
||||
elpbuf = eina_strbuf_new();
|
||||
eina_strbuf_append_printf(elpbuf, "%f", ellipsis);
|
||||
if (_stringshare_key_value_replace(&wd->format, "ellipsis",
|
||||
eina_strbuf_string_get(elpbuf), 0) == 0)
|
||||
{
|
||||
edje_object_part_text_set(wd->lbl, "elm.text", wd->format);
|
||||
edje_object_part_text_append(wd->lbl, "elm.text", wd->label);
|
||||
}
|
||||
eina_strbuf_free(elpbuf);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
const Evas_Object *tb;
|
||||
tb = edje_object_part_object_get(wd->lbl, "elm.text");
|
||||
evas_object_textblock_size_formatted_get(tb, &w, &h);
|
||||
}
|
||||
evas_object_geometry_get(obj, &vx, &vy, &vw, &vh);
|
||||
|
||||
if (!multiline) // single line
|
||||
{
|
||||
// skip if too early to check widget size
|
||||
if ((w < 0) && (h < 0)) return 0;
|
||||
// if string fits at widget
|
||||
if ((x >= 0) && (y >= 0))
|
||||
{
|
||||
if ((wd->wrap_w > 0) && (wd->wrap_w < w))
|
||||
{
|
||||
Evas_Coord minw, minh;
|
||||
|
||||
edje_object_size_min_calc(wd->lbl, &minw, &minh);
|
||||
if (minw < wd->wrap_w) return 0; // min insufficient
|
||||
else return 1;
|
||||
}
|
||||
else return 0;
|
||||
}
|
||||
if ((0 < wd->wrap_w) && (w > wd->wrap_w)) return 1;
|
||||
}
|
||||
else // multiline
|
||||
{
|
||||
if (((x >= 0) || (y >= 0)) && (h > wd->wrap_h)) return 1;
|
||||
}
|
||||
if (w > wd->wrap_w || h > wd->wrap_h)
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -403,137 +425,24 @@ static void
|
|||
_ellipsis_fontsize_set(Evas_Object *obj, int fontsize)
|
||||
{
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
Eina_Strbuf *fontbuf = NULL;
|
||||
int removeflag = 0;
|
||||
if (!wd) return;
|
||||
|
||||
Eina_Strbuf *fontbuf = NULL;
|
||||
Eina_Strbuf *txtbuf = NULL;
|
||||
txtbuf = eina_strbuf_new();
|
||||
fontbuf = eina_strbuf_new();
|
||||
eina_strbuf_append(txtbuf, edje_object_part_text_get(wd->lbl, "elm.text"));
|
||||
eina_strbuf_append_printf(fontbuf, "%d", fontsize);
|
||||
_strbuf_key_value_replace(txtbuf, "font_size", eina_strbuf_string_get(fontbuf), 0);
|
||||
edje_object_part_text_set(wd->lbl, "elm.text", eina_strbuf_string_get(txtbuf));
|
||||
eina_strbuf_free(fontbuf);
|
||||
eina_strbuf_free(txtbuf);
|
||||
}
|
||||
if (fontsize == 0) removeflag = 1; // remove fontsize tag
|
||||
|
||||
static Eina_Bool
|
||||
_ellipsis_cut_chars_to_widget(Evas_Object *obj)
|
||||
{
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
if (!wd) return EINA_FALSE;
|
||||
const char *ellipsis_string = "...";
|
||||
int mincount = sizeof(ellipsis_string) - 1;
|
||||
Evas_Coord w, h;
|
||||
Evas_Textblock_Cursor *tc1, *tc2;
|
||||
char *cutstr, *elstr;
|
||||
int limitw = 0;
|
||||
int lencutstr = 0;
|
||||
int i = 0;
|
||||
|
||||
edje_object_part_geometry_get(wd->lbl, "elm.text", NULL, NULL, &w, &h);
|
||||
if (w <= 0) return EINA_FALSE;
|
||||
tc1 = evas_object_textblock_cursor_new((Evas_Object *)edje_object_part_object_get(wd->lbl, "elm.text"));
|
||||
tc2 = evas_object_textblock_cursor_new((Evas_Object *)edje_object_part_object_get(wd->lbl, "elm.text"));
|
||||
|
||||
if ((wd->wrap_w > 0) && (wd->wrap_w < w)) limitw = wd->wrap_w;
|
||||
else limitw = w;
|
||||
evas_textblock_cursor_pos_set(tc1, 0);
|
||||
evas_textblock_cursor_char_coord_set(tc2, limitw, 0);
|
||||
|
||||
// if too small to cut,(is it bug? or any other reasons?)
|
||||
// then fallback to one step mode
|
||||
if (evas_textblock_cursor_pos_get(tc2) < mincount)
|
||||
if (_stringshare_key_value_replace(&wd->format, "font_size", eina_strbuf_string_get(fontbuf), removeflag) == 0)
|
||||
{
|
||||
Evas_Coord cx, cy, cw, ch;
|
||||
int eolpos = evas_textblock_cursor_paragraph_text_length_get(tc1);
|
||||
|
||||
for (i = eolpos; i > mincount; i--)
|
||||
{
|
||||
evas_textblock_cursor_pos_set(tc2, i);
|
||||
evas_textblock_cursor_char_geometry_get(tc2, &cx, &cy, &cw, &ch);
|
||||
if (cx <= limitw) break;
|
||||
}
|
||||
|
||||
if (evas_textblock_cursor_pos_get(tc2) < mincount)
|
||||
{
|
||||
evas_textblock_cursor_free(tc1);
|
||||
evas_textblock_cursor_free(tc2);
|
||||
return EINA_FALSE;
|
||||
}
|
||||
edje_object_part_text_set(wd->lbl, "elm.text", wd->format);
|
||||
edje_object_part_text_append(wd->lbl, "elm.text", wd->label);
|
||||
}
|
||||
|
||||
for (i = 0; i <= mincount; i++) evas_textblock_cursor_char_prev(tc2);
|
||||
cutstr = evas_textblock_cursor_range_text_get(tc1, tc2, EVAS_TEXTBLOCK_TEXT_PLAIN);
|
||||
if (!cutstr) return EINA_FALSE;
|
||||
|
||||
lencutstr = strlen(cutstr);
|
||||
elstr = alloca(sizeof(char) * (lencutstr + mincount + 1));
|
||||
strcpy(elstr, cutstr);
|
||||
free(cutstr);
|
||||
strcat(elstr, ellipsis_string);
|
||||
edje_object_part_text_set(wd->lbl, "elm.text", elstr);
|
||||
|
||||
evas_textblock_cursor_free(tc1);
|
||||
evas_textblock_cursor_free(tc2);
|
||||
|
||||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
_ellipsis_cut_lines_to_widget(Evas_Object *obj)
|
||||
{
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
if (!wd) return EINA_FALSE;
|
||||
const char *ellipsis_string = "...";
|
||||
int mincount = sizeof(ellipsis_string) - 1;
|
||||
Evas_Coord w, h;
|
||||
Evas_Textblock_Cursor *tc1, *tc2;
|
||||
int linenum = 0, cutline = 0;
|
||||
double lineheight = 0.0;
|
||||
char *cutstr, *elstr;
|
||||
int lencutstr = 0;
|
||||
int limith = 0;
|
||||
int i;
|
||||
|
||||
edje_object_part_geometry_get(wd->lbl, "elm.text", NULL, NULL, &w, &h);
|
||||
|
||||
tc1 = evas_object_textblock_cursor_new((Evas_Object *)edje_object_part_object_get(wd->lbl, "elm.text"));
|
||||
tc2 = evas_object_textblock_cursor_new((Evas_Object *)edje_object_part_object_get(wd->lbl, "elm.text"));
|
||||
// goto last paragraph
|
||||
while (evas_textblock_cursor_paragraph_next(tc2) == EINA_TRUE);
|
||||
|
||||
evas_textblock_cursor_paragraph_last(tc2);
|
||||
// get total linenumber
|
||||
linenum = evas_textblock_cursor_line_geometry_get(tc2, NULL, NULL, NULL, NULL);
|
||||
lineheight = (double)h / (double)linenum;
|
||||
if ((wd->wrap_h > 0) && (wd->wrap_h < h)) limith = wd->wrap_h;
|
||||
else limith = h;
|
||||
cutline = limith / lineheight;
|
||||
if (cutline < 1) cutline = 1;
|
||||
|
||||
evas_textblock_cursor_pos_set(tc1, 0);
|
||||
evas_textblock_cursor_line_set(tc2, cutline - 1);
|
||||
evas_textblock_cursor_line_char_last(tc2);
|
||||
for (i = 0; i <= mincount; i++) evas_textblock_cursor_char_prev(tc2);
|
||||
cutstr = evas_textblock_cursor_range_text_get(tc1, tc2, EVAS_TEXTBLOCK_TEXT_PLAIN);
|
||||
if (!cutstr) return EINA_FALSE;
|
||||
|
||||
lencutstr = strlen(cutstr);
|
||||
elstr = alloca(sizeof(char) * (lencutstr + mincount + 1));
|
||||
strcpy(elstr, cutstr);
|
||||
free(cutstr);
|
||||
strcat(elstr, ellipsis_string);
|
||||
edje_object_part_text_set(wd->lbl, "elm.text", elstr);
|
||||
|
||||
evas_textblock_cursor_free(tc1);
|
||||
evas_textblock_cursor_free(tc2);
|
||||
|
||||
return EINA_TRUE;
|
||||
eina_strbuf_free(fontbuf);
|
||||
}
|
||||
|
||||
static void
|
||||
_ellipsis_label_to_width(Evas_Object *obj, Eina_Bool multiline)
|
||||
_ellipsis_label_to_width(Evas_Object *obj)
|
||||
{
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
if (!wd) return;
|
||||
|
@ -554,12 +463,12 @@ _ellipsis_label_to_width(Evas_Object *obj, Eina_Bool multiline)
|
|||
if (minfontsize > maxfontsize || cur_fontsize == 1) return; // theme is not ready for ellipsis
|
||||
if (eina_stringshare_strlen(wd->label) <= 0) return;
|
||||
|
||||
if (_get_value_in_key_string(wd->label, "font_size", &kvalue) == 0)
|
||||
if (_get_value_in_key_string(wd->format, "font_size", &kvalue) == 0)
|
||||
{
|
||||
if (kvalue != NULL) cur_fontsize = atoi(kvalue);
|
||||
}
|
||||
|
||||
while (_is_width_over(obj, multiline))
|
||||
while (_is_width_over(obj))
|
||||
{
|
||||
if (cur_fontsize > minfontsize)
|
||||
{
|
||||
|
@ -569,16 +478,7 @@ _ellipsis_label_to_width(Evas_Object *obj, Eina_Bool multiline)
|
|||
}
|
||||
else
|
||||
{
|
||||
if (!multiline) // single line
|
||||
{
|
||||
_ellipsis_cut_chars_to_widget(obj);
|
||||
break;
|
||||
}
|
||||
else // multiline
|
||||
{
|
||||
_ellipsis_cut_lines_to_widget(obj);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -671,17 +571,23 @@ elm_label_add(Evas_Object *parent)
|
|||
wd->ellipsis = EINA_FALSE;
|
||||
wd->slidingmode = EINA_FALSE;
|
||||
wd->slidingellipsis = EINA_FALSE;
|
||||
wd->wrap_w = 0;
|
||||
wd->wrap_h = 0;
|
||||
wd->wrap_w = -1;
|
||||
wd->wrap_h = -1;
|
||||
wd->slide_duration = 10;
|
||||
|
||||
wd->lbl = edje_object_add(e);
|
||||
_elm_theme_object_set(obj, wd->lbl, "label", "base", "default");
|
||||
wd->format = eina_stringshare_add("");
|
||||
wd->label = eina_stringshare_add("<br>");
|
||||
edje_object_part_text_set(wd->lbl, "elm.text", "<br>");
|
||||
elm_widget_resize_object_set(obj, wd->lbl);
|
||||
edje_object_part_text_set(wd->lbl, "elm.text", wd->format);
|
||||
edje_object_part_text_append(wd->lbl, "elm.text", wd->label);
|
||||
|
||||
evas_object_event_callback_add(wd->lbl, EVAS_CALLBACK_RESIZE, _resize, obj);
|
||||
elm_widget_sub_object_add(obj, wd->lbl);
|
||||
evas_object_show(wd->lbl);
|
||||
|
||||
evas_object_event_callback_add(wd->lbl, EVAS_CALLBACK_RESIZE, _lbl_resize, obj);
|
||||
evas_object_event_callback_add(obj, EVAS_CALLBACK_RESIZE, _move_resize, NULL);
|
||||
evas_object_event_callback_add(obj, EVAS_CALLBACK_MOVE, _move_resize, NULL);
|
||||
|
||||
_mirrored_set(obj, elm_widget_mirrored_get(obj));
|
||||
wd->changed = 1;
|
||||
|
@ -705,7 +611,8 @@ elm_label_label_set(Evas_Object *obj, const char *label)
|
|||
if (!wd) return;
|
||||
if (!label) label = "";
|
||||
eina_stringshare_replace(&wd->label, label);
|
||||
edje_object_part_text_set(wd->lbl, "elm.text", label);
|
||||
edje_object_part_text_set(wd->lbl, "elm.text", wd->format);
|
||||
edje_object_part_text_append(wd->lbl, "elm.text", wd->label);
|
||||
wd->changed = 1;
|
||||
_sizing_eval(obj);
|
||||
}
|
||||
|
@ -729,8 +636,6 @@ elm_label_label_get(const Evas_Object *obj)
|
|||
/**
|
||||
* Set the wrapping behavior of the label
|
||||
*
|
||||
* FIXME: currently all types wrap the same way (as defined in theme).
|
||||
*
|
||||
* @param obj The label object
|
||||
* @param wrap To wrap text or not
|
||||
* @ingroup Label
|
||||
|
@ -740,16 +645,39 @@ elm_label_line_wrap_set(Evas_Object *obj, Elm_Wrap_Type wrap)
|
|||
{
|
||||
ELM_CHECK_WIDTYPE(obj, widtype);
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
const char *wrap_str;
|
||||
int len;
|
||||
|
||||
if (!wd) return;
|
||||
const char *t;
|
||||
if (wd->linewrap == wrap) return;
|
||||
wd->linewrap = wrap;
|
||||
t = eina_stringshare_add(elm_label_label_get(obj));
|
||||
_theme_change(obj);
|
||||
elm_label_label_set(obj, t);
|
||||
eina_stringshare_del(t);
|
||||
wd->changed = 1;
|
||||
_sizing_eval(obj);
|
||||
len = strlen(wd->label);
|
||||
if (len <= 0) return;
|
||||
|
||||
switch (wrap)
|
||||
{
|
||||
case ELM_WRAP_CHAR:
|
||||
wrap_str = "char";
|
||||
break;
|
||||
case ELM_WRAP_WORD:
|
||||
wrap_str = "word";
|
||||
break;
|
||||
case ELM_WRAP_MIXED:
|
||||
wrap_str = "mixed";
|
||||
break;
|
||||
default:
|
||||
wrap_str = "none";
|
||||
break;
|
||||
}
|
||||
|
||||
if (_stringshare_key_value_replace(&wd->format,
|
||||
"wrap", wrap_str, 0) == 0)
|
||||
{
|
||||
edje_object_part_text_set(wd->lbl, "elm.text", wd->format);
|
||||
edje_object_part_text_append(wd->lbl, "elm.text", wd->label);
|
||||
wd->changed = 1;
|
||||
_sizing_eval(obj);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -783,7 +711,11 @@ elm_label_wrap_width_set(Evas_Object *obj, Evas_Coord w)
|
|||
if (!wd) return;
|
||||
if (w < 0) w = 0;
|
||||
if (wd->wrap_w == w) return;
|
||||
if (wd->ellipsis) edje_object_part_text_set(wd->lbl, "elm.text", wd->label);
|
||||
if (wd->ellipsis)
|
||||
{
|
||||
edje_object_part_text_set(wd->lbl, "elm.text", wd->format);
|
||||
edje_object_part_text_append(wd->lbl, "elm.text", wd->label);
|
||||
}
|
||||
wd->wrap_w = w;
|
||||
_sizing_eval(obj);
|
||||
}
|
||||
|
@ -820,7 +752,11 @@ elm_label_wrap_height_set(Evas_Object *obj,
|
|||
if (!wd) return;
|
||||
if (h < 0) h = 0;
|
||||
if (wd->wrap_h == h) return;
|
||||
if (wd->ellipsis) edje_object_part_text_set(wd->lbl, "elm.text", wd->label);
|
||||
if (wd->ellipsis)
|
||||
{
|
||||
edje_object_part_text_set(wd->lbl, "elm.text", wd->format);
|
||||
edje_object_part_text_append(wd->lbl, "elm.text", wd->label);
|
||||
}
|
||||
wd->wrap_h = h;
|
||||
_sizing_eval(obj);
|
||||
}
|
||||
|
@ -870,9 +806,10 @@ elm_label_fontsize_set(Evas_Object *obj, int fontsize)
|
|||
|
||||
if (fontsize == 0) removeflag = 1; // remove fontsize tag
|
||||
|
||||
if (_stringshare_key_value_replace(&wd->label, "font_size", eina_strbuf_string_get(fontbuf), removeflag) == 0)
|
||||
if (_stringshare_key_value_replace(&wd->format, "font_size", eina_strbuf_string_get(fontbuf), removeflag) == 0)
|
||||
{
|
||||
edje_object_part_text_set(wd->lbl, "elm.text", wd->label);
|
||||
edje_object_part_text_set(wd->lbl, "elm.text", wd->format);
|
||||
edje_object_part_text_append(wd->lbl, "elm.text", wd->label);
|
||||
wd->changed = 1;
|
||||
_sizing_eval(obj);
|
||||
}
|
||||
|
@ -903,8 +840,11 @@ elm_label_text_align_set(Evas_Object *obj, const char *alignmode)
|
|||
len = strlen(wd->label);
|
||||
if (len <= 0) return;
|
||||
|
||||
if (_stringshare_key_value_replace(&wd->label, "align", alignmode, 0) == 0)
|
||||
edje_object_part_text_set(wd->lbl, "elm.text", wd->label);
|
||||
if (_stringshare_key_value_replace(&wd->format, "align", alignmode, 0) == 0)
|
||||
{
|
||||
edje_object_part_text_set(wd->lbl, "elm.text", wd->format);
|
||||
edje_object_part_text_append(wd->lbl, "elm.text", wd->label);
|
||||
}
|
||||
|
||||
wd->changed = 1;
|
||||
_sizing_eval(obj);
|
||||
|
@ -940,9 +880,10 @@ elm_label_text_color_set(Evas_Object *obj,
|
|||
colorbuf = eina_strbuf_new();
|
||||
eina_strbuf_append_printf(colorbuf, "#%02X%02X%02X%02X", r, g, b, a);
|
||||
|
||||
if (_stringshare_key_value_replace(&wd->label, "color", eina_strbuf_string_get(colorbuf), 0) == 0)
|
||||
if (_stringshare_key_value_replace(&wd->format, "color", eina_strbuf_string_get(colorbuf), 0) == 0)
|
||||
{
|
||||
edje_object_part_text_set(wd->lbl, "elm.text", wd->label);
|
||||
edje_object_part_text_set(wd->lbl, "elm.text", wd->format);
|
||||
edje_object_part_text_append(wd->lbl, "elm.text", wd->label);
|
||||
wd->changed = 1;
|
||||
_sizing_eval(obj);
|
||||
}
|
||||
|
@ -997,13 +938,30 @@ elm_label_ellipsis_set(Evas_Object *obj, Eina_Bool ellipsis)
|
|||
{
|
||||
ELM_CHECK_WIDTYPE(obj, widtype);
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
Eina_Strbuf *fontbuf = NULL;
|
||||
int len, removeflag = 0;
|
||||
|
||||
if (!wd) return;
|
||||
if (wd->ellipsis == ellipsis) return;
|
||||
wd->ellipsis = ellipsis;
|
||||
if (wd->linewrap) _theme_change(obj);
|
||||
edje_object_part_text_set(wd->lbl, "elm.text", wd->label);
|
||||
wd->changed = 1;
|
||||
_sizing_eval(obj);
|
||||
len = strlen(wd->label);
|
||||
if (len <= 0) return;
|
||||
|
||||
if (ellipsis == EINA_FALSE) removeflag = 1; // remove fontsize tag
|
||||
|
||||
fontbuf = eina_strbuf_new();
|
||||
eina_strbuf_append_printf(fontbuf, "%f", 1.0);
|
||||
|
||||
if (_stringshare_key_value_replace(&wd->format,
|
||||
"ellipsis", eina_strbuf_string_get(fontbuf), removeflag) == 0)
|
||||
{
|
||||
edje_object_part_text_set(wd->lbl, "elm.text", wd->format);
|
||||
edje_object_part_text_append(wd->lbl, "elm.text", wd->label);
|
||||
wd->changed = 1;
|
||||
_sizing_eval(obj);
|
||||
}
|
||||
eina_strbuf_free(fontbuf);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue