Commit: 6dcc3f0b918b1f9c82218e2b55602da8ae44f766
Author: Antony Riakiotakis
Date:   Wed Sep 24 19:09:07 2014 +0200
Branches: wiggly-widgets
https://developer.blender.org/rB6dcc3f0b918b1f9c82218e2b55602da8ae44f766

change widget code, area now just stores a pointer to the widget list
corresponidng to it.

===================================================================

M       source/blender/editors/space_view3d/space_view3d.c
M       source/blender/makesdna/DNA_screen_types.h
M       source/blender/windowmanager/WM_api.h
M       source/blender/windowmanager/intern/wm_widgets.c

===================================================================

diff --git a/source/blender/editors/space_view3d/space_view3d.c 
b/source/blender/editors/space_view3d/space_view3d.c
index d3b5ed6..b5a2139 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -390,7 +390,7 @@ static SpaceLink *view3d_new(const bContext *C)
        rv3d->persp = RV3D_PERSP;
        rv3d->view = RV3D_VIEW_PERSPORTHO;
        rv3d->dist = 10.0;
-       
+               
        return (SpaceLink *)v3d;
 }
 
@@ -552,6 +552,7 @@ static void view3d_main_area_init(wmWindowManager *wm, 
ARegion *ar)
        
        WM_event_add_dropbox_handler(&ar->handlers, lb);
 
+       ar->widgets = WM_widgetmap_find("View3D", SPACE_VIEW3D, 
RGN_TYPE_WINDOW);
        WM_widget_handler_register(ar);
 }
 
diff --git a/source/blender/makesdna/DNA_screen_types.h 
b/source/blender/makesdna/DNA_screen_types.h
index 801a9bf..339b747 100644
--- a/source/blender/makesdna/DNA_screen_types.h
+++ b/source/blender/makesdna/DNA_screen_types.h
@@ -257,7 +257,7 @@ typedef struct ARegion {
        ListBase ui_lists;                      /* uiList */
        ListBase ui_previews;           /* uiPreview */
        ListBase handlers;                      /* wmEventHandler */
-       ListBase widgets;                       /* widgets for drawing */
+       ListBase *widgets;                      /* widgets for drawing */
        ListBase panels_category;       /* Panel categories runtime */
        
        struct wmTimer *regiontimer; /* blend in/out */
diff --git a/source/blender/windowmanager/WM_api.h 
b/source/blender/windowmanager/WM_api.h
index 3b0ed36..13e3009 100644
--- a/source/blender/windowmanager/WM_api.h
+++ b/source/blender/windowmanager/WM_api.h
@@ -472,8 +472,8 @@ void WM_widgets_delete(struct wmWidget *widget);
 void WM_widgets_draw(const struct bContext *C, struct ARegion *ar);
 void WM_widget_handler_register(struct ARegion *ar);
 
-void WM_widget_register(struct ARegion *ar, struct wmWidget *widget);
-void WM_widget_unregister(struct ARegion *ar, struct wmWidget *widget);
+void WM_widget_register(ListBase *widgetlist, struct wmWidget *widget);
+void WM_widget_unregister(ListBase *widgetlist, struct wmWidget *widget);
 struct ListBase *WM_widgetmap_find(const char *idname, int spaceid, int 
regionid);
 
 #ifdef __cplusplus
diff --git a/source/blender/windowmanager/intern/wm_widgets.c 
b/source/blender/windowmanager/intern/wm_widgets.c
index 399702f..f1e8255 100644
--- a/source/blender/windowmanager/intern/wm_widgets.c
+++ b/source/blender/windowmanager/intern/wm_widgets.c
@@ -133,10 +133,10 @@ void WM_widgets_delete(wmWidget *widget)
 
 void WM_widgets_draw(const struct bContext *C, struct ARegion *ar)
 {
-       if (ar->widgets.first) {
+       if (ar->widgets->first) {
                wmWidget *widget;
                
-               for (widget = ar->widgets.first; widget; widget = widget->next) 
{
+               for (widget = ar->widgets->first; widget; widget = 
widget->next) {
                        if ((widget->draw || widget->draw_highlighted) &&
                                (widget->poll == NULL || widget->poll(C, 
widget->customdata))) 
                        {
@@ -156,36 +156,28 @@ void WM_widget_handler_register(ARegion *ar)
        wmEventHandler *handler;
        
        for (handler = ar->handlers.first; handler; handler = handler->next)
-               if (handler->widgets == &ar->widgets)
+               if (handler->widgets == ar->widgets)
                        return;
        
        handler = MEM_callocN(sizeof(wmEventHandler), "widget handler");
        
-       handler->widgets = &ar->widgets;
+       handler->widgets = ar->widgets;
        BLI_addtail(&ar->handlers, handler);
 }
 
 
-void WM_widget_register(ARegion *ar, wmWidget *widget)
+void WM_widget_register(ListBase *widgetlist, wmWidget *widget)
 {
-       BLI_addtail(&ar->widgets, widget);
+       BLI_addtail(widgetlist, widget);
 }
 
-void WM_widget_unregister(ARegion *ar, wmWidget *widget)
+void WM_widget_unregister(ListBase *widgetlist, wmWidget *widget)
 {
-       wmEventHandler *handler;
        wmWidget *widget_iter;
        
-       for (handler = ar->handlers.first; handler; handler = handler->next) {
-               if (handler->widgets == &ar->widgets) {
-                       BLI_remlink(&ar->handlers, handler);
-                       break;
-               }
-       }
-       
-       for (widget_iter = ar->widgets.first; widget_iter; widget_iter = 
widget_iter->next) {
+       for (widget_iter = widgetlist->first; widget_iter; widget_iter = 
widget_iter->next) {
                if (widget_iter == widget) {
-                       BLI_remlink(&ar->widgets, widget);
+                       BLI_remlink(widgetlist, widget);
                }
        }
 }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to