forked from enlightenment/enlightenment
* [Editable] Improve e_editable_char_size_get()
* [Entry] Prepares the entry for copy/paste support but it's just not possible for now SVN revision: 24918
This commit is contained in:
parent
004cab8539
commit
b2e1c43afd
|
@ -744,24 +744,37 @@ e_editable_char_size_get(Evas_Object *editable, int *w, int *h)
|
|||
{
|
||||
int tw = 0, th = 0;
|
||||
Evas *evas;
|
||||
Evas_Object *text_obj;
|
||||
E_Editable_Smart_Data *sd;
|
||||
char *text = "Tout est bon dans l'abricot sauf le noyau!"
|
||||
"Wakey wakey! Eggs and Bakey!";
|
||||
const char *font, *font_source;
|
||||
Evas_Text_Style_Type style;
|
||||
int font_size;
|
||||
|
||||
if (w) *w = 0;
|
||||
if (h) *h = 0;
|
||||
|
||||
if ((!editable) || (!(evas = evas_object_evas_get(editable))))
|
||||
return;
|
||||
if ((!(sd = evas_object_smart_data_get(editable))))
|
||||
if (!(sd = evas_object_smart_data_get(editable)))
|
||||
return;
|
||||
if (!(text_obj = edje_object_part_object_get(sd->text_object, "text")))
|
||||
return;
|
||||
|
||||
if ((sd->average_char_w <= 0) || (sd->average_char_h <= 0))
|
||||
{
|
||||
/* TODO: 1st method */
|
||||
edje_object_part_text_set(sd->text_object, "text", text);
|
||||
edje_object_size_min_calc(sd->text_object, &tw, &th);
|
||||
edje_object_part_text_set(sd->text_object, "text", sd->text ? sd->text : "NULL");
|
||||
font_source = evas_object_text_font_source_get(text_obj);
|
||||
evas_object_text_font_get(text_obj, &font, &font_size);
|
||||
style = evas_object_text_style_get(text_obj);
|
||||
|
||||
text_obj = evas_object_text_add(evas);
|
||||
evas_object_text_font_source_set(text_obj, font_source);
|
||||
evas_object_text_font_set(text_obj, font, font_size);
|
||||
evas_object_text_style_set(text_obj, style);
|
||||
evas_object_text_text_set(text_obj, text);
|
||||
evas_object_geometry_get(text_obj, NULL, NULL, &tw, &th);
|
||||
evas_object_del(text_obj);
|
||||
|
||||
sd->average_char_w = tw / strlen(text);
|
||||
sd->average_char_h = th;
|
||||
|
|
|
@ -282,6 +282,7 @@ _e_entry_key_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
|
|||
int start_pos, end_pos;
|
||||
int selecting;
|
||||
int changed = 0;
|
||||
char *range;
|
||||
|
||||
if ((!obj) || (!(sd = evas_object_smart_data_get(obj))))
|
||||
return;
|
||||
|
@ -295,11 +296,6 @@ _e_entry_key_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
|
|||
end_pos = (cursor_pos >= selection_pos) ? cursor_pos : selection_pos;
|
||||
selecting = (start_pos != end_pos);
|
||||
|
||||
/* TODO: CTRL + A, X, C, V */
|
||||
|
||||
if (!sd->enabled)
|
||||
return;
|
||||
|
||||
/* Move the cursor/selection to the left */
|
||||
if (strcmp(event->key, "Left") == 0)
|
||||
{
|
||||
|
@ -339,9 +335,7 @@ _e_entry_key_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
|
|||
}
|
||||
}
|
||||
/* Move the cursor/selection to the start of the entry */
|
||||
else if ((strcmp(event->keyname, "Home") == 0) ||
|
||||
((event->string) && (strlen(event->string) == 1) &&
|
||||
(event->string[0] == 0x1)))
|
||||
else if (strcmp(event->keyname, "Home") == 0)
|
||||
{
|
||||
e_editable_cursor_move_to_start(editable);
|
||||
if (!evas_key_modifier_is_set(event->modifiers, "Shift"))
|
||||
|
@ -349,9 +343,7 @@ _e_entry_key_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
|
|||
e_editable_cursor_pos_get(editable));
|
||||
}
|
||||
/* Move the cursor/selection to the end of the entry */
|
||||
else if ((strcmp(event->keyname, "End") == 0) ||
|
||||
((event->string) && (strlen(event->string) == 1) &&
|
||||
(event->string[0] == 0x5)))
|
||||
else if (strcmp(event->keyname, "End") == 0)
|
||||
{
|
||||
e_editable_cursor_move_to_end(editable);
|
||||
if (!evas_key_modifier_is_set(event->modifiers, "Shift"))
|
||||
|
@ -359,9 +351,7 @@ _e_entry_key_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
|
|||
e_editable_cursor_pos_get(editable));
|
||||
}
|
||||
/* Remove the previous character */
|
||||
else if ((strcmp(event->keyname, "BackSpace") == 0) ||
|
||||
((event->string) && (strlen(event->string) == 1) &&
|
||||
(event->string[0] == 0x8)))
|
||||
else if ((sd->enabled) && (strcmp(event->keyname, "BackSpace") == 0))
|
||||
{
|
||||
if (selecting)
|
||||
changed = e_editable_delete(editable, start_pos, end_pos);
|
||||
|
@ -369,15 +359,38 @@ _e_entry_key_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
|
|||
changed = e_editable_delete(editable, cursor_pos - 1, cursor_pos);
|
||||
}
|
||||
/* Remove the next character */
|
||||
else if ((!strcmp(event->keyname, "Delete")) ||
|
||||
((event->string) && (strlen(event->string) == 1) &&
|
||||
(event->string[0] == 0x4)))
|
||||
else if ((sd->enabled) && (strcmp(event->keyname, "Delete") == 0))
|
||||
{
|
||||
if (selecting)
|
||||
changed = e_editable_delete(editable, start_pos, end_pos);
|
||||
else
|
||||
changed = e_editable_delete(editable, cursor_pos, cursor_pos + 1);
|
||||
}
|
||||
/* Ctrl + A,C,X,V */
|
||||
else if (evas_key_modifier_is_set(event->modifiers, "Control"))
|
||||
{
|
||||
if (strcmp(event->keyname, "a") == 0)
|
||||
e_editable_select_all(editable);
|
||||
else if ((strcmp(event->keyname, "x") == 0) ||
|
||||
(strcmp(event->keyname, "c") == 0))
|
||||
{
|
||||
if (selecting)
|
||||
{
|
||||
range = e_editable_text_range_get(editable, start_pos, end_pos);
|
||||
if (range)
|
||||
{
|
||||
//ecore_x_selection_clipboard_set();
|
||||
free(range);
|
||||
}
|
||||
if ((sd->enabled) && (strcmp(event->keyname, "x") == 0))
|
||||
changed = e_editable_delete(editable, start_pos, end_pos);
|
||||
}
|
||||
}
|
||||
else if (strcmp(event->keyname, "v") == 0)
|
||||
{
|
||||
//ecore_x_selection_clipboard_request();
|
||||
}
|
||||
}
|
||||
/* Otherwise, we insert the corresponding character */
|
||||
else if ((event->string) &&
|
||||
((strlen(event->string) != 1) || (event->string[0] >= 0x20)))
|
||||
|
|
Loading…
Reference in New Issue