[Bf-blender-cvs] [3a55705] wiggly-widgets: WidgetGroup now handles updating the manipulator properties.

Antony Riakiotakis noreply at git.blender.org
Wed Oct 8 16:56:31 CEST 2014


Commit: 3a5570504435250b0b41b49c9db51a04189d3a95
Author: Antony Riakiotakis
Date:   Wed Oct 8 16:56:15 2014 +0200
Branches: wiggly-widgets
https://developer.blender.org/rB3a5570504435250b0b41b49c9db51a04189d3a95

WidgetGroup now handles updating the manipulator properties.

Still not hooked new arrow widget to the system

===================================================================

M	source/blender/editors/include/ED_transform.h
M	source/blender/editors/include/UI_interface.h
M	source/blender/editors/interface/3d_widgets/arrow_widget.c
M	source/blender/editors/interface/interface_generic_widgets.c
M	source/blender/editors/space_view3d/space_view3d.c
M	source/blender/editors/transform/transform_manipulator.c

===================================================================

diff --git a/source/blender/editors/include/ED_transform.h b/source/blender/editors/include/ED_transform.h
index e91e518..bda6de0 100644
--- a/source/blender/editors/include/ED_transform.h
+++ b/source/blender/editors/include/ED_transform.h
@@ -157,7 +157,7 @@ int WIDGET_manipulator_handler(struct bContext *C, const struct wmEvent *event,
 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 *UNUSED(wgroup), const struct bContext *C);
-
+void WIDGETGROUP_manipulator_update(struct wmWidgetGroup *UNUSED(wgroup), const struct bContext *C);
 /* Snapping */
 
 
diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h
index 29963d3..3ece454 100644
--- a/source/blender/editors/include/UI_interface.h
+++ b/source/blender/editors/include/UI_interface.h
@@ -1010,5 +1010,6 @@ enum {
 };
 
 struct wmWidget *WIDGET_arrow_new(int style, int (*handler)(struct bContext *C, const struct wmEvent *event, struct wmWidget *widget));
+void WIDGET_arrow_set_color(struct wmWidget *widget, float color[4]);
 
 #endif  /* __UI_INTERFACE_H__ */
diff --git a/source/blender/editors/interface/3d_widgets/arrow_widget.c b/source/blender/editors/interface/3d_widgets/arrow_widget.c
index feb9ca8..45358b8 100644
--- a/source/blender/editors/interface/3d_widgets/arrow_widget.c
+++ b/source/blender/editors/interface/3d_widgets/arrow_widget.c
@@ -102,22 +102,22 @@ float _WIDGET_normals_arrow[][3] = {
     {0.000000, 0.000000, -1.000000},
     {0.000000, 0.000000, -1.000000},
     {0.000000, 0.000000, -1.000000},
-    {0.000000, 0.000000, 1.000000},
-    {0.000000, 0.000000, 1.000000},
-    {0.000000, 0.000000, 1.000000},
-    {0.000000, 0.000000, 1.000000},
-    {0.000000, 0.000000, 1.000000},
-    {0.000000, 0.000000, 1.000000},
-    {0.000000, 0.000000, 1.000000},
-    {0.000000, 0.000000, 1.000000},
-    {0.000000, 0.000000, 1.000000},
-    {0.000000, 0.000000, 1.000000},
-    {0.000000, 0.000000, 1.000000},
-    {0.000000, 0.000000, 1.000000},
-    {0.000000, 0.000000, 1.000000},
-    {0.000000, 0.000000, 1.000000},
-    {0.000000, 0.000000, 1.000000},
-    {0.000000, 0.000000, 1.000000},
+    {0.000000, 0.000000, -1.000000},
+    {0.000000, 0.000000, -1.000000},
+    {0.000000, 0.000000, -1.000000},
+    {0.000000, 0.000000, -1.000000},
+    {0.000000, 0.000000, -1.000000},
+    {0.000000, 0.000000, -1.000000},
+    {0.000000, 0.000000, -1.000000},
+    {0.000000, 0.000000, -1.000000},
+    {0.000000, 0.000000, -1.000000},
+    {0.000000, 0.000000, -1.000000},
+    {0.000000, 0.000000, -1.000000},
+    {0.000000, 0.000000, -1.000000},
+    {0.000000, 0.000000, -1.000000},
+    {0.000000, 0.000000, -1.000000},
+    {0.000000, 0.000000, -1.000000},
+    {0.000000, 0.000000, -1.000000},
     {0.000000, 0.930570, 0.366039},
     {-0.356120, 0.859737, 0.366039},
     {-0.658010, 0.658010, 0.366039},
@@ -184,7 +184,7 @@ unsigned short _WIDGET_indices_arrow[] = {
     52, 68, 69,
     54, 70, 71,
     56, 72, 73,
-    20, 21, 22,
+    17, 16, 25,
     39, 40, 48,
     37, 38, 48,
     35, 36, 48,
@@ -230,20 +230,20 @@ unsigned short _WIDGET_indices_arrow[] = {
     53, 52, 69,
     55, 54, 71,
     57, 56, 73,
-    30, 31, 25,
-    20, 17, 18,
-    29, 30, 28,
-    25, 26, 27,
+    17, 20, 18,
+    20, 23, 22,
+    21, 20, 22,
+    20, 19, 18,
+    25, 28, 26,
+    17, 25, 24,
+    31, 30, 29,
+    31, 29, 16,
+    17, 24, 20,
+    28, 27, 26,
+    16, 28, 25,
+    16, 29, 28,
     64, 63, 80,
-    27, 28, 25,
-    20, 22, 23,
-    19, 20, 18,
-    16, 17, 20,
-    25, 31, 16,
-    20, 24, 16,
-    28, 30, 25,
     61, 60, 77,
-    24, 25, 16,
-    20, 23, 24,
+    24, 23, 20,
     59, 58, 75,
 };
diff --git a/source/blender/editors/interface/interface_generic_widgets.c b/source/blender/editors/interface/interface_generic_widgets.c
index bb02325..3c3479e 100644
--- a/source/blender/editors/interface/interface_generic_widgets.c
+++ b/source/blender/editors/interface/interface_generic_widgets.c
@@ -332,13 +332,13 @@ bool WIDGETGROUP_lamp_poll(struct wmWidgetGroup *UNUSED(widget), const struct bC
 
 typedef struct ArrowWidget {
 	wmWidget widget;
-	float color;
 	int style;
 	float origin[3];
 	float direction[3];
+	float color[3];
 } ArrowWidget;
 
-static void widget_draw_intern(bool select, bool highlight)
+static void widget_draw_intern(ArrowWidget *widget, bool select, bool highlight)
 {
 	GLuint buf[3];
 	if (!select)
@@ -378,7 +378,7 @@ static void widget_draw_intern(bool select, bool highlight)
 	if (highlight)
 		glColor3f(1.0, 1.0, 0.0);
 	else 
-		glColor3f(0.0, 1.0, 0.0);
+		glColor3fv(widget->color);
 
 	glEnable(GL_CULL_FACE);
 	glEnable(GL_DEPTH_TEST);
@@ -402,15 +402,15 @@ static void widget_draw_intern(bool select, bool highlight)
 	}
 }
 
-static void widget_arrow_render_3d_intersect(const struct bContext *C, struct wmWidget *widget, int selectionbase)
+static void widget_arrow_render_3d_intersect(const struct bContext *UNUSED(C), struct wmWidget *widget, int selectionbase)
 {
 	GPU_select_load_id(selectionbase);
-	widget_draw_intern(true, false);
+	widget_draw_intern((ArrowWidget *)widget, true, false);
 }
 
-static void widget_arrow_draw(struct wmWidget *widget, const struct bContext *C)
+static void widget_arrow_draw(struct wmWidget *widget, const struct bContext *UNUSED(C))
 {
-	widget_draw_intern(false, (widget->flag & WM_WIDGET_HIGHLIGHT) != 0);
+	widget_draw_intern((ArrowWidget *)widget, false, (widget->flag & WM_WIDGET_HIGHLIGHT) != 0);
 }
 
 
@@ -431,3 +431,9 @@ wmWidget *WIDGET_arrow_new(int style, int (*handler)(struct bContext *C, const s
 	return (wmWidget *)arrow;
 }
 
+void WIDGET_arrow_set_color(struct wmWidget *widget, float color[4])
+{
+	ArrowWidget *arrow = (ArrowWidget *)widget;
+	
+	copy_v4_v4(arrow->color, color);
+}
diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c
index 4ff31ed..ee8c2fa 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -693,9 +693,11 @@ static void view3d_dropboxes(void)
 
 static void view3d_widgets(void)
 {
+	float color_green[4] = {0.0f, 1.0f, 0.0f, 1.0f};
 	wmWidget *widget = NULL;
 	struct wmWidgetMap *wmap = WM_widgetmap_find("View3D", SPACE_VIEW3D, RGN_TYPE_WINDOW, true);
-	struct wmWidgetGroup *wgroup_manipulator = WM_widgetgroup_new(WIDGETGROUP_manipulator_poll, NULL);
+	struct wmWidgetGroup *wgroup_manipulator = WM_widgetgroup_new(WIDGETGROUP_manipulator_poll, 
+	                                                              WIDGETGROUP_manipulator_update);
 	struct wmWidgetGroup *wgroup_light = WM_widgetgroup_new(WIDGETGROUP_lamp_poll, NULL);
 	
 	widget = WM_widget_new(WIDGET_manipulator_draw, 
@@ -705,7 +707,9 @@ static void view3d_widgets(void)
 	
 	WM_widget_register(wgroup_manipulator, widget);
 
-	WM_widget_register(wgroup_manipulator, WIDGET_arrow_new(0, NULL));
+	widget = WIDGET_arrow_new(0, NULL);
+	WIDGET_arrow_set_color(widget, color_green);
+	WM_widget_register(wgroup_manipulator, widget);
 	
 	widget = WM_widget_new(WIDGET_lamp_draw,
 	                       WIDGET_lamp_render_3d_intersect, 
diff --git a/source/blender/editors/transform/transform_manipulator.c b/source/blender/editors/transform/transform_manipulator.c
index 12d9280..660cf42 100644
--- a/source/blender/editors/transform/transform_manipulator.c
+++ b/source/blender/editors/transform/transform_manipulator.c
@@ -1654,11 +1654,44 @@ void WIDGET_manipulator_draw(wmWidget *UNUSED(widget), const bContext *C)
 {
 	ScrArea *sa = CTX_wm_area(C);
 	ARegion *ar = CTX_wm_region(C);
+	View3D *v3d = sa->spacedata.first;
+	RegionView3D *rv3d = ar->regiondata;
+
+	if (v3d->twflag & V3D_DRAW_MANIPULATOR) {
+
+		glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+		glEnable(GL_BLEND);
+		if (v3d->twtype & V3D_MANIP_ROTATE) {
+
+			if (G.debug_value == 3) {
+				if (G.moving & (G_TRANSFORM_OBJ | G_TRANSFORM_EDIT))
+					draw_manipulator_rotate_cyl(v3d, rv3d, drawflags, 0, v3d->twtype, MAN_MOVECOL, true, -1);
+				else
+					draw_manipulator_rotate_cyl(v3d, rv3d, drawflags, 0, v3d->twtype, MAN_RGB, false, -1);
+			}
+			else {
+				draw_manipulator_rotate(v3d, rv3d, drawflags, 0, v3d->twtype, false, -1);
+			}
+		}
+		if (v3d->twtype & V3D_MANIP_SCALE) {
+			draw_manipulator_scale(v3d, rv3d, drawflags, 0, v3d->twtype, MAN_RGB, false, -1);
+		}
+		if (v3d->twtype & V3D_MANIP_TRANSLATE) {
+			draw_manipulator_translate(v3d, rv3d, drawflags, 0, v3d->twtype, MAN_RGB, false, -1);
+		}
+
+		glDisable(GL_BLEND);
+	}
+}
+
+void WIDGETGROUP_manipulator_update(struct wmWidgetGroup *UNUSED(wgroup), const struct bContext *C)
+{
+	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;
 	int totsel;
-	int highlight = 0;
 	
 	v3d->twflag &= ~V3D_DRAW_MANIPULATOR;
 	
@@ -1700,35 +1733,10 @@ void WIDGET_manipulator_draw(wmWidget *UNUSED(widget), const bContext *C)
 		return;
 
 	test_manipulator_axis(C);
-	drawflags = rv3d->twdrawflag;    /* set in calc_manipulator_stats */
-
-	if (v3d->twflag & V3D_DRAW_MANIPULATOR) {
-
-		glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
-		glEnable(GL_BLEND);
-		if (v3d->twtype & V3D_MANIP_ROTATE) {
-
-			if (G.debug_value == 3) {
-				if (G.moving & (G_TRANSFORM_OBJ | G_TRANSFORM_EDIT))
-					draw_manipulator_rotate_cyl(v3d, rv3d, drawflags, highlight, v3d->twtype, MAN_MOVECOL, true, -1);
-				else
-					draw_manipulator_rotate_cyl(v3d, rv3d, drawflags, highlight, v3d->twtype, MAN_RGB, false, -1);
-			}
-			else {
-				draw_manipulator_rotate(v3d, rv3d, drawflags, highlight, v3d->twtype, false, -1);
-			}
-		}
-		if (v3d->twtype & V3D_MANIP_SCALE) {
-			draw_manipulator_scale(v3d, rv3d, drawflags, highlight, v3d->twtype, MAN_RGB, false, -1);
-		}
-		if (v3d->twtype & V3D_MANIP_TRANSLATE) {
-			draw_manipulator_translate(v3d, rv3d, drawflags, highlight, v3d->twtype, MAN_RGB, false, -1);
-		}
-
-		glDisable(GL_BLEND);
-	}
+	drawflags = rv3

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list