forked from enlightenment/efl
fix disk selector to handle intl trext properly. was bad to begin with.
SVN revision: 59831
This commit is contained in:
parent
eeaf9ea360
commit
284ee2b43b
|
@ -133,6 +133,25 @@ test_diskselector(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *even
|
|||
evas_object_show(disk);
|
||||
evas_object_smart_callback_add(disk, "selected", _print_disk_info_cb, NULL);
|
||||
|
||||
disk = elm_diskselector_add(win);
|
||||
ic = elm_icon_add(win);
|
||||
snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR);
|
||||
elm_icon_file_set(ic, buf, NULL);
|
||||
elm_icon_scale_set(ic, 1, 1);
|
||||
elm_diskselector_item_append(disk, "머리스타일", ic, NULL, NULL);
|
||||
elm_diskselector_item_append(disk, "プロが伝授する", NULL, NULL, NULL);
|
||||
elm_diskselector_item_append(disk, "生上访要求政府", NULL, NULL, NULL);
|
||||
elm_diskselector_item_append(disk, "English", NULL, NULL, NULL);
|
||||
elm_diskselector_item_append(disk, "والشريعة", NULL, NULL, NULL);
|
||||
elm_diskselector_item_append(disk, "עִבְרִית", NULL, NULL, NULL);
|
||||
elm_diskselector_item_append(disk, "Grüßen", NULL, NULL, NULL);
|
||||
elm_diskselector_round_set(disk, EINA_TRUE);
|
||||
evas_object_size_hint_weight_set(disk, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
||||
evas_object_size_hint_align_set(disk, EVAS_HINT_FILL, 0.5);
|
||||
elm_box_pack_end(bx, disk);
|
||||
evas_object_show(disk);
|
||||
evas_object_smart_callback_add(disk, "selected", _print_disk_info_cb, NULL);
|
||||
|
||||
// displayed item number setting example
|
||||
disk = elm_diskselector_add(win);
|
||||
elm_diskselector_display_item_num_set(disk, 5);
|
||||
|
|
|
@ -413,21 +413,33 @@ _event_hook(Evas_Object *obj, Evas_Object *src __UNUSED__, Evas_Callback_Type ty
|
|||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
static int
|
||||
_count_letter(const char *str)
|
||||
{
|
||||
int pos = 0;
|
||||
int code = 0, chnum;
|
||||
|
||||
for (chnum = 0; ; chnum++)
|
||||
{
|
||||
pos = evas_string_char_next_get(str, pos, &code);
|
||||
if (code == 0) break;
|
||||
}
|
||||
return chnum;
|
||||
}
|
||||
|
||||
static int
|
||||
_check_letter(const char *str, int length)
|
||||
{
|
||||
int code = str[length];
|
||||
|
||||
if (code == '\0')
|
||||
return length; // null string
|
||||
else if (((code >= 65) && (code <= 90)) || ((code >= 97) && (code <= 122)))
|
||||
return length; // alphabet
|
||||
else if ((48 <= code) && (code < 58))
|
||||
return length; // number
|
||||
else if (((33 <= code) && (code < 47)) || ((58 <= code) && (code < 64))
|
||||
|| ((91 <= code) && (code < 96)) || ((123 <= code) && (code < 126)))
|
||||
return length; // special letter
|
||||
return length - 1;
|
||||
int pos = 0;
|
||||
int code = 0, chnum;
|
||||
|
||||
for (chnum = 0; ; chnum++)
|
||||
{
|
||||
if (chnum == length) break;
|
||||
pos = evas_string_char_next_get(str, pos, &code);
|
||||
if (code == 0) break;
|
||||
}
|
||||
return pos;
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
|
@ -459,7 +471,9 @@ _check_string(void *data)
|
|||
if ((x + w <= ox) || (x >= ox + ow))
|
||||
continue;
|
||||
|
||||
len = eina_stringshare_strlen(it->label);
|
||||
len = _count_letter(it->label);
|
||||
// // FIXME: len should be # of ut8f letters. ie count using utf8 string walk, not stringshare len
|
||||
// len = eina_stringshare_strlen(it->label);
|
||||
|
||||
if (x <= ox + 5)
|
||||
edje_object_signal_emit(it->base.view, "elm,state,left_side",
|
||||
|
@ -477,6 +491,7 @@ _check_string(void *data)
|
|||
"elm");
|
||||
}
|
||||
|
||||
// if len is les that the limit len, skip anyway
|
||||
if (len <= wd->len_side)
|
||||
continue;
|
||||
|
||||
|
@ -489,7 +504,9 @@ _check_string(void *data)
|
|||
|
||||
length = len - (int)(diff * steps / (ow / 3));
|
||||
length = MAX(length, wd->len_side);
|
||||
// limit string len to "length" ut8f chars
|
||||
length = _check_letter(it->label, length);
|
||||
// cut it off at byte mark returned form _check_letter
|
||||
strncpy(buf, it->label, length);
|
||||
buf[length] = '\0';
|
||||
edje_object_part_text_set(it->base.view, "elm.text", buf);
|
||||
|
|
Loading…
Reference in New Issue