Enlightenment CVS committal
Author : raster
Project : e17
Module : libs/edje
Dir : e17/libs/edje/src/lib
Modified Files:
Edje.h edje_calc.c edje_data.c edje_load.c edje_private.h
edje_program.c edje_util.c
Log Message:
dragables are about complete now.. with new actions, page and step values....
all happy & smelly.
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/Edje.h,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -3 -r1.18 -r1.19
--- Edje.h 15 Aug 2003 13:35:25 -0000 1.18
+++ Edje.h 1 Sep 2003 02:53:08 -0000 1.19
@@ -56,6 +56,12 @@
void edje_object_part_drag_value_get (Evas_Object *o, const char *part,
double *dx, double *dy);
void edje_object_part_drag_size_set (Evas_Object *o, const char *part,
double dw, double dh);
void edje_object_part_drag_size_get (Evas_Object *o, const char *part,
double *dw, double *dh);
+ void edje_object_part_drag_step_set (Evas_Object *o, const char *part,
double dx, double dy);
+ void edje_object_part_drag_step_get (Evas_Object *o, const char *part,
double *dx, double *dy);
+ void edje_object_part_drag_page_set (Evas_Object *o, const char *part,
double dx, double dy);
+ void edje_object_part_drag_page_get (Evas_Object *o, const char *part,
double *dx, double *dy);
+ void edje_object_part_drag_step (Evas_Object *o, const char *part,
double dx, double dy);
+ void edje_object_part_drag_page (Evas_Object *o, const char *part,
double dx, double dy);
#ifdef __cplusplus
}
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_calc.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -3 -r1.13 -r1.14
--- edje_calc.c 15 Aug 2003 13:35:25 -0000 1.13
+++ edje_calc.c 1 Sep 2003 02:53:08 -0000 1.14
@@ -213,7 +213,7 @@
int
_edje_part_dragable_calc(Edje *ed, Edje_Real_Part *ep, double *x, double *y)
{
- if ((ep->part->dragable.x) || (ep->part->dragable.y))
+ if ((ep->part->dragable.x != 0) || (ep->part->dragable.y != 0))
{
if (ep->confine_to)
{
@@ -221,9 +221,10 @@
int ret;
ret = 0;
- if ((ep->part->dragable.x) && (ep->part->dragable.y)) ret = 3;
- else if (ep->part->dragable.x) ret = 1;
- else if (ep->part->dragable.y) ret = 2;
+ if ((ep->part->dragable.x != 0) &&
+ (ep->part->dragable.y != 0 )) ret = 3;
+ else if (ep->part->dragable.x != 0) ret = 1;
+ else if (ep->part->dragable.y != 0) ret = 2;
dx = ep->x - ep->confine_to->x;
dw = ep->confine_to->w - ep->w;
@@ -725,7 +726,6 @@
dx = 0;
dy = 0;
_edje_part_dragable_calc(ed, ep, &dx, &dy);
- printf("%3.3f %3.3f\n", dx, dy);
ep->drag.x = dx;
ep->drag.y = dy;
ep->drag.tmp.x = 0;
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_data.c,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -3 -r1.10 -r1.11
--- edje_data.c 14 Aug 2003 03:22:37 -0000 1.10
+++ edje_data.c 1 Sep 2003 02:53:08 -0000 1.11
@@ -87,6 +87,7 @@
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "state",
state, EET_T_STRING);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "state2",
state2, EET_T_STRING);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "value",
value, EET_T_DOUBLE);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "value2",
value2, EET_T_DOUBLE);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "tween.mode",
tween.mode, EET_T_INT);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "tween.time",
tween.time, EET_T_DOUBLE);
EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_program, Edje_Program, "targets",
targets, _edje_edd_edje_program_target);
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_load.c,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -3 -r1.24 -r1.25
--- edje_load.c 26 Aug 2003 04:15:07 -0000 1.24
+++ edje_load.c 1 Sep 2003 02:53:08 -0000 1.25
@@ -173,6 +173,9 @@
rp = l->data;
evas_object_show(rp->object);
if (_edje_block_break(ed)) break;
+ if (rp->part->dragable.x < 0) rp->drag.val.x = 1.0;
+ if (rp->part->dragable.y < 0) rp->drag.val.x = 1.0;
+ _edje_dragable_pos_set(ed, rp, 1.0, 1.0);
}
ed->dirty = 1;
if ((ed->parts) && (evas_object_visible_get(obj)))
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_private.h,v
retrieving revision 1.43
retrieving revision 1.44
diff -u -3 -r1.43 -r1.44
--- edje_private.h 26 Aug 2003 00:16:49 -0000 1.43
+++ edje_private.h 1 Sep 2003 02:53:08 -0000 1.44
@@ -17,14 +17,6 @@
/* FIXME:
*
- * recursions, unsafe callbacks outside edje etc. with freeze, ref/unref and
blobk/unblock and break_programs needs to be redesigned & fixed
- * all unsafe calls that may result in callbacks must be marked and dealt with
- *
- * dragable needs to be able to reverse value affect for "other direction" drag
- * dragable relative value needs to be able to be set or ++/-- by actions
- * dragable needs to be able to affect rel/abs values of other parts
- * dragable relative value needs to be able to be applied to other part vals.
- *
* more example edje files
*
* ? programs need to be able to cycle part states given a list of states
@@ -63,6 +55,9 @@
* ? add containering (hbox, vbox, table, wrapping multi-line hbox & vbox)
* ? text entry widget (single line only)
* ? reduce linked list walking and list_nth calls
+ *
+ * ? recursions, unsafe callbacks outside edje etc. with freeze, ref/unref and
blobk/unblock and break_programs needs to be redesigned & fixed
+ * ? all unsafe calls that may result in callbacks must be marked and dealt with
*/
typedef struct _Edje_File Edje_File;
@@ -102,11 +97,14 @@
#define EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW 7
#define EDJE_TEXT_EFFECT_LAST 8
-#define EDJE_ACTION_TYPE_NONE 0
-#define EDJE_ACTION_TYPE_STATE_SET 1
-#define EDJE_ACTION_TYPE_ACTION_STOP 2
-#define EDJE_ACTION_TYPE_SIGNAL_EMIT 3
-#define EDJE_ACTION_TYPE_LAST 4
+#define EDJE_ACTION_TYPE_NONE 0
+#define EDJE_ACTION_TYPE_STATE_SET 1
+#define EDJE_ACTION_TYPE_ACTION_STOP 2
+#define EDJE_ACTION_TYPE_SIGNAL_EMIT 3
+#define EDJE_ACTION_TYPE_DRAG_VAL_SET 4
+#define EDJE_ACTION_TYPE_DRAG_VAL_STEP 5
+#define EDJE_ACTION_TYPE_DRAG_VAL_PAGE 6
+#define EDJE_ACTION_TYPE_LAST 7
#define EDJE_TWEEN_MODE_NONE 0
#define EDJE_TWEEN_MODE_LINEAR 1
@@ -171,6 +169,7 @@
char *state; /* what state of alternates to apply, NULL = default */
char *state2; /* what other state to use - for signal emit action */
double value; /* value of state to apply (if multiple names match) */
+ double value2; /* other value for drag actions */
struct {
int mode; /* how to tween - linear, sinusoidal etc. */
@@ -429,7 +428,7 @@
char need_reset : 1;
struct {
double x, y;
- } val, size;
+ } val, size, step, page;
} drag;
struct {
char *text;
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_program.c,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -3 -r1.21 -r1.22
--- edje_program.c 26 Aug 2003 04:15:07 -0000 1.21
+++ edje_program.c 1 Sep 2003 02:53:08 -0000 1.22
@@ -496,7 +496,89 @@
_edje_emit(ed, "program,stop", pr->name);
if (_edje_block_break(ed)) goto break_prog;
}
- if (pr->action != EDJE_ACTION_TYPE_STATE_SET)
+ else if (pr->action == EDJE_ACTION_TYPE_DRAG_VAL_SET)
+ {
+ _edje_emit(ed, "program,start", pr->name);
+ if (_edje_block_break(ed)) goto break_prog;
+ for (l = pr->targets; l; l = l->next)
+ {
+ Edje_Real_Part *rp;
+ Edje_Program_Target *pt;
+
+ pt = l->data;
+ rp = evas_list_nth(ed->parts, pt->id);
+ if ((rp) && (rp->drag.down.count == 0))
+ {
+ rp->drag.val.x = pr->value;
+ rp->drag.val.y = pr->value2;
+ if (rp->drag.val.x < 0.0) rp->drag.val.x = 0.0;
+ else if (rp->drag.val.x > 1.0) rp->drag.val.x = 1.0;
+ if (rp->drag.val.y < 0.0) rp->drag.val.y = 0.0;
+ else if (rp->drag.val.y > 1.0) rp->drag.val.y = 1.0;
+ _edje_dragable_pos_set(ed, rp, rp->drag.val.x, rp->drag.val.y);
+ _edje_emit(ed, "drag,set", rp->part->name);
+ if (_edje_block_break(ed)) goto break_prog;
+ }
+ }
+ _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);
+ if (_edje_block_break(ed)) goto break_prog;
+ for (l = pr->targets; l; l = l->next)
+ {
+ Edje_Real_Part *rp;
+ Edje_Program_Target *pt;
+
+ pt = l->data;
+ rp = evas_list_nth(ed->parts, pt->id);
+ if ((rp) && (rp->drag.down.count == 0))
+ {
+ rp->drag.val.x += pr->value * rp->drag.step.x * rp->part->dragable.x;
+ rp->drag.val.y += pr->value2 * rp->drag.step.y *
rp->part->dragable.y;
+ if (rp->drag.val.x < 0.0) rp->drag.val.x = 0.0;
+ else if (rp->drag.val.x > 1.0) rp->drag.val.x = 1.0;
+ if (rp->drag.val.y < 0.0) rp->drag.val.y = 0.0;
+ else if (rp->drag.val.y > 1.0) rp->drag.val.y = 1.0;
+ _edje_dragable_pos_set(ed, rp, rp->drag.val.x, rp->drag.val.y);
+ _edje_emit(ed, "drag,step", rp->part->name);
+ if (_edje_block_break(ed)) goto break_prog;
+ }
+ }
+ _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);
+ if (_edje_block_break(ed)) goto break_prog;
+ for (l = pr->targets; l; l = l->next)
+ {
+ Edje_Real_Part *rp;
+ Edje_Program_Target *pt;
+
+ pt = l->data;
+ rp = evas_list_nth(ed->parts, pt->id);
+ if ((rp) && (rp->drag.down.count == 0))
+ {
+ rp->drag.val.x += pr->value * rp->drag.page.x * rp->part->dragable.x;
+ rp->drag.val.y += pr->value2 * rp->drag.step.y *
rp->part->dragable.y;
+ if (rp->drag.val.x < 0.0) rp->drag.val.x = 0.0;
+ else if (rp->drag.val.x > 1.0) rp->drag.val.x = 1.0;
+ if (rp->drag.val.y < 0.0) rp->drag.val.y = 0.0;
+ else if (rp->drag.val.y > 1.0) rp->drag.val.y = 1.0;
+ _edje_dragable_pos_set(ed, rp, rp->drag.val.x, rp->drag.val.y);
+ _edje_emit(ed, "drag,page", rp->part->name);
+ if (_edje_block_break(ed)) goto break_prog;
+ }
+ }
+ _edje_emit(ed, "program,stop", pr->name);
+ if (_edje_block_break(ed)) goto break_prog;
+ }
+ if (!((pr->action == EDJE_ACTION_TYPE_STATE_SET) &&
+ (pr->tween.time > 0.0) && (!ed->no_anim)))
{
if (pr->after >= 0)
{
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_util.c,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -3 -r1.21 -r1.22
--- edje_util.c 26 Aug 2003 00:18:53 -0000 1.21
+++ edje_util.c 1 Sep 2003 02:53:08 -0000 1.22
@@ -606,9 +606,13 @@
else if (dx > 1.0) dx = 1.0;
if (dy < 0.0) dy = 0.0;
else if (dy > 1.0) dy = 1.0;
+ if (rp->part->dragable.x < 0) dx = 1.0 - dx;
+ if (rp->part->dragable.y < 0) dy = 1.0 - dy;
+ if ((rp->drag.val.x == dx) && (rp->drag.val.y == dy)) return;
rp->drag.val.x = dx;
rp->drag.val.y = dy;
_edje_dragable_pos_set(ed, rp, dx, dy);
+ _edje_emit(ed, "drag,set", rp->part->name);
}
void
@@ -616,6 +620,7 @@
{
Edje *ed;
Edje_Real_Part *rp;
+ double ddx, ddy;
ed = _edje_fetch(obj);
if ((!ed) || (!part))
@@ -631,8 +636,12 @@
if (dy) *dy = 0;
return;
}
- if (dx) *dx = rp->drag.val.x;
- if (dy) *dy = rp->drag.val.y;
+ ddx = rp->drag.val.x;
+ ddy = rp->drag.val.y;
+ if (rp->part->dragable.x < 0) ddx = 1.0 - ddx;
+ if (rp->part->dragable.y < 0) ddy = 1.0 - ddy;
+ if (dx) *dx = ddx;
+ if (dy) *dy = ddy;
}
void
@@ -655,6 +664,7 @@
else if (dw > 1.0) dw = 1.0;
if (dh < 0.0) dh = 0.0;
else if (dh > 1.0) dh = 1.0;
+ if ((rp->drag.size.x == dw) && (rp->drag.size.y == dh)) return;
rp->drag.size.x = dw;
rp->drag.size.y = dh;
ed->dirty = 1;
@@ -685,6 +695,166 @@
if (dh) *dh = rp->drag.size.y;
}
+void
+edje_object_part_drag_step_set(Evas_Object *obj, const char *part, double dx, double
dy)
+{
+ Edje *ed;
+ Edje_Real_Part *rp;
+
+ ed = _edje_fetch(obj);
+ if ((!ed) || (!part))
+ {
+ return;
+ }
+ rp = _edje_real_part_get(ed, (char *)part);
+ if (!rp)
+ {
+ return;
+ }
+ if (rp->drag.down.count > 0) return;
+ if (dx < 0.0) dx = 0.0;
+ else if (dx > 1.0) dx = 1.0;
+ if (dy < 0.0) dy = 0.0;
+ else if (dy > 1.0) dy = 1.0;
+ rp->drag.step.x = dx;
+ rp->drag.step.y = dy;
+}
+
+void
+edje_object_part_drag_step_get(Evas_Object *obj, const char *part, double *dx, double
*dy)
+{
+ Edje *ed;
+ Edje_Real_Part *rp;
+
+ ed = _edje_fetch(obj);
+ if ((!ed) || (!part))
+ {
+ if (dx) *dx = 0;
+ if (dy) *dy = 0;
+ return;
+ }
+ rp = _edje_real_part_get(ed, (char *)part);
+ if (!rp)
+ {
+ if (dx) *dx = 0;
+ if (dy) *dy = 0;
+ return;
+ }
+ if (dx) *dx = rp->drag.step.x;
+ if (dy) *dy = rp->drag.step.y;
+}
+
+void
+edje_object_part_drag_page_set(Evas_Object *obj, const char *part, double dx, double
dy)
+{
+ Edje *ed;
+ Edje_Real_Part *rp;
+
+ ed = _edje_fetch(obj);
+ if ((!ed) || (!part))
+ {
+ return;
+ }
+ rp = _edje_real_part_get(ed, (char *)part);
+ if (!rp)
+ {
+ return;
+ }
+ if (rp->drag.down.count > 0) return;
+ if (dx < 0.0) dx = 0.0;
+ else if (dx > 1.0) dx = 1.0;
+ if (dy < 0.0) dy = 0.0;
+ else if (dy > 1.0) dy = 1.0;
+ rp->drag.page.x = dx;
+ rp->drag.page.y = dy;
+}
+
+void
+edje_object_part_drag_page_get(Evas_Object *obj, const char *part, double *dx, double
*dy)
+{
+ Edje *ed;
+ Edje_Real_Part *rp;
+
+ ed = _edje_fetch(obj);
+ if ((!ed) || (!part))
+ {
+ if (dx) *dx = 0;
+ if (dy) *dy = 0;
+ return;
+ }
+ rp = _edje_real_part_get(ed, (char *)part);
+ if (!rp)
+ {
+ if (dx) *dx = 0;
+ if (dy) *dy = 0;
+ return;
+ }
+ if (dx) *dx = rp->drag.page.x;
+ if (dy) *dy = rp->drag.page.y;
+}
+
+void
+edje_object_part_drag_step(Evas_Object *obj, const char *part, double dx, double dy)
+{
+ Edje *ed;
+ Edje_Real_Part *rp;
+ double px, py;
+
+ ed = _edje_fetch(obj);
+ if ((!ed) || (!part))
+ {
+ return;
+ }
+ rp = _edje_real_part_get(ed, (char *)part);
+ if (!rp)
+ {
+ return;
+ }
+ if (rp->drag.down.count > 0) return;
+ px = rp->drag.val.x;
+ py = rp->drag.val.y;
+ rp->drag.val.x += dx * rp->drag.step.x * rp->part->dragable.x;
+ rp->drag.val.y += dy * rp->drag.step.y * rp->part->dragable.y;
+ if (rp->drag.val.x < 0.0) rp->drag.val.x = 0.0;
+ else if (rp->drag.val.x > 1.0) rp->drag.val.x = 1.0;
+ if (rp->drag.val.y < 0.0) rp->drag.val.y = 0.0;
+ else if (rp->drag.val.y > 1.0) rp->drag.val.y = 1.0;
+ if ((px == rp->drag.val.x) && (py == rp->drag.val.y)) return;
+ _edje_dragable_pos_set(ed, rp, rp->drag.val.x, rp->drag.val.y);
+ _edje_emit(ed, "drag,step", rp->part->name);
+}
+
+void
+edje_object_part_drag_page(Evas_Object *obj, const char *part, double dx, double dy)
+{
+ Edje *ed;
+ Edje_Real_Part *rp;
+ double px, py;
+
+ ed = _edje_fetch(obj);
+ if ((!ed) || (!part))
+ {
+ return;
+ }
+ rp = _edje_real_part_get(ed, (char *)part);
+ if (!rp)
+ {
+ return;
+ }
+ if (rp->drag.down.count > 0) return;
+ px = rp->drag.val.x;
+ py = rp->drag.val.y;
+ rp->drag.val.x += dx * rp->drag.page.x * rp->part->dragable.x;
+ rp->drag.val.y += dy * rp->drag.page.y * rp->part->dragable.y;
+ if (rp->drag.val.x < 0.0) rp->drag.val.x = 0.0;
+ else if (rp->drag.val.x > 1.0) rp->drag.val.x = 1.0;
+ if (rp->drag.val.y < 0.0) rp->drag.val.y = 0.0;
+ else if (rp->drag.val.y > 1.0) rp->drag.val.y = 1.0;
+ if ((px == rp->drag.val.x) && (py == rp->drag.val.y)) return;
+ _edje_dragable_pos_set(ed, rp, rp->drag.val.x, rp->drag.val.y);
+ _edje_emit(ed, "drag,page", rp->part->name);
+}
+
Edje_Real_Part *
_edje_real_part_get(Edje *ed, char *part)
{
@@ -809,4 +979,3 @@
edje_obj = data;
edje_object_part_unswallow(edje_obj, obj);
}
-
-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs