[Bf-blender-cvs] [58f7e89] wiggly-widgets: Add flag so widgets only draw on mouse over.

Antony Riakiotakis noreply at git.blender.org
Wed Nov 19 13:03:41 CET 2014


Commit: 58f7e89e392835de3df1d04ce7780684800ac38b
Author: Antony Riakiotakis
Date:   Wed Nov 19 13:03:30 2014 +0100
Branches: wiggly-widgets
https://developer.blender.org/rB58f7e89e392835de3df1d04ce7780684800ac38b

Add flag so widgets only draw on mouse over.

Camera widget now uses this, also now they only draw if limits is on.

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

M	source/blender/editors/space_view3d/space_view3d.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_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c
index 15c4516..fb6d9d2 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -701,7 +701,8 @@ static bool WIDGETGROUP_camera_poll(struct wmWidgetGroup *UNUSED(wgroup), const
 	Object *ob = CTX_data_active_object(C);
 
 	if (ob && ob->type == OB_CAMERA) {
-		return true;
+		Camera *ca = ob->data;
+		return (ca->flag & CAM_SHOWLIMITS) != 0;
 	}
 	return false;
 }
@@ -716,6 +717,7 @@ static void WIDGETGROUP_camera_update(struct wmWidgetGroup *wgroup, const struct
 
 	RNA_pointer_create(&ca->id, &RNA_Camera, ca, cameraptr);
 	WM_widget_set_origin(widget, ob->obmat[3]);
+	WM_widget_set_draw_on_hover_only(widget, true);
 	WM_widget_property(widget, cameraptr, "dof_distance");
 	negate_v3_v3(dir, ob->obmat[2]);
 	WIDGET_arrow_set_direction(widget, dir);
diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h
index ffc7850..659ae02 100644
--- a/source/blender/windowmanager/WM_api.h
+++ b/source/blender/windowmanager/WM_api.h
@@ -494,6 +494,8 @@ void *WM_widget_customdata(struct wmWidget *widget);
 void WM_widget_set_origin(struct wmWidget *widget, float origin[3]);
 void WM_widget_set_draw(struct wmWidget *widget, bool draw);
 
+void WM_widget_set_draw_on_hover_only(struct wmWidget *widget, bool draw);
+
 void *WM_widgetgroup_customdata(struct wmWidgetGroup *wgroup);
 void WM_widgetgroup_customdata_set(struct wmWidgetGroup *wgroup, void *data);
 ListBase *WM_widgetgroup_widgets(struct wmWidgetGroup *wgroup);
diff --git a/source/blender/windowmanager/intern/wm_widgets.c b/source/blender/windowmanager/intern/wm_widgets.c
index 244f1d2..f6af313 100644
--- a/source/blender/windowmanager/intern/wm_widgets.c
+++ b/source/blender/windowmanager/intern/wm_widgets.c
@@ -291,7 +291,9 @@ void WM_widgets_draw(const struct bContext *C, struct ARegion *ar, bool is_3d)
 				}
 
 				for (widget_iter = wgroup->widgets.first; widget_iter; widget_iter = widget_iter->next) {
-					if (!(widget_iter->flag & WM_WIDGET_SKIP_DRAW)) {
+					if (!(widget_iter->flag & WM_WIDGET_SKIP_DRAW) &&
+					    (!(widget_iter->flag & WM_WIDGET_DRAW_HOVER) || (widget_iter->flag & WM_WIDGET_HIGHLIGHT)))
+					{
 						float scale = 1.0;
 
 						if (do_scale) {
@@ -391,6 +393,16 @@ void WM_widget_set_draw(struct wmWidget *widget, bool draw)
 	}
 }
 
+void WM_widget_set_draw_on_hover_only(struct wmWidget *widget, bool draw)
+{
+	if (draw) {
+		widget->flag |= WM_WIDGET_DRAW_HOVER;
+	}
+	else {
+		widget->flag &= ~WM_WIDGET_DRAW_HOVER;
+	}
+}
+
 
 wmWidgetMapType *WM_widgetmaptype_find(const char *idname, int spaceid, int regionid, bool is_3d)
 {
diff --git a/source/blender/windowmanager/wm.h b/source/blender/windowmanager/wm.h
index 656e401..07ae91d 100644
--- a/source/blender/windowmanager/wm.h
+++ b/source/blender/windowmanager/wm.h
@@ -114,6 +114,8 @@ enum widgetflags {
 	/* other stuff */
 	WM_WIDGET_FREE_DATA  = (1 << 2),
 	WM_WIDGET_SKIP_DRAW  = (1 << 3),
+
+	WM_WIDGET_DRAW_HOVER  = (1 << 4),
 };
 
 extern void wm_close_and_free(bContext *C, wmWindowManager *);




More information about the Bf-blender-cvs mailing list