Enlightenment CVS committal
Author : rephorm
Project : e17
Module : proto
Dir : e17/proto/esmart/src/container
Modified Files:
container.c container.h container_smart.c
Log Message:
updates to scrolling:
don't scroll if all of the elements fit inside the container.
don't scroll the last element above the bottom or the first element below the top.
stop getting magic errors when quickly clicking on the scroll arrows
eventually i should add options to allow the first two behaviors. that way we can be
as flexible as possible. but i think this is a better default behavior.
===================================================================
RCS file: /cvsroot/enlightenment/e17/proto/esmart/src/container/container.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- container.c 14 Sep 2003 21:43:15 -0000 1.2
+++ container.c 12 Oct 2003 01:43:54 -0000 1.3
@@ -237,13 +237,24 @@
{
Container *cont;
Scroll_Data *data;
+ double length, size;
cont = _container_fetch(container);
+ length = e_container_elements_length_get(container);
+ size = cont->direction ? cont->h : cont->w;
+ /* don't scroll unless the elements exceed the size of the container */
+ if (length <= size)
+ {
+ printf(" length smaller than size\n");
+ return;
+ }
+ printf("continue\n");
data = calloc(1, sizeof(Scroll_Data));
data->velocity = velocity;
data->start_time = ecore_time_get();
data->cont = cont;
+ data->length = length;
cont->scroll_timer = ecore_timer_add(.02, _container_scroll_timer, data);
}
@@ -257,7 +268,10 @@
/* FIXME: decelerate on stop? */
if (cont->scroll_timer)
+ {
ecore_timer_del(cont->scroll_timer);
+ cont->scroll_timer = NULL;
+ }
}
@@ -710,12 +724,23 @@
_container_scroll_timer(void *data)
{
Scroll_Data *sd = data;
- double dt, dx;
-
+ double dt, dx, size, pad, max_scroll;
+
dt = ecore_time_get() - sd->start_time;
dx = 10 * (1 - exp(-dt));
sd->cont->scroll_offset += dx * sd->velocity;
+
+ size = sd->cont->direction ? sd->cont->h : sd->cont->w;
+ pad = sd->cont->direction ? sd->cont->padding.t + sd->cont->padding.b :
+ sd->cont->padding.l + sd->cont->padding.r;
+ max_scroll = size - sd->length - pad;
+
+ if (sd->cont->scroll_offset < max_scroll)
+ sd->cont->scroll_offset = max_scroll;
+
+ else if (sd->cont->scroll_offset > 0)
+ sd->cont->scroll_offset = 0;
_container_elements_fix(sd->cont);
return 1;
===================================================================
RCS file: /cvsroot/enlightenment/e17/proto/esmart/src/container/container.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- container.h 14 Sep 2003 21:43:15 -0000 1.2
+++ container.h 12 Oct 2003 01:43:54 -0000 1.3
@@ -92,6 +92,7 @@
Container *cont;
double start_time;
double velocity;
+ double length;
};
Evas_Object *e_container_new(Evas *evas);
===================================================================
RCS file: /cvsroot/enlightenment/e17/proto/esmart/src/container/container_smart.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- container_smart.c 11 Oct 2003 06:39:39 -0000 1.3
+++ container_smart.c 12 Oct 2003 01:43:54 -0000 1.4
@@ -74,7 +74,6 @@
data->clipper = evas_object_rectangle_add(data->evas);
evas_object_smart_member_add(obj, data->clipper);
- //evas_object_color_set(data->clipper, 255, 40, 40, 20);
evas_object_repeat_events_set(data->clipper, 1);
data->grabber = evas_object_rectangle_add(data->evas);
@@ -214,8 +213,6 @@
if((data->x == x) && (data->y == y))
return;
-// evas_object_move(data->clipper, x+ data->padding.l,
-// y + data->padding.t);
evas_object_move(data->clipper, x, y);
evas_object_move(data->grabber, x, y);
@@ -232,10 +229,12 @@
data = evas_object_smart_data_get(obj);
-// evas_object_resize(data->clipper, w - (data->padding.l + data->padding.r),
-// h - (data->padding.t + data->padding.b));
+ if (w == data->w && h == data->h) return;
+
evas_object_resize(data->clipper, w, h);
evas_object_resize(data->grabber, w, h);
+
+ data->scroll_offset = 0;
data->w = w;
data->h = h;
-------------------------------------------------------
This SF.net email is sponsored by: SF.net Giveback Program.
SourceForge.net hosts over 70,000 Open Source Projects.
See the people who have HELPED US provide better services:
Click here: http://sourceforge.net/supporters.php
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs