[Bf-blender-cvs] [2944438e9a2] blender2.8: 3D View: manipulator from custom-manipulators branch

Campbell Barton noreply at git.blender.org
Fri Apr 7 13:25:29 CEST 2017


Commit: 2944438e9a276e48d7eabb5bb88ecec9b2f1e7dc
Author: Campbell Barton
Date:   Fri Apr 7 00:35:57 2017 +1000
Branches: blender2.8
https://developer.blender.org/rB2944438e9a276e48d7eabb5bb88ecec9b2f1e7dc

3D View: manipulator from custom-manipulators branch

Original code from @Severin with changes from @dfelinto & @hypersomniac.

This doesn't cause many functional changes
besides using new transform manipulators.

Submitted as D2604

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

M	source/blender/draw/CMakeLists.txt
M	source/blender/draw/intern/draw_view.c
M	source/blender/editors/include/ED_transform.h
M	source/blender/editors/physics/physics_ops.c
M	source/blender/editors/space_view3d/space_view3d.c
M	source/blender/editors/space_view3d/view3d_draw.c
M	source/blender/editors/space_view3d/view3d_draw_legacy.c
M	source/blender/editors/space_view3d/view3d_edit.c
M	source/blender/editors/space_view3d/view3d_intern.h
M	source/blender/editors/space_view3d/view3d_ops.c
M	source/blender/editors/transform/transform.c
M	source/blender/editors/transform/transform.h
M	source/blender/editors/transform/transform_constraints.c
M	source/blender/editors/transform/transform_generics.c
M	source/blender/editors/transform/transform_manipulator.c
M	source/blender/windowmanager/manipulators/intern/manipulator_library/arrow_manipulator.c
M	source/blender/windowmanager/manipulators/intern/manipulator_library/dial_manipulator.c
M	source/blender/windowmanager/manipulators/intern/wm_manipulator.c
M	source/blender/windowmanager/manipulators/intern/wm_manipulator_intern.h

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

diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt
index cf94fccd4e3..e921a65bfe8 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -43,6 +43,7 @@ set(INC
 	../editors/space_view3d
 	../render/extern/include
 	../render/intern/include
+	../windowmanager
 
 	../../../intern/glew-mx
 	../../../intern/guardedalloc
diff --git a/source/blender/draw/intern/draw_view.c b/source/blender/draw/intern/draw_view.c
index eba72fac958..a0f0fb1a9ee 100644
--- a/source/blender/draw/intern/draw_view.c
+++ b/source/blender/draw/intern/draw_view.c
@@ -41,6 +41,9 @@
 
 #include "UI_resources.h"
 
+#include "WM_api.h"
+#include "WM_types.h"
+
 #include "BKE_global.h"
 #include "BKE_object.h"
 #include "BKE_paint.h"
@@ -699,5 +702,13 @@ void DRW_draw_manipulator(void)
 	const bContext *C = DRW_get_context();
 	View3D *v3d = CTX_wm_view3d(C);
 	v3d->zbuf = false;
-	BIF_draw_manipulator(C);
+	ARegion *ar = CTX_wm_region(C);
+
+
+	/* TODO, only draws 3D manipulators right now, need to see how 2D drawing will work in new viewport */
+
+	/* draw depth culled manipulators - manipulators need to be updated *after* view matrix was set up */
+	/* TODO depth culling manipulators is not yet supported, just drawing _3D here, should
+	 * later become _IN_SCENE (and draw _3D separate) */
+	WM_manipulatormap_draw(ar->manipulator_map, C, WM_MANIPULATORMAP_DRAWSTEP_3D);
 }
diff --git a/source/blender/editors/include/ED_transform.h b/source/blender/editors/include/ED_transform.h
index 898eecd3e42..376ae8ca567 100644
--- a/source/blender/editors/include/ED_transform.h
+++ b/source/blender/editors/include/ED_transform.h
@@ -112,6 +112,8 @@ struct TransInfo;
 struct BaseLegacy;
 struct Scene;
 struct Object;
+struct wmManipulatorGroup;
+struct wmManipulatorGroupType;
 struct wmOperator;
 
 /* UNUSED */
@@ -152,10 +154,17 @@ int BIF_countTransformOrientation(const struct bContext *C);
 
 void Transform_Properties(struct wmOperatorType *ot, int flags);
 
-/* view3d manipulators */
+/* transform manipulators */
+
+void TRANSFORM_WGT_manipulator(struct wmManipulatorGroupType *wgt);
+
+void TRANSFORM_WGT_object(struct wmManipulatorGroupType *wgt);
+
+bool WIDGETGROUP_manipulator2d_poll(const struct bContext *C, struct wmManipulatorGroupType *wgrouptype);
+void WIDGETGROUP_manipulator2d_init(const struct bContext *C, struct wmManipulatorGroup *wgroup);
+void WIDGETGROUP_manipulator2d_refresh(const struct bContext *C, struct wmManipulatorGroup *wgroup);
+void WIDGETGROUP_manipulator2d_draw_prepare(const struct bContext *C, struct wmManipulatorGroup *wgroup);
 
-int BIF_do_manipulator(struct bContext *C, const struct wmEvent *event, struct wmOperator *op);
-void BIF_draw_manipulator(const struct bContext *C);
 
 /* Snapping */
 
diff --git a/source/blender/editors/physics/physics_ops.c b/source/blender/editors/physics/physics_ops.c
index b1d708ebc07..758ef43590e 100644
--- a/source/blender/editors/physics/physics_ops.c
+++ b/source/blender/editors/physics/physics_ops.c
@@ -137,23 +137,6 @@ static void keymap_particle(wmKeyConfig *keyconf)
 	kmi = WM_keymap_add_item(keymap, "PARTICLE_OT_hide", HKEY, KM_PRESS, KM_SHIFT, 0);
 	RNA_boolean_set(kmi->ptr, "unselected", true);
 
-	/* Shift+LMB behavior first, so it has priority over KM_ANY item below. */
-	kmi = WM_keymap_add_item(keymap, "VIEW3D_OT_manipulator", LEFTMOUSE, KM_PRESS, KM_SHIFT, 0);
-	RNA_boolean_set(kmi->ptr, "release_confirm", true);
-	RNA_boolean_set(kmi->ptr, "use_planar_constraint", true);
-	RNA_boolean_set(kmi->ptr, "use_accurate", false);
-
-	kmi = WM_keymap_add_item(keymap, "VIEW3D_OT_manipulator", LEFTMOUSE, KM_PRESS, KM_SHIFT, 0);
-	RNA_boolean_set(kmi->ptr, "release_confirm", true);
-	RNA_boolean_set(kmi->ptr, "use_planar_constraint", false);
-	RNA_boolean_set(kmi->ptr, "use_accurate", true);
-
-	/* Using KM_ANY here to allow holding modifiers before starting to transform. */
-	kmi = WM_keymap_add_item(keymap, "VIEW3D_OT_manipulator", LEFTMOUSE, KM_PRESS, KM_ANY, 0);
-	RNA_boolean_set(kmi->ptr, "release_confirm", true);
-	RNA_boolean_set(kmi->ptr, "use_planar_constraint", false);
-	RNA_boolean_set(kmi->ptr, "use_accurate", false);
-
 	WM_keymap_add_item(keymap, "PARTICLE_OT_brush_edit", LEFTMOUSE, KM_PRESS, 0, 0);
 	WM_keymap_add_item(keymap, "PARTICLE_OT_brush_edit", LEFTMOUSE, KM_PRESS, KM_SHIFT, 0);
 
diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c
index 62bcb771226..af25c9de781 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -54,6 +54,7 @@
 
 #include "ED_space_api.h"
 #include "ED_screen.h"
+#include "ED_transform.h"
 
 #include "GPU_compositing.h"
 #include "GPU_framebuffer.h"
@@ -341,7 +342,7 @@ static SpaceLink *view3d_new(const bContext *C)
 	v3d->near = 0.01f;
 	v3d->far = 1000.0f;
 
-	v3d->twflag |= U.tw_flag & V3D_USE_MANIPULATOR;
+	v3d->twflag |= U.manipulator_flag & V3D_USE_MANIPULATOR;
 	v3d->twtype = V3D_MANIP_TRANSLATE;
 	v3d->around = V3D_AROUND_CENTER_MEAN;
 	
@@ -488,6 +489,13 @@ static void view3d_main_region_init(wmWindowManager *wm, ARegion *ar)
 	ListBase *lb;
 	wmKeyMap *keymap;
 
+	if (!ar->manipulator_map) {
+		ar->manipulator_map = WM_manipulatormap_new_from_type(&(const struct wmManipulatorMapType_Params) {
+		        "View3D", SPACE_VIEW3D, RGN_TYPE_WINDOW});
+	}
+
+	WM_manipulatormap_add_handlers(ar, ar->manipulator_map);
+
 	/* object ops. */
 	
 	/* important to be before Pose keymap since they can both be enabled at once */
@@ -719,6 +727,16 @@ static void view3d_dropboxes(void)
 	WM_dropbox_add(lb, "OBJECT_OT_group_instance_add", view3d_group_drop_poll, view3d_group_drop_copy);	
 }
 
+static void view3d_widgets(void)
+{
+	const struct wmManipulatorMapType_Params wmap_params = {
+		.idname = "View3D",
+		.spaceid = SPACE_VIEW3D, .regionid = RGN_TYPE_WINDOW,
+	};
+	wmManipulatorMapType *wmaptype = WM_manipulatormaptype_ensure(&wmap_params);
+
+	WM_manipulatorgrouptype_append(wmaptype, TRANSFORM_WGT_manipulator);
+}
 
 
 /* type callback, not region itself */
@@ -815,7 +833,9 @@ static void view3d_main_region_listener(bScreen *sc, ScrArea *sa, ARegion *ar, w
 {
 	Scene *scene = sc->scene;
 	View3D *v3d = sa->spacedata.first;
-	
+	RegionView3D *rv3d = ar->regiondata;
+	wmManipulatorMap *mmap = ar->manipulator_map;
+
 	/* context changes */
 	switch (wmn->category) {
 		case NC_ANIMATION:
@@ -841,6 +861,7 @@ static void view3d_main_region_listener(bScreen *sc, ScrArea *sa, ARegion *ar, w
 					if (wmn->reference)
 						view3d_recalc_used_layers(ar, wmn, wmn->reference);
 					ED_region_tag_redraw(ar);
+					WM_manipulatormap_tag_refresh(mmap);
 					break;
 				case ND_FRAME:
 				case ND_TRANSFORM:
@@ -852,6 +873,7 @@ static void view3d_main_region_listener(bScreen *sc, ScrArea *sa, ARegion *ar, w
 				case ND_MARKERS:
 				case ND_MODE:
 					ED_region_tag_redraw(ar);
+					WM_manipulatormap_tag_refresh(mmap);
 					break;
 				case ND_WORLD:
 					/* handled by space_view3d_listener() for v3d access */
@@ -859,7 +881,6 @@ static void view3d_main_region_listener(bScreen *sc, ScrArea *sa, ARegion *ar, w
 				case ND_DRAW_RENDER_VIEWPORT:
 				{
 					if (v3d->camera && (scene == wmn->reference)) {
-						RegionView3D *rv3d = ar->regiondata;
 						if (rv3d->persp == RV3D_CAMOB) {
 							ED_region_tag_redraw(ar);
 						}
@@ -884,6 +905,7 @@ static void view3d_main_region_listener(bScreen *sc, ScrArea *sa, ARegion *ar, w
 				case ND_POINTCACHE:
 				case ND_LOD:
 					ED_region_tag_redraw(ar);
+					WM_manipulatormap_tag_refresh(mmap);
 					break;
 			}
 			switch (wmn->action) {
@@ -896,6 +918,8 @@ static void view3d_main_region_listener(bScreen *sc, ScrArea *sa, ARegion *ar, w
 			switch (wmn->data) {
 				case ND_SELECT:
 				{
+					WM_manipulatormap_tag_refresh(mmap);
+
 					if (scene->obedit) {
 						Object *ob = scene->obedit;
 						if (ob->type == OB_MESH) {
@@ -920,7 +944,6 @@ static void view3d_main_region_listener(bScreen *sc, ScrArea *sa, ARegion *ar, w
 				case ND_DRAW_RENDER_VIEWPORT:
 				{
 					if (v3d->camera && (v3d->camera->data == wmn->reference)) {
-						RegionView3D *rv3d = ar->regiondata;
 						if (rv3d->persp == RV3D_CAMOB) {
 							ED_region_tag_redraw(ar);
 						}
@@ -979,6 +1002,7 @@ static void view3d_main_region_listener(bScreen *sc, ScrArea *sa, ARegion *ar, w
 					break;
 				case ND_LIGHTING_DRAW:
 					ED_region_tag_redraw(ar);
+					WM_manipulatormap_tag_refresh(mmap);
 					break;
 			}
 			break;
@@ -998,10 +1022,10 @@ static void view3d_main_region_listener(bScreen *sc, ScrArea *sa, ARegion *ar, w
 		case NC_SPACE:
 			if (wmn->data == ND_SPACE_VIEW3D) {
 				if (wmn->subtype == NS_VIEW3D_GPU) {
-					RegionView3D *rv3d = ar->regiondata;
 					rv3d->rflag |= RV3D_GPULIGHT_UPDATE;
 				}
 				ED_region_tag_redraw(ar);
+				WM_manipulatormap_tag_refresh(mmap);
 			}
 			break;
 		case NC_ID:
@@ -1023,6 +1047,7 @@ static void view3d_main_region_listener(bScreen *sc, ScrArea *sa, ARegion *ar, w
 						bScreen *sc_ref = wmn->reference;
 						view3d_recalc_used_layers(ar, wmn, sc_ref->scene);
 					}
+					WM_manipulatormap_tag_refresh(mmap);
 					ED_region_tag_redraw(ar);
 					break;
 			}
@@ -1393,6 +1418,7 @@ void ED_spacetype_view3d(void)
 	st->operatortypes = view3d_operatortypes;
 	st->keymap = view3d_keymap;
 	st->dropboxes = view3d_dropboxes;
+	st->manipulators = view3d_widgets;
 	st->context = view3d_context;
 	st->id_remap = view3d_id_remap;
 
diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c
index e98cff85d0d..a3bdc09143f 100644
--- a/source/blender/editors/space_view3d/view3d_draw.c
+++ b/source/blender/editors/space_view3d/view3d_draw.c
@@ -84,6 +84,7 @@
 #include "RE_engine.h"
 
 #include "WM_api.h"
+#include "WM_types.h"
 
 #include "view3d_intern.h"  /* own include */
 
@@ -2211,12 +2212,18 @@ static void view3d_draw_reference_images(const bContext *UNUSED(C))
 
 /**
 * 3D manipulators
-*/
-static void view3d_draw_manipulator(const bContext *C)
+ */
+static void view3d_draw_manipulators(const bContext *C, const ARegion *ar)
 {
 	View3D *v3d = CTX_wm_view

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list