[Bf-blender-cvs] [eb5442e] temp_widgets_update_tagging: Port node editor backdrop widget to new update tagging system
Julian Eisel
noreply at git.blender.org
Tue May 17 21:39:44 CEST 2016
Commit: eb5442e83e37dafe294dccefb982f7e9489eceb3
Author: Julian Eisel
Date: Tue May 17 21:30:33 2016 +0200
Branches: temp_widgets_update_tagging
https://developer.blender.org/rBeb5442e83e37dafe294dccefb982f7e9489eceb3
Port node editor backdrop widget to new update tagging system
===================================================================
M source/blender/editors/space_node/space_node.c
===================================================================
diff --git a/source/blender/editors/space_node/space_node.c b/source/blender/editors/space_node/space_node.c
index 21d5f7a..53af8d4 100644
--- a/source/blender/editors/space_node/space_node.c
+++ b/source/blender/editors/space_node/space_node.c
@@ -752,13 +752,25 @@ static void node_header_region_draw(const bContext *C, ARegion *ar)
/* used for header + main region */
static void node_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar, wmNotifier *wmn)
{
+ wmWidgetMap *wmap = WM_widgetmap_find(ar, &(const struct wmWidgetMapType_Params) {
+ "Node_Canvas", SPACE_NODE, RGN_TYPE_WINDOW, 0});
+
/* context changes */
switch (wmn->category) {
case NC_SPACE:
- if (wmn->data == ND_SPACE_NODE)
- ED_region_tag_redraw(ar);
+ switch (wmn->data) {
+ case ND_SPACE_NODE:
+ ED_region_tag_redraw(ar);
+ break;
+ case ND_SPACE_NODE_VIEW:
+ WM_widgetmap_tag_refresh(wmap);
+ break;
+ }
break;
case NC_SCREEN:
+ if (wmn->data == ND_SCREENSET || wmn->action == NA_EDITED) {
+ WM_widgetmap_tag_refresh(wmap);
+ }
switch (wmn->data) {
case ND_SCREENCAST:
case ND_ANIMPLAY:
@@ -767,10 +779,20 @@ static void node_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegi
}
break;
case NC_SCENE:
+ ED_region_tag_redraw(ar);
+ if (wmn->data == ND_RENDER_RESULT) {
+ WM_widgetmap_tag_refresh(wmap);
+ }
+ break;
+ case NC_NODE:
+ ED_region_tag_redraw(ar);
+ if (ELEM(wmn->action, NA_EDITED, NA_SELECTED)) {
+ WM_widgetmap_tag_refresh(wmap);
+ }
+ break;
case NC_MATERIAL:
case NC_TEXTURE:
case NC_WORLD:
- case NC_NODE:
case NC_LINESTYLE:
ED_region_tag_redraw(ar);
break;
@@ -851,37 +873,44 @@ static int WIDGETGROUP_node_transform_poll(const struct bContext *C, struct wmWi
static void WIDGETGROUP_node_transform_init(const struct bContext *C, struct wmWidgetGroup *wgroup)
{
- Image *ima;
- ImBuf *ibuf;
+ wmWidgetWrapper *wwrapper = MEM_mallocN(sizeof(wmWidgetWrapper), __func__);
+ SpaceNode *snode = CTX_wm_space_node(C);
+ PointerRNA nodeptr;
+
+ wwrapper->widget = WIDGET_rect_transform_new(
+ wgroup, "backdrop_cage",
+ WIDGET_RECT_TRANSFORM_STYLE_TRANSLATE | WIDGET_RECT_TRANSFORM_STYLE_SCALE_UNIFORM);
+ wgroup->customdata = wwrapper;
+
+ RNA_pointer_create(snode->id, &RNA_SpaceNodeEditor, snode, &nodeptr);
+
+ WM_widget_set_property(wwrapper->widget, RECT_TRANSFORM_SLOT_OFFSET, &nodeptr, "backdrop_offset");
+ WM_widget_set_property(wwrapper->widget, RECT_TRANSFORM_SLOT_SCALE, &nodeptr, "backdrop_zoom");
+}
+
+static void WIDGETGROUP_node_transform_refresh(const struct bContext *C, struct wmWidgetGroup *wgroup)
+{
+ wmWidget *cage = ((wmWidgetWrapper *)wgroup->customdata)->widget;
+ const ARegion *ar = CTX_wm_region(C);
+ /* center is always at the origin */
+ const float origin[3] = {ar->winx / 2, ar->winy / 2};
+
void *lock;
-
- ima = BKE_image_verify_viewer(IMA_TYPE_COMPOSITE, "Viewer Node");
- ibuf = BKE_image_acquire_ibuf(ima, NULL, &lock);
+ Image *ima = BKE_image_verify_viewer(IMA_TYPE_COMPOSITE, "Viewer Node");
+ ImBuf *ibuf = BKE_image_acquire_ibuf(ima, NULL, &lock);
+
if (ibuf) {
- wmWidget *cage;
- SpaceNode *snode = CTX_wm_space_node(C);
- ARegion *ar = CTX_wm_region(C);
- float origin[3];
- float w, h;
- PointerRNA nodeptr;
-
- /* center is always at the origin */
- origin[0] = ar->winx / 2;
- origin[1] = ar->winy / 2;
-
- w = (ibuf->x > 0) ? ibuf->x : 64.0f;
- h = (ibuf->y > 0) ? ibuf->y : 64.0f;
-
- cage = WIDGET_rect_transform_new(
- wgroup, "backdrop_cage",
- WIDGET_RECT_TRANSFORM_STYLE_TRANSLATE | WIDGET_RECT_TRANSFORM_STYLE_SCALE_UNIFORM);
- RNA_pointer_create(snode->id, &RNA_SpaceNodeEditor, snode, &nodeptr);
-
- WM_widget_set_origin(cage, origin);
+ const float w = (ibuf->x > 0) ? ibuf->x : 64.0f;
+ const float h = (ibuf->y > 0) ? ibuf->y : 64.0f;
+
WIDGET_rect_transform_set_dimensions(cage, w, h);
- WM_widget_set_property(cage, RECT_TRANSFORM_SLOT_OFFSET, &nodeptr, "backdrop_offset");
- WM_widget_set_property(cage, RECT_TRANSFORM_SLOT_SCALE, &nodeptr, "backdrop_zoom");
+ WM_widget_set_origin(cage, origin);
+ WM_widget_set_flag(cage, WM_WIDGET_HIDDEN, false);
}
+ else {
+ WM_widget_set_flag(cage, WM_WIDGET_HIDDEN, true);
+ }
+
BKE_image_release_ibuf(ima, ibuf, lock);
}
@@ -891,10 +920,12 @@ static void node_widgets(void)
wmWidgetMapType *wmaptype = WM_widgetmaptype_ensure(&(const struct wmWidgetMapType_Params) {
"Node_Canvas", SPACE_NODE, RGN_TYPE_WINDOW, 0});
- WM_widgetgrouptype_register_ptr(
+ WM_widgetgrouptype_register_ptr_update(
NULL, wmaptype,
WIDGETGROUP_node_transform_poll,
WIDGETGROUP_node_transform_init,
+ WIDGETGROUP_node_transform_refresh,
+ NULL,
WM_widgetgroup_keymap_common,
"Backdrop Transform Widgets");
}
More information about the Bf-blender-cvs
mailing list