[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