[Bf-blender-cvs] [e436201] wiggly-widgets: Transform Manipulator: Draw planar widgets while tweaking (with ghost widget)
Julian Eisel
noreply at git.blender.org
Mon Feb 29 02:33:04 CET 2016
Commit: e436201a503d28d2c300ec13be549f7bdf4d210f
Author: Julian Eisel
Date: Mon Feb 29 02:28:09 2016 +0100
Branches: wiggly-widgets
https://developer.blender.org/rBe436201a503d28d2c300ec13be549f7bdf4d210f
Transform Manipulator: Draw planar widgets while tweaking (with ghost widget)
===================================================================
M source/blender/windowmanager/widgets/intern/widget_library/primitive_widget.c
===================================================================
diff --git a/source/blender/windowmanager/widgets/intern/widget_library/primitive_widget.c b/source/blender/windowmanager/widgets/intern/widget_library/primitive_widget.c
index 08060b1..50131dc 100644
--- a/source/blender/windowmanager/widgets/intern/widget_library/primitive_widget.c
+++ b/source/blender/windowmanager/widgets/intern/widget_library/primitive_widget.c
@@ -44,11 +44,15 @@
#include "MEM_guardedalloc.h"
+#include "WM_api.h"
+#include "WM_types.h"
+
/* own includes */
#include "WM_widget_types.h"
#include "WM_widget_library.h"
#include "wm_widget_wmapi.h"
#include "wm_widget_intern.h"
+#include "widget_library_intern.h"
/* PrimitiveWidget->flag */
@@ -132,6 +136,28 @@ static void widget_primitive_draw_intern(PrimitiveWidget *prim, const bool UNUSE
glDisable(GL_BLEND);
glPopMatrix();
+
+ if (prim->widget.interaction_data) {
+ WidgetInteraction *inter = prim->widget.interaction_data;
+
+ copy_v4_fl(col_inner, 0.5f);
+ copy_v3_fl(col_outer, 0.5f);
+ col_outer[3] = 0.8f;
+
+ copy_m4_m3(mat, rot);
+ copy_v3_v3(mat[3], inter->init_origin);
+ mul_mat3_m4_fl(mat, inter->init_scale);
+
+ glPushMatrix();
+ glMultMatrixf(mat);
+
+ glEnable(GL_BLEND);
+ glTranslate3fv(prim->widget.offset);
+ widget_primitive_draw_geom(col_inner, col_outer, prim->style);
+ glDisable(GL_BLEND);
+
+ glPopMatrix();
+ }
}
static void widget_primitive_render_3d_intersect(const bContext *UNUSED(C), wmWidget *widget, int selectionbase)
@@ -145,6 +171,18 @@ static void widget_primitive_draw(const bContext *UNUSED(C), wmWidget *widget)
widget_primitive_draw_intern((PrimitiveWidget *)widget, false, (widget->flag & WM_WIDGET_HIGHLIGHT));
}
+static int widget_primitive_invoke(bContext *UNUSED(C), const wmEvent *UNUSED(event), wmWidget *widget)
+{
+ WidgetInteraction *inter = MEM_callocN(sizeof(WidgetInteraction), __func__);
+
+ copy_v3_v3(inter->init_origin, widget->origin);
+ inter->init_scale = widget->scale;
+
+ widget->interaction_data = inter;
+
+ return OPERATOR_RUNNING_MODAL;
+}
+
/* -------------------------------------------------------------------- */
/** \name Primitive Widget API
@@ -157,9 +195,10 @@ wmWidget *WIDGET_primitive_new(wmWidgetGroup *wgroup, const char *name, const in
const float dir_default[3] = {0.0f, 0.0f, 1.0f};
prim->widget.draw = widget_primitive_draw;
+ prim->widget.invoke = widget_primitive_invoke;
prim->widget.intersect = NULL;
prim->widget.render_3d_intersection = widget_primitive_render_3d_intersect;
- prim->widget.flag |= WM_WIDGET_SCALE_3D;
+ prim->widget.flag |= (WM_WIDGET_DRAW_ACTIVE | WM_WIDGET_SCALE_3D);
prim->style = style;
/* defaults */
More information about the Bf-blender-cvs
mailing list