* [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;
|
int tw = 0, th = 0;
|
||||||
Evas *evas;
|
Evas *evas;
|
||||||
|
Evas_Object *text_obj;
|
||||||
E_Editable_Smart_Data *sd;
|
E_Editable_Smart_Data *sd;
|
||||||
char *text = "Tout est bon dans l'abricot sauf le noyau!"
|
char *text = "Tout est bon dans l'abricot sauf le noyau!"
|
||||||
"Wakey wakey! Eggs and Bakey!";
|
"Wakey wakey! Eggs and Bakey!";
|
||||||
|
const char *font, *font_source;
|
||||||
|
Evas_Text_Style_Type style;
|
||||||
|
int font_size;
|
||||||
|
|
||||||
if (w) *w = 0;
|
if (w) *w = 0;
|
||||||
if (h) *h = 0;
|
if (h) *h = 0;
|
||||||
|
|
||||||
if ((!editable) || (!(evas = evas_object_evas_get(editable))))
|
if ((!editable) || (!(evas = evas_object_evas_get(editable))))
|
||||||
return;
|
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;
|
return;
|
||||||
|
|
||||||
if ((sd->average_char_w <= 0) || (sd->average_char_h <= 0))
|
if ((sd->average_char_w <= 0) || (sd->average_char_h <= 0))
|
||||||
{
|
{
|
||||||
/* TODO: 1st method */
|
font_source = evas_object_text_font_source_get(text_obj);
|
||||||
edje_object_part_text_set(sd->text_object, "text", text);
|
evas_object_text_font_get(text_obj, &font, &font_size);
|
||||||
edje_object_size_min_calc(sd->text_object, &tw, &th);
|
style = evas_object_text_style_get(text_obj);
|
||||||
edje_object_part_text_set(sd->text_object, "text", sd->text ? sd->text : "NULL");
|
|
||||||
|
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_w = tw / strlen(text);
|
||||||
sd->average_char_h = th;
|
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 start_pos, end_pos;
|
||||||
int selecting;
|
int selecting;
|
||||||
int changed = 0;
|
int changed = 0;
|
||||||
|
char *range;
|
||||||
|
|
||||||
if ((!obj) || (!(sd = evas_object_smart_data_get(obj))))
|
if ((!obj) || (!(sd = evas_object_smart_data_get(obj))))
|
||||||
return;
|
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;
|
end_pos = (cursor_pos >= selection_pos) ? cursor_pos : selection_pos;
|
||||||
selecting = (start_pos != end_pos);
|
selecting = (start_pos != end_pos);
|
||||||
|
|
||||||
/* TODO: CTRL + A, X, C, V */
|
|
||||||
|
|
||||||
if (!sd->enabled)
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* Move the cursor/selection to the left */
|
/* Move the cursor/selection to the left */
|
||||||
if (strcmp(event->key, "Left") == 0)
|
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 */
|
/* Move the cursor/selection to the start of the entry */
|
||||||
else if ((strcmp(event->keyname, "Home") == 0) ||
|
else if (strcmp(event->keyname, "Home") == 0)
|
||||||
((event->string) && (strlen(event->string) == 1) &&
|
|
||||||
(event->string[0] == 0x1)))
|
|
||||||
{
|
{
|
||||||
e_editable_cursor_move_to_start(editable);
|
e_editable_cursor_move_to_start(editable);
|
||||||
if (!evas_key_modifier_is_set(event->modifiers, "Shift"))
|
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));
|
e_editable_cursor_pos_get(editable));
|
||||||
}
|
}
|
||||||
/* Move the cursor/selection to the end of the entry */
|
/* Move the cursor/selection to the end of the entry */
|
||||||
else if ((strcmp(event->keyname, "End") == 0) ||
|
else if (strcmp(event->keyname, "End") == 0)
|
||||||
((event->string) && (strlen(event->string) == 1) &&
|
|
||||||
(event->string[0] == 0x5)))
|
|
||||||
{
|
{
|
||||||
e_editable_cursor_move_to_end(editable);
|
e_editable_cursor_move_to_end(editable);
|
||||||
if (!evas_key_modifier_is_set(event->modifiers, "Shift"))
|
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));
|
e_editable_cursor_pos_get(editable));
|
||||||
}
|
}
|
||||||
/* Remove the previous character */
|
/* Remove the previous character */
|
||||||
else if ((strcmp(event->keyname, "BackSpace") == 0) ||
|
else if ((sd->enabled) && (strcmp(event->keyname, "BackSpace") == 0))
|
||||||
((event->string) && (strlen(event->string) == 1) &&
|
|
||||||
(event->string[0] == 0x8)))
|
|
||||||
{
|
{
|
||||||
if (selecting)
|
if (selecting)
|
||||||
changed = e_editable_delete(editable, start_pos, end_pos);
|
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);
|
changed = e_editable_delete(editable, cursor_pos - 1, cursor_pos);
|
||||||
}
|
}
|
||||||
/* Remove the next character */
|
/* Remove the next character */
|
||||||
else if ((!strcmp(event->keyname, "Delete")) ||
|
else if ((sd->enabled) && (strcmp(event->keyname, "Delete") == 0))
|
||||||
((event->string) && (strlen(event->string) == 1) &&
|
|
||||||
(event->string[0] == 0x4)))
|
|
||||||
{
|
{
|
||||||
if (selecting)
|
if (selecting)
|
||||||
changed = e_editable_delete(editable, start_pos, end_pos);
|
changed = e_editable_delete(editable, start_pos, end_pos);
|
||||||
else
|
else
|
||||||
changed = e_editable_delete(editable, cursor_pos, cursor_pos + 1);
|
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 */
|
/* Otherwise, we insert the corresponding character */
|
||||||
else if ((event->string) &&
|
else if ((event->string) &&
|
||||||
((strlen(event->string) != 1) || (event->string[0] >= 0x20)))
|
((strlen(event->string) != 1) || (event->string[0] >= 0x20)))
|
||||||
|
|
Loading…
Reference in New Issue