[Bf-blender-cvs] [60927ae] wiggly-widgets: WIP code to use in scene drawing for widgets.

Antony Riakiotakis noreply at git.blender.org
Tue Feb 10 12:52:42 CET 2015


Commit: 60927ae2e0f394a0efa9d2061caa624a6690ab13
Author: Antony Riakiotakis
Date:   Mon Feb 9 17:52:39 2015 +0100
Branches: wiggly-widgets
https://developer.blender.org/rB60927ae2e0f394a0efa9d2061caa624a6690ab13

WIP code to use in scene drawing for widgets.

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

M	source/blender/editors/space_node/node_draw.c
M	source/blender/editors/space_sequencer/sequencer_draw.c
M	source/blender/editors/space_view3d/view3d_draw.c
M	source/blender/windowmanager/WM_api.h
M	source/blender/windowmanager/intern/wm_widgets.c
M	source/blender/windowmanager/wm.h

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

diff --git a/source/blender/editors/space_node/node_draw.c b/source/blender/editors/space_node/node_draw.c
index 85b2186..6298ac2 100644
--- a/source/blender/editors/space_node/node_draw.c
+++ b/source/blender/editors/space_node/node_draw.c
@@ -1354,7 +1354,7 @@ void drawnodespace(const bContext *C, ARegion *ar)
 			glaDefine2DArea(&ar->winrct);
 			wmOrtho2_pixelspace(ar->winx, ar->winy);
 
-			WM_widgets_draw(C, ar->widgetmaps.first);
+			WM_widgets_draw(C, ar->widgetmaps.first, false);
 
 			glMatrixMode(GL_PROJECTION);
 			glPopMatrix();
diff --git a/source/blender/editors/space_sequencer/sequencer_draw.c b/source/blender/editors/space_sequencer/sequencer_draw.c
index 69efffe..f899867 100644
--- a/source/blender/editors/space_sequencer/sequencer_draw.c
+++ b/source/blender/editors/space_sequencer/sequencer_draw.c
@@ -1582,7 +1582,7 @@ void draw_timeline_seq(const bContext *C, ARegion *ar)
 	UI_view2d_view_restore(C);
 	
 	/* finally draw any widgets here */
-	WM_widgets_draw(C, ar->widgetmaps.first);	
+	WM_widgets_draw(C, ar->widgetmaps.first, false);
 
 	/* scrollers */
 	unit = (sseq->flag & SEQ_DRAWFRAMES) ? V2D_UNIT_FRAMES : V2D_UNIT_SECONDS;
diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c
index 4a6718e..b04188f 100644
--- a/source/blender/editors/space_view3d/view3d_draw.c
+++ b/source/blender/editors/space_view3d/view3d_draw.c
@@ -3615,9 +3615,9 @@ void view3d_main_area_draw(const bContext *C, ARegion *ar)
 	if (v3d->drawtype == OB_RENDER)
 		view3d_main_area_draw_engine(C, scene, ar, v3d, clip_border, &border_rect);
 	
-	view3d_main_area_setup_view(scene, v3d, ar, NULL, NULL);	
+	view3d_main_area_setup_view(scene, v3d, ar, NULL, NULL);
 	glClear(GL_DEPTH_BUFFER_BIT);
-	WM_widgets_draw(C, ar->widgetmaps.first);
+	WM_widgets_draw(C, ar->widgetmaps.first, false);
 	BIF_draw_manipulator(C);
 	ED_region_pixelspace(ar);
 	
diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h
index abd9260..a9e7807 100644
--- a/source/blender/windowmanager/WM_api.h
+++ b/source/blender/windowmanager/WM_api.h
@@ -478,13 +478,14 @@ struct wmWidget *WM_widget_new(void (*draw)(struct wmWidget *, const struct bCon
 
 void WM_widget_property(struct wmWidget *, int slot, struct PointerRNA *ptr, const char *propname);
 struct PointerRNA *WM_widget_operator(struct wmWidget *, const char *opname);
-void WM_widgets_draw(const struct bContext *C, struct wmWidgetMap *wmap);
+void WM_widgets_draw(const struct bContext *C, struct wmWidgetMap *wmap, bool in_scene);
 void WM_event_add_area_widgetmap_handlers(struct ARegion *ar);
 void WM_modal_handler_attach_widgetgroup(struct bContext *C, struct wmEventHandler *handler, struct wmWidgetGroupType *wgrouptype, struct wmOperator *op);
 
 void WM_widget_set_origin(struct wmWidget *widget, float origin[3]);
 void WM_widget_set_3d_scale(struct wmWidget *widget, bool scale);
 void WM_widget_set_draw_on_hover_only(struct wmWidget *widget, bool draw);
+void WM_widget_set_scene_depth(struct wmWidget *widget, bool scene);
 void WM_widget_set_scale(struct wmWidget *widget, float scale);
 
 struct wmWidgetMapType *WM_widgetmaptype_find(const char *idname, int spaceid, int regionid, bool is_3d, bool create);
diff --git a/source/blender/windowmanager/intern/wm_widgets.c b/source/blender/windowmanager/intern/wm_widgets.c
index bb6e6c5..cd72945 100644
--- a/source/blender/windowmanager/intern/wm_widgets.c
+++ b/source/blender/windowmanager/intern/wm_widgets.c
@@ -257,7 +257,7 @@ static bool widgets_compare(wmWidget *widget, wmWidget *widget2)
 }
 
 
-void WM_widgets_draw(const bContext *C, wmWidgetMap *wmap)
+void WM_widgets_draw(const bContext *C, wmWidgetMap *wmap, bool in_scene)
 {
 	wmWidget *widget;
 	bool use_lighting;
@@ -285,7 +285,7 @@ void WM_widgets_draw(const bContext *C, wmWidgetMap *wmap)
 
 	widget = wmap->active_widget;
 
-	if (widget) {
+	if (widget && in_scene == ((widget->flag & WM_WIDGET_SCENE_DEPTH)!= 0)) {
 		widget_calculate_scale(widget, C);
 		/* notice that we don't update the widgetgroup, widget is now on its own, it should have all
 		 * relevant data to update itself */
@@ -435,6 +435,17 @@ void WM_widget_set_draw_on_hover_only(struct wmWidget *widget, bool draw)
 	}
 }
 
+void WM_widget_set_scene_depth(struct wmWidget *widget, bool scene)
+{
+	if (scene) {
+		widget->flag |= WM_WIDGET_SCENE_DEPTH;
+	}
+	else {
+		widget->flag &= ~WM_WIDGET_SCENE_DEPTH;
+	}
+}
+
+
 void WM_widget_set_scale(struct wmWidget *widget, float scale)
 {
 	widget->user_scale = scale;
diff --git a/source/blender/windowmanager/wm.h b/source/blender/windowmanager/wm.h
index 1509509..811d5ca 100644
--- a/source/blender/windowmanager/wm.h
+++ b/source/blender/windowmanager/wm.h
@@ -111,12 +111,13 @@ typedef struct wmWidget {
 /* wmWidget->flag */
 enum widgetflags {
 	/* states */
-	WM_WIDGET_HIGHLIGHT  = (1 << 0),
-	WM_WIDGET_ACTIVE     = (1 << 1),
+	WM_WIDGET_HIGHLIGHT   = (1 << 0),
+	WM_WIDGET_ACTIVE      = (1 << 1),
 
-	WM_WIDGET_DRAW_HOVER = (1 << 2),
+	WM_WIDGET_DRAW_HOVER  = (1 << 2),
 
-	WM_WIDGET_SCALE_3D   = (1 << 3),
+	WM_WIDGET_SCALE_3D    = (1 << 3),
+	WM_WIDGET_SCENE_DEPTH = (1 << 4) /* widget is depth culled with scene objects*/
 };
 
 extern void wm_close_and_free(bContext *C, wmWindowManager *);




More information about the Bf-blender-cvs mailing list