diff options
author | Lukas Tönne <lukas.toenne@gmail.com> | 2014-05-09 10:51:37 +0400 |
---|---|---|
committer | Lukas Tönne <lukas.toenne@gmail.com> | 2014-05-09 10:53:48 +0400 |
commit | d61f8a5a22b7658582470cd15ba5f3713e9c3570 (patch) | |
tree | f29a1b1d61b19f728e7771bb5f1cdb99ad5fd040 /source/blender | |
parent | c5a946b2b8baa0330237db724e5af383a9ae3088 (diff) |
Fix T40094 Faulty resizing behavior of frame node.
Frame nodes still have the "hidden" flag like all other nodes, but this
has to be ignored during resizing. width/height range for the frame
nodes must be unlimited for this to work correctly.
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/editors/space_node/drawnode.c | 2 | ||||
-rw-r--r-- | source/blender/editors/space_node/node_edit.c | 43 |
2 files changed, 23 insertions, 22 deletions
diff --git a/source/blender/editors/space_node/drawnode.c b/source/blender/editors/space_node/drawnode.c index 78333de1fe9..8ef1d0bef99 100644 --- a/source/blender/editors/space_node/drawnode.c +++ b/source/blender/editors/space_node/drawnode.c @@ -335,7 +335,7 @@ static void node_draw_frame_prepare(const bContext *UNUSED(C), bNodeTree *ntree, { const float margin = 1.5f * U.widget_unit; NodeFrame *data = (NodeFrame *)node->storage; - int bbinit; + bool bbinit; bNode *tnode; rctf rect, noderect; float xmax, ymax; diff --git a/source/blender/editors/space_node/node_edit.c b/source/blender/editors/space_node/node_edit.c index f9b5b097787..fc0c82faba8 100644 --- a/source/blender/editors/space_node/node_edit.c +++ b/source/blender/editors/space_node/node_edit.c @@ -874,37 +874,38 @@ static int node_resize_modal(bContext *C, wmOperator *op, const wmEvent *event) dy = (my - nsw->mystart) / UI_DPI_FAC; if (node) { - if (node->flag & NODE_HIDDEN) { - float widthmin = 0.0f; - float widthmax = 100.0f; - if (nsw->directions & NODE_RESIZE_RIGHT) { - node->miniwidth = nsw->oldminiwidth + dx; - CLAMP(node->miniwidth, widthmin, widthmax); - } - if (nsw->directions & NODE_RESIZE_LEFT) { - float locmax = nsw->oldlocx + nsw->oldminiwidth; - - node->locx = nsw->oldlocx + dx; - CLAMP(node->locx, locmax - widthmax, locmax - widthmin); - node->miniwidth = locmax - node->locx; - } + /* width can use node->width or node->miniwidth (hidden nodes) */ + float *pwidth; + float oldwidth, widthmin, widthmax; + /* ignore hidden flag for frame nodes */ + bool use_hidden = (node->type != NODE_FRAME); + if (use_hidden && node->flag & NODE_HIDDEN) { + pwidth = &node->miniwidth; + oldwidth = nsw->oldminiwidth; + widthmin = 0.0f; + widthmax = 100.0f; } else { - float widthmin = node->typeinfo->minwidth; - float widthmax = node->typeinfo->maxwidth; + pwidth = &node->width; + oldwidth = nsw->oldwidth; + widthmin = node->typeinfo->minwidth; + widthmax = node->typeinfo->maxwidth; + } + + { if (nsw->directions & NODE_RESIZE_RIGHT) { - node->width = nsw->oldwidth + dx; - CLAMP(node->width, widthmin, widthmax); + *pwidth = oldwidth + dx; + CLAMP(*pwidth, widthmin, widthmax); } if (nsw->directions & NODE_RESIZE_LEFT) { - float locmax = nsw->oldlocx + nsw->oldwidth; + float locmax = nsw->oldlocx + oldwidth; node->locx = nsw->oldlocx + dx; CLAMP(node->locx, locmax - widthmax, locmax - widthmin); - node->width = locmax - node->locx; + *pwidth = locmax - node->locx; } } - + /* height works the other way round ... */ { float heightmin = UI_DPI_FAC * node->typeinfo->minheight; |