forked from enlightenment/efl
Edje entry: Added cursor_mode to edje to toggle between UNDER (efl/terminal) and BEFORE (gtk/rest of the world) cursor modes.
SVN revision: 56547
This commit is contained in:
parent
20e89e9d01
commit
b34172c91e
|
@ -128,6 +128,7 @@ static void st_collections_group_parts_part_source5(void);
|
||||||
static void st_collections_group_parts_part_source6(void);
|
static void st_collections_group_parts_part_source6(void);
|
||||||
static void st_collections_group_parts_part_entry_mode(void);
|
static void st_collections_group_parts_part_entry_mode(void);
|
||||||
static void st_collections_group_parts_part_select_mode(void);
|
static void st_collections_group_parts_part_select_mode(void);
|
||||||
|
static void st_collections_group_parts_part_cursor_mode(void);
|
||||||
static void st_collections_group_parts_part_multiline(void);
|
static void st_collections_group_parts_part_multiline(void);
|
||||||
static void st_collections_group_parts_part_dragable_x(void);
|
static void st_collections_group_parts_part_dragable_x(void);
|
||||||
static void st_collections_group_parts_part_dragable_y(void);
|
static void st_collections_group_parts_part_dragable_y(void);
|
||||||
|
@ -350,6 +351,7 @@ New_Statement_Handler statement_handlers[] =
|
||||||
{"collections.group.parts.part.dragable.events", st_collections_group_parts_part_dragable_events},
|
{"collections.group.parts.part.dragable.events", st_collections_group_parts_part_dragable_events},
|
||||||
{"collections.group.parts.part.entry_mode", st_collections_group_parts_part_entry_mode},
|
{"collections.group.parts.part.entry_mode", st_collections_group_parts_part_entry_mode},
|
||||||
{"collections.group.parts.part.select_mode", st_collections_group_parts_part_select_mode},
|
{"collections.group.parts.part.select_mode", st_collections_group_parts_part_select_mode},
|
||||||
|
{"collections.group.parts.part.cursor_mode", st_collections_group_parts_part_cursor_mode},
|
||||||
{"collections.group.parts.part.multiline", st_collections_group_parts_part_multiline},
|
{"collections.group.parts.part.multiline", st_collections_group_parts_part_multiline},
|
||||||
{"collections.group.parts.part.image", st_images_image}, /* dup */
|
{"collections.group.parts.part.image", st_images_image}, /* dup */
|
||||||
{"collections.group.parts.part.set.name", st_images_set_name},
|
{"collections.group.parts.part.set.name", st_images_set_name},
|
||||||
|
@ -2688,6 +2690,38 @@ st_collections_group_parts_part_select_mode(void)
|
||||||
NULL);
|
NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
@page edcref
|
||||||
|
@property
|
||||||
|
cursor_mode
|
||||||
|
@parameters
|
||||||
|
[MODE]
|
||||||
|
@effect
|
||||||
|
Sets the cursor mode for a textblock part to one of:
|
||||||
|
@li UNDER
|
||||||
|
@li BEFORE
|
||||||
|
UNDER cursor mode means the cursor will draw below the character pointed
|
||||||
|
at. That's the default.
|
||||||
|
BEFORE cursor mode means the cursor is drawn as a vertical line before
|
||||||
|
the current character, just like many other GUI toolkits handle it.
|
||||||
|
@endproperty
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
st_collections_group_parts_part_cursor_mode(void)
|
||||||
|
{
|
||||||
|
Edje_Part_Collection *pc;
|
||||||
|
Edje_Part *ep;
|
||||||
|
|
||||||
|
check_arg_count(1);
|
||||||
|
|
||||||
|
pc = eina_list_data_get(eina_list_last(edje_collections));
|
||||||
|
ep = pc->parts[pc->parts_count - 1];
|
||||||
|
ep->cursor_mode = parse_enum(0,
|
||||||
|
"UNDER", EDJE_ENTRY_CURSOR_MODE_UNDER,
|
||||||
|
"BEFORE", EDJE_ENTRY_CURSOR_MODE_BEFORE,
|
||||||
|
NULL);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@page edcref
|
@page edcref
|
||||||
@property
|
@property
|
||||||
|
|
|
@ -755,6 +755,7 @@ _edje_edd_init(void)
|
||||||
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "pointer_mode", pointer_mode, EET_T_UCHAR);
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "pointer_mode", pointer_mode, EET_T_UCHAR);
|
||||||
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "entry_mode", entry_mode, EET_T_UCHAR);
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "entry_mode", entry_mode, EET_T_UCHAR);
|
||||||
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "select_mode", select_mode, EET_T_UCHAR);
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "select_mode", select_mode, EET_T_UCHAR);
|
||||||
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "cursor_mode", cursor_mode, EET_T_UCHAR);
|
||||||
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "multiline", multiline, EET_T_UCHAR);
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "multiline", multiline, EET_T_UCHAR);
|
||||||
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "api.name", api.name, EET_T_STRING);
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "api.name", api.name, EET_T_STRING);
|
||||||
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "api.description", api.description, EET_T_STRING);
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "api.description", api.description, EET_T_STRING);
|
||||||
|
|
|
@ -251,8 +251,19 @@ static void
|
||||||
_curs_update_from_curs(Evas_Textblock_Cursor *c, Evas_Object *o __UNUSED__, Entry *en)
|
_curs_update_from_curs(Evas_Textblock_Cursor *c, Evas_Object *o __UNUSED__, Entry *en)
|
||||||
{
|
{
|
||||||
Evas_Coord cx, cy, cw, ch;
|
Evas_Coord cx, cy, cw, ch;
|
||||||
|
Evas_Textblock_Cursor_Type cur_type;
|
||||||
if (c != en->cursor) return;
|
if (c != en->cursor) return;
|
||||||
evas_textblock_cursor_geometry_get(c, &cx, &cy, &cw, &ch, NULL, EVAS_TEXTBLOCK_CURSOR_UNDER);
|
switch (en->rp->part->cursor_mode)
|
||||||
|
{
|
||||||
|
case EDJE_ENTRY_CURSOR_MODE_BEFORE:
|
||||||
|
cur_type = EVAS_TEXTBLOCK_CURSOR_BEFORE;
|
||||||
|
break;
|
||||||
|
case EDJE_ENTRY_CURSOR_MODE_UNDER:
|
||||||
|
/* no break for a resaon */
|
||||||
|
default:
|
||||||
|
cur_type = EVAS_TEXTBLOCK_CURSOR_UNDER;
|
||||||
|
}
|
||||||
|
evas_textblock_cursor_geometry_get(c, &cx, &cy, &cw, &ch, NULL, cur_type);
|
||||||
en->cx = cx + (cw / 2);
|
en->cx = cx + (cw / 2);
|
||||||
en->cy = cy + (ch / 2);
|
en->cy = cy + (ch / 2);
|
||||||
}
|
}
|
||||||
|
@ -1930,14 +1941,25 @@ _edje_entry_real_part_configure(Edje_Real_Part *rp)
|
||||||
{
|
{
|
||||||
Evas_Coord x, y, w, h, xx, yy, ww, hh;
|
Evas_Coord x, y, w, h, xx, yy, ww, hh;
|
||||||
Entry *en = rp->entry_data;
|
Entry *en = rp->entry_data;
|
||||||
|
Evas_Textblock_Cursor_Type cur_type;
|
||||||
if (!en) return;
|
if (!en) return;
|
||||||
|
switch (rp->part->cursor_mode)
|
||||||
|
{
|
||||||
|
case EDJE_ENTRY_CURSOR_MODE_BEFORE:
|
||||||
|
cur_type = EVAS_TEXTBLOCK_CURSOR_BEFORE;
|
||||||
|
break;
|
||||||
|
case EDJE_ENTRY_CURSOR_MODE_UNDER:
|
||||||
|
/* no break for a resaon */
|
||||||
|
default:
|
||||||
|
cur_type = EVAS_TEXTBLOCK_CURSOR_UNDER;
|
||||||
|
}
|
||||||
|
|
||||||
_sel_update(en->cursor, rp->object, en);
|
_sel_update(en->cursor, rp->object, en);
|
||||||
_anchors_update(en->cursor, rp->object, en);
|
_anchors_update(en->cursor, rp->object, en);
|
||||||
x = y = w = h = -1;
|
x = y = w = h = -1;
|
||||||
xx = yy = ww = hh = -1;
|
xx = yy = ww = hh = -1;
|
||||||
evas_object_geometry_get(rp->object, &x, &y, &w, &h);
|
evas_object_geometry_get(rp->object, &x, &y, &w, &h);
|
||||||
evas_textblock_cursor_geometry_get(en->cursor, &xx, &yy, &ww, &hh, NULL, EVAS_TEXTBLOCK_CURSOR_UNDER);
|
evas_textblock_cursor_geometry_get(en->cursor, &xx, &yy, &ww, &hh, NULL, cur_type);
|
||||||
if (ww < 1) ww = 1;
|
if (ww < 1) ww = 1;
|
||||||
if (hh < 1) ww = 1;
|
if (hh < 1) ww = 1;
|
||||||
if (en->cursor_bg)
|
if (en->cursor_bg)
|
||||||
|
@ -2190,12 +2212,23 @@ _edje_entry_cursor_geometry_get(Edje_Real_Part *rp, Evas_Coord *cx, Evas_Coord *
|
||||||
{
|
{
|
||||||
Evas_Coord x, y, w, h, xx, yy, ww, hh;
|
Evas_Coord x, y, w, h, xx, yy, ww, hh;
|
||||||
Entry *en = rp->entry_data;
|
Entry *en = rp->entry_data;
|
||||||
|
Evas_Textblock_Cursor_Type cur_type;
|
||||||
if (!en) return;
|
if (!en) return;
|
||||||
|
switch (rp->part->cursor_mode)
|
||||||
|
{
|
||||||
|
case EDJE_ENTRY_CURSOR_MODE_BEFORE:
|
||||||
|
cur_type = EVAS_TEXTBLOCK_CURSOR_BEFORE;
|
||||||
|
break;
|
||||||
|
case EDJE_ENTRY_CURSOR_MODE_UNDER:
|
||||||
|
/* no break for a resaon */
|
||||||
|
default:
|
||||||
|
cur_type = EVAS_TEXTBLOCK_CURSOR_UNDER;
|
||||||
|
}
|
||||||
|
|
||||||
x = y = w = h = -1;
|
x = y = w = h = -1;
|
||||||
xx = yy = ww = hh = -1;
|
xx = yy = ww = hh = -1;
|
||||||
evas_object_geometry_get(rp->object, &x, &y, &w, &h);
|
evas_object_geometry_get(rp->object, &x, &y, &w, &h);
|
||||||
evas_textblock_cursor_geometry_get(en->cursor, &xx, &yy, &ww, &hh, NULL, EVAS_TEXTBLOCK_CURSOR_UNDER);
|
evas_textblock_cursor_geometry_get(en->cursor, &xx, &yy, &ww, &hh, NULL, cur_type);
|
||||||
if (ww < 1) ww = 1;
|
if (ww < 1) ww = 1;
|
||||||
if (hh < 1) ww = 1;
|
if (hh < 1) ww = 1;
|
||||||
if (cx) *cx = x + xx;
|
if (cx) *cx = x + xx;
|
||||||
|
|
|
@ -362,6 +362,9 @@ typedef struct _Edje_Part_Box_Animation Edje_Part_Box_Animation;
|
||||||
#define EDJE_ENTRY_SELECTION_MODE_DEFAULT 0
|
#define EDJE_ENTRY_SELECTION_MODE_DEFAULT 0
|
||||||
#define EDJE_ENTRY_SELECTION_MODE_EXPLICIT 1
|
#define EDJE_ENTRY_SELECTION_MODE_EXPLICIT 1
|
||||||
|
|
||||||
|
#define EDJE_ENTRY_CURSOR_MODE_UNDER 0
|
||||||
|
#define EDJE_ENTRY_CURSOR_MODE_BEFORE 1
|
||||||
|
|
||||||
#define EDJE_PART_PATH_SEPARATOR ':'
|
#define EDJE_PART_PATH_SEPARATOR ':'
|
||||||
#define EDJE_PART_PATH_SEPARATOR_STRING ":"
|
#define EDJE_PART_PATH_SEPARATOR_STRING ":"
|
||||||
#define EDJE_PART_PATH_SEPARATOR_INDEXL '['
|
#define EDJE_PART_PATH_SEPARATOR_INDEXL '['
|
||||||
|
@ -707,6 +710,7 @@ struct _Edje_Part
|
||||||
unsigned char pointer_mode;
|
unsigned char pointer_mode;
|
||||||
unsigned char entry_mode;
|
unsigned char entry_mode;
|
||||||
unsigned char select_mode;
|
unsigned char select_mode;
|
||||||
|
unsigned char cursor_mode;
|
||||||
unsigned char multiline;
|
unsigned char multiline;
|
||||||
Edje_Part_Api api;
|
Edje_Part_Api api;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue