[Bf-blender-cvs] [4ee1de8] wiggly-widgets: Revive the Manipulator Widget
Julian Eisel
noreply at git.blender.org
Thu Apr 9 12:11:49 CEST 2015
Commit: 4ee1de8c3ce6ebeb2f550ebf4a52a947e9177c6e
Author: Julian Eisel
Date: Thu Apr 9 12:10:07 2015 +0200
Branches: wiggly-widgets
https://developer.blender.org/rB4ee1de8c3ce6ebeb2f550ebf4a52a947e9177c6e
Revive the Manipulator Widget
Enabled the manipulator widget code again and updated it to the current
system to continue work on it.
A customizable manipulator widget might be a good start for a bone
widget system.
===================================================================
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/CMakeLists.txt
M source/blender/editors/transform/manipulator_widget.c
M source/blender/editors/transform/transform_manipulator.c
M source/blender/makesdna/DNA_widget_types.h
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/include/ED_transform.h b/source/blender/editors/include/ED_transform.h
index 8382428..dca72dd 100644
--- a/source/blender/editors/include/ED_transform.h
+++ b/source/blender/editors/include/ED_transform.h
@@ -116,6 +116,7 @@ struct Scene;
struct Object;
struct wmWidget;
struct wmWidgetGroup;
+struct wmWidgetGroupType;
/* UNUSED */
// int BIF_snappingSupported(struct Object *obedit);
@@ -157,7 +158,6 @@ void Transform_Properties(struct wmOperatorType *ot, int flags);
/* view3d manipulators */
-/*
typedef struct ManipulatorGroup {
struct wmWidget *translate_x;
struct wmWidget *translate_y;
@@ -168,18 +168,17 @@ typedef struct ManipulatorGroup {
struct wmWidget *rotate_z;
} ManipulatorGroup;
-int WIDGET_manipulator_handler(struct bContext *C, const struct wmEvent *event, struct wmWidget *widget, struct wmOperator *ptr);
+int WIDGET_manipulator_handler(struct bContext *C, const struct wmEvent *event, struct wmWidget *widget);
int WIDGET_manipulator_handler_trans(struct bContext *C, const struct wmEvent *event, struct wmWidget *widget, struct PointerRNA *ptr);
int WIDGET_manipulator_handler_rot(struct bContext *C, const struct wmEvent *event, struct wmWidget *widget, struct PointerRNA *ptr);
void WIDGET_manipulator_render_3d_intersect(const struct bContext *C, struct wmWidget *widget, int selectionbase);
void WIDGET_manipulator_draw(struct wmWidget *widget, const struct bContext *C);
-bool WIDGETGROUP_manipulator_poll(struct wmWidgetGroup *wgroup, const struct bContext *C);
-void WIDGETGROUP_manipulator_update(struct wmWidgetGroup *wgroup, const struct bContext *C);
+int WIDGETGROUP_manipulator_poll(const struct bContext *C, struct wmWidgetGroupType *wgrouptype);
+void WIDGETGROUP_manipulator_update(const struct bContext *C, struct wmWidgetGroup *wgroup);
void WIDGETGROUP_manipulator_free(struct wmWidgetGroup *wgroup);
-void WIDGETGROUP_manipulator_create(struct wmWidgetGroup *wgroup);
-*/
+void WIDGETGROUP_manipulator_create(const struct bContext *C, struct wmWidgetGroup *wgroup);
void BIF_draw_manipulator(const struct bContext *C);
int BIF_do_manipulator(struct bContext *C, const struct wmEvent *event, struct wmOperator *op);
diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c
index 1be3856..aa166e4 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -870,16 +870,11 @@ static void WIDGETGROUP_armature_facemap_draw(const struct bContext *C, struct w
static void view3d_widgets(void)
{
WM_widgetmaptype_find("View3D", SPACE_VIEW3D, RGN_TYPE_WINDOW, true, true);
-
+
+ WM_widgetgrouptype_new(WIDGETGROUP_manipulator_poll, WIDGETGROUP_manipulator_update, NULL, "View3D", SPACE_VIEW3D, RGN_TYPE_WINDOW, true);
WM_widgetgrouptype_new(WIDGETGROUP_lamp_poll, WIDGETGROUP_lamp_draw, NULL, "View3D", SPACE_VIEW3D, RGN_TYPE_WINDOW, true);
WM_widgetgrouptype_new(WIDGETGROUP_camera_poll, WIDGETGROUP_camera_draw, NULL, "View3D", SPACE_VIEW3D, RGN_TYPE_WINDOW, true);
WM_widgetgrouptype_new(WIDGETGROUP_armature_facemap_poll, WIDGETGROUP_armature_facemap_draw, NULL, "View3D", SPACE_VIEW3D, RGN_TYPE_WINDOW, true);
-
-#if 0
- wgroup_manipulator = WM_widgetgrouptype_new(
- WIDGETGROUP_manipulator_poll,
- WIDGETGROUP_manipulator_update);
-#endif
}
diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c
index 5679995..81cd4c0 100644
--- a/source/blender/editors/space_view3d/view3d_draw.c
+++ b/source/blender/editors/space_view3d/view3d_draw.c
@@ -3897,7 +3897,7 @@ void view3d_main_area_draw(const bContext *C, ARegion *ar)
view3d_main_area_setup_view(scene, v3d, ar, NULL, NULL);
glClear(GL_DEPTH_BUFFER_BIT);
WM_widgets_draw(C, ar->widgetmaps.first, false);
- BIF_draw_manipulator(C);
+// BIF_draw_manipulator(C);
ED_region_pixelspace(ar);
view3d_main_area_draw_info(C, scene, ar, v3d, grid_unit, render_border);
diff --git a/source/blender/editors/transform/CMakeLists.txt b/source/blender/editors/transform/CMakeLists.txt
index 0c36047..bbc88c8 100644
--- a/source/blender/editors/transform/CMakeLists.txt
+++ b/source/blender/editors/transform/CMakeLists.txt
@@ -38,6 +38,7 @@ set(INC_SYS
)
set(SRC
+ manipulator_widget.c
transform.c
transform_constraints.c
transform_conversions.c
diff --git a/source/blender/editors/transform/manipulator_widget.c b/source/blender/editors/transform/manipulator_widget.c
index eff9fda..a62f4b6 100644
--- a/source/blender/editors/transform/manipulator_widget.c
+++ b/source/blender/editors/transform/manipulator_widget.c
@@ -62,6 +62,7 @@
#include "WM_api.h"
#include "WM_types.h"
+#include "wm.h"
#include "ED_armature.h"
#include "ED_curve.h"
@@ -1689,28 +1690,31 @@ void WIDGET_manipulator_draw(wmWidget *UNUSED(widget), const bContext *C)
}
}
-void WIDGETGROUP_manipulator_update(struct wmWidgetGroup *wgroup, const struct bContext *C)
+void WIDGETGROUP_manipulator_update(const struct bContext *C, struct wmWidgetGroup *wgroup)
{
ScrArea *sa = CTX_wm_area(C);
ARegion *ar = CTX_wm_region(C);
Scene *scene = CTX_data_scene(C);
View3D *v3d = sa->spacedata.first;
RegionView3D *rv3d = ar->regiondata;
- ManipulatorGroup *manipulator = WM_widgetgroup_customdata(wgroup);
+ ManipulatorGroup *manipulator;
int totsel;
+ WIDGETGROUP_manipulator_create(C, wgroup);
+ manipulator = WM_widgetgroup_customdata(wgroup);
+
v3d->twflag &= ~V3D_DRAW_MANIPULATOR;
totsel = calc_manipulator_stats(C);
if (totsel == 0) {
- WM_widget_set_draw(manipulator->translate_x, false);
- WM_widget_set_draw(manipulator->translate_y, false);
- WM_widget_set_draw(manipulator->translate_z, false);
+ WM_widget_flag_enable(manipulator->translate_x, WM_WIDGET_HIDDEN);
+ WM_widget_flag_enable(manipulator->translate_y, WM_WIDGET_HIDDEN);
+ WM_widget_flag_enable(manipulator->translate_z, WM_WIDGET_HIDDEN);
- WM_widget_set_draw(manipulator->rotate_x, false);
- WM_widget_set_draw(manipulator->rotate_y, false);
- WM_widget_set_draw(manipulator->rotate_z, false);
+ WM_widget_flag_enable(manipulator->rotate_x, WM_WIDGET_HIDDEN);
+ WM_widget_flag_enable(manipulator->rotate_y, WM_WIDGET_HIDDEN);
+ WM_widget_flag_enable(manipulator->rotate_z, WM_WIDGET_HIDDEN);
return;
}
v3d->twflag |= V3D_DRAW_MANIPULATOR;
@@ -1745,13 +1749,13 @@ void WIDGETGROUP_manipulator_update(struct wmWidgetGroup *wgroup, const struct b
/* when looking through a selected camera, the manipulator can be at the
* exact same position as the view, skip so we don't break selection */
if (fabsf(mat4_to_scale(rv3d->twmat)) < 1e-7f) {
- WM_widget_set_draw(manipulator->translate_x, false);
- WM_widget_set_draw(manipulator->translate_y, false);
- WM_widget_set_draw(manipulator->translate_z, false);
+ WM_widget_flag_enable(manipulator->translate_x, WM_WIDGET_HIDDEN);
+ WM_widget_flag_enable(manipulator->translate_y, WM_WIDGET_HIDDEN);
+ WM_widget_flag_enable(manipulator->translate_z, WM_WIDGET_HIDDEN);
- WM_widget_set_draw(manipulator->rotate_x, false);
- WM_widget_set_draw(manipulator->rotate_y, false);
- WM_widget_set_draw(manipulator->rotate_z, false);
+ WM_widget_flag_enable(manipulator->rotate_x, WM_WIDGET_HIDDEN);
+ WM_widget_flag_enable(manipulator->rotate_y, WM_WIDGET_HIDDEN);
+ WM_widget_flag_enable(manipulator->rotate_z, WM_WIDGET_HIDDEN);
return;
}
@@ -1759,12 +1763,12 @@ void WIDGETGROUP_manipulator_update(struct wmWidgetGroup *wgroup, const struct b
test_manipulator_axis(C);
drawflags = rv3d->twdrawflag; /* set in calc_manipulator_stats */
- WM_widget_operator(manipulator->translate_x, WIDGET_manipulator_handler_trans, "TRANSFORM_OT_translate", NULL);
- WM_widget_operator(manipulator->translate_y, WIDGET_manipulator_handler_trans, "TRANSFORM_OT_translate", NULL);
- WM_widget_operator(manipulator->translate_z, WIDGET_manipulator_handler_trans, "TRANSFORM_OT_translate", NULL);
- WM_widget_operator(manipulator->rotate_x, WIDGET_manipulator_handler_rot, "TRANSFORM_OT_rotate", NULL);
- WM_widget_operator(manipulator->rotate_y, WIDGET_manipulator_handler_rot, "TRANSFORM_OT_rotate", NULL);
- WM_widget_operator(manipulator->rotate_z, WIDGET_manipulator_handler_rot, "TRANSFORM_OT_rotate", NULL);
+ WM_widget_operator(manipulator->translate_x, "TRANSFORM_OT_translate");
+ WM_widget_operator(manipulator->translate_y, "TRANSFORM_OT_translate");
+ WM_widget_operator(manipulator->translate_z, "TRANSFORM_OT_translate");
+ WM_widget_operator(manipulator->rotate_x, "TRANSFORM_OT_translate");
+ WM_widget_operator(manipulator->rotate_y, "TRANSFORM_OT_translate");
+ WM_widget_operator(manipulator->rotate_z, "TRANSFORM_OT_translate");
if (v3d->twtype & V3D_MANIP_TRANSLATE) {
/* should be added according to the order of axis */
@@ -1777,14 +1781,14 @@ void WIDGETGROUP_manipulator_update(struct wmWidgetGroup *wgroup, const struct b
WM_widget_set_origin(manipulator->translate_z, rv3d->twmat[3]);
WIDGET_arrow_set_direction(manipulator->translate_z, rv3d->twmat[2]);
- WM_widget_set_draw(manipulator->translate_x, true);
- WM_widget_set_draw(manipulator->translate_y, true);
- WM_widget_set_draw(manipulator->translate_z, true);
+ WM_widget_flag_disable(manipulator->translate_x, WM_WIDGET_HIDDEN);
+ WM_widget_flag_disable(manipulator->translate_y, WM_WIDGET_HIDDEN);
+ WM_widget_flag_disable(manipulator->translate_z, WM_WIDGET_HIDDEN);
}
else {
- WM_widget_set_draw(manipulator->translate_x, false);
- WM_widget_set_draw(manipulator->translate_y, false);
- WM_widget_set_draw(manipulator->translate_z, false);
+ WM_widget_flag_enable(manipulator->translate_x, WM_WIDGET_HIDDEN);
+ WM_widget_flag_enable(manipulator->translate_y, WM_WIDGET_HIDDEN);
+ WM_widget_flag_enable(manipulator->translate_z, WM_WIDGET_HIDDEN);
}
if (v3d->twtype & V3D_MANIP_ROTATE) {
@@ -1799,19 +1803,19 @@ void WIDGETGROUP_manipulator_update(struct wmWidgetGroup *wgroup, const struct b
WM_widget_set_origin(manipulator->rotate_z, rv3d->twmat[3]);
WIDGET_dial_set_direction(manipulator->rotate_z, rv3d->twmat[2]);
- WM_widget_set_draw(manipulator->rotate_x,
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list