From: <no-...@en...> - 2008-09-10 06:39:59
|
Author: raster Date: 2008-09-09 23:39:57 -0700 (Tue, 09 Sep 2008) New Revision: 35922 Modified: trunk/edje/src/lib/edje_calc.c trunk/edje/src/lib/edje_private.h trunk/edje/src/lib/edje_util.c Log: fix scaling on edje_scale - works with smnall sizes now too. problem is really i was chasing a freeze/thaw problem. something is up. Modified: trunk/edje/src/lib/edje_calc.c =================================================================== --- trunk/edje/src/lib/edje_calc.c 2008-09-10 05:47:13 UTC (rev 35921) +++ trunk/edje/src/lib/edje_calc.c 2008-09-10 06:39:57 UTC (rev 35922) @@ -138,9 +138,13 @@ { int i; - if (!ed->dirty) return; - if (ed->freeze) + if (!ed->dirty) { + return; + } + if ((ed->freeze > 0) || (_edje_freeze_val > 0)) + { + _edje_freeze_calc_count++; ed->recalc = 1; if (!ed->calc_only) return; } @@ -257,45 +261,79 @@ // if (flags & FLAG_X) { minw = desc->min.w; - if (ep->swallow_params.min.w > desc->min.w) minw = ep->swallow_params.min.w; + if (ep->part->scale) minw = (int)(((double)minw) * _edje_scale); + if (ep->swallow_params.min.w > desc->min.w) + minw = ep->swallow_params.min.w; /* XXX TODO: remove need of EDJE_INF_MAX_W, see edje_util.c */ if ((ep->swallow_params.max.w <= 0) || (ep->swallow_params.max.w == EDJE_INF_MAX_W)) - maxw = desc->max.w; + { + maxw = desc->max.w; + if (maxw > 0) + { + if (ep->part->scale) maxw = (int)(((double)maxw) * _edje_scale); + if (maxw < 1) maxw = 1; + } + } else { if (desc->max.w <= 0) maxw = ep->swallow_params.max.w; else - maxw = MIN(ep->swallow_params.max.w, desc->max.w); + { + maxw = desc->max.w; + if (maxw > 0) + { + if (ep->part->scale) maxw = (int)(((double)maxw) * _edje_scale); + if (maxw < 1) maxw = 1; + } + if (ep->swallow_params.max.w < maxw) + maxw = ep->swallow_params.max.w; + } } - if (ep->part->scale) + if (maxw >= 0) { - minw *= _edje_scale; - maxw *= _edje_scale; + if (maxw < minw) maxw = minw; } } // if (flags & FLAG_Y) { minh = desc->min.h; - if (ep->swallow_params.min.h > desc->min.h) minh = ep->swallow_params.min.h; + if (ep->part->scale) minh = (int)(((double)minh) * _edje_scale); + if (ep->swallow_params.min.h > desc->min.h) + minh = ep->swallow_params.min.h; /* XXX TODO: remove need of EDJE_INF_MAX_H, see edje_util.c */ if ((ep->swallow_params.max.h <= 0) || (ep->swallow_params.max.h == EDJE_INF_MAX_H)) - maxh = desc->max.h; + { + maxh = desc->max.h; + if (maxh > 0) + { + if (ep->part->scale) maxh = (int)(((double)maxh) * _edje_scale); + if (maxh < 1) maxh = 1; + } + } else { if (desc->max.h <= 0) maxh = ep->swallow_params.max.h; else - maxh = MIN(ep->swallow_params.max.h, desc->max.h); + { + maxh = desc->max.h; + if (maxh > 0) + { + if (ep->part->scale) maxh = (int)(((double)maxh) * _edje_scale); + if (maxh < 1) maxh = 1; + } + if (ep->swallow_params.max.h < maxh) + maxh = ep->swallow_params.max.h; + } } - if (ep->part->scale) + if (maxh >= 0) { - minh *= _edje_scale; - maxh *= _edje_scale; + if (maxh < minh) maxh = minh; } } /* relative coords of top left & bottom right */ Modified: trunk/edje/src/lib/edje_private.h =================================================================== --- trunk/edje/src/lib/edje_private.h 2008-09-10 05:47:13 UTC (rev 35921) +++ trunk/edje/src/lib/edje_private.h 2008-09-10 06:39:57 UTC (rev 35922) @@ -1004,6 +1004,8 @@ extern char *_edje_fontset_append; extern double _edje_scale; +extern int _edje_freeze_val; +extern int _edje_freeze_calc_count; void _edje_part_pos_set(Edje *ed, Edje_Real_Part *ep, int mode, double pos); Edje_Part_Description *_edje_part_description_find(Edje *ed, Edje_Real_Part *rp, const char *name, double val); Modified: trunk/edje/src/lib/edje_util.c =================================================================== --- trunk/edje/src/lib/edje_util.c 2008-09-10 05:47:13 UTC (rev 35921) +++ trunk/edje/src/lib/edje_util.c 2008-09-10 06:39:57 UTC (rev 35922) @@ -12,6 +12,8 @@ char *_edje_fontset_append = NULL; double _edje_scale = 1.0; +int _edje_freeze_val = 0; +int _edje_freeze_calc_count = 0; typedef struct _Edje_List_Foreach_Data Edje_List_Foreach_Data; @@ -29,6 +31,8 @@ /* FIXDOC: These all need to be looked over, Verified/Expanded upon. I just got lazy and stopped putting FIXDOC next to each function in this file. */ +//#define FASTFREEZE 1 + /** Freeze all Edje objects in the current process. * * See edje_object_freeze() for more. @@ -36,11 +40,17 @@ EAPI void edje_freeze(void) { +#ifdef FASTFREEZE + _edje_freeze_val++; + printf("fr ++ ->%i\n", _edje_freeze_val); +#else +// FIXME: could just have a global freeze instead of per object +// above i tried.. but this broke some things. notable e17's menus. why? Evas_List *l; - // FIXME: could just have a global freeze instead of per object for (l = _edje_edjes; l; l = l->next) edje_object_freeze((Evas_Object *)(l->data)); +#endif } /** Thaw all Edje objects in the current process. @@ -50,11 +60,39 @@ EAPI void edje_thaw(void) { +#ifdef FASTFREEZE + _edje_freeze_val--; + printf("fr -- ->%i\n", _edje_freeze_val); + if ((_edje_freeze_val == 0) && (_edje_freeze_calc_count > 0)) + { + Evas_List *l; + + _edje_freeze_calc_count = 0; + for (l = _edje_edjes; l; l = l->next) + { + Edje *ed; + + ed = _edje_fetch(l->data); + if (ed->recalc) + { + if (ed->freeze == 0) + { + printf(" CALC %p\n", l->data); + _edje_recalc(ed); + } + else + printf(" !CALC %p\n", l->data); + } + } + } +#else +// FIXME: could just have a global freeze instead of per object +// comment as above.. why? Evas_List *l; - // FIXME: could just have a global freeze instead of per object for (l = _edje_edjes; l; l = l->next) edje_object_thaw((Evas_Object *)(l->data)); +#endif } /* FIXDOC: Expand */ @@ -1138,15 +1176,22 @@ edje_object_calc_force(Evas_Object *obj) { Edje *ed; - int pf; + int pf, pf2; ed = _edje_fetch(obj); if (!ed) return; ed->dirty = 1; + + pf2 = _edje_freeze_val; pf = ed->freeze; + + _edje_freeze_val = 0; ed->freeze = 0; + _edje_recalc(ed); + ed->freeze = pf; + _edje_freeze_val = pf2; } /** Calculate minimum size |
From: <no-...@en...> - 2008-09-10 07:17:27
|
Author: raster Date: 2008-09-10 00:17:24 -0700 (Wed, 10 Sep 2008) New Revision: 35925 Modified: trunk/edje/src/lib/edje_calc.c trunk/edje/src/lib/edje_util.c Log: ok still doesnt work - FASTFREEZE shoudl work.. but dont. Modified: trunk/edje/src/lib/edje_calc.c =================================================================== --- trunk/edje/src/lib/edje_calc.c 2008-09-10 06:40:54 UTC (rev 35924) +++ trunk/edje/src/lib/edje_calc.c 2008-09-10 07:17:24 UTC (rev 35925) @@ -144,9 +144,12 @@ } if ((ed->freeze > 0) || (_edje_freeze_val > 0)) { - _edje_freeze_calc_count++; ed->recalc = 1; - if (!ed->calc_only) return; + if (!ed->calc_only) + { + if (_edje_freeze_val > 0) _edje_freeze_calc_count++; + return; + } } for (i = 0; i < ed->table_parts_size; i++) { Modified: trunk/edje/src/lib/edje_util.c =================================================================== --- trunk/edje/src/lib/edje_util.c 2008-09-10 06:40:54 UTC (rev 35924) +++ trunk/edje/src/lib/edje_util.c 2008-09-10 07:17:24 UTC (rev 35925) @@ -53,6 +53,29 @@ #endif } +#ifdef FASTFREEZE +static void +_edje_thaw_edje(Edje *ed) +{ + int i; + + for (i = 0; i < ed->table_parts_size; i++) + { + Edje_Real_Part *rp; + + rp = ed->table_parts[i]; + if (rp->part->type == EDJE_PART_TYPE_GROUP && rp->swallowed_object) + { + Edje *ed2; + + ed2 = _edje_fetch(rp->swallowed_object); + if (ed2) _edje_thaw_edje(ed2); + } + } + if ((ed->recalc) && (ed->freeze <= 0)) _edje_recalc(ed); +} +#endif + /** Thaw all Edje objects in the current process. * * See edje_object_thaw() for more. @@ -63,7 +86,7 @@ #ifdef FASTFREEZE _edje_freeze_val--; printf("fr -- ->%i\n", _edje_freeze_val); - if ((_edje_freeze_val == 0) && (_edje_freeze_calc_count > 0)) + if ((_edje_freeze_val <= 0) && (_edje_freeze_calc_count > 0)) { Evas_List *l; @@ -73,16 +96,7 @@ Edje *ed; ed = _edje_fetch(l->data); - if (ed->recalc) - { - if (ed->freeze == 0) - { - printf(" CALC %p\n", l->data); - _edje_recalc(ed); - } - else - printf(" !CALC %p\n", l->data); - } + if (ed) _edje_thaw_edje(ed); } } #else |
From: Enlightenment S. <no-...@en...> - 2008-09-17 18:48:19
|
Author: raster Date: 2008-09-17 18:48:17 -0700 (Wed, 17 Sep 2008) New Revision: 36064 Log: disabel start/stop emits for programs - there is a good point that they are largely useless. Modified: trunk/edje/src/lib/edje_program.c Modified: trunk/edje/src/lib/edje_program.c =================================================================== --- trunk/edje/src/lib/edje_program.c 2008-09-17 21:08:19 UTC (rev 36063) +++ trunk/edje/src/lib/edje_program.c 2008-09-18 01:48:17 UTC (rev 36064) @@ -418,7 +418,7 @@ if (!ed->actions) _edje_animators = evas_list_remove(_edje_animators, ed); } - _edje_emit(ed, "program,stop", runp->program->name); +// _edje_emit(ed, "program,stop", runp->program->name); if (_edje_block_break(ed)) { if (!ed->walking_actions) free(runp); @@ -499,7 +499,7 @@ _edje_animators = evas_list_remove(_edje_animators, ed); } } - _edje_emit(ed, "program,stop", pname); +// _edje_emit(ed, "program,stop", pname); _edje_thaw(ed); _edje_unref(ed); if (free_runp) free(runp); @@ -575,7 +575,7 @@ } } } - _edje_emit(ed, "program,start", pr->name); +// _edje_emit(ed, "program,start", pr->name); if (_edje_block_break(ed)) { ed->actions = evas_list_append(ed->actions, runp); @@ -615,9 +615,9 @@ } } } - _edje_emit(ed, "program,start", pr->name); +// _edje_emit(ed, "program,start", pr->name); if (_edje_block_break(ed)) goto break_prog; - _edje_emit(ed, "program,stop", pr->name); +// _edje_emit(ed, "program,stop", pr->name); if (_edje_block_break(ed)) goto break_prog; for (l = pr->after; l; l = l->next) @@ -637,7 +637,7 @@ } else if (pr->action == EDJE_ACTION_TYPE_ACTION_STOP) { - _edje_emit(ed, "program,start", pr->name); +// _edje_emit(ed, "program,start", pr->name); for (l = pr->targets; l; l = l->next) { Edje_Program_Target *pt; @@ -671,21 +671,21 @@ done: continue; } - _edje_emit(ed, "program,stop", pr->name); +// _edje_emit(ed, "program,stop", pr->name); if (_edje_block_break(ed)) goto break_prog; } else if (pr->action == EDJE_ACTION_TYPE_SIGNAL_EMIT) { - _edje_emit(ed, "program,start", pr->name); +// _edje_emit(ed, "program,start", pr->name); if (_edje_block_break(ed)) goto break_prog; _edje_emit(ed, pr->state, pr->state2); if (_edje_block_break(ed)) goto break_prog; - _edje_emit(ed, "program,stop", pr->name); +// _edje_emit(ed, "program,stop", pr->name); if (_edje_block_break(ed)) goto break_prog; } else if (pr->action == EDJE_ACTION_TYPE_DRAG_VAL_SET) { - _edje_emit(ed, "program,start", pr->name); +// _edje_emit(ed, "program,start", pr->name); if (_edje_block_break(ed)) goto break_prog; for (l = pr->targets; l; l = l->next) { @@ -710,12 +710,12 @@ } } } - _edje_emit(ed, "program,stop", pr->name); +// _edje_emit(ed, "program,stop", pr->name); if (_edje_block_break(ed)) goto break_prog; } else if (pr->action == EDJE_ACTION_TYPE_DRAG_VAL_STEP) { - _edje_emit(ed, "program,start", pr->name); +// _edje_emit(ed, "program,start", pr->name); if (_edje_block_break(ed)) goto break_prog; for (l = pr->targets; l; l = l->next) { @@ -740,12 +740,12 @@ } } } - _edje_emit(ed, "program,stop", pr->name); +// _edje_emit(ed, "program,stop", pr->name); if (_edje_block_break(ed)) goto break_prog; } else if (pr->action == EDJE_ACTION_TYPE_DRAG_VAL_PAGE) { - _edje_emit(ed, "program,start", pr->name); +// _edje_emit(ed, "program,start", pr->name); if (_edje_block_break(ed)) goto break_prog; for (l = pr->targets; l; l = l->next) { @@ -770,25 +770,25 @@ } } } - _edje_emit(ed, "program,stop", pr->name); +// _edje_emit(ed, "program,stop", pr->name); if (_edje_block_break(ed)) goto break_prog; } else if (pr->action == EDJE_ACTION_TYPE_SCRIPT) { char fname[128]; - _edje_emit(ed, "program,start", pr->name); +// _edje_emit(ed, "program,start", pr->name); if (_edje_block_break(ed)) goto break_prog; snprintf(fname, sizeof(fname), "_p%i", pr->id); _edje_embryo_test_run(ed, fname, ssig, ssrc); - _edje_emit(ed, "program,stop", pr->name); +// _edje_emit(ed, "program,stop", pr->name); if (_edje_block_break(ed)) goto break_prog; _edje_recalc(ed); } else { - _edje_emit(ed, "program,start", pr->name); - _edje_emit(ed, "program,stop", pr->name); +// _edje_emit(ed, "program,start", pr->name); +// _edje_emit(ed, "program,stop", pr->name); } if (!((pr->action == EDJE_ACTION_TYPE_STATE_SET) /* hmm this fucks somethgin up. must look into it later */ |
From: Enlightenment S. <no-...@en...> - 2008-10-02 04:02:03
|
Log: fix a jitter with text fit if fit region tiny! Author: raster Date: 2008-10-01 21:01:54 -0700 (Wed, 01 Oct 2008) New Revision: 36389 Modified: trunk/edje/src/lib/edje_text.c Modified: trunk/edje/src/lib/edje_text.c =================================================================== --- trunk/edje/src/lib/edje_text.c 2008-10-01 22:23:36 UTC (rev 36388) +++ trunk/edje/src/lib/edje_text.c 2008-10-02 04:01:54 UTC (rev 36389) @@ -157,6 +157,7 @@ size_t orig_len; *free_text = 0; + if (sw <= 1) return ""; if (ep->part->scale) evas_object_scale_set(ep->object, _edje_scale); evas_object_text_font_set(ep->object, font, size); |
From: Enlightenment S. <no-...@en...> - 2008-10-05 03:38:42
|
Log: edje uses size min/max and aspect hints in evas - old extern blah calls compatible and use the evas hints internally. Author: raster Date: 2008-10-04 20:37:37 -0700 (Sat, 04 Oct 2008) New Revision: 36439 Modified: trunk/edje/src/lib/edje_util.c Modified: trunk/edje/src/lib/edje_util.c =================================================================== --- trunk/edje/src/lib/edje_util.c 2008-10-04 22:47:42 UTC (rev 36438) +++ trunk/edje/src/lib/edje_util.c 2008-10-05 03:37:37 UTC (rev 36439) @@ -959,24 +959,12 @@ int mw, mh; Edje_Real_Part *rp; - mw = minw; - mh = minh; - if (mw < 0) mw = 0; - if (mh < 0) mh = 0; - if (mw > 0) - evas_object_data_set(obj, "\377 edje.minw", (void *)(long)mw); - else - evas_object_data_del(obj, "\377 edje.minw"); - if (mh > 0) - evas_object_data_set(obj, "\377 edje.minh", (void *)(long)mh); - else - evas_object_data_del(obj, "\377 edje.minh"); - + evas_object_size_hint_min_set(obj, minw, minh); rp = evas_object_data_get(obj, "\377 edje.swallowing_part"); if (rp) { - rp->swallow_params.min.w = mw; - rp->swallow_params.min.h = mh; + rp->swallow_params.min.w = minw; + rp->swallow_params.min.h = minh; _recalc_extern_parent(obj); } @@ -992,25 +980,14 @@ EAPI void edje_extern_object_max_size_set(Evas_Object *obj, Evas_Coord maxw, Evas_Coord maxh) { - int mw, mh; Edje_Real_Part *rp; - mw = maxw; - mh = maxh; - if (mw >= 0) - evas_object_data_set(obj, "\377 edje.maxw", (void *)(long)mw); - else - evas_object_data_del(obj, "\377 edje.maxw"); - if (mh >= 0) - evas_object_data_set(obj, "\377 edje.maxh", (void *)(long)mh); - else - evas_object_data_del(obj, "\377 edje.maxh"); - + evas_object_size_hint_max_set(obj, maxw, maxh); rp = evas_object_data_get(obj, "\377 edje.swallowing_part"); if (rp) { - rp->swallow_params.max.w = mw >= 0 ? mw : -1; - rp->swallow_params.max.h = mh >= 0 ? mh : -1; + rp->swallow_params.max.w = maxw; + rp->swallow_params.max.h = maxh; _recalc_extern_parent(obj); } @@ -1030,33 +1007,28 @@ EAPI void edje_extern_object_aspect_set(Evas_Object *obj, Edje_Aspect_Control aspect, Evas_Coord aw, Evas_Coord ah) { - int mw, mh; - int mc; Edje_Real_Part *rp; + Evas_Aspect_Control asp; - mc = aspect; - mw = aw; - mh = ah; - if (mc > 0) - evas_object_data_set(obj, "\377 edje.aspm", (void *)(long)mc); - else - evas_object_data_del(obj, "\377 edje.aspm"); - if (mw > 0) - evas_object_data_set(obj, "\377 edje.aspw", (void *)(long)mw); - else - evas_object_data_del(obj, "\377 edje.aspw"); - if (mh > 0) - evas_object_data_set(obj, "\377 edje.asph", (void *)(long)mh); - else - evas_object_data_del(obj, "\377 edje.asph"); - + asp = EVAS_ASPECT_CONTROL_NONE; + switch (aspect) + { + case EDJE_ASPECT_CONTROL_NONE: asp = EVAS_ASPECT_CONTROL_NONE; break; + case EDJE_ASPECT_CONTROL_NEITHER: asp = EVAS_ASPECT_CONTROL_NEITHER; break; + case EDJE_ASPECT_CONTROL_HORIZONTAL: asp = EVAS_ASPECT_CONTROL_HORIZONTAL; break; + case EDJE_ASPECT_CONTROL_VERTICAL: asp = EVAS_ASPECT_CONTROL_VERTICAL; break; + case EDJE_ASPECT_CONTROL_BOTH: asp = EVAS_ASPECT_CONTROL_BOTH; break; + default: break; + } + if (aw < 1) aw = 1; + if (ah < 1) ah = 1; + evas_object_size_hint_aspect_set(obj, asp, aw, ah); rp = evas_object_data_get(obj, "\377 edje.swallowing_part"); if (rp) { - rp->swallow_params.aspect.mode = mc > 0 ? mc : 0; - rp->swallow_params.aspect.w = mw > 0 ? mw : 0; - rp->swallow_params.aspect.h = mh > 0 ? mh : 0; - + rp->swallow_params.aspect.mode = aspect; + rp->swallow_params.aspect.w = aw; + rp->swallow_params.aspect.h = ah; _recalc_extern_parent(obj); } } @@ -2141,20 +2113,25 @@ rp->swallow_params.max.h = h; } { - int w1, h1, w2, h2, am, aw, ah; + Evas_Coord w1, h1, w2, h2, aw, ah; + Evas_Aspect_Control am; - w1 = (int)(long)evas_object_data_get(obj_swallow, "\377 edje.minw"); - h1 = (int)(long)evas_object_data_get(obj_swallow, "\377 edje.minh"); - w2 = (int)(long)evas_object_data_get(obj_swallow, "\377 edje.maxw"); - h2 = (int)(long)evas_object_data_get(obj_swallow, "\377 edje.maxh"); - am = (int)(long)evas_object_data_get(obj_swallow, "\377 edje.aspm"); - aw = (int)(long)evas_object_data_get(obj_swallow, "\377 edje.aspw"); - ah = (int)(long)evas_object_data_get(obj_swallow, "\377 edje.asph"); + evas_object_size_hint_min_get(obj_swallow, &w1, &h1); + evas_object_size_hint_max_get(obj_swallow, &w2, &h2); + evas_object_size_hint_aspect_get(obj_swallow, &am, &aw, &ah); rp->swallow_params.min.w = w1; rp->swallow_params.min.h = h1; if (w2 > 0) rp->swallow_params.max.w = w2; if (h2 > 0) rp->swallow_params.max.h = h2; - rp->swallow_params.aspect.mode = am; + switch (am) + { + case EVAS_ASPECT_CONTROL_NONE: rp->swallow_params.aspect.mode = EDJE_ASPECT_CONTROL_NONE; break; + case EVAS_ASPECT_CONTROL_NEITHER: rp->swallow_params.aspect.mode = EDJE_ASPECT_CONTROL_NEITHER; break; + case EVAS_ASPECT_CONTROL_HORIZONTAL: rp->swallow_params.aspect.mode = EDJE_ASPECT_CONTROL_HORIZONTAL; break; + case EVAS_ASPECT_CONTROL_VERTICAL: rp->swallow_params.aspect.mode = EDJE_ASPECT_CONTROL_VERTICAL; break; + case EVAS_ASPECT_CONTROL_BOTH: rp->swallow_params.aspect.mode = EDJE_ASPECT_CONTROL_BOTH; break; + default: break; + } rp->swallow_params.aspect.w = aw; rp->swallow_params.aspect.h = ah; evas_object_data_set(rp->swallowed_object, "\377 edje.swallowing_part", rp); |
From: Enlightenment S. <no-...@en...> - 2008-10-10 02:18:30
|
Log: fix drag event objects to work. Author: raster Date: 2008-10-09 18:46:02 -0700 (Thu, 09 Oct 2008) New Revision: 36559 Modified: trunk/edje/src/lib/edje_callbacks.c Modified: trunk/edje/src/lib/edje_callbacks.c =================================================================== --- trunk/edje/src/lib/edje_callbacks.c 2008-10-10 00:21:03 UTC (rev 36558) +++ trunk/edje/src/lib/edje_callbacks.c 2008-10-10 01:46:02 UTC (rev 36559) @@ -101,15 +101,13 @@ { if (events->part->dragable.x) { - events->drag.tmp.x = ev->canvas.x - x - (events->x + events->w / 2); - events->drag.down.x = ev->canvas.x - x; - events->x = ev->canvas.x - x - events->w / 2; + events->drag.down.x = ev->canvas.x; + events->drag.tmp.x = 0; } if (events->part->dragable.y) { - events->drag.tmp.y = ev->canvas.y - y - (events->y + events->h / 2); - events->drag.down.y = ev->canvas.y - y; - events->y = ev->canvas.y - y - events->h / 2; + events->drag.down.y = ev->canvas.y; + events->drag.tmp.y = 0; } if (!ignored) @@ -132,7 +130,8 @@ int dir; dir = _edje_part_dragable_calc(ed, rp, &dx, &dy); - + printf("calc down %3.3f %3.3f\n", dx, dy); + if ((dx != rp->drag.val.x) || (dy != rp->drag.val.y)) { rp->drag.val.x = dx; |
From: Enlightenment S. <no-...@en...> - 2008-10-13 12:15:12
|
Log: and fix segv if things get key events... Author: raster Date: 2008-10-13 04:57:32 -0700 (Mon, 13 Oct 2008) New Revision: 36615 Modified: trunk/edje/src/lib/edje_entry.c Modified: trunk/edje/src/lib/edje_entry.c =================================================================== --- trunk/edje/src/lib/edje_entry.c 2008-10-13 11:51:10 UTC (rev 36614) +++ trunk/edje/src/lib/edje_entry.c 2008-10-13 11:57:32 UTC (rev 36615) @@ -28,6 +28,7 @@ { Edje *ed = data; _edje_emit(ed, "focus,in", ""); + // FIXME: emit focus,in to selections and cursors } static void @@ -35,6 +36,7 @@ { Edje *ed = data; _edje_emit(ed, "focus,out", ""); + // FIXME: emit focus,out to selections and cursors } static void @@ -43,9 +45,11 @@ Edje *ed = data; Evas_Event_Key_Down *ev = event_info; Edje_Real_Part *rp = ed->focused_part; - Entry *en = rp->entry_data; + Entry *en; Evas_Bool control, alt, shift; - if ((!rp) || (!en) || (rp->part->type != EDJE_PART_TYPE_TEXTBLOCK) || + if (!rp) return; + en = rp->entry_data; + if ((!en) || (rp->part->type != EDJE_PART_TYPE_TEXTBLOCK) || (rp->part->entry_mode < EDJE_ENTRY_EDIT_MODE_EDITABLE)) return; if (!ev->key) return; @@ -56,7 +60,7 @@ shift = evas_key_modifier_is_set(ev->modifiers, "Shift"); if (!strcmp(ev->key, "Escape")) { - // dead keys here. Escape for now (shoudl emit these) + // dead keys here. Escape for now (should emit these) } else if (!strcmp(ev->key, "Up")) { @@ -313,8 +317,10 @@ Edje *ed = data; Evas_Event_Key_Up *ev = event_info; Edje_Real_Part *rp = ed->focused_part; - Entry *en = rp->entry_data; - if ((!rp) || (!en) || (rp->part->type != EDJE_PART_TYPE_TEXTBLOCK) || + Entry *en; + if (!rp) return; + en = rp->entry_data; + if ((!en) || (rp->part->type != EDJE_PART_TYPE_TEXTBLOCK) || (rp->part->entry_mode < EDJE_ENTRY_EDIT_MODE_EDITABLE)) return; } @@ -324,9 +330,11 @@ { Edje_Real_Part *rp = data; Evas_Event_Mouse_Down *ev = event_info; - Entry *en = rp->entry_data; + Entry *en; Evas_Coord x, y, w, h; - if ((!rp) || (!en) || (rp->part->type != EDJE_PART_TYPE_TEXTBLOCK) || + if (!rp) return; + en = rp->entry_data; + if ((!en) || (rp->part->type != EDJE_PART_TYPE_TEXTBLOCK) || (rp->part->entry_mode < EDJE_ENTRY_EDIT_MODE_EDITABLE)) return; evas_object_geometry_get(rp->object, &x, &y, &w, &h); @@ -362,9 +370,11 @@ { Edje_Real_Part *rp = data; Evas_Event_Mouse_Up *ev = event_info; - Entry *en = rp->entry_data; + Entry *en; Evas_Coord x, y, w, h; - if ((!rp) || (!en) || (rp->part->type != EDJE_PART_TYPE_TEXTBLOCK) || + if (!rp) return; + en = rp->entry_data; + if ((!en) || (rp->part->type != EDJE_PART_TYPE_TEXTBLOCK) || (rp->part->entry_mode < EDJE_ENTRY_EDIT_MODE_EDITABLE)) return; evas_object_geometry_get(rp->object, &x, &y, &w, &h); @@ -397,9 +407,11 @@ { Edje_Real_Part *rp = data; Evas_Event_Mouse_Move *ev = event_info; - Entry *en = rp->entry_data; + Entry *en; Evas_Coord x, y, w, h; - if ((!rp) || (!en) || (rp->part->type != EDJE_PART_TYPE_TEXTBLOCK) || + if (!rp) return; + en = rp->entry_data; + if ((!en) || (rp->part->type != EDJE_PART_TYPE_TEXTBLOCK) || (rp->part->entry_mode < EDJE_ENTRY_EDIT_MODE_EDITABLE)) return; if (!en->sel_start) return; |
From: Enlightenment S. <no-...@en...> - 2008-10-14 04:35:19
|
Log: more editing works Author: raster Date: 2008-10-13 21:35:17 -0700 (Mon, 13 Oct 2008) New Revision: 36647 Modified: trunk/edje/src/lib/edje_entry.c Modified: trunk/edje/src/lib/edje_entry.c =================================================================== --- trunk/edje/src/lib/edje_entry.c 2008-10-14 04:32:14 UTC (rev 36646) +++ trunk/edje/src/lib/edje_entry.c 2008-10-14 04:35:17 UTC (rev 36647) @@ -76,7 +76,14 @@ if (evas_object_textblock_line_number_geometry_get(rp->object, line_num, &lx, &ly, &lw, &lh)) { evas_textblock_cursor_char_geometry_get(en->cursor, &cx, &cy, &cw, &ch); - evas_textblock_cursor_char_coord_set(en->cursor, cx + (cw / 2), ly + (lh / 2)); + if (!evas_textblock_cursor_char_coord_set(en->cursor, cx + (cw / 2), ly + (lh / 2))) + { + evas_textblock_cursor_line_coord_set(en->cursor, ly + (lh / 2)); + if (cx + (cw / 2) < (lx + (lw / 2))) + evas_textblock_cursor_line_first(en->cursor); + else + evas_textblock_cursor_line_last(en->cursor); + } } if (shift) { @@ -97,7 +104,14 @@ if (evas_object_textblock_line_number_geometry_get(rp->object, line_num, &lx, &ly, &lw, &lh)) { evas_textblock_cursor_char_geometry_get(en->cursor, &cx, &cy, &cw, &ch); - evas_textblock_cursor_char_coord_set(en->cursor, cx + (cw / 2), ly + (lh / 2)); + if (!evas_textblock_cursor_char_coord_set(en->cursor, cx + (cw / 2), ly + (lh / 2))) + { + evas_textblock_cursor_line_coord_set(en->cursor, ly + (lh / 2)); + if (cx + (cw / 2) < (lx + (lw / 2))) + evas_textblock_cursor_line_first(en->cursor); + else + evas_textblock_cursor_line_last(en->cursor); + } } if (shift) { @@ -148,11 +162,15 @@ { if ((en->sel_start) && (en->sel_end) && (en->have_selection)) { + printf("del sel\n"); evas_textblock_cursor_range_delete(en->sel_start, en->sel_end); } else { - evas_textblock_cursor_node_prev(en->cursor); + if (!evas_textblock_cursor_char_prev(en->cursor)) + { + evas_textblock_cursor_node_prev(en->cursor); + } evas_textblock_cursor_char_delete(en->cursor); } } @@ -290,6 +308,8 @@ else if ((!strcmp(ev->key, "Return")) || (!strcmp(ev->key, "KP_Enter"))) { // newline + evas_textblock_cursor_format_prepend(en->cursor, "\n"); + evas_textblock_cursor_node_next(en->cursor); } else if ((!strcmp(ev->key, "Multi_key"))) { @@ -306,7 +326,20 @@ { // FIXME: if composing.. store 2 keys if (ev->string) - evas_textblock_cursor_text_prepend(en->cursor, ev->string); + { + if (evas_textblock_cursor_node_format_get(en->cursor)) + { + printf("on format node\n"); + while (evas_textblock_cursor_node_prev(en->cursor)) + { + if (!evas_textblock_cursor_node_format_get(en->cursor)) + break; + } + evas_textblock_cursor_text_append(en->cursor, ev->string); + } + else + evas_textblock_cursor_text_prepend(en->cursor, ev->string); + } } _edje_entry_real_part_configure(rp); } @@ -531,10 +564,14 @@ evas_object_geometry_get(rp->object, &x, &y, &w, &h); // move cursor/selections etc. - evas_textblock_cursor_char_geometry_get(en->cursor, &xx, &yy, &ww, &hh); - evas_object_move(en->cursor_bg, x + xx, y + yy); + if (evas_textblock_cursor_char_geometry_get(en->cursor, &xx, &yy, &ww, &hh) < 0) + { + printf("line < 0!\n"); + } + printf("%i %i %ix%i\n", xx, yy, ww, hh); if (ww < 1) ww = 1; if (hh < 1) ww = 1; + evas_object_move(en->cursor_bg, x + xx, y + yy); evas_object_resize(en->cursor_bg, ww, hh); // FIXME: move/resize en->sel (record the sels and intended geom) } |
From: Enlightenment S. <no-...@en...> - 2008-10-15 09:58:35
|
Log: and more entry support. Author: raster Date: 2008-10-15 02:58:25 -0700 (Wed, 15 Oct 2008) New Revision: 36665 Modified: trunk/edje/src/lib/edje_calc.c trunk/edje/src/lib/edje_entry.c trunk/edje/src/lib/edje_private.h trunk/edje/src/lib/edje_util.c Modified: trunk/edje/src/lib/edje_calc.c =================================================================== --- trunk/edje/src/lib/edje_calc.c 2008-10-15 09:58:17 UTC (rev 36664) +++ trunk/edje/src/lib/edje_calc.c 2008-10-15 09:58:25 UTC (rev 36665) @@ -644,11 +644,19 @@ if (evas_object_textblock_style_get(ep->object) != stl->style) evas_object_textblock_style_set(ep->object, stl->style); - ptxt = evas_object_textblock_text_markup_get(ep->object); - if (((!ptxt) && (text)) || - ((ptxt) && (text) && (strcmp(ptxt, text))) || - ((ptxt) && (!text))) - evas_object_textblock_text_markup_set(ep->object, text); + // FIXME: need to account for editing + if (ep->part->entry_mode > EDJE_ENTRY_EDIT_MODE_NONE) + { + // do nothing - should be done elsewhere + } + else + { + ptxt = evas_object_textblock_text_markup_get(ep->object); + if (((!ptxt) && (text)) || + ((ptxt) && (text) && (strcmp(ptxt, text))) || + ((ptxt) && (!text))) + evas_object_textblock_text_markup_set(ep->object, text); + } if ((chosen_desc->text.min_x) || (chosen_desc->text.min_y)) { int mw = 0, mh = 0; Modified: trunk/edje/src/lib/edje_entry.c =================================================================== --- trunk/edje/src/lib/edje_entry.c 2008-10-15 09:58:17 UTC (rev 36664) +++ trunk/edje/src/lib/edje_entry.c 2008-10-15 09:58:25 UTC (rev 36665) @@ -5,6 +5,7 @@ #include "edje_private.h" typedef struct _Entry Entry; +typedef struct _Sel Sel; struct _Entry { @@ -14,9 +15,17 @@ Evas_Textblock_Cursor *cursor; Evas_Textblock_Cursor *sel_start, *sel_end; Evas_List *sel; + Evas_Bool selecting : 1; Evas_Bool have_selection : 1; }; +struct _Sel +{ + Evas_Object *obj_bg; + Evas_Object *obj_fg; + Evas_Textblock_Rectangle rect; +}; + // FIXME: this has to emit signals for "request selection", "set selection" // so copy & paste work, need api calls to insert text, insert format, // get text (with markup) delete text, etc. etc. etc. @@ -40,6 +49,230 @@ } static void +_curs_back(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en) +{ + if (evas_textblock_cursor_char_prev(c)) return; + if (!evas_textblock_cursor_node_prev(c)) return; + while (evas_textblock_cursor_node_format_get(c)) + { + if (evas_textblock_cursor_node_format_is_visible_get(c)) break; + if (!evas_textblock_cursor_node_prev(c)) break; + } +} + +static void +_curs_next(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en) +{ + if (evas_textblock_cursor_char_next(c)) return; + if (!evas_textblock_cursor_node_next(c)) return; + while (evas_textblock_cursor_node_format_get(c)) + { + if (evas_textblock_cursor_node_format_is_visible_get(c)) break; + if (!evas_textblock_cursor_node_next(c)) break; + } +} + +static int +_curs_line_last_get(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en) +{ + Evas_Textblock_Cursor *cc; + int ln; + + cc = evas_object_textblock_cursor_new(o); + evas_textblock_cursor_node_last(cc); + ln = evas_textblock_cursor_line_geometry_get(cc, NULL, NULL, NULL, NULL); + evas_textblock_cursor_free(cc); + return ln; +} + +static void +_curs_jump_line(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en, int ln) +{ + Evas_Coord lx, ly, lw, lh, cx, cy, cw, ch; + + if (ln < 0) ln = 0; + else + { + int last = _curs_line_last_get(c, o, en); + if (ln > last) ln = last; + } + if (!evas_object_textblock_line_number_geometry_get(o, ln, &lx, &ly, &lw, &lh)) + return; + evas_textblock_cursor_char_geometry_get(c, &cx, &cy, &cw, &ch); + if (evas_textblock_cursor_char_coord_set(c, cx + (cw / 2), ly + (lh / 2))) + return; + evas_textblock_cursor_line_coord_set(c, ly + (lh / 2)); + if (cx + (cw / 2) < (lx + (lw / 2))) evas_textblock_cursor_line_first(c); + else evas_textblock_cursor_line_last(c); +} + +static void +_curs_jump_line_by(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en, int by) +{ + int ln; + + ln = evas_textblock_cursor_line_geometry_get(c, NULL, NULL, NULL, NULL) + by; + _curs_jump_line(c, o, en, ln); +} + +static void +_curs_up(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en) +{ + _curs_jump_line_by(c, o, en, -1); +} + +static void +_curs_down(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en) +{ + _curs_jump_line_by(c, o, en, 1); +} + +static void +_curs_lin_start(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en) +{ + evas_textblock_cursor_line_first(c); +} + +static void +_curs_lin_end(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en) +{ + evas_textblock_cursor_line_last(c); + if (!evas_textblock_cursor_node_format_get(c)) + _curs_next(c, o, en); +} + +static void +_curs_start(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en) +{ + evas_textblock_cursor_line_set(c, 0); + evas_textblock_cursor_line_first(c); +} + +static void +_curs_end(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en) +{ + evas_textblock_cursor_line_set(c, _curs_line_last_get(c, o, en)); + _curs_lin_end(c, o, en); +} + + + +static void +_sel_start(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en) +{ + if (en->sel_start) return; + en->sel_start = evas_object_textblock_cursor_new(o); + evas_textblock_cursor_copy(en->cursor, en->sel_start); + en->sel_end = evas_object_textblock_cursor_new(o); + evas_textblock_cursor_copy(en->cursor, en->sel_start); + en->have_selection = 0; +} + +static void +_sel_enable(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en) +{ + if (en->have_selection) return; + en->have_selection = 1; + // FIXME: emit "selection changed" +} + +static void +_sel_extend(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en) +{ + if (!en->sel_end) return; + _sel_enable(c, o, en); + if (!evas_textblock_cursor_compare(c, en->sel_end)) return; + evas_textblock_cursor_copy(c, en->sel_end); + // FIXME: emit "selection changed" +} + +static void +_sel_clear(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en) +{ + if (en->sel_start) + { + evas_textblock_cursor_free(en->sel_start); + evas_textblock_cursor_free(en->sel_end); + en->sel_start = NULL; + en->sel_end = NULL; + } + en->have_selection = 0; + while (en->sel) + { + Sel *sel; + + sel = en->sel->data; + if (sel->obj_bg) evas_object_del(sel->obj_bg); + if (sel->obj_fg) evas_object_del(sel->obj_fg); + free(sel); + en->sel = evas_list_remove_list(en->sel, en->sel); + } +} + +static void +_sel_update(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en) +{ + Evas_List *range = NULL, *l; + Sel *sel; + Evas_Object *ob; + Evas_Coord x, y, w, h; + Evas_Object *smart, *clip; + + smart = evas_object_smart_parent_get(o); + clip = evas_object_clip_get(o); + if (en->sel_start) + range = evas_textblock_cursor_range_geometry_get(en->sel_start, en->sel_end); + if (evas_list_count(range) != evas_list_count(en->sel)) + { + while (en->sel) + { + sel = en->sel->data; + if (sel->obj_bg) evas_object_del(sel->obj_bg); + if (sel->obj_fg) evas_object_del(sel->obj_fg); + free(sel); + en->sel = evas_list_remove_list(en->sel, en->sel); + } + if (en->have_selection) + { + for (l = range; l; l = l->next) + { + sel = calloc(1, sizeof(Sel)); + en->sel = evas_list_append(en->sel, sel); + ob = evas_object_rectangle_add(evas_object_evas_get(o)); + evas_object_smart_member_add(ob, smart); + evas_object_stack_below(ob, o); + evas_object_clip_set(ob, clip); + evas_object_color_set(ob, 20, 20, 255, 150); + evas_object_pass_events_set(ob, 1); + evas_object_show(ob); + sel->obj_bg = ob; + } + } + } + x = y = w = h = -1; + evas_object_geometry_get(o, &x, &y, &w, &h); + for (l = en->sel; l; l = l->next) + { + Evas_Textblock_Rectangle *r; + + sel = l->data; + r = range->data; + if (sel->obj_bg) + { + evas_object_move(sel->obj_bg, x + r->x, y + r->y); + evas_object_resize(sel->obj_bg, r->w, r->h); + } + if (sel->obj_fg) + { + evas_object_move(sel->obj_fg, x + r->x, y + r->y); + evas_object_resize(sel->obj_fg, r->w, r->h); + } + range = evas_list_remove_list(range, range); + free(r); + } +} + +static void _edje_key_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) { Edje *ed = data; @@ -47,6 +280,7 @@ Edje_Real_Part *rp = ed->focused_part; Entry *en; Evas_Bool control, alt, shift; + Evas_Bool multiline; if (!rp) return; en = rp->entry_data; if ((!en) || (rp->part->type != EDJE_PART_TYPE_TEXTBLOCK) || @@ -58,136 +292,68 @@ control = evas_key_modifier_is_set(ev->modifiers, "Control"); alt = evas_key_modifier_is_set(ev->modifiers, "Alt"); shift = evas_key_modifier_is_set(ev->modifiers, "Shift"); + multiline = rp->part->entry_mode; if (!strcmp(ev->key, "Escape")) { // dead keys here. Escape for now (should emit these) } - else if (!strcmp(ev->key, "Up")) + else if ((!strcmp(ev->key, "Up")) && (multiline)) { Evas_Coord lx, ly, lw, lh, cx, cy, cw, ch; int line_num; - if (shift) - { - // if no selection, start one - } - line_num = evas_textblock_cursor_line_geometry_get(en->cursor, NULL, NULL, NULL, NULL); - line_num--; - if (evas_object_textblock_line_number_geometry_get(rp->object, line_num, &lx, &ly, &lw, &lh)) - { - evas_textblock_cursor_char_geometry_get(en->cursor, &cx, &cy, &cw, &ch); - if (!evas_textblock_cursor_char_coord_set(en->cursor, cx + (cw / 2), ly + (lh / 2))) - { - evas_textblock_cursor_line_coord_set(en->cursor, ly + (lh / 2)); - if (cx + (cw / 2) < (lx + (lw / 2))) - evas_textblock_cursor_line_first(en->cursor); - else - evas_textblock_cursor_line_last(en->cursor); - } - } - if (shift) - { - // also extend selection - } + if (shift) _sel_start(en->cursor, rp->object, en); + _curs_up(en->cursor, rp->object, en); + if (shift) _sel_extend(en->cursor, rp->object, en); } - else if (!strcmp(ev->key, "Down")) + else if ((!strcmp(ev->key, "Down")) && (multiline)) { Evas_Coord lx, ly, lw, lh, cx, cy, cw, ch; int line_num; - if (shift) - { - // if no selection, start one - } - line_num = evas_textblock_cursor_line_geometry_get(en->cursor, NULL, NULL, NULL, NULL); - line_num++; - if (evas_object_textblock_line_number_geometry_get(rp->object, line_num, &lx, &ly, &lw, &lh)) - { - evas_textblock_cursor_char_geometry_get(en->cursor, &cx, &cy, &cw, &ch); - if (!evas_textblock_cursor_char_coord_set(en->cursor, cx + (cw / 2), ly + (lh / 2))) - { - evas_textblock_cursor_line_coord_set(en->cursor, ly + (lh / 2)); - if (cx + (cw / 2) < (lx + (lw / 2))) - evas_textblock_cursor_line_first(en->cursor); - else - evas_textblock_cursor_line_last(en->cursor); - } - } - if (shift) - { - // also extend selection - } + if (shift) _sel_start(en->cursor, rp->object, en); + _curs_down(en->cursor, rp->object, en); + if (shift) _sel_extend(en->cursor, rp->object, en); } else if (!strcmp(ev->key, "Left")) { - if (shift) - { - // if no selection, start one - } - if (!evas_textblock_cursor_char_prev(en->cursor)) - { - evas_textblock_cursor_node_prev(en->cursor); - } - if (shift) - { - // also extend selection - } + if (shift) _sel_start(en->cursor, rp->object, en); + _curs_back(en->cursor, rp->object, en); + if (shift) _sel_extend(en->cursor, rp->object, en); } else if (!strcmp(ev->key, "Right")) { - if (shift) - { - // if no selection, start one - } - if (!evas_textblock_cursor_char_next(en->cursor)) - { - evas_textblock_cursor_node_next(en->cursor); - } - if (shift) - { - // also extend selection - } + if (shift) _sel_start(en->cursor, rp->object, en); + _curs_next(en->cursor, rp->object, en); + if (shift) _sel_extend(en->cursor, rp->object, en); } else if (!strcmp(ev->key, "BackSpace")) { if (control) { - // if ctrl pressed del to start of previois word + // del to start of previous word } else if ((alt) && (shift)) { - // FIXME: undo last action + // undo last action } else { - if ((en->sel_start) && (en->sel_end) && (en->have_selection)) - { - printf("del sel\n"); - evas_textblock_cursor_range_delete(en->sel_start, en->sel_end); - } + if (en->have_selection) + evas_textblock_cursor_range_delete(en->sel_start, en->sel_end); else { - if (!evas_textblock_cursor_char_prev(en->cursor)) - { - evas_textblock_cursor_node_prev(en->cursor); - } + _curs_back(en->cursor, rp->object, en); evas_textblock_cursor_char_delete(en->cursor); } } - if ((en->sel_start) && (en->sel_end)) - { - // FIXME: func - evas_textblock_cursor_free(en->sel_start); - en->sel_start = NULL; - evas_textblock_cursor_free(en->sel_end); - en->sel_end = NULL; - } + _sel_clear(en->cursor, rp->object, en); } else if (!strcmp(ev->key, "Delete")) { if (control) { - // if ctrl pressed del to end of next word + // del to end of next word } else if (shift) { @@ -195,61 +361,30 @@ } else { - if ((en->sel_start) && (en->sel_end) && (en->have_selection)) - { - evas_textblock_cursor_range_delete(en->sel_start, en->sel_end); - } + if (en->have_selection) + evas_textblock_cursor_range_delete(en->sel_start, en->sel_end); else - { - evas_textblock_cursor_char_delete(en->cursor); - } + evas_textblock_cursor_char_delete(en->cursor); } - if ((en->sel_start) && (en->sel_end)) - { - // FIXME: func - evas_textblock_cursor_free(en->sel_start); - en->sel_start = NULL; - evas_textblock_cursor_free(en->sel_end); - en->sel_end = NULL; - } + _sel_clear(en->cursor, rp->object, en); } else if (!strcmp(ev->key, "Home")) { - if (shift) - { - // if no selection, start one - } - if (control) - { - // goto start of text - } + if (shift) _sel_start(en->cursor, rp->object, en); + if ((control) && (multiline)) + _curs_start(en->cursor, rp->object, en); else - { - evas_textblock_cursor_line_first(en->cursor); - } - if (shift) - { - // also extend selection - } + _curs_lin_start(en->cursor, rp->object, en); + if (shift) _sel_extend(en->cursor, rp->object, en); } else if (!strcmp(ev->key, "End")) { - if (shift) - { - // if no selection, start one - } - if (control) - { - // goto end of text - } + if (shift) _sel_start(en->cursor, rp->object, en); + if ((control) && (multiline)) + _curs_end(en->cursor, rp->object, en); else - { - evas_textblock_cursor_line_last(en->cursor); - } - if (shift) - { - // also extend selection - } + _curs_lin_end(en->cursor, rp->object, en); + if (shift) _sel_extend(en->cursor, rp->object, en); } else if ((control) && (!strcmp(ev->key, "v"))) { @@ -267,22 +402,23 @@ { if (shift) { - // FIXME: redo + // redo } else { - // FIXME: undo + // undo } } else if ((control) && (!strcmp(ev->key, "y"))) { - // FIXME: redo + // redo } else if ((control) && (!strcmp(ev->key, "w"))) { + _sel_clear(en->cursor, rp->object, en); // select current word } - else if (!strcmp(ev->key, "Tab")) + else if ((!strcmp(ev->key, "Tab")) && (multiline)) { if (shift) { @@ -290,26 +426,30 @@ } else { - // add a tab + evas_textblock_cursor_format_prepend(en->cursor, "\t"); + _curs_next(en->cursor, rp->object, en); } } - else if (!strcmp(ev->key, "ISO_Left_Tab")) - { + else if ((!strcmp(ev->key, "ISO_Left_Tab")) && (multiline)) + { // remove a tab } - else if (!strcmp(ev->key, "Prior")) + else if ((!strcmp(ev->key, "Prior")) && (multiline)) { - // pgup + if (shift) _sel_start(en->cursor, rp->object, en); + _curs_jump_line_by(en->cursor, rp->object, en, -10); + if (shift) _sel_extend(en->cursor, rp->object, en); } - else if (!strcmp(ev->key, "Next")) + else if ((!strcmp(ev->key, "Next")) && (multiline)) { - // pgdn + if (shift) _sel_start(en->cursor, rp->object, en); + _curs_jump_line_by(en->cursor, rp->object, en, 10); + if (shift) _sel_extend(en->cursor, rp->object, en); } - else if ((!strcmp(ev->key, "Return")) || (!strcmp(ev->key, "KP_Enter"))) + else if (((!strcmp(ev->key, "Return")) || (!strcmp(ev->key, "KP_Enter"))) && (multiline)) { - // newline evas_textblock_cursor_format_prepend(en->cursor, "\n"); - evas_textblock_cursor_node_next(en->cursor); + _curs_next(en->cursor, rp->object, en); } else if ((!strcmp(ev->key, "Multi_key"))) { @@ -327,18 +467,10 @@ // FIXME: if composing.. store 2 keys if (ev->string) { - if (evas_textblock_cursor_node_format_get(en->cursor)) - { - printf("on format node\n"); - while (evas_textblock_cursor_node_prev(en->cursor)) - { - if (!evas_textblock_cursor_node_format_get(en->cursor)) - break; - } - evas_textblock_cursor_text_append(en->cursor, ev->string); - } - else - evas_textblock_cursor_text_prepend(en->cursor, ev->string); + if (en->have_selection) + evas_textblock_cursor_range_delete(en->sel_start, en->sel_end); + evas_textblock_cursor_text_prepend(en->cursor, ev->string); + _sel_clear(en->cursor, rp->object, en); } } _edje_entry_real_part_configure(rp); @@ -365,11 +497,15 @@ Evas_Event_Mouse_Down *ev = event_info; Entry *en; Evas_Coord x, y, w, h; + Evas_Bool multiline; if (!rp) return; en = rp->entry_data; if ((!en) || (rp->part->type != EDJE_PART_TYPE_TEXTBLOCK) || - (rp->part->entry_mode < EDJE_ENTRY_EDIT_MODE_EDITABLE)) + (rp->part->entry_mode < EDJE_ENTRY_EDIT_MODE_SELECTABLE)) return; + // double click -> select word + // triple click -> select line + multiline = rp->part->entry_mode; evas_object_geometry_get(rp->object, &x, &y, &w, &h); en->cx = ev->canvas.x - x; en->cy = ev->canvas.y - y; @@ -380,21 +516,13 @@ evas_textblock_cursor_line_coord_set(en->cursor, en->cy); evas_textblock_cursor_line_geometry_get(en->cursor, &lx, &ly, &lw, &lh); if (en->cx <= lx) - evas_textblock_cursor_line_first(en->cursor); + _curs_lin_start(en->cursor, rp->object, en); else - evas_textblock_cursor_line_last(en->cursor); + _curs_lin_end(en->cursor, rp->object, en); } - en->sel_start = evas_object_textblock_cursor_new(rp->object); - evas_textblock_cursor_copy(en->cursor, en->sel_start); - en->sel_end = evas_object_textblock_cursor_new(rp->object); - evas_textblock_cursor_copy(en->cursor, en->sel_start); - en->have_selection = 0; - while (en->sel) - { - evas_object_del(en->sel->data); - en->sel = evas_list_remove_list(en->sel, en->sel); - } - // FIXME: emit "selection cleared" + en->selecting = 1; + _sel_clear(en->cursor, rp->object, en); + _sel_start(en->cursor, rp->object, en); _edje_entry_real_part_configure(rp); } @@ -405,11 +533,13 @@ Evas_Event_Mouse_Up *ev = event_info; Entry *en; Evas_Coord x, y, w, h; + Evas_Bool multiline; if (!rp) return; en = rp->entry_data; if ((!en) || (rp->part->type != EDJE_PART_TYPE_TEXTBLOCK) || - (rp->part->entry_mode < EDJE_ENTRY_EDIT_MODE_EDITABLE)) + (rp->part->entry_mode < EDJE_ENTRY_EDIT_MODE_SELECTABLE)) return; + multiline = rp->part->entry_mode; evas_object_geometry_get(rp->object, &x, &y, &w, &h); en->cx = ev->canvas.x - x; en->cy = ev->canvas.y - y; @@ -420,18 +550,12 @@ evas_textblock_cursor_line_coord_set(en->cursor, en->cy); evas_textblock_cursor_line_geometry_get(en->cursor, &lx, &ly, &lw, &lh); if (en->cx <= lx) - evas_textblock_cursor_line_first(en->cursor); + _curs_lin_start(en->cursor, rp->object, en); else - evas_textblock_cursor_line_last(en->cursor); + _curs_lin_end(en->cursor, rp->object, en); } evas_textblock_cursor_copy(en->cursor, en->sel_end); - - // FIXME: emit "selection ended" - - evas_textblock_cursor_free(en->sel_start); - en->sel_start = NULL; - evas_textblock_cursor_free(en->sel_end); - en->sel_end = NULL; + en->selecting = 0; _edje_entry_real_part_configure(rp); } @@ -443,11 +567,13 @@ Entry *en; Evas_Coord x, y, w, h; if (!rp) return; + Evas_Bool multiline; en = rp->entry_data; if ((!en) || (rp->part->type != EDJE_PART_TYPE_TEXTBLOCK) || - (rp->part->entry_mode < EDJE_ENTRY_EDIT_MODE_EDITABLE)) + (rp->part->entry_mode < EDJE_ENTRY_EDIT_MODE_SELECTABLE)) return; - if (!en->sel_start) return; + multiline = rp->part->entry_mode; + if (!en->selecting) return; evas_object_geometry_get(rp->object, &x, &y, &w, &h); en->cx = ev->cur.canvas.x - x; en->cy = ev->cur.canvas.y - y; @@ -458,50 +584,15 @@ evas_textblock_cursor_line_coord_set(en->cursor, en->cy); evas_textblock_cursor_line_geometry_get(en->cursor, &lx, &ly, &lw, &lh); if (en->cx <= lx) - evas_textblock_cursor_line_first(en->cursor); + _curs_lin_start(en->cursor, rp->object, en); else - evas_textblock_cursor_line_last(en->cursor); + _curs_lin_end(en->cursor, rp->object, en); } - evas_textblock_cursor_copy(en->cursor, en->sel_end); + _sel_extend(en->cursor, rp->object, en); if (evas_textblock_cursor_compare(en->sel_start, en->sel_end) != 0) - { - en->have_selection = 1; - // FIXME: emit "selection started" - } + _sel_enable(en->cursor, rp->object, en); if (en->have_selection) - { - Evas_List *range; - - printf("update sel\n"); - range = evas_textblock_cursor_range_geometry_get(en->sel_start, en->sel_end); - while (en->sel) - { - evas_object_del(en->sel->data); - en->sel = evas_list_remove_list(en->sel, en->sel); - } - while (range) - { - Evas_Textblock_Rectangle *r; - Evas_Object *o; - - r = range->data; - - o = evas_object_rectangle_add(evas_object_evas_get(rp->object)); - evas_object_smart_member_add(o, rp->edje->obj); - evas_object_stack_below(o, rp->object); - evas_object_clip_set(o, evas_object_clip_get(rp->object)); - evas_object_color_set(o, 20, 20, 255, 150); - evas_object_pass_events_set(o, 1); - evas_object_show(o); - evas_object_move(o, x + r->x, y + r->y); - evas_object_resize(o, r->w, r->h); - en->sel = evas_list_append(en->sel, o); - - range = evas_list_remove_list(range, range); - free(r); - } - // FIXME: emit "selection changed" - } + _sel_update(en->cursor, rp->object, en); _edje_entry_real_part_configure(rp); } @@ -540,7 +631,8 @@ evas_object_clip_set(en->cursor_bg, evas_object_clip_get(rp->object)); evas_object_color_set(en->cursor_bg, 255, 20, 20, 150); evas_object_pass_events_set(en->cursor_bg, 1); - evas_object_show(en->cursor_bg); + if (rp->part->entry_mode >= EDJE_ENTRY_EDIT_MODE_EDITABLE) + evas_object_show(en->cursor_bg); en->cursor = evas_object_textblock_cursor_get(rp->object); } @@ -561,24 +653,70 @@ Evas_Coord x, y, w, h, xx, yy, ww, hh; Entry *en = rp->entry_data; if (!en) return; - + + _sel_update(en->cursor, rp->object, en); + x = y = w = h = -1; + xx = yy = ww = hh = -1; evas_object_geometry_get(rp->object, &x, &y, &w, &h); - // move cursor/selections etc. - if (evas_textblock_cursor_char_geometry_get(en->cursor, &xx, &yy, &ww, &hh) < 0) + evas_textblock_cursor_char_geometry_get(en->cursor, &xx, &yy, &ww, &hh); + if (ww < 1) ww = 1; + if (hh < 1) ww = 1; + if (en->cursor_bg) { - printf("line < 0!\n"); + evas_object_move(en->cursor_bg, x + xx, y + yy); + evas_object_resize(en->cursor_bg, ww, hh); } - printf("%i %i %ix%i\n", xx, yy, ww, hh); - if (ww < 1) ww = 1; - if (hh < 1) ww = 1; - evas_object_move(en->cursor_bg, x + xx, y + yy); - evas_object_resize(en->cursor_bg, ww, hh); - // FIXME: move/resize en->sel (record the sels and intended geom) + if (en->cursor_fg) + { + evas_object_move(en->cursor_fg, x + xx, y + yy); + evas_object_resize(en->cursor_fg, ww, hh); + } + // FIXME: move anchor objects based on cursor geometry } -// FIXME: need to implement -// get text -// insert text -// delete selected text -// get selection -// +char * +_edje_entry_selection_get(Edje_Real_Part *rp) +{ + Entry *en = rp->entry_data; + if (!en) return; + // get selection - convert to markup +} + +const char * +_edje_entry_text_get(Edje_Real_Part *rp) +{ + Entry *en = rp->entry_data; + if (!en) return; + // get text - convert to markup + return evas_object_textblock_text_markup_get(rp->object); +} + +void +_edje_entry_text_markup_set(Edje_Real_Part *rp, const char *text) +{ + Entry *en = rp->entry_data; + if (!en) return; + // set text as markup + evas_object_textblock_text_markup_set(rp->object, text); + // walk textblock nodes + // in walk find anything of style "a href=XXX" and matching end tag + // add 2 cursors and save this link in a list +} + +void +_edje_entry_set_cursor_start(Edje_Real_Part *rp) +{ + Entry *en = rp->entry_data; + if (!en) return; + _curs_start(en->cursor, rp->object, en); +} + +void +_edje_entry_set_cursor_end(Edje_Real_Part *rp) +{ + Entry *en = rp->entry_data; + if (!en) return; + _curs_end(en->cursor, rp->object, en); +} + +// FIXME: apis 's query anchor stuff??? Modified: trunk/edje/src/lib/edje_private.h =================================================================== --- trunk/edje/src/lib/edje_private.h 2008-10-15 09:58:17 UTC (rev 36664) +++ trunk/edje/src/lib/edje_private.h 2008-10-15 09:58:25 UTC (rev 36665) @@ -260,7 +260,6 @@ #define EDJE_STATE_PARAM_VISIBLE 31 #define EDJE_STATE_PARAM_LAST 32 -// FIXME: doing #define EDJE_ENTRY_EDIT_MODE_NONE 0 #define EDJE_ENTRY_EDIT_MODE_SELECTABLE 1 #define EDJE_ENTRY_EDIT_MODE_EDITABLE 2 @@ -1237,5 +1236,10 @@ void _edje_entry_real_part_init(Edje_Real_Part *rp); void _edje_entry_real_part_shutdown(Edje_Real_Part *rp); void _edje_entry_real_part_configure(Edje_Real_Part *rp); +char *_edje_entry_selection_get(Edje_Real_Part *rp); +const char *_edje_entry_text_get(Edje_Real_Part *rp); +void _edje_entry_text_markup_set(Edje_Real_Part *rp, const char *text); +void _edje_entry_set_cursor_start(Edje_Real_Part *rp); +void _edje_entry_set_cursor_end(Edje_Real_Part *rp); #endif Modified: trunk/edje/src/lib/edje_util.c =================================================================== --- trunk/edje/src/lib/edje_util.c 2008-10-15 09:58:17 UTC (rev 36664) +++ trunk/edje/src/lib/edje_util.c 2008-10-15 09:58:25 UTC (rev 36665) @@ -878,9 +878,17 @@ if ((rp->text.text) && (text) && (!strcmp(rp->text.text, text))) return; - if (rp->text.text) evas_stringshare_del(rp->text.text); - if (text) rp->text.text = evas_stringshare_add(text); - else rp->text.text = NULL; + if (rp->text.text) + { + evas_stringshare_del(rp->text.text); + rp->text.text = NULL; + } + if (rp->part->entry_mode > EDJE_ENTRY_EDIT_MODE_NONE) + { + _edje_entry_text_markup_set(rp, text); + } + else + if (text) rp->text.text = evas_stringshare_add(text); rp->edje->dirty = 1; _edje_recalc(rp->edje); if (rp->edje->text_change.func) @@ -902,8 +910,15 @@ if ((!ed) || (!part)) return NULL; rp = _edje_real_part_recursive_get(ed, (char *)part); if (!rp) return NULL; - if (rp->part->type == EDJE_PART_TYPE_TEXT) - return rp->text.text; + if (rp->part->entry_mode > EDJE_ENTRY_EDIT_MODE_NONE) + { + return _edje_entry_text_get(rp); + } + else + { + if (rp->part->type == EDJE_PART_TYPE_TEXT) + return rp->text.text; + } return NULL; } |
From: Enlightenment S. <no-...@en...> - 2008-10-15 15:15:16
|
Log: actually use edje for selection and cursor now. Author: raster Date: 2008-10-15 08:15:06 -0700 (Wed, 15 Oct 2008) New Revision: 36680 Modified: trunk/edje/src/lib/edje_entry.c Modified: trunk/edje/src/lib/edje_entry.c =================================================================== --- trunk/edje/src/lib/edje_entry.c 2008-10-15 15:12:56 UTC (rev 36679) +++ trunk/edje/src/lib/edje_entry.c 2008-10-15 15:15:06 UTC (rev 36680) @@ -9,7 +9,8 @@ struct _Entry { - Evas_Coord cx, cy; + Edje_Real_Part *rp; + Evas_Coord cx, cy; Evas_Object *cursor_bg; Evas_Object *cursor_fg; Evas_Textblock_Cursor *cursor; @@ -49,27 +50,46 @@ } static void +_curs_update_from_curs(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en) +{ + Evas_Coord cx, cy, cw, ch; + evas_textblock_cursor_char_geometry_get(c, &cx, &cy, &cw, &ch); + en->cx = cx + (cw / 2); + en->cy = cy + (ch / 2); +} + +static void _curs_back(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en) { - if (evas_textblock_cursor_char_prev(c)) return; - if (!evas_textblock_cursor_node_prev(c)) return; - while (evas_textblock_cursor_node_format_get(c)) + if (!evas_textblock_cursor_char_prev(c)) { - if (evas_textblock_cursor_node_format_is_visible_get(c)) break; - if (!evas_textblock_cursor_node_prev(c)) break; + if (evas_textblock_cursor_node_prev(c)) + { + while (evas_textblock_cursor_node_format_get(c)) + { + if (evas_textblock_cursor_node_format_is_visible_get(c)) break; + if (!evas_textblock_cursor_node_prev(c)) break; + } + } } + _curs_update_from_curs(c, o, en); } static void _curs_next(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en) { - if (evas_textblock_cursor_char_next(c)) return; - if (!evas_textblock_cursor_node_next(c)) return; - while (evas_textblock_cursor_node_format_get(c)) + if (!evas_textblock_cursor_char_next(c)) { - if (evas_textblock_cursor_node_format_is_visible_get(c)) break; - if (!evas_textblock_cursor_node_next(c)) break; + if (evas_textblock_cursor_node_next(c)) + { + while (evas_textblock_cursor_node_format_get(c)) + { + if (evas_textblock_cursor_node_format_is_visible_get(c)) break; + if (!evas_textblock_cursor_node_next(c)) break; + } + } } + _curs_update_from_curs(c, o, en); } static int @@ -88,7 +108,7 @@ static void _curs_jump_line(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en, int ln) { - Evas_Coord lx, ly, lw, lh, cx, cy, cw, ch; + Evas_Coord lx, ly, lw, lh; if (ln < 0) ln = 0; else @@ -98,11 +118,10 @@ } if (!evas_object_textblock_line_number_geometry_get(o, ln, &lx, &ly, &lw, &lh)) return; - evas_textblock_cursor_char_geometry_get(c, &cx, &cy, &cw, &ch); - if (evas_textblock_cursor_char_coord_set(c, cx + (cw / 2), ly + (lh / 2))) + if (evas_textblock_cursor_char_coord_set(c, en->cx, ly + (lh / 2))) return; evas_textblock_cursor_line_coord_set(c, ly + (lh / 2)); - if (cx + (cw / 2) < (lx + (lw / 2))) evas_textblock_cursor_line_first(c); + if (en->cx < (lx + (lw / 2))) evas_textblock_cursor_line_first(c); else evas_textblock_cursor_line_last(c); } @@ -131,6 +150,7 @@ _curs_lin_start(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en) { evas_textblock_cursor_line_first(c); + _curs_update_from_curs(c, o, en); } static void @@ -139,6 +159,7 @@ evas_textblock_cursor_line_last(c); if (!evas_textblock_cursor_node_format_get(c)) _curs_next(c, o, en); + _curs_update_from_curs(c, o, en); } static void @@ -146,6 +167,7 @@ { evas_textblock_cursor_line_set(c, 0); evas_textblock_cursor_line_first(c); + _curs_update_from_curs(c, o, en); } static void @@ -153,6 +175,7 @@ { evas_textblock_cursor_line_set(c, _curs_line_last_get(c, o, en)); _curs_lin_end(c, o, en); + _curs_update_from_curs(c, o, en); } @@ -174,6 +197,7 @@ if (en->have_selection) return; en->have_selection = 1; // FIXME: emit "selection changed" +// _edje_emit(rp->edje, "selection,start", rp->part->name); } static void @@ -184,6 +208,7 @@ if (!evas_textblock_cursor_compare(c, en->sel_end)) return; evas_textblock_cursor_copy(c, en->sel_end); // FIXME: emit "selection changed" +// _edje_emit(rp->edje, "selection,changed", rp->part->name); } static void @@ -238,14 +263,22 @@ { sel = calloc(1, sizeof(Sel)); en->sel = evas_list_append(en->sel, sel); - ob = evas_object_rectangle_add(evas_object_evas_get(o)); + ob = edje_object_add(en->rp->edje->evas); + edje_object_file_set(ob, en->rp->edje->path, en->rp->part->source); evas_object_smart_member_add(ob, smart); evas_object_stack_below(ob, o); evas_object_clip_set(ob, clip); - evas_object_color_set(ob, 20, 20, 255, 150); evas_object_pass_events_set(ob, 1); evas_object_show(ob); sel->obj_bg = ob; + ob = edje_object_add(en->rp->edje->evas); + edje_object_file_set(ob, en->rp->edje->path, en->rp->part->source2); + evas_object_smart_member_add(ob, smart); + evas_object_stack_above(ob, o); + evas_object_clip_set(ob, clip); + evas_object_pass_events_set(ob, 1); + evas_object_show(ob); + sel->obj_fg = ob; } } } @@ -367,6 +400,7 @@ evas_textblock_cursor_char_delete(en->cursor); } _sel_clear(en->cursor, rp->object, en); + _edje_emit(ed, "entry,changed", rp->part->name); } else if (!strcmp(ev->key, "Home")) { @@ -428,6 +462,7 @@ { evas_textblock_cursor_format_prepend(en->cursor, "\t"); _curs_next(en->cursor, rp->object, en); + _edje_emit(ed, "entry,changed", rp->part->name); } } else if ((!strcmp(ev->key, "ISO_Left_Tab")) && (multiline)) @@ -450,6 +485,7 @@ { evas_textblock_cursor_format_prepend(en->cursor, "\n"); _curs_next(en->cursor, rp->object, en); + _edje_emit(ed, "entry,changed", rp->part->name); } else if ((!strcmp(ev->key, "Multi_key"))) { @@ -471,6 +507,7 @@ evas_textblock_cursor_range_delete(en->sel_start, en->sel_end); evas_textblock_cursor_text_prepend(en->cursor, ev->string); _sel_clear(en->cursor, rp->object, en); + _edje_emit(ed, "entry,changed", rp->part->name); } } _edje_entry_real_part_configure(rp); @@ -619,20 +656,32 @@ en = calloc(1, sizeof(Entry)); if (!en) return; rp->entry_data = en; + en->rp = rp; evas_object_event_callback_add(rp->object, EVAS_CALLBACK_MOUSE_DOWN, _edje_part_mouse_down_cb, rp); evas_object_event_callback_add(rp->object, EVAS_CALLBACK_MOUSE_UP, _edje_part_mouse_up_cb, rp); evas_object_event_callback_add(rp->object, EVAS_CALLBACK_MOUSE_MOVE, _edje_part_mouse_move_cb, rp); // FIXME: make cursor object correct - en->cursor_bg = evas_object_rectangle_add(evas_object_evas_get(rp->object)); +// en->cursor_bg = evas_object_rectangle_add(evas_object_evas_get(rp->object)); + en->cursor_bg = edje_object_add(rp->edje->evas); + edje_object_file_set(en->cursor_bg, rp->edje->path, rp->part->source3); evas_object_smart_member_add(en->cursor_bg, rp->edje->obj); evas_object_stack_below(en->cursor_bg, rp->object); evas_object_clip_set(en->cursor_bg, evas_object_clip_get(rp->object)); - evas_object_color_set(en->cursor_bg, 255, 20, 20, 150); evas_object_pass_events_set(en->cursor_bg, 1); + + en->cursor_fg = edje_object_add(rp->edje->evas); + edje_object_file_set(en->cursor_fg, rp->edje->path, rp->part->source4); + evas_object_smart_member_add(en->cursor_fg, rp->edje->obj); + evas_object_stack_above(en->cursor_fg, rp->object); + evas_object_clip_set(en->cursor_fg, evas_object_clip_get(rp->object)); + evas_object_pass_events_set(en->cursor_fg, 1); if (rp->part->entry_mode >= EDJE_ENTRY_EDIT_MODE_EDITABLE) - evas_object_show(en->cursor_bg); + { + evas_object_show(en->cursor_bg); + evas_object_show(en->cursor_fg); + } en->cursor = evas_object_textblock_cursor_get(rp->object); } @@ -643,6 +692,9 @@ Entry *en = rp->entry_data; if (!en) return; rp->entry_data = NULL; + _sel_clear(en->cursor, rp->object, en); + evas_object_del(en->cursor_bg); + evas_object_del(en->cursor_fg); // FIXME: delete cursor objects, sel cursors and en->sel's undo buffer copy/cut buffer free(en); } @@ -697,10 +749,8 @@ Entry *en = rp->entry_data; if (!en) return; // set text as markup - evas_object_textblock_text_markup_set(rp->object, text); - // walk textblock nodes - // in walk find anything of style "a href=XXX" and matching end tag - // add 2 cursors and save this link in a list + evas_object_textblock_text_markup_set(rp->object, text); + _edje_emit(rp->edje, "entry,changed", rp->part->name); } void |
From: Enlightenment S. <no-...@en...> - 2008-10-16 02:28:38
|
Log: set corsor to start on text set. Author: raster Date: 2008-10-15 19:11:02 -0700 (Wed, 15 Oct 2008) New Revision: 36703 Modified: trunk/edje/src/lib/edje_entry.c Modified: trunk/edje/src/lib/edje_entry.c =================================================================== --- trunk/edje/src/lib/edje_entry.c 2008-10-15 22:32:38 UTC (rev 36702) +++ trunk/edje/src/lib/edje_entry.c 2008-10-16 02:11:02 UTC (rev 36703) @@ -751,6 +751,7 @@ // set text as markup evas_object_textblock_text_markup_set(rp->object, text); _edje_emit(rp->edje, "entry,changed", rp->part->name); + _edje_entry_set_cursor_start(rp); } void |
From: Enlightenment S. <no-...@en...> - 2008-10-16 09:22:05
|
Log: edje entry growing. Author: raster Date: 2008-10-16 02:17:44 -0700 (Thu, 16 Oct 2008) New Revision: 36709 Modified: trunk/edje/src/lib/Edje.h trunk/edje/src/lib/edje_entry.c trunk/edje/src/lib/edje_private.h trunk/edje/src/lib/edje_util.c Modified: trunk/edje/src/lib/Edje.h =================================================================== --- trunk/edje/src/lib/Edje.h 2008-10-16 09:17:37 UTC (rev 36708) +++ trunk/edje/src/lib/Edje.h 2008-10-16 09:17:44 UTC (rev 36709) @@ -235,6 +235,8 @@ EAPI void edje_object_text_change_cb_set (Evas_Object *obj, void (*func) (void *data, Evas_Object *obj, const char *part), void *data); EAPI void edje_object_part_text_set (Evas_Object *obj, const char *part, const char *text); EAPI const char *edje_object_part_text_get (const Evas_Object *obj, const char *part); + EAPI const char *edje_object_part_text_selection_get(const Evas_Object *obj, const char *part); + EAPI void edje_object_part_text_insert (Evas_Object *obj, const char *part, const char *text); EAPI void edje_object_part_swallow (Evas_Object *obj, const char *part, Evas_Object *obj_swallow); EAPI void edje_object_part_unswallow (Evas_Object *obj, Evas_Object *obj_swallow); EAPI Evas_Object *edje_object_part_swallow_get (const Evas_Object *obj, const char *part); Modified: trunk/edje/src/lib/edje_entry.c =================================================================== --- trunk/edje/src/lib/edje_entry.c 2008-10-16 09:17:37 UTC (rev 36708) +++ trunk/edje/src/lib/edje_entry.c 2008-10-16 09:17:44 UTC (rev 36709) @@ -16,6 +16,7 @@ Evas_Textblock_Cursor *cursor; Evas_Textblock_Cursor *sel_start, *sel_end; Evas_List *sel; + char *selection; Evas_Bool selecting : 1; Evas_Bool have_selection : 1; }; @@ -185,9 +186,9 @@ { if (en->sel_start) return; en->sel_start = evas_object_textblock_cursor_new(o); - evas_textblock_cursor_copy(en->cursor, en->sel_start); + evas_textblock_cursor_copy(c, en->sel_start); en->sel_end = evas_object_textblock_cursor_new(o); - evas_textblock_cursor_copy(en->cursor, en->sel_start); + evas_textblock_cursor_copy(c, en->sel_start); en->have_selection = 0; } @@ -196,8 +197,7 @@ { if (en->have_selection) return; en->have_selection = 1; - // FIXME: emit "selection changed" -// _edje_emit(rp->edje, "selection,start", rp->part->name); + _edje_emit(en->rp->edje, "selection,start", en->rp->part->name); } static void @@ -207,8 +207,7 @@ _sel_enable(c, o, en); if (!evas_textblock_cursor_compare(c, en->sel_end)) return; evas_textblock_cursor_copy(c, en->sel_end); - // FIXME: emit "selection changed" -// _edje_emit(rp->edje, "selection,changed", rp->part->name); + _edje_emit(en->rp->edje, "selection,changed", en->rp->part->name); } static void @@ -221,7 +220,11 @@ en->sel_start = NULL; en->sel_end = NULL; } - en->have_selection = 0; + if (en->selection) + { + free(en->selection); + en->selection = NULL; + } while (en->sel) { Sel *sel; @@ -232,6 +235,11 @@ free(sel); en->sel = evas_list_remove_list(en->sel, en->sel); } + if (en->have_selection) + { + en->have_selection = 0; + _edje_emit(en->rp->edje, "selection,cleared", en->rp->part->name); + } } static void @@ -314,6 +322,7 @@ Entry *en; Evas_Bool control, alt, shift; Evas_Bool multiline; + Evas_Textblock_Cursor *tc; if (!rp) return; en = rp->entry_data; if ((!en) || (rp->part->type != EDJE_PART_TYPE_TEXTBLOCK) || @@ -321,7 +330,9 @@ return; if (!ev->key) return; - printf("editable: '%s' '%s' '%s'\n", ev->key, ev->string, ev->compose); + tc = evas_object_textblock_cursor_new(rp->object); + evas_textblock_cursor_copy(en->cursor, tc); + control = evas_key_modifier_is_set(ev->modifiers, "Control"); alt = evas_key_modifier_is_set(ev->modifiers, "Alt"); shift = evas_key_modifier_is_set(ev->modifiers, "Shift"); @@ -332,31 +343,29 @@ } else if ((!strcmp(ev->key, "Up")) && (multiline)) { - Evas_Coord lx, ly, lw, lh, cx, cy, cw, ch; - int line_num; - if (shift) _sel_start(en->cursor, rp->object, en); + else _sel_clear(en->cursor, rp->object, en); _curs_up(en->cursor, rp->object, en); if (shift) _sel_extend(en->cursor, rp->object, en); } else if ((!strcmp(ev->key, "Down")) && (multiline)) { - Evas_Coord lx, ly, lw, lh, cx, cy, cw, ch; - int line_num; - if (shift) _sel_start(en->cursor, rp->object, en); + else _sel_clear(en->cursor, rp->object, en); _curs_down(en->cursor, rp->object, en); if (shift) _sel_extend(en->cursor, rp->object, en); } else if (!strcmp(ev->key, "Left")) { if (shift) _sel_start(en->cursor, rp->object, en); + else _sel_clear(en->cursor, rp->object, en); _curs_back(en->cursor, rp->object, en); if (shift) _sel_extend(en->cursor, rp->object, en); } else if (!strcmp(ev->key, "Right")) { if (shift) _sel_start(en->cursor, rp->object, en); + else _sel_clear(en->cursor, rp->object, en); _curs_next(en->cursor, rp->object, en); if (shift) _sel_extend(en->cursor, rp->object, en); } @@ -373,14 +382,45 @@ else { if (en->have_selection) - evas_textblock_cursor_range_delete(en->sel_start, en->sel_end); + { + Evas_Textblock_Cursor *c1; + + c1 = evas_object_textblock_cursor_new(rp->object); + evas_textblock_cursor_node_last(c1); + if (!evas_textblock_cursor_compare(en->sel_end, c1)) + evas_textblock_cursor_node_prev(en->sel_end); + if (!evas_textblock_cursor_compare(en->sel_start, c1)) + evas_textblock_cursor_node_prev(en->sel_start); + evas_textblock_cursor_free(c1); + evas_textblock_cursor_range_delete(en->sel_start, en->sel_end); + } else { - _curs_back(en->cursor, rp->object, en); - evas_textblock_cursor_char_delete(en->cursor); + Evas_Textblock_Cursor *c1, *c2; + int nodel = 0; + + c1 = evas_object_textblock_cursor_new(rp->object); + if (!evas_textblock_cursor_char_prev(en->cursor)) + { + if (!evas_textblock_cursor_node_prev(en->cursor)) + nodel = 1; + else + { + evas_textblock_cursor_copy(en->cursor, c1); + _curs_back(en->cursor, rp->object, en); + } + } + else + evas_textblock_cursor_copy(en->cursor, c1); + c2 = evas_object_textblock_cursor_new(rp->object); + evas_textblock_cursor_copy(en->cursor, c2); + if (!nodel) evas_textblock_cursor_range_delete(c1, c2); + evas_textblock_cursor_free(c1); + evas_textblock_cursor_free(c2); } } _sel_clear(en->cursor, rp->object, en); + _curs_update_from_curs(en->cursor, rp->object, en); } else if (!strcmp(ev->key, "Delete")) { @@ -400,11 +440,13 @@ evas_textblock_cursor_char_delete(en->cursor); } _sel_clear(en->cursor, rp->object, en); + _curs_update_from_curs(en->cursor, rp->object, en); _edje_emit(ed, "entry,changed", rp->part->name); } else if (!strcmp(ev->key, "Home")) { if (shift) _sel_start(en->cursor, rp->object, en); + else _sel_clear(en->cursor, rp->object, en); if ((control) && (multiline)) _curs_start(en->cursor, rp->object, en); else @@ -414,6 +456,7 @@ else if (!strcmp(ev->key, "End")) { if (shift) _sel_start(en->cursor, rp->object, en); + else _sel_clear(en->cursor, rp->object, en); if ((control) && (multiline)) _curs_end(en->cursor, rp->object, en); else @@ -422,15 +465,18 @@ } else if ((control) && (!strcmp(ev->key, "v"))) { - // paste + _edje_emit(ed, "entry,paste,request", rp->part->name); } else if ((control) && ((!strcmp(ev->key, "c") || (!strcmp(ev->key, "Insert"))))) { - // copy + // FIXME: copy - save selection + _edje_emit(ed, "entry,copy,notify", rp->part->name); } else if ((control) && ((!strcmp(ev->key, "x") || (!strcmp(ev->key, "m"))))) { - // cut + // FIXME: cut - save selection, delete seletion + _curs_update_from_curs(en->cursor, rp->object, en); + _edje_emit(ed, "entry,cut,notify", rp->part->name); } else if ((control) && (!strcmp(ev->key, "z"))) { @@ -461,7 +507,7 @@ else { evas_textblock_cursor_format_prepend(en->cursor, "\t"); - _curs_next(en->cursor, rp->object, en); + _curs_update_from_curs(en->cursor, rp->object, en); _edje_emit(ed, "entry,changed", rp->part->name); } } @@ -472,19 +518,21 @@ else if ((!strcmp(ev->key, "Prior")) && (multiline)) { if (shift) _sel_start(en->cursor, rp->object, en); + else _sel_clear(en->cursor, rp->object, en); _curs_jump_line_by(en->cursor, rp->object, en, -10); if (shift) _sel_extend(en->cursor, rp->object, en); } else if ((!strcmp(ev->key, "Next")) && (multiline)) { if (shift) _sel_start(en->cursor, rp->object, en); + else _sel_clear(en->cursor, rp->object, en); _curs_jump_line_by(en->cursor, rp->object, en, 10); if (shift) _sel_extend(en->cursor, rp->object, en); } else if (((!strcmp(ev->key, "Return")) || (!strcmp(ev->key, "KP_Enter"))) && (multiline)) { evas_textblock_cursor_format_prepend(en->cursor, "\n"); - _curs_next(en->cursor, rp->object, en); + _curs_update_from_curs(en->cursor, rp->object, en); _edje_emit(ed, "entry,changed", rp->part->name); } else if ((!strcmp(ev->key, "Multi_key"))) @@ -507,9 +555,13 @@ evas_textblock_cursor_range_delete(en->sel_start, en->sel_end); evas_textblock_cursor_text_prepend(en->cursor, ev->string); _sel_clear(en->cursor, rp->object, en); + _curs_update_from_curs(en->cursor, rp->object, en); _edje_emit(ed, "entry,changed", rp->part->name); } } + if (evas_textblock_cursor_compare(tc, en->cursor)) + _edje_emit(ed, "cursor,changed", rp->part->name); + evas_textblock_cursor_free(tc); _edje_entry_real_part_configure(rp); } @@ -535,6 +587,7 @@ Entry *en; Evas_Coord x, y, w, h; Evas_Bool multiline; + Evas_Textblock_Cursor *tc; if (!rp) return; en = rp->entry_data; if ((!en) || (rp->part->type != EDJE_PART_TYPE_TEXTBLOCK) || @@ -542,6 +595,8 @@ return; // double click -> select word // triple click -> select line + tc = evas_object_textblock_cursor_new(rp->object); + evas_textblock_cursor_copy(en->cursor, tc); multiline = rp->part->entry_mode; evas_object_geometry_get(rp->object, &x, &y, &w, &h); en->cx = ev->canvas.x - x; @@ -560,6 +615,9 @@ en->selecting = 1; _sel_clear(en->cursor, rp->object, en); _sel_start(en->cursor, rp->object, en); + if (evas_textblock_cursor_compare(tc, en->cursor)) + _edje_emit(rp->edje, "cursor,changed", rp->part->name); + evas_textblock_cursor_free(tc); _edje_entry_real_part_configure(rp); } @@ -571,11 +629,14 @@ Entry *en; Evas_Coord x, y, w, h; Evas_Bool multiline; + Evas_Textblock_Cursor *tc; if (!rp) return; en = rp->entry_data; if ((!en) || (rp->part->type != EDJE_PART_TYPE_TEXTBLOCK) || (rp->part->entry_mode < EDJE_ENTRY_EDIT_MODE_SELECTABLE)) return; + tc = evas_object_textblock_cursor_new(rp->object); + evas_textblock_cursor_copy(en->cursor, tc); multiline = rp->part->entry_mode; evas_object_geometry_get(rp->object, &x, &y, &w, &h); en->cx = ev->canvas.x - x; @@ -593,6 +654,9 @@ } evas_textblock_cursor_copy(en->cursor, en->sel_end); en->selecting = 0; + if (evas_textblock_cursor_compare(tc, en->cursor)) + _edje_emit(rp->edje, "cursor,changed", rp->part->name); + evas_textblock_cursor_free(tc); _edje_entry_real_part_configure(rp); } @@ -603,12 +667,15 @@ Evas_Event_Mouse_Move *ev = event_info; Entry *en; Evas_Coord x, y, w, h; + Evas_Textblock_Cursor *tc; if (!rp) return; Evas_Bool multiline; en = rp->entry_data; if ((!en) || (rp->part->type != EDJE_PART_TYPE_TEXTBLOCK) || (rp->part->entry_mode < EDJE_ENTRY_EDIT_MODE_SELECTABLE)) return; + tc = evas_object_textblock_cursor_new(rp->object); + evas_textblock_cursor_copy(en->cursor, tc); multiline = rp->part->entry_mode; if (!en->selecting) return; evas_object_geometry_get(rp->object, &x, &y, &w, &h); @@ -630,6 +697,9 @@ _sel_enable(en->cursor, rp->object, en); if (en->have_selection) _sel_update(en->cursor, rp->object, en); + if (evas_textblock_cursor_compare(tc, en->cursor)) + _edje_emit(rp->edje, "cursor,changed", rp->part->name); + evas_textblock_cursor_free(tc); _edje_entry_real_part_configure(rp); } @@ -726,19 +796,23 @@ // FIXME: move anchor objects based on cursor geometry } -char * +const char * _edje_entry_selection_get(Edje_Real_Part *rp) { Entry *en = rp->entry_data; - if (!en) return; + if (!en) return NULL; // get selection - convert to markup + if ((!en->selection) && (en->have_selection)) + en->selection = evas_textblock_cursor_range_text_get + (en->sel_start, en->sel_end, EVAS_TEXTBLOCK_TEXT_MARKUP); + return en->selection; } const char * _edje_entry_text_get(Edje_Real_Part *rp) { Entry *en = rp->entry_data; - if (!en) return; + if (!en) return NULL; // get text - convert to markup return evas_object_textblock_text_markup_get(rp->object); } @@ -750,11 +824,27 @@ if (!en) return; // set text as markup evas_object_textblock_text_markup_set(rp->object, text); + evas_textblock_cursor_node_last(en->cursor); + if ((!evas_textblock_cursor_node_format_get(en->cursor)) || + (!strcmp(evas_textblock_cursor_node_format_get(en->cursor), "\n")) || + (!strcmp(evas_textblock_cursor_node_format_get(en->cursor), "\\n"))) + evas_textblock_cursor_format_append(en->cursor, "\n"); _edje_emit(rp->edje, "entry,changed", rp->part->name); _edje_entry_set_cursor_start(rp); } void +_edje_entry_text_markup_insert(Edje_Real_Part *rp, const char *text) +{ + Entry *en = rp->entry_data; + if (!en) return; + // prepend markup @ cursor pos + evas_object_textblock_text_markup_prepend(en->cursor, text); + _curs_update_from_curs(en->cursor, rp->object, en); + _edje_emit(rp->edje, "entry,changed", rp->part->name); +} + +void _edje_entry_set_cursor_start(Edje_Real_Part *rp) { Entry *en = rp->entry_data; @@ -770,4 +860,4 @@ _curs_end(en->cursor, rp->object, en); } -// FIXME: apis 's query anchor stuff??? +// FIXME: apis 's query anchor stuff???, anchor revents Modified: trunk/edje/src/lib/edje_private.h =================================================================== --- trunk/edje/src/lib/edje_private.h 2008-10-16 09:17:37 UTC (rev 36708) +++ trunk/edje/src/lib/edje_private.h 2008-10-16 09:17:44 UTC (rev 36709) @@ -1238,9 +1238,10 @@ void _edje_entry_real_part_init(Edje_Real_Part *rp); void _edje_entry_real_part_shutdown(Edje_Real_Part *rp); void _edje_entry_real_part_configure(Edje_Real_Part *rp); -char *_edje_entry_selection_get(Edje_Real_Part *rp); +const char *_edje_entry_selection_get(Edje_Real_Part *rp); const char *_edje_entry_text_get(Edje_Real_Part *rp); void _edje_entry_text_markup_set(Edje_Real_Part *rp, const char *text); +void _edje_entry_text_markup_insert(Edje_Real_Part *rp, const char *text); void _edje_entry_set_cursor_start(Edje_Real_Part *rp); void _edje_entry_set_cursor_end(Edje_Real_Part *rp); Modified: trunk/edje/src/lib/edje_util.c =================================================================== --- trunk/edje/src/lib/edje_util.c 2008-10-16 09:17:37 UTC (rev 36708) +++ trunk/edje/src/lib/edje_util.c 2008-10-16 09:17:44 UTC (rev 36709) @@ -884,9 +884,7 @@ rp->text.text = NULL; } if (rp->part->entry_mode > EDJE_ENTRY_EDIT_MODE_NONE) - { - _edje_entry_text_markup_set(rp, text); - } + _edje_entry_text_markup_set(rp, text); else if (text) rp->text.text = eina_stringshare_add(text); rp->edje->dirty = 1; @@ -911,17 +909,58 @@ rp = _edje_real_part_recursive_get(ed, (char *)part); if (!rp) return NULL; if (rp->part->entry_mode > EDJE_ENTRY_EDIT_MODE_NONE) - { return _edje_entry_text_get(rp); - } else { - if (rp->part->type == EDJE_PART_TYPE_TEXT) - return rp->text.text; + if (rp->part->type == EDJE_PART_TYPE_TEXT) return rp->text.text; } return NULL; } +/** Returns the selection text of the object part + * @param obj A valid Evas_Object handle + * @param part The part name + * @return The text string + */ +EAPI const char * +edje_object_part_text_selection_get(const Evas_Object *obj, const char *part) +{ + Edje *ed; + Edje_Real_Part *rp; + + ed = _edje_fetch(obj); + if ((!ed) || (!part)) return NULL; + rp = _edje_real_part_recursive_get(ed, (char *)part); + if (!rp) return NULL; + if (rp->part->entry_mode > EDJE_ENTRY_EDIT_MODE_NONE) + return _edje_entry_selection_get(rp); + return NULL; +} + +/** Inserts the text for an object part just before the cursor position + * @param obj A valid Evas Object handle + * @param part The part name + * @param text The text string + */ +EAPI void +edje_object_part_text_insert(Evas_Object *obj, const char *part, const char *text) +{ + Edje *ed; + Edje_Real_Part *rp; + + ed = _edje_fetch(obj); + if ((!ed) || (!part)) return; + rp = _edje_real_part_recursive_get(ed, (char *)part); + if (!rp) return; + if ((rp->part->type != EDJE_PART_TYPE_TEXTBLOCK)) return; + if (rp->part->entry_mode <= EDJE_ENTRY_EDIT_MODE_NONE) return; + _edje_entry_text_markup_insert(rp, text); + rp->edje->dirty = 1; + _edje_recalc(rp->edje); + if (rp->edje->text_change.func) + rp->edje->text_change.func(rp->edje->text_change.data, obj, part); +} + /** Swallows an object into the edje * @param obj A valid Evas_Object handle * @param part The part name |
From: Enlightenment S. <no-...@en...> - 2008-10-16 14:19:24
|
Log: 1 bizrre bug gone. 1 to go (random jumps to previosu format nodes on delete?) Author: raster Date: 2008-10-16 07:19:12 -0700 (Thu, 16 Oct 2008) New Revision: 36721 Modified: trunk/edje/src/lib/edje_entry.c Modified: trunk/edje/src/lib/edje_entry.c =================================================================== --- trunk/edje/src/lib/edje_entry.c 2008-10-16 14:18:50 UTC (rev 36720) +++ trunk/edje/src/lib/edje_entry.c 2008-10-16 14:19:12 UTC (rev 36721) @@ -407,7 +407,9 @@ else { evas_textblock_cursor_copy(en->cursor, c1); - _curs_back(en->cursor, rp->object, en); + if (evas_textblock_cursor_node_format_get(en->cursor) && + (!evas_textblock_cursor_node_format_is_visible_get(en->cursor))) + _curs_back(en->cursor, rp->object, en); } } else @@ -732,8 +734,6 @@ evas_object_event_callback_add(rp->object, EVAS_CALLBACK_MOUSE_UP, _edje_part_mouse_up_cb, rp); evas_object_event_callback_add(rp->object, EVAS_CALLBACK_MOUSE_MOVE, _edje_part_mouse_move_cb, rp); - // FIXME: make cursor object correct -// en->cursor_bg = evas_object_rectangle_add(evas_object_evas_get(rp->object)); en->cursor_bg = edje_object_add(rp->edje->evas); edje_object_file_set(en->cursor_bg, rp->edje->path, rp->part->source3); evas_object_smart_member_add(en->cursor_bg, rp->edje->obj); @@ -780,7 +780,10 @@ x = y = w = h = -1; xx = yy = ww = hh = -1; evas_object_geometry_get(rp->object, &x, &y, &w, &h); - evas_textblock_cursor_char_geometry_get(en->cursor, &xx, &yy, &ww, &hh); + int ln; + + ln = evas_textblock_cursor_char_geometry_get(en->cursor, &xx, &yy, &ww, &hh); + printf("@%i | %i %i %ix%i\n", ln, xx, yy, ww, hh); if (ww < 1) ww = 1; if (hh < 1) ww = 1; if (en->cursor_bg) |
From: Enlightenment S. <no-...@en...> - 2008-10-16 14:22:24
|
Log: fix insert from code to replace selection Author: raster Date: 2008-10-16 07:22:19 -0700 (Thu, 16 Oct 2008) New Revision: 36723 Modified: trunk/edje/src/lib/edje_entry.c Modified: trunk/edje/src/lib/edje_entry.c =================================================================== --- trunk/edje/src/lib/edje_entry.c 2008-10-16 14:19:37 UTC (rev 36722) +++ trunk/edje/src/lib/edje_entry.c 2008-10-16 14:22:19 UTC (rev 36723) @@ -826,6 +826,7 @@ Entry *en = rp->entry_data; if (!en) return; // set text as markup + _sel_clear(en->cursor, rp->object, en); evas_object_textblock_text_markup_set(rp->object, text); evas_textblock_cursor_node_last(en->cursor); if ((!evas_textblock_cursor_node_format_get(en->cursor)) || @@ -842,7 +843,10 @@ Entry *en = rp->entry_data; if (!en) return; // prepend markup @ cursor pos + if (en->have_selection) + evas_textblock_cursor_range_delete(en->sel_start, en->sel_end); evas_object_textblock_text_markup_prepend(en->cursor, text); + _sel_clear(en->cursor, rp->object, en); _curs_update_from_curs(en->cursor, rp->object, en); _edje_emit(rp->edje, "entry,changed", rp->part->name); } |
From: Enlightenment S. <no-...@en...> - 2008-10-17 00:07:55
|
Log: and fix entry some more... Author: raster Date: 2008-10-16 17:07:43 -0700 (Thu, 16 Oct 2008) New Revision: 36733 Modified: trunk/edje/src/lib/edje_entry.c Modified: trunk/edje/src/lib/edje_entry.c =================================================================== --- trunk/edje/src/lib/edje_entry.c 2008-10-17 00:04:17 UTC (rev 36732) +++ trunk/edje/src/lib/edje_entry.c 2008-10-17 00:07:43 UTC (rev 36733) @@ -314,6 +314,21 @@ } static void +_range_del(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en) +{ + Evas_Textblock_Cursor *c1; + + c1 = evas_object_textblock_cursor_new(o); + evas_textblock_cursor_node_last(c1); + if (!evas_textblock_cursor_compare(en->sel_end, c1)) + evas_textblock_cursor_node_prev(en->sel_end); + if (!evas_textblock_cursor_compare(en->sel_start, c1)) + evas_textblock_cursor_node_prev(en->sel_start); + evas_textblock_cursor_free(c1); + evas_textblock_cursor_range_delete(en->sel_start, en->sel_end); +} + +static void _edje_key_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) { Edje *ed = data; @@ -382,18 +397,7 @@ else { if (en->have_selection) - { - Evas_Textblock_Cursor *c1; - - c1 = evas_object_textblock_cursor_new(rp->object); - evas_textblock_cursor_node_last(c1); - if (!evas_textblock_cursor_compare(en->sel_end, c1)) - evas_textblock_cursor_node_prev(en->sel_end); - if (!evas_textblock_cursor_compare(en->sel_start, c1)) - evas_textblock_cursor_node_prev(en->sel_start); - evas_textblock_cursor_free(c1); - evas_textblock_cursor_range_delete(en->sel_start, en->sel_end); - } + _range_del(en->cursor, rp->object, en); else { Evas_Textblock_Cursor *c1, *c2; @@ -437,9 +441,11 @@ else { if (en->have_selection) - evas_textblock_cursor_range_delete(en->sel_start, en->sel_end); + _range_del(en->cursor, rp->object, en); else - evas_textblock_cursor_char_delete(en->cursor); + { + evas_textblock_cursor_char_delete(en->cursor); + } } _sel_clear(en->cursor, rp->object, en); _curs_update_from_curs(en->cursor, rp->object, en); @@ -554,7 +560,7 @@ if (ev->string) { if (en->have_selection) - evas_textblock_cursor_range_delete(en->sel_start, en->sel_end); + _range_del(en->cursor, rp->object, en); evas_textblock_cursor_text_prepend(en->cursor, ev->string); _sel_clear(en->cursor, rp->object, en); _curs_update_from_curs(en->cursor, rp->object, en); @@ -780,10 +786,6 @@ x = y = w = h = -1; xx = yy = ww = hh = -1; evas_object_geometry_get(rp->object, &x, &y, &w, &h); - int ln; - - ln = evas_textblock_cursor_char_geometry_get(en->cursor, &xx, &yy, &ww, &hh); - printf("@%i | %i %i %ix%i\n", ln, xx, yy, ww, hh); if (ww < 1) ww = 1; if (hh < 1) ww = 1; if (en->cursor_bg) |
From: Enlightenment S. <no-...@en...> - 2008-10-17 00:20:57
|
Log: and now make del work "more" correctly (not perfect) Author: raster Date: 2008-10-16 17:20:52 -0700 (Thu, 16 Oct 2008) New Revision: 36734 Modified: trunk/edje/src/lib/edje_entry.c Modified: trunk/edje/src/lib/edje_entry.c =================================================================== --- trunk/edje/src/lib/edje_entry.c 2008-10-17 00:07:43 UTC (rev 36733) +++ trunk/edje/src/lib/edje_entry.c 2008-10-17 00:20:52 UTC (rev 36734) @@ -444,7 +444,22 @@ _range_del(en->cursor, rp->object, en); else { - evas_textblock_cursor_char_delete(en->cursor); + Evas_Textblock_Cursor *c1, *c2; + int nodel = 0; + + c1 = evas_object_textblock_cursor_new(rp->object); + evas_textblock_cursor_copy(en->cursor, c1); + _curs_next(en->cursor, rp->object, en); + if (!evas_textblock_cursor_char_prev(en->cursor)) + { + if (!evas_textblock_cursor_node_prev(en->cursor)) + nodel = 1; + } + c2 = evas_object_textblock_cursor_new(rp->object); + evas_textblock_cursor_copy(en->cursor, c2); + if (!nodel) evas_textblock_cursor_range_delete(c1, c2); + evas_textblock_cursor_free(c1); + evas_textblock_cursor_free(c2); } } _sel_clear(en->cursor, rp->object, en); @@ -771,7 +786,6 @@ _sel_clear(en->cursor, rp->object, en); evas_object_del(en->cursor_bg); evas_object_del(en->cursor_fg); - // FIXME: delete cursor objects, sel cursors and en->sel's undo buffer copy/cut buffer free(en); } @@ -786,6 +800,7 @@ x = y = w = h = -1; xx = yy = ww = hh = -1; evas_object_geometry_get(rp->object, &x, &y, &w, &h); + evas_textblock_cursor_char_geometry_get(en->cursor, &xx, &yy, &ww, &hh); if (ww < 1) ww = 1; if (hh < 1) ww = 1; if (en->cursor_bg) |
From: Enlightenment S. <no-...@en...> - 2008-10-17 01:40:38
|
Log: ok final known bug god for del. now.. anchors Author: raster Date: 2008-10-16 18:40:10 -0700 (Thu, 16 Oct 2008) New Revision: 36738 Modified: trunk/edje/src/lib/edje_entry.c Modified: trunk/edje/src/lib/edje_entry.c =================================================================== --- trunk/edje/src/lib/edje_entry.c 2008-10-17 01:39:57 UTC (rev 36737) +++ trunk/edje/src/lib/edje_entry.c 2008-10-17 01:40:10 UTC (rev 36738) @@ -85,11 +85,22 @@ { while (evas_textblock_cursor_node_format_get(c)) { - if (evas_textblock_cursor_node_format_is_visible_get(c)) break; - if (!evas_textblock_cursor_node_next(c)) break; + if (evas_textblock_cursor_node_format_is_visible_get(c)) + break; + if (!evas_textblock_cursor_node_next(c)) + break; } } } + else + { + int len, pos; + + len = evas_textblock_cursor_node_text_length_get(c); + pos = evas_textblock_cursor_pos_get(c); + if (pos == len) + evas_textblock_cursor_node_next(c); + } _curs_update_from_curs(c, o, en); } @@ -329,6 +340,39 @@ } static void +_backspace(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en) +{ + Evas_Textblock_Cursor *c1, *c2; + int nodel = 0; + + c1 = evas_object_textblock_cursor_new(o); + if (!evas_textblock_cursor_char_prev(c)) + { + if (!evas_textblock_cursor_node_prev(c)) + nodel = 1; + else + { + evas_textblock_cursor_copy(c, c1); + if (evas_textblock_cursor_node_format_get(c) && + (!evas_textblock_cursor_node_format_is_visible_get(c))) + _curs_back(c, o, en); + } + } + else + evas_textblock_cursor_copy(c, c1); + c2 = evas_object_textblock_cursor_new(o); + evas_textblock_cursor_copy(c, c2); + if (!nodel) evas_textblock_cursor_range_delete(c1, c2); + evas_textblock_cursor_copy(c, c1); + _curs_back(c, o, en); + if (evas_textblock_cursor_compare(c, c1)) + _curs_next(c, o, en); + + evas_textblock_cursor_free(c1); + evas_textblock_cursor_free(c2); +} + +static void _edje_key_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) { Edje *ed = data; @@ -399,31 +443,7 @@ if (en->have_selection) _range_del(en->cursor, rp->object, en); else - { - Evas_Textblock_Cursor *c1, *c2; - int nodel = 0; - - c1 = evas_object_textblock_cursor_new(rp->object); - if (!evas_textblock_cursor_char_prev(en->cursor)) - { - if (!evas_textblock_cursor_node_prev(en->cursor)) - nodel = 1; - else - { - evas_textblock_cursor_copy(en->cursor, c1); - if (evas_textblock_cursor_node_format_get(en->cursor) && - (!evas_textblock_cursor_node_format_is_visible_get(en->cursor))) - _curs_back(en->cursor, rp->object, en); - } - } - else - evas_textblock_cursor_copy(en->cursor, c1); - c2 = evas_object_textblock_cursor_new(rp->object); - evas_textblock_cursor_copy(en->cursor, c2); - if (!nodel) evas_textblock_cursor_range_delete(c1, c2); - evas_textblock_cursor_free(c1); - evas_textblock_cursor_free(c2); - } + _backspace(en->cursor, rp->object, en); } _sel_clear(en->cursor, rp->object, en); _curs_update_from_curs(en->cursor, rp->object, en); @@ -444,22 +464,14 @@ _range_del(en->cursor, rp->object, en); else { - Evas_Textblock_Cursor *c1, *c2; - int nodel = 0; + Evas_Textblock_Cursor *c1; c1 = evas_object_textblock_cursor_new(rp->object); evas_textblock_cursor_copy(en->cursor, c1); _curs_next(en->cursor, rp->object, en); - if (!evas_textblock_cursor_char_prev(en->cursor)) - { - if (!evas_textblock_cursor_node_prev(en->cursor)) - nodel = 1; - } - c2 = evas_object_textblock_cursor_new(rp->object); - evas_textblock_cursor_copy(en->cursor, c2); - if (!nodel) evas_textblock_cursor_range_delete(c1, c2); + if (evas_textblock_cursor_compare(en->cursor, c1)) + _backspace(en->cursor, rp->object, en); evas_textblock_cursor_free(c1); - evas_textblock_cursor_free(c2); } } _sel_clear(en->cursor, rp->object, en); |
From: Enlightenment S. <no-...@en...> - 2008-10-17 01:42:29
|
Log: cleanup fixme's Author: raster Date: 2008-10-16 18:42:20 -0700 (Thu, 16 Oct 2008) New Revision: 36739 Modified: trunk/edje/src/lib/edje_entry.c Modified: trunk/edje/src/lib/edje_entry.c =================================================================== --- trunk/edje/src/lib/edje_entry.c 2008-10-17 01:40:10 UTC (rev 36738) +++ trunk/edje/src/lib/edje_entry.c 2008-10-17 01:42:20 UTC (rev 36739) @@ -28,18 +28,11 @@ Evas_Textblock_Rectangle rect; }; -// FIXME: this has to emit signals for "request selection", "set selection" -// so copy & paste work, need api calls to insert text, insert format, -// get text (with markup) delete text, etc. etc. etc. -// -// FIXME: cursor when at end of text doesnt display right - static void _edje_focus_in_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) { Edje *ed = data; _edje_emit(ed, "focus,in", ""); - // FIXME: emit focus,in to selections and cursors } static void @@ -47,7 +40,6 @@ { Edje *ed = data; _edje_emit(ed, "focus,out", ""); - // FIXME: emit focus,out to selections and cursors } static void |
From: Enlightenment S. <no-...@en...> - 2008-10-17 06:42:42
|
Log: add prototype. Author: raster Date: 2008-10-16 23:42:33 -0700 (Thu, 16 Oct 2008) New Revision: 36743 Modified: trunk/edje/src/lib/edje_private.h Modified: trunk/edje/src/lib/edje_private.h =================================================================== --- trunk/edje/src/lib/edje_private.h 2008-10-17 06:41:07 UTC (rev 36742) +++ trunk/edje/src/lib/edje_private.h 2008-10-17 06:42:33 UTC (rev 36743) @@ -1245,5 +1245,6 @@ void _edje_entry_set_cursor_start(Edje_Real_Part *rp); void _edje_entry_set_cursor_end(Edje_Real_Part *rp); const Evas_List *_edje_entry_anchors_list(Edje_Real_Part *rp); +void _edje_entry_cursor_geometry_get(Edje_Real_Part *rp, Evas_Coord *cx, Evas_Coord *cy, Evas_Coord *cw, Evas_Coord *ch); #endif |
From: Enlightenment S. <no-...@en...> - 2008-10-17 14:39:59
|
Log: fix edje smart move to update extra objs for entry. Author: raster Date: 2008-10-17 07:39:47 -0700 (Fri, 17 Oct 2008) New Revision: 36753 Modified: trunk/edje/src/lib/edje_calc.c trunk/edje/src/lib/edje_smart.c Modified: trunk/edje/src/lib/edje_calc.c =================================================================== --- trunk/edje/src/lib/edje_calc.c 2008-10-17 12:12:54 UTC (rev 36752) +++ trunk/edje/src/lib/edje_calc.c 2008-10-17 14:39:47 UTC (rev 36753) @@ -1582,9 +1582,9 @@ // pf->color.a); if (pf->visible) { - evas_object_show(ep->swallowed_object); evas_object_move(ep->swallowed_object, ed->x + pf->x, ed->y + pf->y); evas_object_resize(ep->swallowed_object, pf->w, pf->h); + evas_object_show(ep->swallowed_object); } else evas_object_hide(ep->swallowed_object); Modified: trunk/edje/src/lib/edje_smart.c =================================================================== --- trunk/edje/src/lib/edje_smart.c 2008-10-17 12:12:54 UTC (rev 36752) +++ trunk/edje/src/lib/edje_smart.c 2008-10-17 14:39:47 UTC (rev 36753) @@ -126,6 +126,8 @@ ep = ed->table_parts[i]; evas_object_geometry_get(ep->object, &ox, &oy, NULL, NULL); evas_object_move(ep->object, ed->x + ep->x + ep->offset.x, ed->y + ep->y +ep->offset.y); + if (ep->part->entry_mode > EDJE_ENTRY_EDIT_MODE_NONE) + _edje_entry_real_part_configure(ep); if (ep->swallowed_object) { evas_object_geometry_get(ep->swallowed_object, &ox, &oy, NULL, NULL); |
From: Enlightenment S. <no-...@en...> - 2008-10-21 05:21:18
|
Log: printf-- Author: raster Date: 2008-10-20 22:21:11 -0700 (Mon, 20 Oct 2008) New Revision: 36905 Modified: trunk/edje/src/lib/edje_callbacks.c Modified: trunk/edje/src/lib/edje_callbacks.c =================================================================== --- trunk/edje/src/lib/edje_callbacks.c 2008-10-21 04:16:01 UTC (rev 36904) +++ trunk/edje/src/lib/edje_callbacks.c 2008-10-21 05:21:11 UTC (rev 36905) @@ -130,7 +130,6 @@ int dir; dir = _edje_part_dragable_calc(ed, rp, &dx, &dy); - printf("calc down %3.3f %3.3f\n", dx, dy); if ((dx != rp->drag.val.x) || (dy != rp->drag.val.y)) { |
From: Enlightenment S. <no-...@en...> - 2008-10-22 04:00:12
|
Log: fix last newline detection - dont keep adding them in! Author: raster Date: 2008-10-21 21:00:05 -0700 (Tue, 21 Oct 2008) New Revision: 36950 Modified: trunk/edje/src/lib/edje_entry.c Modified: trunk/edje/src/lib/edje_entry.c =================================================================== --- trunk/edje/src/lib/edje_entry.c 2008-10-22 01:16:37 UTC (rev 36949) +++ trunk/edje/src/lib/edje_entry.c 2008-10-22 04:00:05 UTC (rev 36950) @@ -1182,10 +1182,15 @@ _sel_clear(en->cursor, rp->object, en); evas_object_textblock_text_markup_set(rp->object, text); evas_textblock_cursor_node_last(en->cursor); - if ((!evas_textblock_cursor_node_format_get(en->cursor)) || - (!strcmp(evas_textblock_cursor_node_format_get(en->cursor), "\n")) || - (!strcmp(evas_textblock_cursor_node_format_get(en->cursor), "\\n"))) - evas_textblock_cursor_format_append(en->cursor, "\n"); + if (!evas_textblock_cursor_node_format_get(en->cursor)) + { + evas_textblock_cursor_format_append(en->cursor, "\n"); + } + else if (!((!strcmp(evas_textblock_cursor_node_format_get(en->cursor), "\n")) || + (!strcmp(evas_textblock_cursor_node_format_get(en->cursor), "\\n")))) + { + evas_textblock_cursor_format_append(en->cursor, "\n"); + } _anchors_get(en->cursor, rp->object, en); _edje_emit(rp->edje, "entry,changed", rp->part->name); _edje_entry_set_cursor_start(rp); |
From: Enlightenment S. <no-...@en...> - 2008-10-22 09:00:30
|
Log: support password mode. Author: raster Date: 2008-10-22 01:57:49 -0700 (Wed, 22 Oct 2008) New Revision: 36957 Modified: trunk/edje/src/lib/edje_entry.c Modified: trunk/edje/src/lib/edje_entry.c =================================================================== --- trunk/edje/src/lib/edje_entry.c 2008-10-22 08:57:30 UTC (rev 36956) +++ trunk/edje/src/lib/edje_entry.c 2008-10-22 08:57:49 UTC (rev 36957) @@ -698,6 +698,7 @@ Entry *en; Evas_Bool control, alt, shift; Evas_Bool multiline; + Evas_Bool cursor_changed; Evas_Textblock_Cursor *tc; if (!rp) return; en = rp->entry_data; @@ -712,24 +713,34 @@ control = evas_key_modifier_is_set(ev->modifiers, "Control"); alt = evas_key_modifier_is_set(ev->modifiers, "Alt"); shift = evas_key_modifier_is_set(ev->modifiers, "Shift"); - multiline = rp->part->entry_mode; + multiline = rp->part->multiline; + cursor_changed = 0; if (!strcmp(ev->key, "Escape")) { // dead keys here. Escape for now (should emit these) + _edje_emit(ed, "entry,key,escape", rp->part->name); } - else if ((!strcmp(ev->key, "Up")) && (multiline)) + else if (!strcmp(ev->key, "Up")) { - if (shift) _sel_start(en->cursor, rp->object, en); - else _sel_clear(en->cursor, rp->object, en); - _curs_up(en->cursor, rp->object, en); - if (shift) _sel_extend(en->cursor, rp->object, en); + if (multiline) + { + if (shift) _sel_start(en->cursor, rp->object, en); + else _sel_clear(en->cursor, rp->object, en); + _curs_up(en->cursor, rp->object, en); + if (shift) _sel_extend(en->cursor, rp->object, en); + } + _edje_emit(ed, "entry,key,up", rp->part->name); } - else if ((!strcmp(ev->key, "Down")) && (multiline)) + else if (!strcmp(ev->key, "Down")) { - if (shift) _sel_start(en->cursor, rp->object, en); - else _sel_clear(en->cursor, rp->object, en); - _curs_down(en->cursor, rp->object, en); - if (shift) _sel_extend(en->cursor, rp->object, en); + if (multiline) + { + if (shift) _sel_start(en->cursor, rp->object, en); + else _sel_clear(en->cursor, rp->object, en); + _curs_down(en->cursor, rp->object, en); + if (shift) _sel_extend(en->cursor, rp->object, en); + } + _edje_emit(ed, "entry,key,down", rp->part->name); } else if (!strcmp(ev->key, "Left")) { @@ -737,6 +748,7 @@ else _sel_clear(en->cursor, rp->object, en); _curs_back(en->cursor, rp->object, en); if (shift) _sel_extend(en->cursor, rp->object, en); + _edje_emit(ed, "entry,key,left", rp->part->name); } else if (!strcmp(ev->key, "Right")) { @@ -744,6 +756,7 @@ else _sel_clear(en->cursor, rp->object, en); _curs_next(en->cursor, rp->object, en); if (shift) _sel_extend(en->cursor, rp->object, en); + _edje_emit(ed, "entry,key,right", rp->part->name); } else if (!strcmp(ev->key, "BackSpace")) { @@ -764,6 +777,7 @@ } _sel_clear(en->cursor, rp->object, en); _curs_update_from_curs(en->cursor, rp->object, en); + _edje_emit(ed, "entry,key,backspace", rp->part->name); } else if (!strcmp(ev->key, "Delete")) { @@ -795,6 +809,7 @@ _curs_update_from_curs(en->cursor, rp->object, en); _anchors_get(en->cursor, rp->object, en); _edje_emit(ed, "entry,changed", rp->part->name); + _edje_emit(ed, "entry,key,delete", rp->part->name); } else if (!strcmp(ev->key, "Home")) { @@ -805,6 +820,7 @@ else _curs_lin_start(en->cursor, rp->object, en); if (shift) _sel_extend(en->cursor, rp->object, en); + _edje_emit(ed, "entry,key,home", rp->part->name); } else if (!strcmp(ev->key, "End")) { @@ -815,6 +831,7 @@ else _curs_lin_end(en->cursor, rp->object, en); if (shift) _sel_extend(en->cursor, rp->object, en); + _edje_emit(ed, "entry,key,end", rp->part->name); } else if ((control) && (!strcmp(ev->key, "v"))) { @@ -851,44 +868,54 @@ _sel_clear(en->cursor, rp->object, en); // select current word } - else if ((!strcmp(ev->key, "Tab")) && (multiline)) + else if (!strcmp(ev->key, "Tab")) { - if (shift) + if (multiline) { - // remove a tab + if (shift) + { + // remove a tab + } + else + { + evas_textblock_cursor_format_prepend(en->cursor, "\t"); + _curs_update_from_curs(en->cursor, rp->object, en); + _anchors_get(en->cursor, rp->object, en); + _edje_emit(ed, "entry,changed", rp->part->name); + } } - else - { - evas_textblock_cursor_format_prepend(en->cursor, "\t"); - _curs_update_from_curs(en->cursor, rp->object, en); - _anchors_get(en->cursor, rp->object, en); - _edje_emit(ed, "entry,changed", rp->part->name); - } + _edje_emit(ed, "entry,key,tab", rp->part->name); } else if ((!strcmp(ev->key, "ISO_Left_Tab")) && (multiline)) { // remove a tab } - else if ((!strcmp(ev->key, "Prior")) && (multiline)) + else if (!strcmp(ev->key, "Prior")) { if (shift) _sel_start(en->cursor, rp->object, en); else _sel_clear(en->cursor, rp->object, en); _curs_jump_line_by(en->cursor, rp->object, en, -10); if (shift) _sel_extend(en->cursor, rp->object, en); + _edje_emit(ed, "entry,key,pgup", rp->part->name); } - else if ((!strcmp(ev->key, "Next")) && (multiline)) + else if (!strcmp(ev->key, "Next")) { if (shift) _sel_start(en->cursor, rp->object, en); else _sel_clear(en->cursor, rp->object, en); _curs_jump_line_by(en->cursor, rp->object, en, 10); if (shift) _sel_extend(en->cursor, rp->object, en); + _edje_emit(ed, "entry,key,pgdn", rp->part->name); } - else if (((!strcmp(ev->key, "Return")) || (!strcmp(ev->key, "KP_Enter"))) && (multiline)) + else if ((!strcmp(ev->key, "Return")) || (!strcmp(ev->key, "KP_Enter"))) { - evas_textblock_cursor_format_prepend(en->cursor, "\n"); - _curs_update_from_curs(en->cursor, rp->object, en); - _anchors_get(en->cursor, rp->object, en); - _edje_emit(ed, "entry,changed", rp->part->name); + if (multiline) + { + evas_textblock_cursor_format_prepend(en->cursor, "\n"); + _curs_update_from_curs(en->cursor, rp->object, en); + _anchors_get(en->cursor, rp->object, en); + _edje_emit(ed, "entry,changed", rp->part->name); + } + _edje_emit(ed, "entry,key,enter", rp->part->name); } else if ((!strcmp(ev->key, "Multi_key"))) { @@ -913,9 +940,11 @@ _curs_update_from_curs(en->cursor, rp->object, en); _anchors_get(en->cursor, rp->object, en); _edje_emit(ed, "entry,changed", rp->part->name); + _edje_emit(ed, "cursor,changed", rp->part->name); + cursor_changed = 1; } } - if (evas_textblock_cursor_compare(tc, en->cursor)) + if ((evas_textblock_cursor_compare(tc, en->cursor)) && (!cursor_changed)) _edje_emit(ed, "cursor,changed", rp->part->name); evas_textblock_cursor_free(tc); _edje_entry_real_part_configure(rp); @@ -954,7 +983,7 @@ // triple click -> select line tc = evas_object_textblock_cursor_new(rp->object); evas_textblock_cursor_copy(en->cursor, tc); - multiline = rp->part->entry_mode; + multiline = rp->part->multiline; evas_object_geometry_get(rp->object, &x, &y, &w, &h); en->cx = ev->canvas.x - x; en->cy = ev->canvas.y - y; @@ -995,7 +1024,7 @@ return; tc = evas_object_textblock_cursor_new(rp->object); evas_textblock_cursor_copy(en->cursor, tc); - multiline = rp->part->entry_mode; + multiline = rp->part->multiline; evas_object_geometry_get(rp->object, &x, &y, &w, &h); en->cx = ev->canvas.x - x; en->cy = ev->canvas.y - y; @@ -1034,7 +1063,7 @@ return; tc = evas_object_textblock_cursor_new(rp->object); evas_textblock_cursor_copy(en->cursor, tc); - multiline = rp->part->entry_mode; + multiline = rp->part->multiline; if (!en->selecting) return; evas_object_geometry_get(rp->object, &x, &y, &w, &h); en->cx = ev->cur.canvas.x - x; @@ -1089,6 +1118,9 @@ evas_object_event_callback_add(rp->object, EVAS_CALLBACK_MOUSE_DOWN, _edje_part_mouse_down_cb, rp); evas_object_event_callback_add(rp->object, EVAS_CALLBACK_MOUSE_UP, _edje_part_mouse_up_cb, rp); evas_object_event_callback_add(rp->object, EVAS_CALLBACK_MOUSE_MOVE, _edje_part_mouse_move_cb, rp); + + if (rp->part->entry_mode == EDJE_ENTRY_EDIT_MODE_PASSWORD) + evas_object_textblock_replace_char_set(rp->object, "*"); en->cursor_bg = edje_object_add(rp->edje->evas); edje_object_file_set(en->cursor_bg, rp->edje->path, rp->part->source3); |
From: Enlightenment S. <no-...@en...> - 2008-10-22 12:19:10
|
Log: use hold flags. Author: raster Date: 2008-10-22 04:59:59 -0700 (Wed, 22 Oct 2008) New Revision: 36964 Modified: trunk/edje/src/lib/edje_entry.c Modified: trunk/edje/src/lib/edje_entry.c =================================================================== --- trunk/edje/src/lib/edje_entry.c 2008-10-22 11:57:19 UTC (rev 36963) +++ trunk/edje/src/lib/edje_entry.c 2008-10-22 11:59:59 UTC (rev 36964) @@ -717,6 +717,7 @@ { // dead keys here. Escape for now (should emit these) _edje_emit(ed, "entry,key,escape", rp->part->name); + ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; } else if (!strcmp(ev->key, "Up")) { @@ -726,6 +727,7 @@ else _sel_clear(en->cursor, rp->object, en); _curs_up(en->cursor, rp->object, en); if (shift) _sel_extend(en->cursor, rp->object, en); + ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; } _edje_emit(ed, "entry,key,up", rp->part->name); } @@ -737,6 +739,7 @@ else _sel_clear(en->cursor, rp->object, en); _curs_down(en->cursor, rp->object, en); if (shift) _sel_extend(en->cursor, rp->object, en); + ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; } _edje_emit(ed, "entry,key,down", rp->part->name); } @@ -747,6 +750,7 @@ _curs_back(en->cursor, rp->object, en); if (shift) _sel_extend(en->cursor, rp->object, en); _edje_emit(ed, "entry,key,left", rp->part->name); + ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; } else if (!strcmp(ev->key, "Right")) { @@ -755,6 +759,7 @@ _curs_next(en->cursor, rp->object, en); if (shift) _sel_extend(en->cursor, rp->object, en); _edje_emit(ed, "entry,key,right", rp->part->name); + ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; } else if (!strcmp(ev->key, "BackSpace")) { @@ -776,6 +781,7 @@ _sel_clear(en->cursor, rp->object, en); _curs_update_from_curs(en->cursor, rp->object, en); _edje_emit(ed, "entry,key,backspace", rp->part->name); + ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; } else if (!strcmp(ev->key, "Delete")) { @@ -808,6 +814,7 @@ _anchors_get(en->cursor, rp->object, en); _edje_emit(ed, "entry,changed", rp->part->name); _edje_emit(ed, "entry,key,delete", rp->part->name); + ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; } else if (!strcmp(ev->key, "Home")) { @@ -819,6 +826,7 @@ _curs_lin_start(en->cursor, rp->object, en); if (shift) _sel_extend(en->cursor, rp->object, en); _edje_emit(ed, "entry,key,home", rp->part->name); + ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; } else if (!strcmp(ev->key, "End")) { @@ -830,21 +838,25 @@ _curs_lin_end(en->cursor, rp->object, en); if (shift) _sel_extend(en->cursor, rp->object, en); _edje_emit(ed, "entry,key,end", rp->part->name); + ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; } else if ((control) && (!strcmp(ev->key, "v"))) { _edje_emit(ed, "entry,paste,request", rp->part->name); + ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; } else if ((control) && ((!strcmp(ev->key, "c") || (!strcmp(ev->key, "Insert"))))) { // FIXME: copy - save selection _edje_emit(ed, "entry,copy,notify", rp->part->name); + ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; } else if ((control) && ((!strcmp(ev->key, "x") || (!strcmp(ev->key, "m"))))) { // FIXME: cut - save selection, delete seletion _curs_update_from_curs(en->cursor, rp->object, en); _edje_emit(ed, "entry,cut,notify", rp->part->name); + ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; } else if ((control) && (!strcmp(ev->key, "z"))) { @@ -856,15 +868,18 @@ { // undo } + ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; } else if ((control) && (!strcmp(ev->key, "y"))) { // redo + ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; } else if ((control) && (!strcmp(ev->key, "w"))) { _sel_clear(en->cursor, rp->object, en); // select current word + ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; } else if (!strcmp(ev->key, "Tab")) { @@ -881,12 +896,14 @@ _anchors_get(en->cursor, rp->object, en); _edje_emit(ed, "entry,changed", rp->part->name); } + ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; } _edje_emit(ed, "entry,key,tab", rp->part->name); } else if ((!strcmp(ev->key, "ISO_Left_Tab")) && (multiline)) { // remove a tab + ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; } else if (!strcmp(ev->key, "Prior")) { @@ -895,6 +912,7 @@ _curs_jump_line_by(en->cursor, rp->object, en, -10); if (shift) _sel_extend(en->cursor, rp->object, en); _edje_emit(ed, "entry,key,pgup", rp->part->name); + ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; } else if (!strcmp(ev->key, "Next")) { @@ -903,6 +921,7 @@ _curs_jump_line_by(en->cursor, rp->object, en, 10); if (shift) _sel_extend(en->cursor, rp->object, en); _edje_emit(ed, "entry,key,pgdn", rp->part->name); + ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; } else if ((!strcmp(ev->key, "Return")) || (!strcmp(ev->key, "KP_Enter"))) { @@ -912,6 +931,7 @@ _curs_update_from_curs(en->cursor, rp->object, en); _anchors_get(en->cursor, rp->object, en); _edje_emit(ed, "entry,changed", rp->part->name); + ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; } _edje_emit(ed, "entry,key,enter", rp->part->name); } @@ -940,6 +960,7 @@ _edje_emit(ed, "entry,changed", rp->part->name); _edje_emit(ed, "cursor,changed", rp->part->name); cursor_changed = 1; + ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; } } if ((evas_textblock_cursor_compare(tc, en->cursor)) && (!cursor_changed)) @@ -1117,7 +1138,7 @@ evas_object_event_callback_add(rp->object, EVAS_CALLBACK_MOUSE_UP, _edje_part_mouse_up_cb, rp); evas_object_event_callback_add(rp->object, EVAS_CALLBACK_MOUSE_MOVE, _edje_part_mouse_move_cb, rp); - if (rp->part->entry_mode == EDJE_ENTRY_EDIT_MODE_PASSWORD) + if (rp->part->entry_mode ==EDJE_ENTRY_EDIT_MODE_PASSWORD) evas_object_textblock_replace_char_set(rp->object, "*"); en->cursor_bg = edje_object_add(rp->edje->evas); |
From: Enlightenment S. <no-...@en...> - 2008-10-24 00:44:32
|
Log: allow you to get geom of anchors. Author: raster Date: 2008-10-23 17:44:26 -0700 (Thu, 23 Oct 2008) New Revision: 37039 Modified: trunk/edje/src/lib/Edje.h trunk/edje/src/lib/edje_entry.c trunk/edje/src/lib/edje_private.h trunk/edje/src/lib/edje_util.c Modified: trunk/edje/src/lib/Edje.h =================================================================== --- trunk/edje/src/lib/Edje.h 2008-10-24 00:43:24 UTC (rev 37038) +++ trunk/edje/src/lib/Edje.h 2008-10-24 00:44:26 UTC (rev 37039) @@ -238,6 +238,7 @@ EAPI const char *edje_object_part_text_selection_get(const Evas_Object *obj, const char *part); EAPI void edje_object_part_text_insert (Evas_Object *obj, const char *part, const char *text); EAPI Eina_List *edje_object_part_text_anchor_list_get(const Evas_Object *obj, const char *part); + EAPI Eina_List *edje_object_part_text_anchor_geometry_get(const Evas_Object *obj, const char *part, const char *anchor); EAPI void edje_object_part_text_cursor_geometry_get(const Evas_Object *obj, const char *part, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h); EAPI void edje_object_part_swallow (Evas_Object *obj, const char *part, Evas_Object *obj_swallow); Modified: trunk/edje/src/lib/edje_entry.c =================================================================== --- trunk/edje/src/lib/edje_entry.c 2008-10-24 00:43:24 UTC (rev 37038) +++ trunk/edje/src/lib/edje_entry.c 2008-10-24 00:44:26 UTC (rev 37039) @@ -34,7 +34,7 @@ struct _Sel { Evas_Textblock_Rectangle rect; - Evas_Object *obj_fg, *obj_bg, *obj; + Evas_Object *obj_fg, *obj_bg, *obj, *sobj; }; struct _Anchor @@ -517,6 +517,7 @@ Evas_Textblock_Rectangle *r; r = range->data; + *(&(sel->rect)) = *r; if (sel->obj_bg) { evas_object_move(sel->obj_bg, x + r->x, y + r->y); @@ -1285,6 +1286,22 @@ } const Eina_List * +_edje_entry_anchor_geometry_get(Edje_Real_Part *rp, const char *anchor) +{ + Entry *en = rp->entry_data; + Eina_List *l; + Anchor *an; + + if (!en) return; + EINA_LIST_FOREACH(en->anchors, l, an) + { + if (!strcmp(anchor, an->name)) + return an->sel; + } + return NULL; +} + +const Eina_List * _edje_entry_anchors_list(Edje_Real_Part *rp) { Entry *en = rp->entry_data; @@ -1296,9 +1313,7 @@ { EINA_LIST_FOREACH(en->anchors, l, an) { - char *n; - - n = an->name; + const char *n = an->name; if (!n) n = ""; anchors = eina_list_append(anchors, strdup(n)); } Modified: trunk/edje/src/lib/edje_private.h =================================================================== --- trunk/edje/src/lib/edje_private.h 2008-10-24 00:43:24 UTC (rev 37038) +++ trunk/edje/src/lib/edje_private.h 2008-10-24 00:44:26 UTC (rev 37039) @@ -1245,6 +1245,7 @@ void _edje_entry_text_markup_insert(Edje_Real_Part *rp, const char *text); void _edje_entry_set_cursor_start(Edje_Real_Part *rp); void _edje_entry_set_cursor_end(Edje_Real_Part *rp); +const Eina_List *_edje_entry_anchor_geometry_get(Edje_Real_Part *rp, const char *anchor); const Eina_List *_edje_entry_anchors_list(Edje_Real_Part *rp); void _edje_entry_cursor_geometry_get(Edje_Real_Part *rp, Evas_Coord *cx, Evas_Coord *cy, Evas_Coord *cw, Evas_Coord *ch); Modified: trunk/edje/src/lib/edje_util.c =================================================================== --- trunk/edje/src/lib/edje_util.c 2008-10-24 00:43:24 UTC (rev 37038) +++ trunk/edje/src/lib/edje_util.c 2008-10-24 00:44:26 UTC (rev 37039) @@ -960,7 +960,7 @@ /** Returns a list of char * anchor names * @param obj A valid Evas_Object handle * @param part The part name - * @return The list of anchors + * @return The list of anchors (const char *) */ EAPI Eina_List * edje_object_part_text_anchor_list_get(const Evas_Object *obj, const char *part) @@ -977,6 +977,27 @@ return NULL; } +/** Returns a list of Evas_Textblock_Rectangle * anchor rectangles + * @param obj A valid Evas_Object handle + * @param part The part name + * @param anchor The anchor name + * @return The list of anchor rects (const Evas_Textblock_Rectangle *) + */ +EAPI Eina_List * +edje_object_part_text_anchor_geometry_get(const Evas_Object *obj, const char *part, const char *anchor) +{ + Edje *ed; + Edje_Real_Part *rp; + + ed = _edje_fetch(obj); + if ((!ed) || (!part)) return NULL; + rp = _edje_real_part_recursive_get(ed, (char *)part); + if (!rp) return NULL; + if (rp->part->entry_mode > EDJE_ENTRY_EDIT_MODE_NONE) + return _edje_entry_anchor_geometry_get(rp, anchor); + return NULL; +} + /** Returns the cursor geometry of the part relative to the edje object * @param obj A valid Evas_Object handle * @param part The part name |