[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