[Bf-blender-cvs] [6dcc3f0] wiggly-widgets: change widget code, area now just stores a pointer to the widget list corresponidng to it.

Antony Riakiotakis noreply at git.blender.org
Wed Sep 24 19:09:19 CEST 2014


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);
 		}
 	}
 }




More information about the Bf-blender-cvs mailing list