diff options
author | Lukas Toenne <lukas.toenne@googlemail.com> | 2012-05-22 18:13:33 +0400 |
---|---|---|
committer | Lukas Toenne <lukas.toenne@googlemail.com> | 2012-05-22 18:13:33 +0400 |
commit | 53b01d90023a850b17ded5deb9cace354c8e298a (patch) | |
tree | ab8ce43ddf8046dc54e2cacc5ff46cbc5806910b /source/blender/blenkernel | |
parent | 85923aff288da072750447b44e492ebe5c59bcce (diff) |
A number of new features for the node editor in general and the Frame node in particular.
For an detailed user-level description of new features see the following blogpost:
http://code.blender.org/index.php/2012/05/node-editing-tweaks/
TL;DR:
* Frame node gets more usable bounding-box behavior
* Node resizing has helpful mouse cursor indicators and works on all borders
* Node selection/active colors are themeable independently
* Customizable background colors for nodes (useful for frames visual
distinction).
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r-- | source/blender/blenkernel/BKE_blender.h | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/BKE_node.h | 9 | ||||
-rw-r--r-- | source/blender/blenkernel/BKE_screen.h | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/node.c | 42 |
4 files changed, 37 insertions, 18 deletions
diff --git a/source/blender/blenkernel/BKE_blender.h b/source/blender/blenkernel/BKE_blender.h index 7cc5d16dcc1..596c4a7d7b8 100644 --- a/source/blender/blenkernel/BKE_blender.h +++ b/source/blender/blenkernel/BKE_blender.h @@ -42,7 +42,7 @@ extern "C" { * and keep comment above the defines. * Use STRINGIFY() rather than defining with quotes */ #define BLENDER_VERSION 263 -#define BLENDER_SUBVERSION 5 +#define BLENDER_SUBVERSION 6 #define BLENDER_MINVERSION 250 #define BLENDER_MINSUBVERSION 0 diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h index cb899dcc902..2632a982a01 100644 --- a/source/blender/blenkernel/BKE_node.h +++ b/source/blender/blenkernel/BKE_node.h @@ -248,6 +248,12 @@ typedef struct bNodeType { #define NODE_OLD_SHADING 1 #define NODE_NEW_SHADING 2 +/* node resize directions */ +#define NODE_RESIZE_TOP 1 +#define NODE_RESIZE_BOTTOM 2 +#define NODE_RESIZE_RIGHT 4 +#define NODE_RESIZE_LEFT 8 + /* enum values for input/output */ #define SOCK_IN 1 #define SOCK_OUT 2 @@ -348,7 +354,8 @@ void nodeRemLink(struct bNodeTree *ntree, struct bNodeLink *link); void nodeRemSocketLinks(struct bNodeTree *ntree, struct bNodeSocket *sock); void nodeInternalRelink(struct bNodeTree *ntree, struct bNode *node); -void nodeSpaceCoords(struct bNode *node, float *locx, float *locy); +void nodeToView(struct bNode *node, float x, float y, float *rx, float *ry); +void nodeFromView(struct bNode *node, float x, float y, float *rx, float *ry); void nodeAttachNode(struct bNode *node, struct bNode *parent); void nodeDetachNode(struct bNode *node); diff --git a/source/blender/blenkernel/BKE_screen.h b/source/blender/blenkernel/BKE_screen.h index 7223008afad..e99fc413ca1 100644 --- a/source/blender/blenkernel/BKE_screen.h +++ b/source/blender/blenkernel/BKE_screen.h @@ -153,6 +153,8 @@ typedef struct ARegionType { int keymapflag; /* return without drawing. lock is set by region definition, and copied to do_lock by render. can become flag */ short do_lock, lock; + /* call cursor function on each move event */ + short event_cursor; } ARegionType; /* panel types */ diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c index fc62d69d002..445105d254a 100644 --- a/source/blender/blenkernel/intern/node.c +++ b/source/blender/blenkernel/intern/node.c @@ -336,6 +336,7 @@ bNode *nodeAddNode(bNodeTree *ntree, struct bNodeTemplate *ntemp) node->width= ntype->width; node->miniwidth= 42.0f; node->height= ntype->height; + node->color[0] = node->color[1] = node->color[2] = 0.608; /* default theme color */ node_add_sockets_from_type(ntree, node, ntype); @@ -591,40 +592,49 @@ void nodeInternalRelink(bNodeTree *ntree, bNode *node) BLI_freelistN(&intlinks); } -/* transforms node location to area coords */ -void nodeSpaceCoords(bNode *node, float *locx, float *locy) +void nodeToView(bNode *node, float x, float y, float *rx, float *ry) { if (node->parent) { - nodeSpaceCoords(node->parent, locx, locy); - *locx += node->locx; - *locy += node->locy; + nodeToView(node->parent, x + node->locx, y + node->locy, rx, ry); } else { - *locx = node->locx; - *locy = node->locy; + *rx = x + node->locx; + *ry = y + node->locy; + } +} + +void nodeFromView(bNode *node, float x, float y, float *rx, float *ry) +{ + if (node->parent) { + nodeFromView(node->parent, x, y, rx, ry); + *rx -= node->locx; + *ry -= node->locy; + } + else { + *rx = x - node->locx; + *ry = y - node->locy; } } void nodeAttachNode(bNode *node, bNode *parent) { - float parentx, parenty; + float locx, locy; + nodeToView(node, 0.0f, 0.0f, &locx, &locy); node->parent = parent; /* transform to parent space */ - nodeSpaceCoords(parent, &parentx, &parenty); - node->locx -= parentx; - node->locy -= parenty; + nodeFromView(parent, locx, locy, &node->locx, &node->locy); } void nodeDetachNode(struct bNode *node) { - float parentx, parenty; + float locx, locy; if (node->parent) { - /* transform to "global" (area) space */ - nodeSpaceCoords(node->parent, &parentx, &parenty); - node->locx += parentx; - node->locy += parenty; + /* transform to view space */ + nodeToView(node, 0.0f, 0.0f, &locx, &locy); + node->locx = locx; + node->locy = locy; node->parent = NULL; } } |