[Bf-blender-cvs] [bfe7328] wiggly-widgets: Allow de-selecting Face Maps
Julian Eisel
noreply at git.blender.org
Thu Nov 12 20:25:12 CET 2015
Commit: bfe73288bda337d00c1edcd75b82106026e7b4e5
Author: Julian Eisel
Date: Thu Nov 12 20:23:02 2015 +0100
Branches: wiggly-widgets
https://developer.blender.org/rBbfe73288bda337d00c1edcd75b82106026e7b4e5
Allow de-selecting Face Maps
Using de-select all for bones now de-selects all face maps, too.
===================================================================
M source/blender/editors/armature/pose_select.c
M source/blender/windowmanager/WM_api.h
M source/blender/windowmanager/intern/wm_widgets.c
===================================================================
diff --git a/source/blender/editors/armature/pose_select.c b/source/blender/editors/armature/pose_select.c
index 44470c1..e12fb3a 100644
--- a/source/blender/editors/armature/pose_select.c
+++ b/source/blender/editors/armature/pose_select.c
@@ -352,6 +352,7 @@ static int pose_de_select_all_exec(bContext *C, wmOperator *op)
{
int action = RNA_enum_get(op->ptr, "action");
+ const ARegion *ar = CTX_wm_region(C);
Scene *scene = CTX_data_scene(C);
Object *ob = ED_object_context(C);
bArmature *arm = ob->data;
@@ -368,6 +369,9 @@ static int pose_de_select_all_exec(bContext *C, wmOperator *op)
}
CTX_DATA_END;
+ /* handle widget selection */
+ WM_widgetmap_select_all(C, (wmWidgetMap *)ar->widgetmaps.first, action);
+
WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, NULL);
/* weightpaint or mask modifiers need depsgraph updates */
diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h
index 4b3fc81..ab6f0be 100644
--- a/source/blender/windowmanager/WM_api.h
+++ b/source/blender/windowmanager/WM_api.h
@@ -500,7 +500,10 @@ float WM_event_tablet_data(const struct wmEvent *event, int *pen_flip, flo
bool WM_event_is_tablet(const struct wmEvent *event);
-/* *************** Widget API ******************** */
+/* *************** Widget API ********************
+ *
+ * TODO getting a bit crowded here - maybe move into own .h file?
+ */
struct wmWidget *WM_widget_new(void (*draw)(const struct bContext *, struct wmWidget *),
void (*render_3d_intersection)(const struct bContext *, struct wmWidget *, int),
@@ -546,6 +549,8 @@ wmKeyMap *WM_widgetgroup_keymap_common(wmKeyConfig *config, const char *wgroupna
struct wmWidgetMapType *WM_widgetmaptype_find(const char *idname, const int spaceid, const int regionid,
const bool is_3d, const bool create);
+bool WM_widgetmap_select_all(struct bContext *C, struct wmWidgetMap *wmap, const int action);
+
struct wmWidgetGroupType *WM_widgetgrouptype_new(
int (*poll)(const struct bContext *, struct wmWidgetGroupType *),
void (*create)(const struct bContext *, struct wmWidgetGroup *),
diff --git a/source/blender/windowmanager/intern/wm_widgets.c b/source/blender/windowmanager/intern/wm_widgets.c
index e9f12bf..9fd07c5 100644
--- a/source/blender/windowmanager/intern/wm_widgets.c
+++ b/source/blender/windowmanager/intern/wm_widgets.c
@@ -1074,6 +1074,34 @@ void wm_widgetmap_set_selected_widget(bContext *C, wmWidgetMap *wmap, wmWidget *
}
}
+/**
+ * Select/Deselect all selectable widgets in \a wmap
+ *
+ * \return if selection has changed.
+ *
+ * TODO currently only one selected widget supported
+ */
+bool WM_widgetmap_select_all(bContext *C, wmWidgetMap *wmap, const int action)
+{
+ bool changed = false;
+
+ switch (action) {
+ case SEL_SELECT:
+ printf("Selecting multiple widgets is not supported yet!\n");
+ break;
+ case SEL_DESELECT:
+ if (wmap->selected_widget) {
+ changed = true;
+ }
+ wm_widgetmap_set_selected_widget(C, wmap, NULL);
+ break;
+ default:
+ BLI_assert(0);
+ }
+
+ return changed;
+}
+
void wm_widgetmap_handler_context(bContext *C, wmEventHandler *handler)
{
bScreen *screen = CTX_wm_screen(C);
More information about the Bf-blender-cvs
mailing list