[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