[Bf-blender-cvs] [ebfad36] wiggly-widgets: Use a property to make the transform operator widget driven.
Antony Riakiotakis
noreply at git.blender.org
Tue Oct 14 16:20:35 CEST 2014
Commit: ebfad36a22ebc0b87be01431bc696e7d89eb3c79
Author: Antony Riakiotakis
Date: Tue Oct 14 16:20:20 2014 +0200
Branches: wiggly-widgets
https://developer.blender.org/rBebfad36a22ebc0b87be01431bc696e7d89eb3c79
Use a property to make the transform operator widget driven.
Design is still pending here, but for now just use to not remove widget
display.
===================================================================
M source/blender/editors/include/ED_transform.h
M source/blender/editors/space_view3d/space_view3d.c
M source/blender/editors/transform/transform.h
M source/blender/editors/transform/transform_generics.c
M source/blender/editors/transform/transform_manipulator.c
M source/blender/editors/transform/transform_ops.c
===================================================================
diff --git a/source/blender/editors/include/ED_transform.h b/source/blender/editors/include/ED_transform.h
index b2b0404..978163e 100644
--- a/source/blender/editors/include/ED_transform.h
+++ b/source/blender/editors/include/ED_transform.h
@@ -148,6 +148,7 @@ int BIF_countTransformOrientation(const struct bContext *C);
#define P_CORRECT_UV (1 << 8)
#define P_NO_DEFAULTS (1 << 10)
#define P_NO_TEXSPACE (1 << 11)
+#define P_WIDGET_DRIVEN (1 << 12)
void Transform_Properties(struct wmOperatorType *ot, int flags);
diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c
index 4acd116..b3a7287 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -691,6 +691,10 @@ static void view3d_dropboxes(void)
static void view3d_widgets(void)
{
+ float color_green[4] = {0.0f, 1.0f, 0.0f, 1.0f};
+ float color_red[4] = {1.0f, 0.0f, 0.0f, 1.0f};
+ float color_blue[4] = {0.0f, 0.0f, 1.0f, 1.0f};
+
wmWidget *widget = NULL;
ManipulatorGroup *manipulator = MEM_callocN(sizeof(ManipulatorGroup), "manipulator_data");
struct wmWidgetMap *wmap = WM_widgetmap_find("View3D", SPACE_VIEW3D, RGN_TYPE_WINDOW, true);
@@ -707,16 +711,33 @@ static void view3d_widgets(void)
WM_widget_register(wgroup_manipulator, widget);
manipulator->translate_x = WIDGET_arrow_new(0, WIDGET_manipulator_handler_trans);
+ WIDGET_dial_set_color(manipulator->translate_x, color_red);
+ WM_widget_register(wgroup_manipulator, manipulator->translate_x);
+
manipulator->translate_y = WIDGET_arrow_new(0, WIDGET_manipulator_handler_trans);
manipulator->translate_y->customdata = SET_INT_IN_POINTER(1);
+ WIDGET_dial_set_color(manipulator->translate_y, color_green);
+ WM_widget_register(wgroup_manipulator, manipulator->translate_y);
+
manipulator->translate_z = WIDGET_arrow_new(0, WIDGET_manipulator_handler_trans);
manipulator->translate_z->customdata = SET_INT_IN_POINTER(2);
+ WIDGET_dial_set_color(manipulator->translate_z, color_blue);
+ WM_widget_register(wgroup_manipulator, manipulator->translate_z);
manipulator->rotate_x = WIDGET_dial_new(0, WIDGET_manipulator_handler_rot);
+ WIDGET_dial_set_color(manipulator->rotate_x, color_red);
+ WM_widget_register(wgroup_manipulator, manipulator->rotate_x);
+
manipulator->rotate_y = WIDGET_dial_new(0, WIDGET_manipulator_handler_rot);
manipulator->rotate_y->customdata = SET_INT_IN_POINTER(1);
+ WIDGET_dial_set_color(manipulator->rotate_y, color_green);
+ WM_widget_register(wgroup_manipulator, manipulator->rotate_y);
+
manipulator->rotate_z = WIDGET_dial_new(0, WIDGET_manipulator_handler_rot);
manipulator->rotate_z->customdata = SET_INT_IN_POINTER(2);
+ WIDGET_dial_set_color(manipulator->rotate_z, color_blue);
+ WM_widget_register(wgroup_manipulator, manipulator->rotate_z);
+
widget = WM_widget_new(WIDGET_lamp_draw,
WIDGET_lamp_render_3d_intersect,
diff --git a/source/blender/editors/transform/transform.h b/source/blender/editors/transform/transform.h
index 67d5563..9d143d2 100644
--- a/source/blender/editors/transform/transform.h
+++ b/source/blender/editors/transform/transform.h
@@ -439,6 +439,8 @@ typedef struct TransInfo {
/* alternative transformation. used to add offset to tracking markers */
#define T_ALT_TRANSFORM (1 << 24)
+#define T_USE_WIDGET (1 << 24)
+
/* TransInfo->modifiers */
#define MOD_CONSTRAINT_SELECT 0x01
#define MOD_PRECISION 0x02
diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c
index 24dc6f6..e5868aa 100644
--- a/source/blender/editors/transform/transform_generics.c
+++ b/source/blender/editors/transform/transform_generics.c
@@ -1172,10 +1172,16 @@ void initTransInfo(bContext *C, TransInfo *t, wmOperator *op, const wmEvent *eve
t->view = v3d;
t->animtimer = (animscreen) ? animscreen->animtimer : NULL;
-
+
+ if (op && ((prop = RNA_struct_find_property(op->ptr, "use_widget_input")) &&
+ RNA_property_is_set(op->ptr, prop)))
+ {
+ if (RNA_property_boolean_get(op->ptr, prop))
+ t->flag |= T_USE_WIDGET;
+ }
+
/* turn manipulator off during transform */
- // FIXME: but don't do this when USING the manipulator...
- if (t->flag & T_MODAL) {
+ if ((t->flag & T_MODAL) && !(t->flag & T_USE_WIDGET)) {
t->twtype = v3d->twtype;
v3d->twtype = 0;
}
@@ -1442,7 +1448,7 @@ void postTrans(bContext *C, TransInfo *t)
else if (t->spacetype == SPACE_VIEW3D) {
View3D *v3d = t->sa->spacedata.first;
/* restore manipulator */
- if (t->flag & T_MODAL) {
+ if ((t->flag & T_MODAL) && !(t->flag & T_USE_WIDGET)) {
v3d->twtype = t->twtype;
}
}
diff --git a/source/blender/editors/transform/transform_manipulator.c b/source/blender/editors/transform/transform_manipulator.c
index 2168d83..78425c3 100644
--- a/source/blender/editors/transform/transform_manipulator.c
+++ b/source/blender/editors/transform/transform_manipulator.c
@@ -1690,23 +1690,8 @@ void WIDGET_manipulator_draw(wmWidget *UNUSED(widget), const bContext *C, float
}
}
-static void manipulator_unregister(wmWidgetGroup *wgroup, ManipulatorGroup *manipulator)
-{
- WM_widget_unregister(wgroup, manipulator->translate_x);
- WM_widget_unregister(wgroup, manipulator->translate_y);
- WM_widget_unregister(wgroup, manipulator->translate_z);
-
- WM_widget_unregister(wgroup, manipulator->rotate_x);
- WM_widget_unregister(wgroup, manipulator->rotate_y);
- WM_widget_unregister(wgroup, manipulator->rotate_z);
-}
-
void WIDGETGROUP_manipulator_update(struct wmWidgetGroup *wgroup, const struct bContext *C)
{
- float color_green[4] = {0.0f, 1.0f, 0.0f, 1.0f};
- float color_red[4] = {1.0f, 0.0f, 0.0f, 1.0f};
- float color_blue[4] = {0.0f, 0.0f, 1.0f, 1.0f};
-
ScrArea *sa = CTX_wm_area(C);
ARegion *ar = CTX_wm_region(C);
Scene *scene = CTX_data_scene(C);
@@ -1715,9 +1700,7 @@ void WIDGETGROUP_manipulator_update(struct wmWidgetGroup *wgroup, const struct b
ManipulatorGroup *manipulator = WM_widgetgroup_customdata(wgroup);
int totsel;
-
- manipulator_unregister(wgroup, manipulator);
-
+
v3d->twflag &= ~V3D_DRAW_MANIPULATOR;
totsel = calc_manipulator_stats(C);
@@ -1762,54 +1745,46 @@ void WIDGETGROUP_manipulator_update(struct wmWidgetGroup *wgroup, const struct b
if (v3d->twtype & V3D_MANIP_TRANSLATE) {
/* should be added according to the order of axis */
+ copy_v3_v3(manipulator->translate_x->origin, rv3d->twmat[3]);
+ WIDGET_arrow_set_direction(manipulator->translate_x, rv3d->twmat[0]);
- if (drawflags & MAN_TRANS_X) {
- WM_widget_register(wgroup, manipulator->translate_x);
- copy_v3_v3(manipulator->translate_x->origin, rv3d->twmat[3]);
- WIDGET_arrow_set_direction(manipulator->translate_x, rv3d->twmat[0]);
- WIDGET_arrow_set_color(manipulator->translate_x, color_red);
- }
-
- if (drawflags & MAN_TRANS_Y) {
- WM_widget_register(wgroup, manipulator->translate_y);
- copy_v3_v3(manipulator->translate_y->origin, rv3d->twmat[3]);
- WIDGET_arrow_set_direction(manipulator->translate_y, rv3d->twmat[1]);
- WIDGET_arrow_set_color(manipulator->translate_y, color_green);
- }
-
- if (drawflags & MAN_TRANS_Z) {
- WM_widget_register(wgroup, manipulator->translate_z);
- copy_v3_v3(manipulator->translate_z->origin, rv3d->twmat[3]);
- WIDGET_arrow_set_direction(manipulator->translate_z, rv3d->twmat[2]);
- WIDGET_arrow_set_color(manipulator->translate_z, color_blue);
- }
+ copy_v3_v3(manipulator->translate_y->origin, rv3d->twmat[3]);
+ WIDGET_arrow_set_direction(manipulator->translate_y, rv3d->twmat[1]);
+
+ copy_v3_v3(manipulator->translate_z->origin, rv3d->twmat[3]);
+ WIDGET_arrow_set_direction(manipulator->translate_z, rv3d->twmat[2]);
+
+ manipulator->translate_x->flag &= ~WM_WIDGET_SKIP_DRAW;
+ manipulator->translate_y->flag &= ~WM_WIDGET_SKIP_DRAW;
+ manipulator->translate_z->flag &= ~WM_WIDGET_SKIP_DRAW;
+ }
+ else {
+ manipulator->translate_x->flag |= WM_WIDGET_SKIP_DRAW;
+ manipulator->translate_y->flag |= WM_WIDGET_SKIP_DRAW;
+ manipulator->translate_z->flag |= WM_WIDGET_SKIP_DRAW;
}
if (v3d->twtype & V3D_MANIP_ROTATE) {
/* should be added according to the order of axis */
- if (drawflags & MAN_ROT_X) {
- WM_widget_register(wgroup, manipulator->rotate_x);
- copy_v3_v3(manipulator->rotate_x->origin, rv3d->twmat[3]);
- WIDGET_dial_set_direction(manipulator->rotate_x, rv3d->twmat[0]);
- WIDGET_dial_set_color(manipulator->rotate_x, color_red);
- }
+ copy_v3_v3(manipulator->rotate_x->origin, rv3d->twmat[3]);
+ WIDGET_dial_set_direction(manipulator->rotate_x, rv3d->twmat[0]);
- if (drawflags & MAN_ROT_Y) {
- WM_widget_register(wgroup, manipulator->rotate_y);
- copy_v3_v3(manipulator->rotate_y->origin, rv3d->twmat[3]);
- WIDGET_dial_set_direction(manipulator->rotate_y, rv3d->twmat[1]);
- WIDGET_dial_set_color(manipulator->rotate_y, color_green);
- }
+ copy_v3_v3(manipulator->rotate_y->origin, rv3d->twmat[3]);
+ WIDGET_dial_set_direction(manipulator->rotate_y, rv3d->twmat[1]);
- if (drawflags & MAN_ROT_Z) {
- WM_widget_register(wgroup, manipulator->rotate_z);
- copy_v3_v3(manipulator->rotate_z->origin, rv3d->twmat[3]);
- WIDGET_dial_set_direction(manipulator->rotate_z, rv3d->twmat[2]);
- WIDGET_dial_set_color(manipulator->rotate_z, color_blue);
- }
- }
+ copy_v3_v3(manipulator->rotate_z->origin, rv3d->twmat[3]);
+ WIDGET_dial_set_direction(manipulator->rotate_z, rv3d->twmat[2]);
+ manipulator->rotate_x->flag &= ~WM_WIDGET_SKIP_DRAW;
+ manipulator->rotate_y->flag &= ~WM_WIDGET_SKIP_DRAW;
+ manipulator->rotate_z->flag &= ~WM_WIDGET_SKIP_DRAW;
+ }
+ else {
+ manipulator->rotate_x->flag |= WM_WIDGET_SKIP_DRAW;
+ manipulator->rotate_y->flag |= WM_WIDGET_SKIP_DRAW;
+ manipulator->rotate_z->flag |= WM_WIDGET_SKIP_DRAW;
+ }
}
@@ -2010,6 +1985,8 @@ int WIDGET_manipulator_handler_trans(bContext *C, const struct wmEvent *event, w
RNA_boolean_set(ptr, "release_confirm", true);
RNA_enum_set(ptr, "constraint_orientation", v3d->twmode);
RNA_boolean_set_array(ptr, "constraint_axis", constraint_axis);
+ RNA_boolean_set(ptr, "use_widget_input", true);
+
WM_ope
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list