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.
This commit is contained in:
parent
c5a946b2b8
commit
d61f8a5a22
Notes:
blender-bot
2024-01-31 11:35:08 +01:00
Referenced by issue #40094, Faulty resizing behavior of frame node inside material node setup
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue