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:
authorTon Roosendaal <ton@blender.org>2006-12-20 20:57:56 +0300
committerTon Roosendaal <ton@blender.org>2006-12-20 20:57:56 +0300
commit253432bfc7c2a1dae224a03fb3055de19743ec67 (patch)
tree2cea30606f9f29be51d5366ddf0d3747b9649b90 /source/blender/src/editnode.c
parent0a0753b409221b66f5003d8c257426043ada227e (diff)
The Big Image refactor!
Please read: http://www.blender3d.org/cms/Imaging.834.0.html Or in short: - adding MultiLayer Image support - recoded entire Image API - better integration of movie/sequence Images Was a whole load of work... went down for a week to do this. So, will need a lot of testing! Will be in irc all evening.
Diffstat (limited to 'source/blender/src/editnode.c')
-rw-r--r--source/blender/src/editnode.c111
1 files changed, 88 insertions, 23 deletions
diff --git a/source/blender/src/editnode.c b/source/blender/src/editnode.c
index 9eb3f8794e4..e2faa3649eb 100644
--- a/source/blender/src/editnode.c
+++ b/source/blender/src/editnode.c
@@ -154,7 +154,9 @@ static void snode_handle_recalc(SpaceNode *snode)
snode->nodetree->timecursor= set_timecursor;
G.afbreek= 0;
snode->nodetree->test_break= blender_test_break;
-
+
+ BIF_store_spare();
+
ntreeCompositExecTree(snode->nodetree, &G.scene->r, 1); /* 1 is do_previews */
snode->nodetree->timecursor= NULL;
@@ -191,7 +193,7 @@ static void load_node_image(char *str) /* called from fileselect */
bNode *node= nodeGetActive(snode->edittree);
Image *ima= NULL;
- ima= add_image(str);
+ ima= BKE_add_image_file(str);
if(ima) {
if(node->id)
node->id->us--;
@@ -201,8 +203,7 @@ static void load_node_image(char *str) /* called from fileselect */
BLI_strncpy(node->name, node->id->name+2, 21);
- free_image_buffers(ima); /* force read again */
- ima->ok= 1;
+ BKE_image_signal(ima, node->storage, IMA_SIGNAL_RELOAD);
NodeTagChanged(snode->edittree, node);
snode_handle_recalc(snode);
@@ -417,6 +418,28 @@ void snode_set_context(SpaceNode *snode)
snode->edittree= snode->nodetree;
}
+/* on activate image viewer, check if we show it */
+static void node_active_image(Image *ima)
+{
+ ScrArea *sa;
+ SpaceImage *sima= NULL;
+
+ /* find an imagewindow showing render result */
+ for(sa=G.curscreen->areabase.first; sa; sa= sa->next) {
+ if(sa->spacetype==SPACE_IMAGE) {
+ sima= sa->spacedata.first;
+ if(sima->image && sima->image->source!=IMA_SRC_VIEWER)
+ break;
+ }
+ }
+ if(sa && sima) {
+ sima->image= ima;
+ scrarea_queue_winredraw(sa);
+ scrarea_queue_headredraw(sa);
+ }
+}
+
+
static void node_set_active(SpaceNode *snode, bNode *node)
{
@@ -460,18 +483,17 @@ static void node_set_active(SpaceNode *snode, bNode *node)
snode_handle_recalc(snode);
}
- /* add node doesnt link this yet... */
- if(node->id==NULL) {
- node->id= find_id("IM", "Viewer Node");
- if(node->id==NULL) {
- Image *ima= alloc_libblock(&G.main->image, ID_IM, "Viewer Node");
- strcpy(ima->name, "Viewer Node");
- ima->ok= 1;
- ima->xrep= ima->yrep= 1;
- node->id= &ima->id;
- }
- else
- node->id->us++;
+ /* addnode() doesnt link this yet... */
+ node->id= (ID *)BKE_image_verify_viewer(IMA_TYPE_COMPOSITE, "Viewer Node");
+ }
+ else if(node->type==CMP_NODE_IMAGE) {
+ if(node->id)
+ node_active_image((Image *)node->id);
+ }
+ else if(node->type==CMP_NODE_R_LAYERS) {
+ if(node->id==NULL || node->id==(ID *)G.scene) {
+ G.scene->r.actlay= node->custom1;
+ allqueue(REDRAWBUTSSCENE, 0);
}
}
}
@@ -746,19 +768,21 @@ void snode_zoom_in(ScrArea *sa)
static void snode_bg_viewmove(SpaceNode *snode)
{
ScrArea *sa;
+ Image *ima;
+ ImBuf *ibuf;
+ Window *win;
short mval[2], mvalo[2];
short rectx, recty, xmin, xmax, ymin, ymax, pad;
- Window *win;
int oldcursor;
- Image *ima;
- ima= (Image *)find_id("IM", "Viewer Node");
+ ima= BKE_image_verify_viewer(IMA_TYPE_COMPOSITE, "Viewer Node");
+ ibuf= BKE_image_get_ibuf(ima, NULL);
sa = snode->area;
- if(ima && ima->ibuf) {
- rectx = ima->ibuf->x;
- recty = ima->ibuf->y;
+ if(ibuf) {
+ rectx = ibuf->x;
+ recty = ibuf->y;
} else {
rectx = recty = 1;
}
@@ -1472,8 +1496,9 @@ bNode *node_add_node(SpaceNode *snode, int type, float locx, float locy)
id_us_plus(node->id);
if(snode->nodetree->type==NTREE_COMPOSIT)
- ntreeCompositForceHidden(G.scene->nodetree);
+ ntreeCompositForceHidden(snode->edittree);
+ NodeTagChanged(snode->edittree, node);
}
return node;
}
@@ -1884,6 +1909,43 @@ void node_read_renderlayers(SpaceNode *snode)
snode_handle_recalc(snode);
}
+/* gets active viewer user */
+struct ImageUser *ntree_get_active_iuser(bNodeTree *ntree)
+{
+ bNode *node;
+
+ if(ntree)
+ for(node= ntree->nodes.first; node; node= node->next)
+ if( ELEM(node->type, CMP_NODE_VIEWER, CMP_NODE_SPLITVIEWER))
+ if(node->flag & NODE_DO_OUTPUT)
+ return node->storage;
+ return NULL;
+}
+
+void imagepaint_composite_tags(bNodeTree *ntree, Image *image, ImageUser *iuser)
+{
+ bNode *node;
+
+ if(ntree==NULL)
+ return;
+
+ /* search for renderresults */
+ if(image->type==IMA_TYPE_R_RESULT) {
+ for(node= ntree->nodes.first; node; node= node->next) {
+ if(node->type==CMP_NODE_R_LAYERS && node->id==NULL) {
+ /* imageuser comes from ImageWin, so indexes are offset 1 */
+ if(node->custom1==iuser->layer-1)
+ NodeTagChanged(ntree, node);
+ }
+ }
+ }
+ else {
+ for(node= ntree->nodes.first; node; node= node->next) {
+ if(node->id== &image->id)
+ NodeTagChanged(ntree, node);
+ }
+ }
+}
/* ********************** */
@@ -2085,6 +2147,9 @@ void winqreadnodespace(ScrArea *sa, void *spacedata, BWinEvent *evt)
else node_adduplicate(snode);
}
break;
+ case EKEY:
+ snode_handle_recalc(snode);
+ break;
case GKEY:
if(fromlib) fromlib= -1;
else {