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