Enlightenment CVS committal

Author  : werkt
Project : misc
Module  : ewler

Dir     : misc/ewler/src


Modified Files:
        form.c selected.c selected.h 


Log Message:
Added background to forms and extracted some better behavior from selected items.

===================================================================
RCS file: /cvsroot/enlightenment/misc/ewler/src/form.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -3 -r1.5 -r1.6
--- form.c      1 Jul 2004 18:31:22 -0000       1.5
+++ form.c      5 Jul 2004 02:40:45 -0000       1.6
@@ -92,6 +92,10 @@
 
                widget_selected = 1;
        }
+       if( form->popup ) {
+               ewl_widget_destroy(form->popup);
+               form->popup = NULL;
+       }
 }
 
 static void
@@ -105,9 +109,14 @@
                ecore_list_goto_first( form->selected );
 
                while( (c_s = ecore_list_next(form->selected)) ) {
+#if 0
                        ewl_object_request_position(EWL_OBJECT(c_s),
                                                                                       
                                                 ev->x - dragging.x - 8,
                                                                                       
                                                 ev->y - dragging.y - 8);
+#endif
+                       ewl_object_request_position(EWL_OBJECT(c_s),
+                                                                                      
                                                 ev->x - dragging.x,
+                                                                                      
                                                 ev->y - dragging.y);
                }
        }
 }
@@ -115,24 +124,26 @@
 static void
 __mouse_up_widget( Ewl_Widget *w, void *ev_data, void *user_data )
 {
-       Ewler_Form *form = EWLER_FORM(user_data);
+       Ewler_Form *form = user_data;
        Ewl_Event_Mouse_Up *ev = ev_data;
-       Ewl_Widget *c_s, *c_w;
+       Ewl_Widget *c_s;
 
        if( dragging.active ) {
                ecore_list_goto_first( form->selected );
 
                while( (c_s = ecore_list_next( form->selected )) ) {
+#if 0
                        ewl_object_request_position(EWL_OBJECT(c_s),
                                                                                       
                                                 ev->x - dragging.x - 8,
                                                                                       
                                                 ev->y - dragging.y - 8);
+#endif
+                       ewl_object_request_position(EWL_OBJECT(c_s),
+                                                                                      
                                                 ev->x - dragging.x,
+                                                                                      
                                                 ev->y - dragging.y);
                        widget_changed(ewler_selected_get(EWLER_SELECTED(c_s)));
                }
                dragging.x = dragging.y = 0;
                dragging.active = 0;
-
-               c_w = ewler_selected_get(EWLER_SELECTED(c_s));
-
        }
 }
 
@@ -146,6 +157,18 @@
 }
 
 static void
+__mouse_move_form( Ewl_Widget *w, void *ev_data, void *user_data )
+{
+       Ewler_Form *form = user_data;
+       Ewl_Widget *c_s;
+
+       ecore_list_goto_first( form->selected );
+
+       while( (c_s = ecore_list_next( form->selected )) )
+               ewl_callback_call_with_event_data(c_s, EWL_CALLBACK_MOUSE_MOVE, 
ev_data);
+}
+
+static void
 __mouse_down_form( Ewl_Widget *w, void *ev_data, void *user_data )
 {
        Ewl_Event_Mouse_Down *ev = ev_data;
@@ -154,6 +177,11 @@
        Ewler_Form *form = EWLER_FORM(user_data);
        static char widget_name_buf[256];
 
+       if( form->popup ) {
+               ewl_widget_destroy(form->popup);
+               form->popup = NULL;
+       }
+
        switch( ev->button ) {
                case 1:
                        if( !widget_selected ) {
@@ -205,10 +233,12 @@
                        break;
                case 2: break;
                case 3:
-                       form->popup = ewl_menu_new(NULL, "configure");
+                       form->popup = ewl_imenu_new(NULL, "configure");
                        ewl_object_request_position(EWL_OBJECT(form->popup), ev->x, 
ev->y);
-                       ewl_container_append_child(EWL_CONTAINER(form->window), 
form->popup);
+                       ewl_object_set_fill_policy(EWL_OBJECT(form->popup), 
EWL_FLAG_FILL_NONE);
+                       ewl_container_append_child(EWL_CONTAINER(form->overlay), 
form->popup);
                        ewl_widget_show(form->popup);
+                       ewl_callback_call(form->popup, EWL_CALLBACK_SELECT);
 
                        menu_item = ewl_menu_item_new(NULL, "conf item");
                        ewl_container_append_child(EWL_CONTAINER(form->popup), 
menu_item);
@@ -227,6 +257,22 @@
 }
 
 void
+form_set_widget_dragging( Ewl_Widget *w, Ewl_Event_Mouse_Down *ev )
+{
+       dragging.x = ev->x - CURRENT_X(w);
+       dragging.y = ev->y - CURRENT_Y(w);
+       dragging.active = 1;
+
+       widget_selected = 1;
+}
+
+void
+form_clear_widget_dragging( void )
+{
+       dragging.active = 0;
+}
+
+void
 form_add_widget( Ewler_Form *form, char *name, Ewl_Widget *w )
 {
        ewl_callback_del_type( w, EWL_CALLBACK_CLICKED );
@@ -265,15 +311,23 @@
 
        form->overlay = ewl_overlay_new();
 
-       ewl_object_set_fill_policy( EWL_OBJECT(form->overlay), EWL_FLAG_FILL_ALL );
+       ewl_widget_set_appearance(form->overlay, "background");
+       ewl_theme_data_set_str(form->overlay, "/background/file",
+                                                                                      
          PACKAGE_DATA_DIR"/themes/ewler.eet");
+       ewl_theme_data_set_str(form->overlay, "/background/group", "background");
+
+       ewl_object_set_fill_policy( EWL_OBJECT(form->overlay), EWL_FLAG_FILL_FILL );
        widget_create_info( form->overlay, "Ewl_Overlay", strdup( buf ) );
        ewl_callback_append( form->overlay, EWL_CALLBACK_MOUSE_DOWN,
                                                                                       
  __mouse_down_form, form );
+       ewl_callback_append( form->overlay, EWL_CALLBACK_MOUSE_MOVE,
+                                                                                      
  __mouse_move_form, form );
        ewl_callback_append( form->overlay, EWL_CALLBACK_FOCUS_IN,
                                                                                       
  __mouse_in_form, form );
        ewl_callback_append( form->overlay, EWL_CALLBACK_MOUSE_MOVE,
                                                                                       
  __mouse_move_widget, form );
        ewl_container_append_child( EWL_CONTAINER(form->window), form->overlay );
+       ewl_widget_set_data( form->overlay, "unsizable", (void *) 1 );
        ewl_widget_show( form->overlay );
 
        form->selected = ecore_list_new();
@@ -283,6 +337,7 @@
        form->has_been_saved = 0;
        form->dirty = 0;
        form->cnt = 0;
+       form->popup = NULL;
 
        count++;
 
===================================================================
RCS file: /cvsroot/enlightenment/misc/ewler/src/selected.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -3 -r1.6 -r1.7
--- selected.c  1 Jul 2004 18:31:22 -0000       1.6
+++ selected.c  5 Jul 2004 02:40:46 -0000       1.7
@@ -8,6 +8,9 @@
 #include "form.h"
 #include "selected.h"
 
+#define SELECTED_MIN_WIDTH     15
+#define SELECTED_MIN_HEIGHT    15
+
 /**
  * @param w: the child widget to be selected
  * @return Returns NULL on failure, or a newly allocated selected on success.
@@ -61,18 +64,20 @@
        ewl_theme_data_set_str(sw, "/selected/file",
                                                                                       
          PACKAGE_DATA_DIR"/themes/ewler.eet");
        ewl_theme_data_set_str(sw, "/selected/group", "selected");
+#if 0
        ewl_object_set_insets(EWL_OBJECT(s), 4, 4, 4, 4);
 
-#if 0
-       ewl_container_insert_child(parent, sw, index);
-       ewl_container_append_child(EWL_CONTAINER(s), w);
-#endif
        ewl_container_append_child(parent, sw);
        ewl_object_request_geometry(EWL_OBJECT(s),
                                                                                       
                                 CURRENT_X(w) - 8, CURRENT_Y(w) - 8,
                                                                                       
                                 CURRENT_W(w) + 8, CURRENT_H(w) + 8);
+#endif
+       ewl_container_insert_child(parent, sw, s->index);
+       ewl_object_request_geometry(EWL_OBJECT(s),
+                                                                                      
                                 CURRENT_X(w), CURRENT_Y(w),
+                                                                                      
                                 CURRENT_W(w), CURRENT_H(w));
        ewl_object_set_fill_policy(EWL_OBJECT(s), EWL_FLAG_FILL_NONE);
-       ewl_widget_set_layer(sw, ewl_widget_get_layer(s->selected) + 1);
+       ewl_widget_set_layer(sw, 10000);
 
        ewl_callback_append(sw, EWL_CALLBACK_CONFIGURE,
                                                                                       
 ewler_selected_configure_cb, NULL);
@@ -88,6 +93,12 @@
                                                                                       
 ewler_selected_mouse_down_cb, NULL);
        ewl_callback_append(sw, EWL_CALLBACK_MOUSE_UP,
                                                                                       
 ewler_selected_mouse_up_cb, NULL);
+       ewl_container_intercept_callback(EWL_CONTAINER(sw), EWL_CALLBACK_MOUSE_DOWN);
+
+       if( ewl_object_get_preferred_w(EWL_OBJECT(w)) < SELECTED_MIN_WIDTH &&
+                       ewl_object_get_preferred_h(EWL_OBJECT(w)) < 
SELECTED_MIN_HEIGHT )
+               ewl_object_set_preferred_size(EWL_OBJECT(w),
+                                                                                      
                                                 SELECTED_MIN_WIDTH, 
SELECTED_MIN_HEIGHT);
 
        s->index = index;
        s->selected = w;
@@ -122,13 +133,21 @@
        
        /* the width comes in from the selected, the position is set by the parent */
        ewl_object_get_preferred_size(EWL_OBJECT(s->selected), &width, &height);
+#if 0
        x = CURRENT_X(s) + 4;
        y = CURRENT_Y(s) + 4;
+#endif
+       x = CURRENT_X(s);
+       y = CURRENT_Y(s);
 
        if( x != CURRENT_X(s->selected) || y != CURRENT_Y(s->selected) )
                ewl_object_request_position(EWL_OBJECT(s->selected), x, y);
+#if 0
        if( width != (CURRENT_W(s)-8) || height != (CURRENT_H(s)-8) )
                ewl_object_set_preferred_size(EWL_OBJECT(s), width + 8, height + 8);
+#endif
+       if( width != CURRENT_W(s) || height != CURRENT_H(s) )
+               ewl_object_set_preferred_size(EWL_OBJECT(s), width, height);
 
        DLEAVE_FUNCTION(DLEVEL_STABLE);
 }
@@ -137,8 +156,17 @@
 ewler_selected_selector_realize_cb(Ewl_Widget *w, void *ev_data,
                                                                                       
                                                  void *user_data)
 {
+       Ewler_Selected *s;
+
        DENTER_FUNCTION(DLEVEL_STABLE);
 
+       s = EWLER_SELECTED(w);
+
+       ewl_container_append_child(EWL_CONTAINER(s), s->selected);
+
+       if( ewl_widget_get_data( s->selected, "unsizable" ) )
+               return;
+
        edje_object_signal_callback_add(w->theme_object,
                                                                                       
                                                 "down", "top_left",
                                                                                       
                                                 ewler_selected_part_down, w);
@@ -206,8 +234,12 @@
 
        ewl_object_get_preferred_size(EWL_OBJECT(s->selected), &width, &height);
 
+#if 0
        ewl_object_request_size(EWL_OBJECT(s), width + 8, height + 8);
        ewl_object_set_preferred_size(EWL_OBJECT(s), width + 8, height + 8);
+#endif
+       ewl_object_request_size(EWL_OBJECT(s), width, height);
+       ewl_object_set_preferred_size(EWL_OBJECT(s), width, height);
 
        DLEAVE_FUNCTION(DLEVEL_STABLE);
 }
@@ -223,11 +255,13 @@
        s = EWLER_SELECTED(w);
 
        ewl_object_get_current_geometry(EWL_OBJECT(s), &x, &y, &width, &height);
-#if 0
        ewl_container_insert_child(EWL_CONTAINER(w->parent), s->selected, s->index);
-#endif
+#if 0
        ewl_object_request_geometry(EWL_OBJECT(s->selected),
                                                                                       
                                 x + 8, y + 8, width - 8, height - 8);
+#endif
+       ewl_object_request_geometry(EWL_OBJECT(s->selected),
+                                                                                      
                                 x, y, width, height);
 
        s->selected = NULL;
        s->index = -1;
@@ -250,6 +284,8 @@
        s->corners.y = CURRENT_Y(sw);
        s->corners.u = CURRENT_X(sw) + CURRENT_W(sw);
        s->corners.v = CURRENT_Y(sw) + CURRENT_H(sw);
+
+       form_clear_widget_dragging();
 }
 
 void
@@ -277,17 +313,17 @@
 
        if( s->dragging ) {
                if( strstr( s->dragging, "left" ) )
-                       s->corners.x = ev->x;
+                       s->corners.x += ev->x - s->last_pos.x;
                if( strstr( s->dragging, "right" ) )
-                       s->corners.u = ev->x;
+                       s->corners.u += ev->x - s->last_pos.x;
                if( strstr( s->dragging, "top" ) )
-                       s->corners.y = ev->y;
+                       s->corners.y += ev->y - s->last_pos.y;
                if( strstr( s->dragging, "bottom" ) )
-                       s->corners.v = ev->y;
+                       s->corners.v += ev->y - s->last_pos.y;
 
-               if( s->corners.u - s->corners.x < 0 )
+               if( s->corners.u < s->corners.x )
                        s->corners.u = s->corners.x;
-               if( s->corners.v - s->corners.y < 0 )
+               if( s->corners.v < s->corners.y )
                        s->corners.v = s->corners.y;
 
                ewl_object_request_position(EWL_OBJECT(s), s->corners.x, s->corners.y);
@@ -295,10 +331,13 @@
                                                                                       
                                                 s->corners.u - s->corners.x,
                                                                                       
                                                 s->corners.v - s->corners.y);
                ewl_object_set_preferred_size(EWL_OBJECT(s->selected),
-                                                                                      
                                                 s->corners.u - s->corners.x - 8,
-                                                                                      
                                                 s->corners.v - s->corners.y - 8);
+                                                                                      
                                                 s->corners.u - s->corners.x,
+                                                                                      
                                                 s->corners.v - s->corners.y);
 
        }
+
+       s->last_pos.x = ev->x;
+       s->last_pos.y = ev->y;
 }
 
 void
@@ -306,19 +345,33 @@
 {
        Ewl_Embed *embed;
        Ewl_Event_Mouse_Down *ev = ev_data;
+       Ewler_Selected *s = EWLER_SELECTED(w);
+       static int second_time = 0;
        int x, y;
 
        x = ev->x;
        y = ev->y;
 
-       if( (x <= (CURRENT_X(w) + 4) || x >= (CURRENT_X(w) + CURRENT_W(w) - 4)) ||
-                       (y <= (CURRENT_Y(w) + 4) || y >= (CURRENT_Y(w) + CURRENT_H(w) 
- 4)) ) {
-               form_set_widget_selected();
+       if( second_time )
+               return;
+
+       form_set_widget_dragging( s->selected, ev );
+       embed = ewl_embed_find_by_widget(w);
 
-               embed = ewl_embed_find_by_widget(w);
+       evas_event_feed_mouse_down(embed->evas, ev->button);
+#if 0
+       ewl_container_nointercept_callback(EWL_CONTAINER(s),
+                                                                                      
                                                          EWL_CALLBACK_MOUSE_DOWN);
+       form_set_widget_selected();
+
+       second_time = 1;
+       ewl_embed_feed_mouse_down(embed, ev->button, ev->clicks,
+                                                                                      
                         ev->x, ev->y, ev->modifiers);
+       second_time = 0;
 
-               evas_event_feed_mouse_down(embed->evas, ev->button);
-       }
+       ewl_container_intercept_callback(EWL_CONTAINER(s),
+                                                                                      
                                                  EWL_CALLBACK_MOUSE_DOWN);
+#endif
 }
 
 void
===================================================================
RCS file: /cvsroot/enlightenment/misc/ewler/src/selected.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- selected.h  1 Jul 2004 18:31:22 -0000       1.4
+++ selected.h  5 Jul 2004 02:40:46 -0000       1.5
@@ -13,6 +13,9 @@
                int x, y; /* top left */
                int u, v; /* lower right */
        } corners;
+       struct {
+               int x, y;
+       } last_pos;
        int index;
 };
 
@@ -25,6 +28,8 @@
 void ewler_selected_selector_realize_cb(Ewl_Widget *w, void *ev_data,
                                                                                       
                                                                         void 
*user_data);
 void ewler_selected_deselect_cb(Ewl_Widget *w, void *ev_data, void *user_data);
+void ewler_selected_focus_out_cb(Ewl_Widget *w, void *ev_data,
+                                                                                      
                                                 void *user_data);
 void ewler_selected_mouse_down_cb(Ewl_Widget *w, void *ev_data,
                                                                                       
                                                 void *user_data);
 void ewler_selected_mouse_move_cb(Ewl_Widget *w, void *ev_data,




-------------------------------------------------------
This SF.Net email sponsored by Black Hat Briefings & Training.
Attend Black Hat Briefings & Training, Las Vegas July 24-29 - 
digital self defense, top technical experts, no vendor pitches, 
unmatched networking opportunities. Visit www.blackhat.com
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to