[Bf-blender-cvs] [5a94e19] temp_widgets_update_tagging: Initial implementation of a tagging system for widget updates

Julian Eisel noreply at git.blender.org
Sat Mar 5 23:14:07 CET 2016


Commit: 5a94e1984e275c05e100eb5416fa59c1ac092182
Author: Julian Eisel
Date:   Sat Mar 5 23:05:04 2016 +0100
Branches: temp_widgets_update_tagging
https://developer.blender.org/rB5a94e1984e275c05e100eb5416fa59c1ac092182

Initial implementation of a tagging system for widget updates

Instead of recreating all widgets on (almost) every redraw, we just recreate them now if WM_widgetmap_tag_recreate was called before.
Since some widgets still have some data that needs to be updated before drawing, an update callback was added to widget groups for doing this.

Note: This branch a bit unstable now, basically all manipulators except of the transform manipulator are broken now.

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

M	source/blender/editors/armature/pose_select.c
M	source/blender/editors/include/ED_transform.h
M	source/blender/editors/space_graph/space_graph.c
M	source/blender/editors/space_image/space_image.c
M	source/blender/editors/space_node/node_draw.c
M	source/blender/editors/space_sequencer/sequencer_draw.c
M	source/blender/editors/space_sequencer/space_sequencer.c
M	source/blender/editors/space_view3d/space_view3d.c
M	source/blender/editors/space_view3d/view3d_draw.c
M	source/blender/editors/transform/transform_manipulator.c
M	source/blender/makesdna/DNA_widget_types.h
M	source/blender/windowmanager/widgets/WM_widget_api.h
M	source/blender/windowmanager/widgets/WM_widget_types.h
M	source/blender/windowmanager/widgets/intern/wm_widget_intern.h
M	source/blender/windowmanager/widgets/intern/wm_widgetgroup.c
M	source/blender/windowmanager/widgets/intern/wm_widgetmap.c

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

diff --git a/source/blender/editors/armature/pose_select.c b/source/blender/editors/armature/pose_select.c
index e12fb3a..21d13c1 100644
--- a/source/blender/editors/armature/pose_select.c
+++ b/source/blender/editors/armature/pose_select.c
@@ -357,6 +357,7 @@ static int pose_de_select_all_exec(bContext *C, wmOperator *op)
 	Object *ob = ED_object_context(C);
 	bArmature *arm = ob->data;
 	int multipaint = scene->toolsettings->multipaint;
+	bool has_facemap = false;
 
 	if (action == SEL_TOGGLE) {
 		action = CTX_DATA_COUNT(C, selected_pose_bones) ? SEL_DESELECT : SEL_SELECT;
@@ -366,11 +367,15 @@ static int pose_de_select_all_exec(bContext *C, wmOperator *op)
 	CTX_DATA_BEGIN(C, bPoseChannel *, pchan, visible_pose_bones)
 	{
 		pose_do_bone_select(pchan, action);
+		if (pchan->fmap)
+			has_facemap = true;
 	}
 	CTX_DATA_END;
 
-	/* handle widget selection */
-	WM_widgetmap_select_all(C, (wmWidgetMap *)ar->widgetmaps.first, action);
+	/* handle facemap widget selection */
+	if ((ob->mode & OB_MODE_POSE) && has_facemap) {
+		WM_widgetmap_select_all(C, (wmWidgetMap *)ar->widgetmaps.first, action);
+	}
 
 	WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, NULL);
 	
diff --git a/source/blender/editors/include/ED_transform.h b/source/blender/editors/include/ED_transform.h
index 1fd2093..eabcefc 100644
--- a/source/blender/editors/include/ED_transform.h
+++ b/source/blender/editors/include/ED_transform.h
@@ -162,6 +162,7 @@ void Transform_Properties(struct wmOperatorType *ot, int flags);
 
 int WIDGETGROUP_manipulator_poll(const struct bContext *C, struct wmWidgetGroupType *wgrouptype);
 void WIDGETGROUP_manipulator_create(const struct bContext *C, struct wmWidgetGroup *wgroup);
+void WIDGETGROUP_manipulator_update(const struct bContext *C, struct wmWidgetGroup *wgroup);
 
 void WIDGETGROUP_object_manipulator_create(const struct bContext *C, struct wmWidgetGroup *wgroup);
 int WIDGETGROUP_object_manipulator_poll(const struct bContext *C, struct wmWidgetGroupType *wgrouptype);
diff --git a/source/blender/editors/space_graph/space_graph.c b/source/blender/editors/space_graph/space_graph.c
index a2ac466..2d4e4e4 100644
--- a/source/blender/editors/space_graph/space_graph.c
+++ b/source/blender/editors/space_graph/space_graph.c
@@ -352,7 +352,7 @@ static void graph_main_region_draw(const bContext *C, ARegion *ar)
 	
 	/* finally draw any widgets here */
 	WM_widgetmap_widgets_update(C, ar->widgetmaps.first);
-	WM_widgetmap_widgets_draw(C, ar->widgetmaps.first, false, true);
+	WM_widgetmap_widgets_draw(C, ar->widgetmaps.first, false);
 	
 	/* scrollers */
 	// FIXME: args for scrollers depend on the type of data being shown...
diff --git a/source/blender/editors/space_image/space_image.c b/source/blender/editors/space_image/space_image.c
index c9c47f1..0e0cdac 100644
--- a/source/blender/editors/space_image/space_image.c
+++ b/source/blender/editors/space_image/space_image.c
@@ -810,7 +810,7 @@ static void image_main_region_draw(const bContext *C, ARegion *ar)
 	}
 
 	WM_widgetmap_widgets_update(C, ar->widgetmaps.first);
-	WM_widgetmap_widgets_draw(C, ar->widgetmaps.first, false, true);
+	WM_widgetmap_widgets_draw(C, ar->widgetmaps.first, false);
 
 	draw_image_cache(C, ar);
 
diff --git a/source/blender/editors/space_node/node_draw.c b/source/blender/editors/space_node/node_draw.c
index 756ca1e..6934b33 100644
--- a/source/blender/editors/space_node/node_draw.c
+++ b/source/blender/editors/space_node/node_draw.c
@@ -1368,7 +1368,7 @@ void drawnodespace(const bContext *C, ARegion *ar)
 			wmOrtho2_pixelspace(ar->winx, ar->winy);
 
 			WM_widgetmap_widgets_update(C, ar->widgetmaps.first);
-			WM_widgetmap_widgets_draw(C, ar->widgetmaps.first, false, true);
+			WM_widgetmap_widgets_draw(C, ar->widgetmaps.first, false);
 
 			glMatrixMode(GL_PROJECTION);
 			glPopMatrix();
diff --git a/source/blender/editors/space_sequencer/sequencer_draw.c b/source/blender/editors/space_sequencer/sequencer_draw.c
index 2fcd3e8..f328bda 100644
--- a/source/blender/editors/space_sequencer/sequencer_draw.c
+++ b/source/blender/editors/space_sequencer/sequencer_draw.c
@@ -1676,7 +1676,7 @@ void draw_timeline_seq(const bContext *C, ARegion *ar)
 	
 	/* finally draw any widgets here */
 	WM_widgetmap_widgets_update(C, ar->widgetmaps.first);
-	WM_widgetmap_widgets_draw(C, ar->widgetmaps.first, false, true);
+	WM_widgetmap_widgets_draw(C, ar->widgetmaps.first, false);
 
 	/* scrollers */
 	unit = (sseq->flag & SEQ_DRAWFRAMES) ? V2D_UNIT_FRAMES : V2D_UNIT_SECONDS;
diff --git a/source/blender/editors/space_sequencer/space_sequencer.c b/source/blender/editors/space_sequencer/space_sequencer.c
index 6dcb0ec..71386fd 100644
--- a/source/blender/editors/space_sequencer/space_sequencer.c
+++ b/source/blender/editors/space_sequencer/space_sequencer.c
@@ -610,7 +610,7 @@ static void sequencer_preview_region_draw(const bContext *C, ARegion *ar)
 	}
 
 	WM_widgetmap_widgets_update(C, ar->widgetmaps.first);
-	WM_widgetmap_widgets_draw(C, ar->widgetmaps.first, false, true);
+	WM_widgetmap_widgets_draw(C, ar->widgetmaps.first, false);
 }
 
 static void sequencer_preview_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar, wmNotifier *wmn)
diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c
index 660329b..6771b4a 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -767,10 +767,11 @@ static void view3d_widgets(void)
 	        WIDGETGROUP_camera_create,
 	        WM_widgetgroup_keymap_common,
 	        "Camera Widgets");
-	WM_widgetgrouptype_register_ptr(
+	WM_widgetgrouptype_register_ptr_update(
 	        NULL, wmaptype,
 	        WIDGETGROUP_manipulator_poll,
 	        WIDGETGROUP_manipulator_create,
+	        WIDGETGROUP_manipulator_update,
 	        WM_widgetgroup_keymap_common,
 	        "Manipulator Widgets");
 }
@@ -865,7 +866,10 @@ 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;
+	wmWidgetMap *wmap = WM_widgetmap_find(ar, &(const struct wmWidgetMapType_Params) {
+	        "View3D", SPACE_VIEW3D, RGN_TYPE_WINDOW, WM_WIDGETMAPTYPE_3D});
+
 	/* context changes */
 	switch (wmn->category) {
 		case NC_ANIMATION:
@@ -891,6 +895,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_widgetmap_tag_recreate(wmap);
 					break;
 				case ND_FRAME:
 				case ND_TRANSFORM:
@@ -902,6 +907,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_widgetmap_tag_recreate(wmap);
 					break;
 				case ND_WORLD:
 					/* handled by space_view3d_listener() for v3d access */
@@ -909,7 +915,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);
 						}
@@ -933,6 +938,7 @@ static void view3d_main_region_listener(bScreen *sc, ScrArea *sa, ARegion *ar, w
 				case ND_PARTICLE:
 				case ND_LOD:
 					ED_region_tag_redraw(ar);
+					WM_widgetmap_tag_recreate(wmap);
 					break;
 			}
 			switch (wmn->action) {
@@ -960,7 +966,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);
 						}
@@ -1048,10 +1053,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_widgetmap_tag_recreate(wmap);
 			}
 			break;
 		case NC_ID:
diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c
index c3d8e9e..a0f83bd 100644
--- a/source/blender/editors/space_view3d/view3d_draw.c
+++ b/source/blender/editors/space_view3d/view3d_draw.c
@@ -3894,7 +3894,7 @@ static void view3d_main_region_draw_objects(const bContext *C, Scene *scene, Vie
 	 * it might be better to have 2 update calls, too */
 	WM_widgetmap_widgets_update(C, ar->widgetmaps.first);
 	/* draw depth culled widgets */
-	WM_widgetmap_widgets_draw(C, ar->widgetmaps.first, true, false);
+	WM_widgetmap_widgets_draw(C, ar->widgetmaps.first, true);
 
 	/* post process */
 	if (do_compositing) {
@@ -4066,7 +4066,7 @@ void view3d_main_region_draw(const bContext *C, ARegion *ar)
 	if (update_widgets) {
 		WM_widgetmap_widgets_update(C, ar->widgetmaps.first);
 	}
-	WM_widgetmap_widgets_draw(C, ar->widgetmaps.first, false, true);
+	WM_widgetmap_widgets_draw(C, ar->widgetmaps.first, false);
 
 	ED_region_pixelspace(ar);
 	
diff --git a/source/blender/editors/transform/transform_manipulator.c b/source/blender/editors/transform/transform_manipulator.c
index acfa4eb..cc8ece3 100644
--- a/source/blender/editors/transform/transform_manipulator.c
+++ b/source/blender/editors/transform/transform_manipulator.c
@@ -456,7 +456,7 @@ static void protectflag_to_drawflags(short protectflag, short *drawflags)
 }
 
 /* for pose mode */
-static void stats_pose(Scene *scene, Object *ob, RegionView3D *rv3d, bPoseChannel *pchan)
+static void stats_pose(Scene *scene, Object *ob, bPoseChannel *pchan)
 {
 	Bone *bone = pchan->bone;
 
@@ -465,17 +465,9 @@ static void stats_pose(Scene *scene, Object *ob, RegionView3D *rv3d, bPoseChanne
 		BKE_pose_where_is(scene, ob);
 
 		calc_tw_center(scene, pchan->pose_head);
-		protectflag_to_drawflags(pchan->protectflag, &rv3d->twdrawflag);
 	}
 }
 
-/* for editmode*/
-static void stats_editbone(RegionVi

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list