[Bf-blender-cvs] [437232e] temp_widgets_c++_experiment: Port over get/set functions for active widget in widget-map
Julian Eisel
noreply at git.blender.org
Sun Dec 20 15:39:51 CET 2015
Commit: 437232e3641e00cf5789220c9dce9c4ff678edf4
Author: Julian Eisel
Date: Sun Dec 20 15:38:04 2015 +0100
Branches: temp_widgets_c++_experiment
https://developer.blender.org/rB437232e3641e00cf5789220c9dce9c4ff678edf4
Port over get/set functions for active widget in widget-map
===================================================================
M source/blender/windowmanager/intern/widgets/wm_widgetmap.cc
M source/blender/windowmanager/intern/widgets/wm_widgetmap.h
M source/blender/windowmanager/intern/widgets/wm_widgets_c_api.cc
M source/blender/windowmanager/intern/widgets/wm_widgets_c_api.h
M source/blender/windowmanager/intern/wm_widgets.c
M source/blender/windowmanager/wm_event_system.h
===================================================================
diff --git a/source/blender/windowmanager/intern/widgets/wm_widgetmap.cc b/source/blender/windowmanager/intern/widgets/wm_widgetmap.cc
index bf2675a..299d26c 100644
--- a/source/blender/windowmanager/intern/widgets/wm_widgetmap.cc
+++ b/source/blender/windowmanager/intern/widgets/wm_widgetmap.cc
@@ -37,6 +37,8 @@
#include "GPU_glew.h"
#include "GPU_select.h"
+#include "MEM_guardedalloc.h"
+
#include "WM_api.h"
#include "wm_cursors.h"
#include "WM_types.h"
@@ -261,3 +263,63 @@ void wmWidgetMap::set_highlighted_widget(bContext *C, wmWidget *widget, unsigned
}
}
+void wmWidgetMap::set_active_widget(bContext *C, const wmEvent *event, wmWidget *widget)
+{
+ if (widget) {
+ if (widget->opname) {
+ wmOperatorType *ot = WM_operatortype_find(widget->opname, 0);
+
+ if (ot) {
+ /* first activate the widget itself */
+ if (widget->invoke && widget->handler) {
+ widget->flag |= WM_WIDGET_ACTIVE;
+ widget->invoke(C, event, widget);
+ }
+ wmap_context.active_widget = widget;
+
+ WM_operator_name_call_ptr(C, ot, WM_OP_INVOKE_DEFAULT, &widget->opptr);
+
+ /* we failed to hook the widget to the operator handler or operator was cancelled, return */
+ if (!wmap_context.active_widget) {
+ widget->flag &= ~WM_WIDGET_ACTIVE;
+ /* first activate the widget itself */
+ if (widget->interaction_data) {
+ MEM_freeN(widget->interaction_data);
+ widget->interaction_data = NULL;
+ }
+ }
+ return;
+ }
+ else {
+ printf("Widget error: operator not found\n");
+ wmap_context.active_widget = NULL;
+ return;
+ }
+ }
+ else {
+ if (widget->invoke && widget->handler) {
+ widget->flag |= WM_WIDGET_ACTIVE;
+ widget->invoke(C, event, widget);
+ wmap_context.active_widget = widget;
+ }
+ }
+ }
+ else {
+ widget = wmap_context.active_widget;
+
+ /* deactivate, widget but first take care of some stuff */
+ if (widget) {
+ widget->flag &= ~WM_WIDGET_ACTIVE;
+ /* first activate the widget itself */
+ if (widget->interaction_data) {
+ MEM_freeN(widget->interaction_data);
+ widget->interaction_data = NULL;
+ }
+ }
+ wmap_context.active_widget = NULL;
+
+ ED_region_tag_redraw(CTX_wm_region(C));
+ WM_event_add_mousemove(C);
+ }
+}
+
diff --git a/source/blender/windowmanager/intern/widgets/wm_widgetmap.h b/source/blender/windowmanager/intern/widgets/wm_widgetmap.h
index 5089c24..7b84b13 100644
--- a/source/blender/windowmanager/intern/widgets/wm_widgetmap.h
+++ b/source/blender/windowmanager/intern/widgets/wm_widgetmap.h
@@ -50,8 +50,10 @@ public:
wmWidgetMap *wmap, const char *idname,
const int spaceid, const int regionid,
const bool is_3d);
+
void set_highlighted_widget(struct bContext *C, wmWidget *widget, unsigned char part);
wmWidget *find_highlighted_widget(bContext *C, const struct wmEvent *event, unsigned char *part);
+ void set_active_widget(bContext *C, const wmEvent *event, wmWidget *widget);
/**
* \brief Widget map runtime context
diff --git a/source/blender/windowmanager/intern/widgets/wm_widgets_c_api.cc b/source/blender/windowmanager/intern/widgets/wm_widgets_c_api.cc
index e43a4e7..788ac59 100644
--- a/source/blender/windowmanager/intern/widgets/wm_widgets_c_api.cc
+++ b/source/blender/windowmanager/intern/widgets/wm_widgets_c_api.cc
@@ -62,6 +62,15 @@ wmWidget *wm_widgetmap_get_highlighted_widget(wmWidgetMap *wmap)
return wmap->wmap_context.highlighted_widget;
}
+void wm_widgetmap_set_active_widget(wmWidgetMap *wmap, bContext *C, const wmEvent *event, wmWidget *widget)
+{
+ wmap->set_active_widget(C, event, widget);
+}
+wmWidget *wm_widgetmap_get_active_widget(wmWidgetMap *wmap)
+{
+ return wmap->wmap_context.active_widget;
+}
+
wmWidget *wm_widgetmap_find_highlighted_widget(
wmWidgetMap *wmap, bContext *C, const wmEvent *event,
diff --git a/source/blender/windowmanager/intern/widgets/wm_widgets_c_api.h b/source/blender/windowmanager/intern/widgets/wm_widgets_c_api.h
index 13d2fdc..604d6e1 100644
--- a/source/blender/windowmanager/intern/widgets/wm_widgets_c_api.h
+++ b/source/blender/windowmanager/intern/widgets/wm_widgets_c_api.h
@@ -53,6 +53,7 @@ struct wmWidgetMapType *WM_widgetmaptype_find(
struct wmWidgetMap *WM_widgetmap_from_type(
const char *idname, const int spaceid, const int regionid,
const bool is_3d);
+/* highlighted widget */
void wm_widgetmap_set_highlighted_widget(
struct bContext *C, struct wmWidgetMap *wmap, struct wmWidget *widget,
unsigned char part);
@@ -60,6 +61,10 @@ struct wmWidget *wm_widgetmap_get_highlighted_widget(struct wmWidgetMap *wmap);
struct wmWidget *wm_widgetmap_find_highlighted_widget(
struct wmWidgetMap *wmap, struct bContext *C, const struct wmEvent *event,
unsigned char *part);
+/* active widget */
+void wm_widgetmap_set_active_widget(
+ struct wmWidgetMap *wmap, struct bContext *C, const struct wmEvent *event, struct wmWidget *widget);
+struct wmWidget *wm_widgetmap_get_active_widget(struct wmWidgetMap *wmap);
struct wmWidgetGroupType *WM_widgetgrouptype_new(
int (*poll)(const struct bContext *, struct wmWidgetGroupType *),
diff --git a/source/blender/windowmanager/intern/wm_widgets.c b/source/blender/windowmanager/intern/wm_widgets.c
index b93959f..c8bb210 100644
--- a/source/blender/windowmanager/intern/wm_widgets.c
+++ b/source/blender/windowmanager/intern/wm_widgets.c
@@ -957,68 +957,6 @@ bool WM_widgetmap_cursor_set(const wmWidgetMapC *wmap, wmWindow *win)
return false;
}
-void wm_widgetmap_set_active_widget(
- wmWidgetMapC *wmap, bContext *C,
- const wmEvent *event, wmWidget *widget)
-{
- if (widget) {
- if (widget->opname) {
- wmOperatorType *ot = WM_operatortype_find(widget->opname, 0);
-
- if (ot) {
- /* first activate the widget itself */
- if (widget->invoke && widget->handler) {
- widget->flag |= WM_WIDGET_ACTIVE;
- widget->invoke(C, event, widget);
- }
- wmap->wmap_context.active_widget = widget;
-
- WM_operator_name_call_ptr(C, ot, WM_OP_INVOKE_DEFAULT, &widget->opptr);
-
- /* we failed to hook the widget to the operator handler or operator was cancelled, return */
- if (!wmap->wmap_context.active_widget) {
- widget->flag &= ~WM_WIDGET_ACTIVE;
- /* first activate the widget itself */
- if (widget->interaction_data) {
- MEM_freeN(widget->interaction_data);
- widget->interaction_data = NULL;
- }
- }
- return;
- }
- else {
- printf("Widget error: operator not found");
- wmap->wmap_context.active_widget = NULL;
- return;
- }
- }
- else {
- if (widget->invoke && widget->handler) {
- widget->flag |= WM_WIDGET_ACTIVE;
- widget->invoke(C, event, widget);
- wmap->wmap_context.active_widget = widget;
- }
- }
- }
- else {
- widget = wmap->wmap_context.active_widget;
-
- /* deactivate, widget but first take care of some stuff */
- if (widget) {
- widget->flag &= ~WM_WIDGET_ACTIVE;
- /* first activate the widget itself */
- if (widget->interaction_data) {
- MEM_freeN(widget->interaction_data);
- widget->interaction_data = NULL;
- }
- }
- wmap->wmap_context.active_widget = NULL;
-
- ED_region_tag_redraw(CTX_wm_region(C));
- WM_event_add_mousemove(C);
- }
-}
-
void wm_widgetmap_handler_context(bContext *C, wmEventHandler *handler)
{
bScreen *screen = CTX_wm_screen(C);
@@ -1086,11 +1024,6 @@ void wm_widget_handler_modal_update(bContext *C, wmEvent *event, wmEventHandler
}
}
-wmWidget *wm_widgetmap_get_active_widget(wmWidgetMapC *wmap)
-{
- return wmap->wmap_context.active_widget;
-}
-
void WM_widgetmap_delete(wmWidgetMapC *wmap)
{
if (!wmap)
diff --git a/source/blender/windowmanager/wm_event_system.h b/source/blender/windowmanager/wm_event_system.h
index 09c78e3..f8a3a68 100644
--- a/source/blender/windowmanager/wm_event_system.h
+++ b/source/blender/windowmanager/wm_event_system.h
@@ -104,9 +104,6 @@ void wm_drags_draw(bContext *C, wmWindow *win, rcti *rect);
void wm_widget_handler_modal_update(bContext *C, wmEvent *event, wmEventHandler *handler);
void wm_widgetmap_handler_context(bContext *C, wmEventHandler *handler);
-void wm_widgetmap_set_active_widget(wmWidgetMapC *wmap, bContext *C, const wmEvent *event, wmWidget *widget);
-wmWidget *wm_widgetmap_get_active_widget(wmWidgetMapC *wmap);
-
void wm_widget_select(bContext *C, wmWidgetMapC *wmap, wmWidget *widget);
#endif /* __WM_EVENT_SYSTEM_H__ */
More information about the Bf-blender-cvs
mailing list