Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2012-11-17 20:11:02 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2012-11-17 20:11:02 +0400
commit469324b049012667a083017afa21538026008734 (patch)
tree5b3b1e12364ea0962e7f3907416dcf390446965b /source/blender
parente2b58126a21df283c8f3ab93bc3c46b57825f69d (diff)
Fix compositing normal node not properly showing vector XYZ values when opening
socket menu, and make the normal animatable.
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/compositor/nodes/COM_NormalNode.cpp11
-rw-r--r--source/blender/editors/interface/interface_layout.c2
-rw-r--r--source/blender/editors/interface/interface_widgets.c8
-rw-r--r--source/blender/editors/space_node/drawnode.c26
-rw-r--r--source/blender/nodes/composite/nodes/node_composite_normal.c2
5 files changed, 23 insertions, 26 deletions
diff --git a/source/blender/compositor/nodes/COM_NormalNode.cpp b/source/blender/compositor/nodes/COM_NormalNode.cpp
index e00e71e50e9..fbfff8386d0 100644
--- a/source/blender/compositor/nodes/COM_NormalNode.cpp
+++ b/source/blender/compositor/nodes/COM_NormalNode.cpp
@@ -41,9 +41,14 @@ void NormalNode::convertToOperations(ExecutionSystem *graph, CompositorContext *
SetVectorOperation *operationSet = new SetVectorOperation();
bNodeSocket *insock = (bNodeSocket *)editorNode->outputs.first;
bNodeSocketValueVector *dval = (bNodeSocketValueVector *)insock->default_value;
- operationSet->setX(dval->value[0]);
- operationSet->setY(dval->value[1]);
- operationSet->setZ(dval->value[2]);
+ float normal[3];
+
+ /* animation can break normalization, this restores it */
+ normalize_v3_v3(normal, dval->value);
+
+ operationSet->setX(normal[0]);
+ operationSet->setY(normal[1]);
+ operationSet->setZ(normal[2]);
operationSet->setW(0.0f);
outputSocket->relinkConnections(operationSet->getOutputSocket(0));
diff --git a/source/blender/editors/interface/interface_layout.c b/source/blender/editors/interface/interface_layout.c
index 9eec7c195b2..e000265bb1e 100644
--- a/source/blender/editors/interface/interface_layout.c
+++ b/source/blender/editors/interface/interface_layout.c
@@ -430,7 +430,7 @@ static void ui_item_array(uiLayout *layout, uiBlock *block, const char *name, in
but->type = NUMSLI;
}
}
- else if (subtype == PROP_DIRECTION) {
+ else if (subtype == PROP_DIRECTION && !expand) {
uiDefButR_prop(block, BUT_NORMAL, 0, name, x, y, UI_UNIT_X * 3, UI_UNIT_Y * 3, ptr, prop, 0, 0, 0, -1, -1, NULL);
}
else {
diff --git a/source/blender/editors/interface/interface_widgets.c b/source/blender/editors/interface/interface_widgets.c
index c836d62021e..527f383c837 100644
--- a/source/blender/editors/interface/interface_widgets.c
+++ b/source/blender/editors/interface/interface_widgets.c
@@ -2623,6 +2623,11 @@ static void widget_swatch(uiBut *but, uiWidgetColors *wcol, rcti *rect, int stat
}
+static void widget_normal(uiBut *but, uiWidgetColors *wcol, rcti *rect, int UNUSED(state), int UNUSED(roundboxalign))
+{
+ ui_draw_but_NORMAL(but, wcol, rect);
+}
+
static void widget_icon_has_anim(uiBut *UNUSED(but), uiWidgetColors *wcol, rcti *rect, int state, int UNUSED(roundboxalign))
{
if (state & (UI_BUT_ANIMATED | UI_BUT_ANIMATED_KEY | UI_BUT_DRIVEN | UI_BUT_REDALERT)) {
@@ -3030,6 +3035,7 @@ static uiWidgetType *widget_type(uiWidgetTypeEnum type)
break;
case UI_WTYPE_NORMAL:
+ wt.custom = widget_normal;
break;
case UI_WTYPE_SCROLL:
@@ -3269,7 +3275,7 @@ void ui_draw_but(const bContext *C, ARegion *ar, uiStyle *style, uiBut *but, rct
break;
case BUT_NORMAL:
- ui_draw_but_NORMAL(but, &tui->wcol_regular, rect);
+ wt = widget_type(UI_WTYPE_NORMAL);
break;
case BUT_IMAGE:
diff --git a/source/blender/editors/space_node/drawnode.c b/source/blender/editors/space_node/drawnode.c
index e842bb5f262..99bdb8d6fe9 100644
--- a/source/blender/editors/space_node/drawnode.c
+++ b/source/blender/editors/space_node/drawnode.c
@@ -398,29 +398,15 @@ static void node_buts_curvecol(uiLayout *layout, bContext *UNUSED(C), PointerRNA
uiTemplateCurveMapping(layout, ptr, "mapping", 'c', 0, 0);
}
-static void node_normal_cb(bContext *C, void *ntree_v, void *node_v)
-{
- Main *bmain = CTX_data_main(C);
-
- ED_node_generic_update(bmain, ntree_v, node_v);
- WM_event_add_notifier(C, NC_NODE | NA_EDITED, ntree_v);
-}
-
static void node_buts_normal(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
{
- uiBlock *block = uiLayoutAbsoluteBlock(layout);
- bNodeTree *ntree = ptr->id.data;
- bNode *node = ptr->data;
- rctf *butr = &node->butr;
+ bNodeTree *ntree = (bNodeTree*)ptr->id.data;
+ bNode *node = (bNode*)ptr->data;
bNodeSocket *sock = node->outputs.first; /* first socket stores normal */
- float *nor = ((bNodeSocketValueVector *)sock->default_value)->value;
- uiBut *bt;
-
- bt = uiDefButF(block, BUT_NORMAL, B_NODE_EXEC, "",
- (int)butr->xmin, (int)butr->xmin,
- (short)BLI_rctf_size_x(butr), (short)BLI_rctf_size_x(butr),
- nor, 0.0f, 1.0f, 0, 0, "");
- uiButSetFunc(bt, node_normal_cb, ntree, node);
+ PointerRNA sockptr;
+
+ RNA_pointer_create(&ntree->id, &RNA_NodeSocket, sock, &sockptr);
+ uiItemR(layout, &sockptr, "default_value", 0, "", ICON_NONE);
}
#if 0 /* not used in 2.5x yet */
static void node_browse_tex_cb(bContext *C, void *ntree_v, void *node_v)
diff --git a/source/blender/nodes/composite/nodes/node_composite_normal.c b/source/blender/nodes/composite/nodes/node_composite_normal.c
index 93fd7ca1c1b..d104e8f03e6 100644
--- a/source/blender/nodes/composite/nodes/node_composite_normal.c
+++ b/source/blender/nodes/composite/nodes/node_composite_normal.c
@@ -40,7 +40,7 @@ static bNodeSocketTemplate cmp_node_normal_in[] = {
};
static bNodeSocketTemplate cmp_node_normal_out[] = {
- { SOCK_VECTOR, 0, N_("Normal")},
+ { SOCK_VECTOR, 0, N_("Normal"), 0.0f, 0.0f, 0.0f, 1.0f, -1.0f, 1.0f, PROP_DIRECTION},
{ SOCK_FLOAT, 0, N_("Dot")},
{ -1, 0, "" }
};