[Bf-blender-cvs] [60e77c5] wiggly-widgets: Draw manipulator from widget callback (handling still done separately)
Antony Riakiotakis
noreply at git.blender.org
Mon Sep 29 16:36:22 CEST 2014
Commit: 60e77c50ee13962ec06c42f319946925be7ece69
Author: Antony Riakiotakis
Date: Mon Sep 29 16:36:08 2014 +0200
Branches: wiggly-widgets
https://developer.blender.org/rB60e77c50ee13962ec06c42f319946925be7ece69
Draw manipulator from widget callback (handling still done separately)
===================================================================
M source/blender/editors/include/ED_transform.h
M source/blender/editors/space_view3d/space_view3d.c
M source/blender/editors/space_view3d/view3d_draw.c
M source/blender/editors/transform/transform_manipulator.c
M source/blender/makesdna/DNA_view3d_types.h
M source/blender/windowmanager/WM_api.h
M source/blender/windowmanager/intern/wm.c
M source/blender/windowmanager/intern/wm_init_exit.c
M source/blender/windowmanager/intern/wm_widgets.c
M source/blender/windowmanager/wm_event_system.h
===================================================================
diff --git a/source/blender/editors/include/ED_transform.h b/source/blender/editors/include/ED_transform.h
index daa6864..e9a3eb0 100644
--- a/source/blender/editors/include/ED_transform.h
+++ b/source/blender/editors/include/ED_transform.h
@@ -152,7 +152,7 @@ void Transform_Properties(struct wmOperatorType *ot, int flags);
/* view3d manipulators */
int BIF_do_manipulator(struct bContext *C, const struct wmEvent *event, struct wmOperator *op);
-void BIF_draw_manipulator(const struct bContext *C);
+void BIF_draw_manipulator(const struct bContext *C, void *customdata);
/* Snapping */
diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c
index b5a2139..fd582c3 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -53,6 +53,7 @@
#include "ED_space_api.h"
#include "ED_screen.h"
+#include "ED_transform.h"
#include "GPU_extensions.h"
#include "GPU_material.h"
@@ -343,9 +344,6 @@ static SpaceLink *view3d_new(const bContext *C)
v3d->bundle_size = 0.2f;
v3d->bundle_drawtype = OB_PLAINAXES;
-
- /* add the generic manipulator widget here */
- v3d->manipulator_widget = WM_widget_new(NULL, NULL, NULL, NULL, NULL, NULL, 0, 0);
/* header */
ar = MEM_callocN(sizeof(ARegion), "header for view3d");
@@ -427,7 +425,15 @@ static void view3d_free(SpaceLink *sl)
/* spacetype; init callback */
static void view3d_init(wmWindowManager *UNUSED(wm), ScrArea *UNUSED(sa))
{
-
+ static wmWidget *manipulator_widget = NULL;
+
+ if (!manipulator_widget) {
+ ListBase *widgets = WM_widgetmap_find("View3D", SPACE_VIEW3D, RGN_TYPE_WINDOW);
+
+ manipulator_widget = WM_widget_new(NULL, BIF_draw_manipulator, NULL, NULL, NULL, NULL, 0, 0);
+
+ WM_widget_register(widgets, manipulator_widget);
+ }
}
static SpaceLink *view3d_duplicate(SpaceLink *sl)
diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c
index 4513822..d771e33 100644
--- a/source/blender/editors/space_view3d/view3d_draw.c
+++ b/source/blender/editors/space_view3d/view3d_draw.c
@@ -2763,7 +2763,7 @@ static void view3d_draw_objects(
if (!draw_offscreen) {
WM_widgets_draw(C, ar);
- BIF_draw_manipulator(C);
+ //BIF_draw_manipulator(C);
}
/* cleanup */
diff --git a/source/blender/editors/transform/transform_manipulator.c b/source/blender/editors/transform/transform_manipulator.c
index 9cfae51..ca85e63 100644
--- a/source/blender/editors/transform/transform_manipulator.c
+++ b/source/blender/editors/transform/transform_manipulator.c
@@ -1604,7 +1604,7 @@ static void draw_manipulator_rotate_cyl(
/* main call, does calc centers & orientation too */
static int drawflags = 0xFFFF; // only for the calls below, belongs in scene...?
-void BIF_draw_manipulator(const bContext *C)
+void BIF_draw_manipulator(const bContext *C, void *UNUSED(customdata))
{
ScrArea *sa = CTX_wm_area(C);
ARegion *ar = CTX_wm_region(C);
diff --git a/source/blender/makesdna/DNA_view3d_types.h b/source/blender/makesdna/DNA_view3d_types.h
index db3d9ef..42bfe27 100644
--- a/source/blender/makesdna/DNA_view3d_types.h
+++ b/source/blender/makesdna/DNA_view3d_types.h
@@ -218,9 +218,6 @@ typedef struct View3D {
/* XXX deprecated? */
struct bGPdata *gpd DNA_DEPRECATED; /* Grease-Pencil Data (annotation layers) */
-
-
- void *manipulator_widget;
} View3D;
diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h
index 13e3009..e206b52 100644
--- a/source/blender/windowmanager/WM_api.h
+++ b/source/blender/windowmanager/WM_api.h
@@ -468,13 +468,15 @@ struct wmWidget *WM_widget_new(int (*poll)(const struct bContext *C, void *custo
void (*handler)(struct bContext *C, struct wmEvent *event, void *customdata),
void *customdata, bool free_data, bool requires_ogl);
-void WM_widgets_delete(struct wmWidget *widget);
+void WM_widgets_delete(ListBase *widgetlist, struct wmWidget *widget);
void WM_widgets_draw(const struct bContext *C, struct ARegion *ar);
void WM_widget_handler_register(struct ARegion *ar);
-void WM_widget_register(ListBase *widgetlist, struct wmWidget *widget);
+bool WM_widget_register(ListBase *widgetlist, struct wmWidget *widget);
void WM_widget_unregister(ListBase *widgetlist, struct wmWidget *widget);
struct ListBase *WM_widgetmap_find(const char *idname, int spaceid, int regionid);
+void WM_widgetmaps_free(void);
+
#ifdef __cplusplus
}
diff --git a/source/blender/windowmanager/intern/wm.c b/source/blender/windowmanager/intern/wm.c
index d05cc57..c1f56d2 100644
--- a/source/blender/windowmanager/intern/wm.c
+++ b/source/blender/windowmanager/intern/wm.c
@@ -464,7 +464,7 @@ void wm_close_and_free(bContext *C, wmWindowManager *wm)
BLI_freelistN(&wm->paintcursors);
WM_drag_free_list(&wm->drags);
-
+
wm_reports_free(wm);
if (C && CTX_wm_manager(C) == wm) CTX_wm_manager_set(C, NULL);
diff --git a/source/blender/windowmanager/intern/wm_init_exit.c b/source/blender/windowmanager/intern/wm_init_exit.c
index 8edd805..34fcb2d 100644
--- a/source/blender/windowmanager/intern/wm_init_exit.c
+++ b/source/blender/windowmanager/intern/wm_init_exit.c
@@ -429,7 +429,7 @@ void WM_exit_ext(bContext *C, const bool do_python)
BKE_addon_pref_type_free();
wm_operatortype_free();
wm_dropbox_free();
- wm_widgetmap_free();
+ WM_widgetmaps_free();
WM_menutype_free();
WM_uilisttype_free();
diff --git a/source/blender/windowmanager/intern/wm_widgets.c b/source/blender/windowmanager/intern/wm_widgets.c
index f1e8255..6940c57 100644
--- a/source/blender/windowmanager/intern/wm_widgets.c
+++ b/source/blender/windowmanager/intern/wm_widgets.c
@@ -122,12 +122,12 @@ wmWidget *WM_widget_new(int (*poll)(const struct bContext *C, void *customdata),
return NULL;
}
-void WM_widgets_delete(wmWidget *widget)
+void WM_widgets_delete(ListBase *widgetlist, wmWidget *widget)
{
if (widget->flag & WM_WIDGET_FREE_DATA)
MEM_freeN(widget->customdata);
- MEM_freeN(widget);
+ BLI_freelinkN(widgetlist, widget);
}
@@ -166,51 +166,55 @@ void WM_widget_handler_register(ARegion *ar)
}
-void WM_widget_register(ListBase *widgetlist, wmWidget *widget)
+bool WM_widget_register(ListBase *widgetlist, wmWidget *widget)
{
- BLI_addtail(widgetlist, widget);
+ wmWidget *widget_iter;
+ /* search list, might already be registered */
+ for (widget_iter = widgetlist->first; widget_iter; widget_iter = widget_iter->next) {
+ if (widget_iter == widget)
+ return false;
+ }
+
+ BLI_addhead(widgetlist, widget);
+ return true;
}
void WM_widget_unregister(ListBase *widgetlist, wmWidget *widget)
{
- wmWidget *widget_iter;
-
- for (widget_iter = widgetlist->first; widget_iter; widget_iter = widget_iter->next) {
- if (widget_iter == widget) {
- BLI_remlink(widgetlist, widget);
- }
- }
+ BLI_remlink(widgetlist, widget);
}
ListBase *WM_widgetmap_find(const char *idname, int spaceid, int regionid)
{
- wmWidgetMap *widgetm;
+ wmWidgetMap *wmap;
- for (widgetm = widgetmaps.first; widgetm; widgetm = widgetm->next)
- if (widgetm->spaceid == spaceid && widgetm->regionid == regionid)
- if (0 == strncmp(idname, widgetm->idname, KMAP_MAX_NAME))
- return &widgetm->widgets;
+ for (wmap = widgetmaps.first; wmap; wmap = wmap->next)
+ if (wmap->spaceid == spaceid && wmap->regionid == regionid)
+ if (0 == strncmp(idname, wmap->idname, KMAP_MAX_NAME))
+ return &wmap->widgets;
- widgetm = MEM_callocN(sizeof(struct wmWidgetMap), "widget list");
- BLI_strncpy(widgetm->idname, idname, KMAP_MAX_NAME);
- widgetm->spaceid = spaceid;
- widgetm->regionid = regionid;
- BLI_addtail(&widgetmaps, widgetm);
+ wmap = MEM_callocN(sizeof(struct wmWidgetMap), "widget list");
+ BLI_strncpy(wmap->idname, idname, KMAP_MAX_NAME);
+ wmap->spaceid = spaceid;
+ wmap->regionid = regionid;
+ BLI_addhead(&widgetmaps, wmap);
- return &widgetm->widgets;
+ return &wmap->widgets;
}
-void wm_widgetmap_free(void)
+void WM_widgetmaps_free(void)
{
- wmWidgetMap *widgetm;
+ wmWidgetMap *wmap;
- for (widgetm = widgetmaps.first; widgetm; widgetm = widgetm->next) {
+ for (wmap = widgetmaps.first; wmap; wmap = wmap->next) {
wmWidget *widget;
- for (widget = widgetm->widgets.first; widget; widget = widget->next) {
- WM_widgets_delete(widget);
+ for (widget = wmap->widgets.first; widget;) {
+ wmWidget *widget_next = widget->next;
+ WM_widgets_delete(&wmap->widgets, widget);
+ widget = widget_next;
}
- BLI_freelistN(&widgetm->widgets);
+ BLI_freelistN(&wmap->widgets);
}
BLI_freelistN(&widgetmaps);
diff --git a/source/blender/windowmanager/wm_event_system.h b/source/blender/windowmanager/wm_event_system.h
index 986a1cf..4b1f7d4 100644
--- a/source/blender/windowmanager/wm_event_system.h
+++ b/source/blender/windowmanager/wm_event_system.h
@@ -107,8 +107,5 @@ void wm_dropbox_free(void);
void wm_drags_check_ops(bContext *C, wmEvent *event);
void wm_drags_draw(bContext *C, wmWindow *win, rcti *rect);
-/* wm_widget.c */
-void wm_widgetmap_free(void);
-
#endif /* __WM_EVENT_SYSTEM_H__ */
More information about the Bf-blender-cvs
mailing list