[Bf-blender-cvs] [f9cedb4] wiggly-widgets: Facemap widgets:
Antony Riakiotakis
noreply at git.blender.org
Mon Dec 22 11:28:56 CET 2014
Commit: f9cedb48965fa71781290a1c632a569ea4cccdf8
Author: Antony Riakiotakis
Date: Mon Dec 22 11:28:41 2014 +0100
Branches: wiggly-widgets
https://developer.blender.org/rBf9cedb48965fa71781290a1c632a569ea4cccdf8
Facemap widgets:
* Only draw on mouse over
* Fix crash with highlighted widgets.
===================================================================
M source/blender/editors/space_view3d/space_view3d.c
M source/blender/windowmanager/WM_api.h
M source/blender/windowmanager/intern/wm_generic_widgets.c
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 062fd7b..fdd993d 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -808,6 +808,7 @@ static void WIDGETGROUP_armature_facemap_draw(const struct bContext *C, struct w
Object *ob = CTX_data_active_object(C);
wmWidget *widget;
Object *armature;
+ PointerRNA famapptr;
ModifierData *md;
VirtualModifierData virtualModifierData;
int index = 0;
@@ -830,8 +831,10 @@ static void WIDGETGROUP_armature_facemap_draw(const struct bContext *C, struct w
for (; fmap; fmap = fmap->next, index++) {
if (BKE_pose_channel_find_name(armature->pose, fmap->name)) {
widget = WIDGET_facemap_new(wgroup, 0, ob, index);
+ RNA_pointer_create(&ob->id, &RNA_FaceMap, fmap, &famapptr);
+ WM_widget_property(widget, FACEMAP_SLOT_FACEMAP, &famapptr, "name");
WIDGET_facemap_set_color(widget, color_shape);
-
+ WM_widget_set_draw_on_hover_only(widget, true);
}
}
}
diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h
index 7815d36..abd9260 100644
--- a/source/blender/windowmanager/WM_api.h
+++ b/source/blender/windowmanager/WM_api.h
@@ -532,6 +532,10 @@ enum {
RECT_TRANSFORM_SLOT_SCALE = 1
};
+enum {
+ FACEMAP_SLOT_FACEMAP = 0,
+};
+
struct wmWidget *WIDGET_arrow_new(struct wmWidgetGroup *wgroup, int style);
void WIDGET_arrow_set_color(struct wmWidget *widget, float color[4]);
void WIDGET_arrow_set_direction(struct wmWidget *widget, float direction[3]);
diff --git a/source/blender/windowmanager/intern/wm_generic_widgets.c b/source/blender/windowmanager/intern/wm_generic_widgets.c
index 5a66bad..7f48acc 100644
--- a/source/blender/windowmanager/intern/wm_generic_widgets.c
+++ b/source/blender/windowmanager/intern/wm_generic_widgets.c
@@ -1075,6 +1075,13 @@ static void widget_facemap_draw(struct wmWidget *widget, const struct bContext *
glPopMatrix();
}
+static void widget_facemap_render_3d_intersect(const struct bContext *C, struct wmWidget *widget, int selectionbase)
+{
+ GPU_select_load_id(selectionbase);
+ widget_facemap_draw(widget, C);
+}
+
+
void WIDGET_facemap_set_color(struct wmWidget *widget, float color[4])
{
FacemapWidget *fmap_widget = (FacemapWidget *)widget;
@@ -1089,7 +1096,7 @@ struct wmWidget *WIDGET_facemap_new(struct wmWidgetGroup *wgroup, int style, str
// fmap_widget->widget.invoke = NULL;
// fmap_widget->widget.bind_to_prop = NULL;
// fmap_widget->widget.handler = NULL;
- fmap_widget->widget.render_3d_intersection = NULL;
+ fmap_widget->widget.render_3d_intersection = widget_facemap_render_3d_intersect;
fmap_widget->ob = ob;
fmap_widget->facemap = facemap;
fmap_widget->style = style;
diff --git a/source/blender/windowmanager/intern/wm_widgets.c b/source/blender/windowmanager/intern/wm_widgets.c
index 4afeedf..08ac745 100644
--- a/source/blender/windowmanager/intern/wm_widgets.c
+++ b/source/blender/windowmanager/intern/wm_widgets.c
@@ -305,6 +305,7 @@ void WM_widgets_draw(const bContext *C, wmWidgetMap *wmap)
if (widget_iter->flag & WM_WIDGET_HIGHLIGHT) {
highlighted = widget_iter;
BLI_remlink(&wgroup->widgets, widget_iter);
+ widget_iter->next = widget_iter->prev = NULL;
}
else {
wm_widget_delete(&wgroup->widgets, widget_iter);
@@ -325,6 +326,7 @@ void WM_widgets_draw(const bContext *C, wmWidgetMap *wmap)
widget_iter->highlighted_part = highlighted->highlighted_part;
wm_widget_delete(&wgroup->widgets, highlighted);
highlighted = NULL;
+ break;
}
}
}
More information about the Bf-blender-cvs
mailing list