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:
Diffstat (limited to 'source/blender/editors/space_node/node_edit.c')
-rw-r--r--source/blender/editors/space_node/node_edit.c389
1 files changed, 343 insertions, 46 deletions
diff --git a/source/blender/editors/space_node/node_edit.c b/source/blender/editors/space_node/node_edit.c
index b6dc0b4db7c..624630b9846 100644
--- a/source/blender/editors/space_node/node_edit.c
+++ b/source/blender/editors/space_node/node_edit.c
@@ -40,6 +40,11 @@
#include "DNA_node_types.h"
#include "DNA_scene_types.h"
+#include "BLI_math.h"
+#include "BLI_blenlib.h"
+#include "BLI_storage_types.h"
+#include "BLI_utildefines.h"
+
#include "BKE_context.h"
#include "BKE_global.h"
#include "BKE_image.h"
@@ -48,20 +53,17 @@
#include "BKE_node.h"
#include "BKE_material.h"
#include "BKE_paint.h"
+#include "BKE_screen.h"
#include "BKE_texture.h"
#include "BKE_report.h"
-
-#include "BLI_math.h"
-#include "BLI_blenlib.h"
-#include "BLI_storage_types.h"
-
#include "RE_pipeline.h"
#include "IMB_imbuf_types.h"
#include "ED_node.h"
#include "ED_screen.h"
+#include "ED_space_api.h"
#include "ED_render.h"
#include "RNA_access.h"
@@ -73,6 +75,8 @@
#include "UI_interface.h"
#include "UI_view2d.h"
+#include "IMB_imbuf.h"
+
#include "node_intern.h"
#define SOCK_IN 1
@@ -98,7 +102,7 @@ static int compo_breakjob(void *cjv)
}
/* called by compo, wmJob sends notifier */
-static void compo_redrawjob(void *cjv, char *str)
+static void compo_redrawjob(void *cjv, char *UNUSED(str))
{
CompoJob *cj= cjv;
@@ -194,6 +198,17 @@ void snode_composite_job(const bContext *C, ScrArea *sa)
/* ***************************************** */
+/* operator poll callback */
+static int composite_node_active(bContext *C)
+{
+ if( ED_operator_node_active(C)) {
+ SpaceNode *snode= CTX_wm_space_node(C);
+ if(snode->treetype==NTREE_COMPOSIT)
+ return 1;
+ }
+ return 0;
+}
+
/* also checks for edited groups */
bNode *editnode_get_active(bNodeTree *ntree)
{
@@ -211,6 +226,8 @@ bNode *editnode_get_active(bNodeTree *ntree)
void snode_notify(bContext *C, SpaceNode *snode)
{
+ WM_event_add_notifier(C, NC_NODE|NA_EDITED, NULL);
+
if(snode->treetype==NTREE_SHADER)
WM_event_add_notifier(C, NC_MATERIAL|ND_NODES, snode->id);
else if(snode->treetype==NTREE_COMPOSIT)
@@ -244,7 +261,7 @@ void ED_node_shader_default(Material *ma)
return;
}
- ma->nodetree= ntreeAddTree(NTREE_SHADER);
+ ma->nodetree= ntreeAddTree("Shader Nodetree", NTREE_SHADER, FALSE);
out= nodeAddNodeType(ma->nodetree, SH_NODE_OUTPUT, NULL, NULL);
out->locx= 300.0f; out->locy= 300.0f;
@@ -275,15 +292,17 @@ void ED_node_composit_default(Scene *sce)
return;
}
- sce->nodetree= ntreeAddTree(NTREE_COMPOSIT);
+ sce->nodetree= ntreeAddTree("Compositing Nodetree", NTREE_COMPOSIT, FALSE);
out= nodeAddNodeType(sce->nodetree, CMP_NODE_COMPOSITE, NULL, NULL);
out->locx= 300.0f; out->locy= 400.0f;
out->id= &sce->id;
+ id_us_plus(out->id);
in= nodeAddNodeType(sce->nodetree, CMP_NODE_R_LAYERS, NULL, NULL);
in->locx= 10.0f; in->locy= 400.0f;
in->id= &sce->id;
+ id_us_plus(in->id);
nodeSetActive(sce->nodetree, in);
/* links from color to color */
@@ -310,7 +329,7 @@ void ED_node_texture_default(Tex *tx)
return;
}
- tx->nodetree= ntreeAddTree(NTREE_TEXTURE);
+ tx->nodetree= ntreeAddTree("Texture Nodetree", NTREE_TEXTURE, FALSE);
out= nodeAddNodeType(tx->nodetree, TEX_NODE_OUTPUT, NULL, NULL);
out->locx= 300.0f; out->locy= 300.0f;
@@ -326,6 +345,7 @@ void ED_node_texture_default(Tex *tx)
ntreeSolveOrder(tx->nodetree); /* needed for pointers */
}
+/* id is supposed to contain a node tree */
void node_tree_from_ID(ID *id, bNodeTree **ntree, bNodeTree **edittree, int *treetype)
{
bNode *node= NULL;
@@ -343,6 +363,10 @@ void node_tree_from_ID(ID *id, bNodeTree **ntree, bNodeTree **edittree, int *tre
*ntree= ((Tex*)id)->nodetree;
if(treetype) *treetype= NTREE_TEXTURE;
}
+ else {
+ if(treetype) *treetype= 0;
+ return;
+ }
/* find editable group */
if(edittree) {
@@ -431,11 +455,25 @@ void node_set_active(SpaceNode *snode, bNode *node)
nodeSetActive(snode->edittree, node);
if(node->type!=NODE_GROUP) {
+ int was_output= (node->flag & NODE_DO_OUTPUT);
+
/* tree specific activate calls */
if(snode->treetype==NTREE_SHADER) {
/* when we select a material, active texture is cleared, for buttons */
if(node->id && GS(node->id->name)==ID_MA)
nodeClearActiveID(snode->edittree, ID_TE);
+
+ if(node->type==SH_NODE_OUTPUT) {
+ bNode *tnode;
+
+ for(tnode= snode->edittree->nodes.first; tnode; tnode= tnode->next)
+ if( tnode->type==SH_NODE_OUTPUT)
+ tnode->flag &= ~NODE_DO_OUTPUT;
+
+ node->flag |= NODE_DO_OUTPUT;
+ if(was_output==0)
+ ED_node_changed_update(snode->id, node);
+ }
// XXX
#if 0
@@ -452,7 +490,7 @@ void node_set_active(SpaceNode *snode, bNode *node)
/* make active viewer, currently only 1 supported... */
if( ELEM(node->type, CMP_NODE_VIEWER, CMP_NODE_SPLITVIEWER)) {
bNode *tnode;
- int was_output= (node->flag & NODE_DO_OUTPUT);
+
for(tnode= snode->edittree->nodes.first; tnode; tnode= tnode->next)
if( ELEM(tnode->type, CMP_NODE_VIEWER, CMP_NODE_SPLITVIEWER))
@@ -480,6 +518,16 @@ void node_set_active(SpaceNode *snode, bNode *node)
scene->r.actlay= node->custom1;
}
}
+ else if(node->type==CMP_NODE_COMPOSITE) {
+ bNode *tnode;
+
+ for(tnode= snode->edittree->nodes.first; tnode; tnode= tnode->next)
+ if( tnode->type==CMP_NODE_COMPOSITE)
+ tnode->flag &= ~NODE_DO_OUTPUT;
+
+ node->flag |= NODE_DO_OUTPUT;
+ ED_node_changed_update(snode->id, node);
+ }
}
else if(snode->treetype==NTREE_TEXTURE) {
// XXX
@@ -541,7 +589,7 @@ void snode_make_group_editable(SpaceNode *snode, bNode *gnode)
ntreeSolveOrder(snode->nodetree);
}
-static int node_group_edit_exec(bContext *C, wmOperator *op)
+static int node_group_edit_exec(bContext *C, wmOperator *UNUSED(op))
{
SpaceNode *snode = CTX_wm_space_node(C);
bNode *gnode;
@@ -556,7 +604,7 @@ static int node_group_edit_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
-static int node_group_edit_invoke(bContext *C, wmOperator *op, wmEvent *event)
+static int node_group_edit_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED(event))
{
SpaceNode *snode = CTX_wm_space_node(C);
bNode *gnode;
@@ -605,11 +653,11 @@ static int node_group_ungroup_exec(bContext *C, wmOperator *op)
return OPERATOR_CANCELLED;
if(gnode->type!=NODE_GROUP) {
- BKE_report(op->reports, RPT_ERROR, "Not a group");
+ BKE_report(op->reports, RPT_WARNING, "Not a group");
return OPERATOR_CANCELLED;
}
else if(!nodeGroupUnGroup(snode->edittree, gnode)) {
- BKE_report(op->reports, RPT_ERROR, "Can't ungroup");
+ BKE_report(op->reports, RPT_WARNING, "Can't ungroup");
return OPERATOR_CANCELLED;
}
@@ -736,6 +784,8 @@ static int snode_bg_viewmove_modal(bContext *C, wmOperator *op, wmEvent *event)
MEM_freeN(nvm);
op->customdata= NULL;
+
+ WM_event_add_notifier(C, NC_SPACE|ND_SPACE_NODE, NULL);
return OPERATOR_FINISHED;
}
@@ -750,12 +800,15 @@ static int snode_bg_viewmove_invoke(bContext *C, wmOperator *op, wmEvent *event)
Image *ima;
ImBuf *ibuf;
int pad= 10;
+ void *lock;
ima= BKE_image_verify_viewer(IMA_TYPE_COMPOSITE, "Viewer Node");
- ibuf= BKE_image_get_ibuf(ima, NULL);
+ ibuf= BKE_image_acquire_ibuf(ima, NULL, &lock);
- if(ibuf == NULL)
+ if(ibuf == NULL) {
+ BKE_image_release_ibuf(ima, lock);
return OPERATOR_CANCELLED;
+ }
nvm= MEM_callocN(sizeof(NodeViewMove), "NodeViewMove struct");
op->customdata= nvm;
@@ -766,6 +819,8 @@ static int snode_bg_viewmove_invoke(bContext *C, wmOperator *op, wmEvent *event)
nvm->xmax = ar->winx/2 + ibuf->x/2 - pad;
nvm->ymin = -(ar->winy/2) - ibuf->y/2 + pad;
nvm->ymax = ar->winy/2 + ibuf->y/2 - pad;
+
+ BKE_image_release_ibuf(ima, lock);
/* add modal handler */
WM_event_add_modal_handler(C, op);
@@ -778,12 +833,13 @@ void NODE_OT_backimage_move(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Background Image Move";
+ ot->description = "Move Node backdrop";
ot->idname= "NODE_OT_backimage_move";
/* api callbacks */
ot->invoke= snode_bg_viewmove_invoke;
ot->modal= snode_bg_viewmove_modal;
- ot->poll= ED_operator_node_active;
+ ot->poll= composite_node_active;
/* flags */
ot->flag= OPTYPE_BLOCKING;
@@ -811,7 +867,7 @@ void NODE_OT_backimage_zoom(wmOperatorType *ot)
/* api callbacks */
ot->exec= backimage_zoom;
- ot->poll= ED_operator_node_active;
+ ot->poll= composite_node_active;
/* flags */
ot->flag= OPTYPE_BLOCKING;
@@ -820,6 +876,169 @@ void NODE_OT_backimage_zoom(wmOperatorType *ot)
RNA_def_float(ot->srna, "factor", 1.2f, 0.0f, 10.0f, "Factor", "", 0.0f, 10.0f);
}
+/******************** sample backdrop operator ********************/
+
+typedef struct ImageSampleInfo {
+ ARegionType *art;
+ void *draw_handle;
+ int x, y;
+ int channels;
+ int color_manage;
+
+ char col[4];
+ float colf[4];
+
+ int draw;
+} ImageSampleInfo;
+
+static void sample_draw(const bContext *UNUSED(C), ARegion *ar, void *arg_info)
+{
+ ImageSampleInfo *info= arg_info;
+
+ draw_nodespace_color_info(ar, info->channels, info->x, info->y, info->col, info->colf);
+}
+
+static void sample_apply(bContext *C, wmOperator *op, wmEvent *event)
+{
+ SpaceNode *snode= CTX_wm_space_node(C);
+ ARegion *ar= CTX_wm_region(C);
+ ImageSampleInfo *info= op->customdata;
+ void *lock;
+ Image *ima;
+ ImBuf *ibuf;
+ float fx, fy, bufx, bufy;
+ int mx, my;
+
+ ima= BKE_image_verify_viewer(IMA_TYPE_COMPOSITE, "Viewer Node");
+ ibuf= BKE_image_acquire_ibuf(ima, NULL, &lock);
+ if(!ibuf)
+ return;
+
+ if(!ibuf->rect) {
+ if(info->color_manage)
+ ibuf->profile = IB_PROFILE_LINEAR_RGB;
+ else
+ ibuf->profile = IB_PROFILE_NONE;
+ IMB_rect_from_float(ibuf);
+ }
+
+ mx= event->x - ar->winrct.xmin;
+ my= event->y - ar->winrct.ymin;
+ /* map the mouse coords to the backdrop image space */
+ bufx = ibuf->x * snode->zoom;
+ bufy = ibuf->y * snode->zoom;
+ fx = (bufx > 0.0f ? ((float)mx - 0.5f*ar->winx - snode->xof) / bufx + 0.5f : 0.0f);
+ fy = (bufy > 0.0f ? ((float)my - 0.5f*ar->winy - snode->yof) / bufy + 0.5f : 0.0f);
+
+ if(fx>=0.0 && fy>=0.0 && fx<1.0 && fy<1.0) {
+ float *fp;
+ char *cp;
+ int x= (int)(fx*ibuf->x), y= (int)(fy*ibuf->y);
+
+ CLAMP(x, 0, ibuf->x-1);
+ CLAMP(y, 0, ibuf->y-1);
+
+ info->x= x;
+ info->y= y;
+ info->draw= 1;
+ info->channels= ibuf->channels;
+
+ if(ibuf->rect) {
+ cp= (char *)(ibuf->rect + y*ibuf->x + x);
+
+ info->col[0]= cp[0];
+ info->col[1]= cp[1];
+ info->col[2]= cp[2];
+ info->col[3]= cp[3];
+
+ info->colf[0]= (float)cp[0]/255.0f;
+ info->colf[1]= (float)cp[1]/255.0f;
+ info->colf[2]= (float)cp[2]/255.0f;
+ info->colf[3]= (float)cp[3]/255.0f;
+ }
+ if(ibuf->rect_float) {
+ fp= (ibuf->rect_float + (ibuf->channels)*(y*ibuf->x + x));
+
+ info->colf[0]= fp[0];
+ info->colf[1]= fp[1];
+ info->colf[2]= fp[2];
+ info->colf[3]= fp[3];
+ }
+ }
+ else
+ info->draw= 0;
+
+ BKE_image_release_ibuf(ima, lock);
+
+ ED_area_tag_redraw(CTX_wm_area(C));
+}
+
+static void sample_exit(bContext *C, wmOperator *op)
+{
+ ImageSampleInfo *info= op->customdata;
+
+ ED_region_draw_cb_exit(info->art, info->draw_handle);
+ ED_area_tag_redraw(CTX_wm_area(C));
+ MEM_freeN(info);
+}
+
+static int sample_invoke(bContext *C, wmOperator *op, wmEvent *event)
+{
+ SpaceNode *snode= CTX_wm_space_node(C);
+ ARegion *ar= CTX_wm_region(C);
+ ImageSampleInfo *info;
+
+ if(snode->treetype!=NTREE_COMPOSIT || !(snode->flag & SNODE_BACKDRAW))
+ return OPERATOR_CANCELLED;
+
+ info= MEM_callocN(sizeof(ImageSampleInfo), "ImageSampleInfo");
+ info->art= ar->type;
+ info->draw_handle = ED_region_draw_cb_activate(ar->type, sample_draw, info, REGION_DRAW_POST_PIXEL);
+ op->customdata= info;
+
+ sample_apply(C, op, event);
+
+ WM_event_add_modal_handler(C, op);
+
+ return OPERATOR_RUNNING_MODAL;
+}
+
+static int sample_modal(bContext *C, wmOperator *op, wmEvent *event)
+{
+ switch(event->type) {
+ case LEFTMOUSE:
+ case RIGHTMOUSE: // XXX hardcoded
+ sample_exit(C, op);
+ return OPERATOR_CANCELLED;
+ case MOUSEMOVE:
+ sample_apply(C, op, event);
+ break;
+ }
+
+ return OPERATOR_RUNNING_MODAL;
+}
+
+static int sample_cancel(bContext *C, wmOperator *op)
+{
+ sample_exit(C, op);
+ return OPERATOR_CANCELLED;
+}
+
+void NODE_OT_backimage_sample(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "Backimage Sample";
+ ot->idname= "NODE_OT_backimage_sample";
+
+ /* api callbacks */
+ ot->invoke= sample_invoke;
+ ot->modal= sample_modal;
+ ot->cancel= sample_cancel;
+ ot->poll= ED_operator_node_active;
+
+ /* flags */
+ ot->flag= OPTYPE_BLOCKING;
+}
/* ********************** size widget operator ******************** */
@@ -1095,7 +1314,7 @@ static void node_link_viewer(SpaceNode *snode, bNode *tonode)
}
-static int node_active_link_viewer(bContext *C, wmOperator *op)
+static int node_active_link_viewer(bContext *C, wmOperator *UNUSED(op))
{
SpaceNode *snode= CTX_wm_space_node(C);
bNode *node;
@@ -1358,7 +1577,7 @@ void snode_autoconnect(SpaceNode *snode, int allow_multiple, int replace)
ListBase *nodelist = MEM_callocN(sizeof(ListBase), "items_list");
bNodeListItem *nli;
bNode *node;
- int i;
+ int i, numlinks=0;
for(node= snode->edittree->nodes.first; node; node= node->next) {
if(node->flag & NODE_SELECT) {
@@ -1396,11 +1615,15 @@ void snode_autoconnect(SpaceNode *snode, int allow_multiple, int replace)
nodeRemSocketLinks(snode->edittree, sock_to);
nodeAddLink(snode->edittree, node_fr, sock_fr, node_to, sock_to);
NodeTagChanged(snode->edittree, node_to);
+ ++numlinks;
break;
}
}
- ntreeSolveOrder(snode->edittree);
+ if (numlinks > 0) {
+ node_tree_verify_groups(snode->nodetree);
+ ntreeSolveOrder(snode->edittree);
+ }
BLI_freelistN(nodelist);
MEM_freeN(nodelist);
@@ -1433,7 +1656,7 @@ bNode *node_add_node(SpaceNode *snode, Scene *scene, int type, float locx, float
/* generics */
if(node) {
node->locx= locx;
- node->locy= locy + 60.0f; // arbitrary.. so its visible
+ node->locy= locy + 60.0f; // arbitrary.. so its visible, (0,0) is top of node
node->flag |= SELECT;
gnode= node_tree_get_editgroup(snode->nodetree);
@@ -1467,15 +1690,39 @@ bNode *node_add_node(SpaceNode *snode, Scene *scene, int type, float locx, float
/* ****************** Duplicate *********************** */
-static int node_duplicate_exec(bContext *C, wmOperator *op)
+static int node_duplicate_exec(bContext *C, wmOperator *UNUSED(op))
{
SpaceNode *snode= CTX_wm_space_node(C);
+ bNodeTree *ntree= snode->edittree;
+ bNode *node, *newnode, *last;
ED_preview_kill_jobs(C);
-
- ntreeCopyTree(snode->edittree, 1); /* 1 == internally selected nodes */
- ntreeSolveOrder(snode->edittree);
+ last = ntree->nodes.last;
+ for(node= ntree->nodes.first; node; node= node->next) {
+ if(node->flag & SELECT) {
+ newnode = nodeCopyNode(ntree, node, 1);
+
+ /* deselect old node, select the copy instead */
+ node->flag &= ~(NODE_SELECT|NODE_ACTIVE);
+ newnode->flag |= NODE_SELECT;
+
+ if(newnode->id) {
+ /* simple id user adjustment, node internal functions dont touch this
+ * but operators and readfile.c do. */
+ id_us_plus(newnode->id);
+ /* to ensure redraws or rerenders happen */
+ ED_node_changed_update(snode->id, newnode);
+ }
+ }
+
+ /* make sure we don't copy new nodes again! */
+ if (node==last)
+ break;
+ }
+
+ ntreeSolveOrder(ntree);
+
node_tree_verify_groups(snode->nodetree);
snode_notify(C, snode);
@@ -1771,7 +2018,7 @@ static int cut_links_intersect(bNodeLink *link, float mcoords[][2], int tot)
if(node_link_bezier_points(NULL, NULL, link, coord_array, LINK_RESOL)) {
for(i=0; i<tot-1; i++)
- for(b=0; b<LINK_RESOL-1; b++)
+ for(b=0; b<LINK_RESOL; b++)
if(isect_line_line_v2(mcoords[i], mcoords[i+1], coord_array[b], coord_array[b+1]) > 0)
return 1;
}
@@ -1845,8 +2092,9 @@ void NODE_OT_links_cut(wmOperatorType *ot)
/* ******************************** */
// XXX some code needing updating to operators...
+
/* goes over all scenes, reads render layers */
-static int node_read_renderlayers_exec(bContext *C, wmOperator *op)
+static int node_read_renderlayers_exec(bContext *C, wmOperator *UNUSED(op))
{
Main *bmain= CTX_data_main(C);
SpaceNode *snode= CTX_wm_space_node(C);
@@ -1882,24 +2130,25 @@ void NODE_OT_read_renderlayers(wmOperatorType *ot)
ot->exec= node_read_renderlayers_exec;
- ot->poll= ED_operator_node_active;
+ ot->poll= composite_node_active;
/* flags */
ot->flag= 0;
}
-static int node_read_fullsamplelayers_exec(bContext *C, wmOperator *op)
+static int node_read_fullsamplelayers_exec(bContext *C, wmOperator *UNUSED(op))
{
+ Main *bmain= CTX_data_main(C);
SpaceNode *snode= CTX_wm_space_node(C);
Scene *curscene= CTX_data_scene(C);
Render *re= RE_NewRender(curscene->id.name);
-// WM_cursor_wait(1);
+ WM_cursor_wait(1);
- RE_MergeFullSample(re, curscene, snode->nodetree);
+ RE_MergeFullSample(re, bmain, curscene, snode->nodetree);
snode_notify(C, snode);
-// WM_cursor_wait(0);
+ WM_cursor_wait(0);
return OPERATOR_FINISHED;
}
@@ -1912,7 +2161,55 @@ void NODE_OT_read_fullsamplelayers(wmOperatorType *ot)
ot->exec= node_read_fullsamplelayers_exec;
- ot->poll= ED_operator_node_active;
+ ot->poll= composite_node_active;
+
+ /* flags */
+ ot->flag= 0;
+}
+
+int node_render_changed_exec(bContext *C, wmOperator *UNUSED(op))
+{
+ Scene *sce= CTX_data_scene(C);
+ bNode *node;
+
+ for(node= sce->nodetree->nodes.first; node; node= node->next) {
+ if(node->id==(ID *)sce && node->need_exec) {
+ break;
+ }
+ }
+ if(node) {
+ SceneRenderLayer *srl= BLI_findlink(&sce->r.layers, node->custom1);
+
+ if(srl) {
+ PointerRNA op_ptr;
+
+ WM_operator_properties_create(&op_ptr, "RENDER_OT_render");
+ RNA_string_set(&op_ptr, "layer", srl->name);
+ RNA_string_set(&op_ptr, "scene", sce->id.name+2);
+
+ /* to keep keypositions */
+ sce->r.scemode |= R_NO_FRAME_UPDATE;
+
+ WM_operator_name_call(C, "RENDER_OT_render", WM_OP_INVOKE_DEFAULT, &op_ptr);
+
+ WM_operator_properties_free(&op_ptr);
+
+ return OPERATOR_FINISHED;
+ }
+
+ }
+ return OPERATOR_CANCELLED;
+}
+
+void NODE_OT_render_changed(wmOperatorType *ot)
+{
+
+ ot->name= "Render Changed Layer";
+ ot->idname= "NODE_OT_render_changed";
+
+ ot->exec= node_render_changed_exec;
+
+ ot->poll= composite_node_active;
/* flags */
ot->flag= 0;
@@ -1927,7 +2224,7 @@ static int node_group_make_exec(bContext *C, wmOperator *op)
bNode *gnode;
if(snode->edittree!=snode->nodetree) {
- BKE_report(op->reports, RPT_ERROR, "Can not add a new Group in a Group");
+ BKE_report(op->reports, RPT_WARNING, "Can not add a new Group in a Group");
return OPERATOR_CANCELLED;
}
@@ -1940,7 +2237,7 @@ static int node_group_make_exec(bContext *C, wmOperator *op)
}
if(gnode) {
- BKE_report(op->reports, RPT_ERROR, "Can not add RenderLayer in a Group");
+ BKE_report(op->reports, RPT_WARNING, "Can not add RenderLayer in a Group");
return OPERATOR_CANCELLED;
}
}
@@ -1949,7 +2246,7 @@ static int node_group_make_exec(bContext *C, wmOperator *op)
gnode= nodeMakeGroupFromSelected(snode->nodetree);
if(gnode==NULL) {
- BKE_report(op->reports, RPT_ERROR, "Can not make Group");
+ BKE_report(op->reports, RPT_WARNING, "Can not make Group");
return OPERATOR_CANCELLED;
}
else {
@@ -2010,7 +2307,7 @@ static void node_flag_toggle_exec(SpaceNode *snode, int toggle_flag)
}
}
-static int node_hide_exec(bContext *C, wmOperator *op)
+static int node_hide_exec(bContext *C, wmOperator *UNUSED(op))
{
SpaceNode *snode= CTX_wm_space_node(C);
@@ -2040,7 +2337,7 @@ void NODE_OT_hide_toggle(wmOperatorType *ot)
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
}
-static int node_preview_exec(bContext *C, wmOperator *op)
+static int node_preview_exec(bContext *C, wmOperator *UNUSED(op))
{
SpaceNode *snode= CTX_wm_space_node(C);
@@ -2072,7 +2369,7 @@ void NODE_OT_preview_toggle(wmOperatorType *ot)
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
}
-static int node_socket_toggle_exec(bContext *C, wmOperator *op)
+static int node_socket_toggle_exec(bContext *C, wmOperator *UNUSED(op))
{
SpaceNode *snode= CTX_wm_space_node(C);
bNode *node;
@@ -2123,7 +2420,7 @@ void NODE_OT_hide_socket_toggle(wmOperatorType *ot)
/* ****************** Mute operator *********************** */
-static int node_mute_exec(bContext *C, wmOperator *op)
+static int node_mute_exec(bContext *C, wmOperator *UNUSED(op))
{
SpaceNode *snode= CTX_wm_space_node(C);
bNode *node;
@@ -2165,7 +2462,7 @@ void NODE_OT_mute_toggle(wmOperatorType *ot)
/* ****************** Delete operator ******************* */
-static int node_delete_exec(bContext *C, wmOperator *op)
+static int node_delete_exec(bContext *C, wmOperator *UNUSED(op))
{
SpaceNode *snode= CTX_wm_space_node(C);
bNode *node, *next;
@@ -2206,7 +2503,7 @@ void NODE_OT_delete(wmOperatorType *ot)
/* ****************** Show Cyclic Dependencies Operator ******************* */
-static int node_show_cycles_exec(bContext *C, wmOperator *op)
+static int node_show_cycles_exec(bContext *C, wmOperator *UNUSED(op))
{
SpaceNode *snode= CTX_wm_space_node(C);
@@ -2250,7 +2547,7 @@ static int node_add_file_exec(bContext *C, wmOperator *op)
errno= 0;
- ima= BKE_add_image_file(path, scene ? scene->r.cfra : 1);
+ ima= BKE_add_image_file(path);
if(!ima) {
BKE_reportf(op->reports, RPT_ERROR, "Can't read: \"%s\", %s.", path, errno ? strerror(errno) : "Unsupported image format");
@@ -2279,7 +2576,7 @@ static int node_add_file_exec(bContext *C, wmOperator *op)
node = node_add_node(snode, scene, ntype, snode->mx, snode->my);
if (!node) {
- BKE_report(op->reports, RPT_ERROR, "Could not add an image node.");
+ BKE_report(op->reports, RPT_WARNING, "Could not add an image node.");
return OPERATOR_CANCELLED;
}
@@ -2315,7 +2612,7 @@ void NODE_OT_add_file(wmOperatorType *ot)
/* callbacks */
ot->exec= node_add_file_exec;
ot->invoke= node_add_file_invoke;
- ot->poll= ED_operator_node_active;
+ ot->poll= composite_node_active;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;