[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