Merging r41093 through r41119 from trunk into soc-2011-tomato

This revision wouldn't compile, fix will came soon with codereview-related changes.
This commit is contained in:
Sergey Sharybin
2011-10-19 21:37:07 +00:00
24 changed files with 102 additions and 74 deletions

View File

@@ -1161,7 +1161,7 @@ class WM_OT_copy_prev_settings(Operator):
elif not os.path.isdir(path_src):
self.report({'ERROR'}, "Source path %r exists" % path_src)
else:
shutil.copytree(path_src, path_dst)
shutil.copytree(path_src, path_dst, symlinks=True)
# in 2.57 and earlier windows installers, system scripts were copied
# into the configuration directory, don't want to copy those

View File

@@ -56,9 +56,9 @@ class VIEW3D_HT_header(Header):
# Contains buttons like Mode, Pivot, Manipulator, Layer, Mesh Select Mode...
layout.template_header_3D()
row = layout.row() #XXX Narrowed down vert/edge/face selector in edit mode/solid drawmode. -DingTo
row.template_header_3D()
row = layout.row()
if obj:
# Particle edit
if obj.mode == 'PARTICLE_EDIT':

View File

@@ -346,9 +346,8 @@ struct bNode *nodeGetActiveID(struct bNodeTree *ntree, short idtype);
int nodeSetActiveID(struct bNodeTree *ntree, short idtype, struct ID *id);
void nodeClearActiveID(struct bNodeTree *ntree, short idtype);
void NodeTagChanged(struct bNodeTree *ntree, struct bNode *node);
int NodeTagIDChanged(struct bNodeTree *ntree, struct ID *id);
void ntreeClearTags(struct bNodeTree *ntree);
void nodeUpdate(struct bNodeTree *ntree, struct bNode *node);
int nodeUpdateID(struct bNodeTree *ntree, struct ID *id);
void nodeFreePreview(struct bNode *node);
@@ -605,7 +604,7 @@ void ntreeCompositTagRender(struct Scene *sce);
int ntreeCompositTagAnimated(struct bNodeTree *ntree);
void ntreeCompositTagGenerators(struct bNodeTree *ntree);
void ntreeCompositForceHidden(struct bNodeTree *ntree, struct Scene *scene);
void ntreeCompositClearTags(struct bNodeTree *ntree);
/* ************** TEXTURE NODES *************** */

View File

@@ -1982,7 +1982,7 @@ static void dag_tag_renderlayers(Scene *sce, unsigned int lay)
if(node->id==(ID *)sce) {
SceneRenderLayer *srl= BLI_findlink(&sce->r.layers, node->custom1);
if(srl && (srl->lay & lay_changed))
NodeTagChanged(sce->nodetree, node);
nodeUpdate(sce->nodetree, node);
}
}
}

View File

@@ -1514,7 +1514,7 @@ void BKE_image_signal(Image *ima, ImageUser *iuser, int signal)
Scene *scene;
for(scene= G.main->scene.first; scene; scene= scene->id.next) {
if(scene->nodetree) {
NodeTagIDChanged(scene->nodetree, &ima->id);
nodeUpdateID(scene->nodetree, &ima->id);
}
}
}

View File

@@ -184,7 +184,7 @@ bNodeSocket *nodeAddSocket(bNodeTree *ntree, bNode *node, int in_out, const char
else if (in_out==SOCK_OUT)
BLI_addtail(&node->outputs, sock);
ntree->update |= NTREE_UPDATE_NODES;
node->update |= NODE_UPDATE;
return sock;
}
@@ -197,7 +197,7 @@ bNodeSocket *nodeInsertSocket(bNodeTree *ntree, bNode *node, int in_out, bNodeSo
else if (in_out==SOCK_OUT)
BLI_insertlinkbefore(&node->outputs, next_sock, sock);
ntree->update |= NTREE_UPDATE_NODES;
node->update |= NODE_UPDATE;
return sock;
}
@@ -221,7 +221,7 @@ void nodeRemoveSocket(bNodeTree *ntree, bNode *node, bNodeSocket *sock)
MEM_freeN(sock->default_value);
MEM_freeN(sock);
ntree->update |= NTREE_UPDATE_NODES;
node->update |= NODE_UPDATE;
}
void nodeRemoveAllSockets(bNodeTree *ntree, bNode *node)
@@ -246,7 +246,7 @@ void nodeRemoveAllSockets(bNodeTree *ntree, bNode *node)
BLI_freelistN(&node->outputs);
ntree->update |= NTREE_UPDATE_NODES;
node->update |= NODE_UPDATE;
}
/* finds a node based on its name */
@@ -823,7 +823,7 @@ void nodeUnlinkNode(bNodeTree *ntree, bNode *node)
if(link->fromnode==node) {
lb= &node->outputs;
if (link->tonode)
NodeTagChanged(ntree, link->tonode);
link->tonode->update |= NODE_UPDATE;
}
else if(link->tonode==node)
lb= &node->inputs;
@@ -1495,18 +1495,19 @@ void ntreeUpdateTree(bNodeTree *ntree)
/* update individual nodes */
for (n=0; n < totnodes; ++n) {
node = deplist[n];
if (ntreetype->update_node)
ntreetype->update_node(ntree, node);
else if (node->typeinfo->updatefunc)
node->typeinfo->updatefunc(ntree, node);
/* node tree update tags override individual node update flags */
if ((node->update & NODE_UPDATE) || (ntree->update & NTREE_UPDATE)) {
if (ntreetype->update_node)
ntreetype->update_node(ntree, node);
else if (node->typeinfo->updatefunc)
node->typeinfo->updatefunc(ntree, node);
}
/* clear update flag */
node->update = 0;
}
MEM_freeN(deplist);
/* ensures only a single output node is enabled, texnode allows multiple though */
if(ntree->type!=NTREE_TEXTURE)
ntreeSetOutput(ntree);
}
/* general tree updates */
@@ -1518,6 +1519,9 @@ void ntreeUpdateTree(bNodeTree *ntree)
if (ntreetype->update)
ntreetype->update(ntree);
else {
/* Trees can be associated with a specific node type (i.e. group nodes),
* in that case a tree update function may be defined by that node type.
*/
bNodeType *ntype= node_get_type(ntree, ntree->nodetype);
if (ntype && ntype->updatetreefunc)
ntype->updatetreefunc(ntree);
@@ -1530,24 +1534,24 @@ void ntreeUpdateTree(bNodeTree *ntree)
ntree->update = 0;
}
void NodeTagChanged(bNodeTree *ntree, bNode *node)
void nodeUpdate(bNodeTree *ntree, bNode *node)
{
bNodeTreeType *ntreetype = ntreeGetType(ntree->type);
bNodeTreeType *ntreetype= ntreeGetType(ntree->type);
/* extra null pointer checks here because this is called when unlinking
unknown nodes on file load, so typeinfo pointers may not be set */
if (ntreetype && ntreetype->update_node)
if (ntreetype->update_node)
ntreetype->update_node(ntree, node);
else if (node->typeinfo && node->typeinfo->updatefunc)
else if (node->typeinfo->updatefunc)
node->typeinfo->updatefunc(ntree, node);
/* clear update flag */
node->update = 0;
}
int NodeTagIDChanged(bNodeTree *ntree, ID *id)
int nodeUpdateID(bNodeTree *ntree, ID *id)
{
bNodeTreeType *ntreetype;
bNode *node;
int change = FALSE;
if(ELEM(NULL, id, ntree))
return change;
@@ -1558,6 +1562,8 @@ int NodeTagIDChanged(bNodeTree *ntree, ID *id)
if(node->id==id) {
change = TRUE;
ntreetype->update_node(ntree, node);
/* clear update flag */
node->update = 0;
}
}
}
@@ -1567,6 +1573,8 @@ int NodeTagIDChanged(bNodeTree *ntree, ID *id)
change = TRUE;
if (node->typeinfo->updatefunc)
node->typeinfo->updatefunc(ntree, node);
/* clear update flag */
node->update = 0;
}
}
}

View File

@@ -10356,8 +10356,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
{
if(scene->ed && scene->ed->seqbasep)
{
for(seq = scene->ed->seqbasep->first; seq; seq = seq->next)
{
SEQ_BEGIN(scene->ed, seq) {
if(seq->type == SEQ_HD_SOUND)
{
char str[FILE_MAX];
@@ -10377,6 +10376,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
seq->strip->dir);
}
}
SEQ_END
}
}

View File

@@ -398,13 +398,13 @@ static void render_endjob(void *rjv)
ED_update_for_newframe(G.main, rj->scene, rj->win->screen, 1);
/* XXX above function sets all tags in nodes */
ntreeClearTags(rj->scene->nodetree);
ntreeCompositClearTags(rj->scene->nodetree);
/* potentially set by caller */
rj->scene->r.scemode &= ~R_NO_FRAME_UPDATE;
if(rj->srl) {
NodeTagIDChanged(rj->scene->nodetree, &rj->scene->id);
nodeUpdateID(rj->scene->nodetree, &rj->scene->id);
WM_main_add_notifier(NC_NODE|NA_EDITED, rj->scene);
}

View File

@@ -102,12 +102,12 @@ void ED_node_changed_update(ID *id, bNode *node)
WM_main_add_notifier(NC_MATERIAL|ND_SHADING_DRAW, id);
}
else if(treetype==NTREE_COMPOSIT) {
NodeTagChanged(edittree, node);
nodeUpdate(edittree, node);
/* don't use NodeTagIDChanged, it gives far too many recomposites for image, scene layers, ... */
node= node_tree_get_editgroup(nodetree);
if(node)
NodeTagIDChanged(nodetree, node->id);
nodeUpdateID(nodetree, node->id);
WM_main_add_notifier(NC_SCENE|ND_NODES, id);
}

View File

@@ -496,17 +496,17 @@ void snode_set_context(SpaceNode *snode, Scene *scene)
node_tree_from_ID(snode->id, &snode->nodetree, &snode->edittree, NULL);
}
static void snode_tag_changed(SpaceNode *snode, bNode *node)
static void snode_update(SpaceNode *snode, bNode *node)
{
bNode *gnode;
if (node)
NodeTagChanged(snode->edittree, node);
nodeUpdate(snode->edittree, node);
/* if inside group, tag entire group */
gnode= node_tree_get_editgroup(snode->nodetree);
if(gnode)
NodeTagIDChanged(snode->nodetree, gnode->id);
nodeUpdateID(snode->nodetree, gnode->id);
}
static int has_nodetree(bNodeTree *ntree, bNodeTree *lookup)
@@ -1775,7 +1775,7 @@ static void node_link_viewer(SpaceNode *snode, bNode *tonode)
link->fromsock= sock;
}
ntreeUpdateTree(snode->edittree);
snode_tag_changed(snode, node);
snode_update(snode, node);
}
}
}
@@ -2127,7 +2127,7 @@ void snode_autoconnect(SpaceNode *snode, int allow_multiple, int replace)
continue;
}
snode_tag_changed(snode, node_to);
snode_update(snode, node_to);
++numlinks;
break;
}
@@ -2175,7 +2175,7 @@ bNode *node_add_node(SpaceNode *snode, Main *bmain, Scene *scene, bNodeTemplate
if(node->id)
id_us_plus(node->id);
snode_tag_changed(snode, node);
snode_update(snode, node);
}
if(snode->nodetree->type==NTREE_TEXTURE) {
@@ -2412,7 +2412,7 @@ static int node_link_modal(bContext *C, wmOperator *op, wmEvent *event)
case MIDDLEMOUSE:
if(link->tosock && link->fromsock) {
/* send changed events for original tonode and new */
snode_tag_changed(snode, link->tonode);
snode_update(snode, link->tonode);
/* we might need to remove a link */
if(in_out==SOCK_OUT)
@@ -2495,7 +2495,7 @@ static int node_link_init(SpaceNode *snode, bNodeLinkDrag *nldrag)
if(link) {
/* send changed event to original tonode */
if(link->tonode)
snode_tag_changed(snode, link->tonode);
snode_update(snode, link->tonode);
nldrag->node= link->fromnode;
nldrag->sock= link->fromsock;
@@ -2663,7 +2663,7 @@ static int cut_links_exec(bContext *C, wmOperator *op)
next= link->next;
if(cut_links_intersect(link, mcoords, i)) {
snode_tag_changed(snode, link->tonode);
snode_update(snode, link->tonode);
nodeRemLink(snode->edittree, link);
}
}
@@ -2794,7 +2794,7 @@ void ED_node_link_insert(ScrArea *sa)
nodeAddLink(snode->edittree, select, socket_best_match(&select->outputs, sockto->type), node, sockto);
ntreeUpdateTree(snode->edittree); /* needed for pointers */
snode_tag_changed(snode, select);
snode_update(snode, select);
ED_node_changed_update(snode->id, select);
}
}
@@ -3198,7 +3198,7 @@ static int node_mute_exec(bContext *C, wmOperator *UNUSED(op))
/* Be able to mute in-/output nodes as well. - DingTo
if(node->inputs.first && node->outputs.first) { */
node->flag ^= NODE_MUTED;
snode_tag_changed(snode, node);
snode_update(snode, node);
}
}

View File

@@ -244,10 +244,10 @@ static void node_area_listener(ScrArea *sa, wmNotifier *wmn)
if(type==NTREE_COMPOSIT) {
Scene *scene= wmn->window->screen->scene;
/* note that NodeTagIDChanged is already called by BKE_image_signal() on all
/* note that nodeUpdateID is already called by BKE_image_signal() on all
* scenes so really this is just to know if the images is used in the compo else
* painting on images could become very slow when the compositor is open. */
if(NodeTagIDChanged(scene->nodetree, wmn->reference))
if(nodeUpdateID(scene->nodetree, wmn->reference))
ED_area_tag_refresh(sa);
}
}

View File

@@ -1839,7 +1839,7 @@ static void draw_pose_bones(Scene *scene, View3D *v3d, ARegion *ar, Base *base,
}
/* wire draw over solid only in posemode */
if ((dt <= OB_WIRE) || (arm->flag & ARM_POSEMODE) || (arm->drawtype==ARM_LINE)) {
if ((dt <= OB_WIRE) || (arm->flag & ARM_POSEMODE) || ELEM(arm->drawtype, ARM_LINE, ARM_WIRE)) {
/* draw line check first. we do selection indices */
if ELEM(arm->drawtype, ARM_LINE, ARM_WIRE) {
if (arm->flag & ARM_POSEMODE)
@@ -2512,7 +2512,7 @@ int draw_armature(Scene *scene, View3D *v3d, ARegion *ar, Base *base, int dt, in
if(v3d->flag2 & V3D_RENDER_OVERRIDE)
return 1;
if(dt>OB_WIRE && arm->drawtype!=ARM_LINE) {
if(dt>OB_WIRE && !ELEM(arm->drawtype, ARM_LINE, ARM_WIRE)) {
/* we use color for solid lighting */
glColorMaterial(GL_FRONT_AND_BACK, GL_SPECULAR);
glEnable(GL_COLOR_MATERIAL);

View File

@@ -154,7 +154,9 @@ typedef struct bNode {
float locx, locy; /* root offset for drawing */
float width, height; /* node custom width and height */
float miniwidth; /* node width if hidden */
int pad;
int update; /* update flags */
char label[32]; /* custom user-defined label */
short custom1, custom2; /* to be abused for buttons */
float custom3, custom4;
@@ -192,6 +194,13 @@ typedef struct bNode {
/* automatic flag for nodes included in transforms */
#define NODE_TRANSFORM (1<<13)
/* node->update */
/* XXX NODE_UPDATE is a generic update flag. More fine-grained updates
* might be used in the future, but currently all work the same way.
*/
#define NODE_UPDATE 0xFFFF /* generic update flag (includes all others) */
#define NODE_UPDATE_ID 1 /* associated id data block has changed */
typedef struct bNodeLink {
struct bNodeLink *next, *prev;

View File

@@ -568,7 +568,7 @@ static bNode *rna_NodeTree_node_new(bNodeTree *ntree, bContext *UNUSED(C), Repor
}
else {
ntreeUpdateTree(ntree); /* update group node socket links*/
NodeTagChanged(ntree, node);
nodeUpdate(ntree, node);
WM_main_add_notifier(NC_NODE|NA_EDITED, ntree);
if (group)
@@ -651,7 +651,7 @@ static bNodeLink *rna_NodeTree_link_new(bNodeTree *ntree, ReportList *reports, b
ret= nodeAddLink(ntree, fromnode, in, tonode, out);
if(ret) {
NodeTagChanged(ntree, tonode);
nodeUpdate(ntree, tonode);
ntreeUpdateTree(ntree);

View File

@@ -195,6 +195,11 @@ static void local_merge(bNodeTree *localtree, bNodeTree *ntree)
}
}
static void update(bNodeTree *ntree)
{
ntreeSetOutput(ntree);
}
bNodeTreeType ntreeType_Composite = {
/* type */ NTREE_COMPOSIT,
/* idname */ "NTCompositing Nodetree",
@@ -207,7 +212,7 @@ bNodeTreeType ntreeType_Composite = {
/* localize */ localize,
/* local_sync */ local_sync,
/* local_merge */ local_merge,
/* update */ NULL,
/* update */ update,
/* update_node */ update_node
};
@@ -728,9 +733,9 @@ void ntreeCompositTagRender(Scene *curscene)
for(node= sce->nodetree->nodes.first; node; node= node->next) {
if(node->id==(ID *)curscene || node->type==CMP_NODE_COMPOSITE)
NodeTagChanged(sce->nodetree, node);
nodeUpdate(sce->nodetree, node);
else if(node->type==CMP_NODE_TEXTURE) /* uses scene sizex/sizey */
NodeTagChanged(sce->nodetree, node);
nodeUpdate(sce->nodetree, node);
}
}
}
@@ -757,7 +762,7 @@ static int node_animation_properties(bNodeTree *ntree, bNode *node)
for (index=0; index<len; index++) {
if (rna_get_fcurve(&ptr, prop, index, NULL, &driven)) {
NodeTagChanged(ntree, node);
nodeUpdate(ntree, node);
return 1;
}
}
@@ -775,7 +780,7 @@ static int node_animation_properties(bNodeTree *ntree, bNode *node)
for (index=0; index<len; index++) {
if (rna_get_fcurve(&ptr, prop, index, NULL, &driven)) {
NodeTagChanged(ntree, node);
nodeUpdate(ntree, node);
return 1;
}
}
@@ -801,18 +806,18 @@ int ntreeCompositTagAnimated(bNodeTree *ntree)
if(node->type==CMP_NODE_IMAGE) {
Image *ima= (Image *)node->id;
if(ima && ELEM(ima->source, IMA_SRC_MOVIE, IMA_SRC_SEQUENCE)) {
NodeTagChanged(ntree, node);
nodeUpdate(ntree, node);
tagged= 1;
}
}
else if(node->type==CMP_NODE_TIME) {
NodeTagChanged(ntree, node);
nodeUpdate(ntree, node);
tagged= 1;
}
/* here was tag render layer, but this is called after a render, so re-composites fail */
else if(node->type==NODE_GROUP) {
if( ntreeCompositTagAnimated((bNodeTree *)node->id) ) {
NodeTagChanged(ntree, node);
nodeUpdate(ntree, node);
}
}
else if(ELEM(node->type, CMP_NODE_MOVIECLIP, CMP_NODE_TRANSFORM)) {
@@ -834,12 +839,12 @@ void ntreeCompositTagGenerators(bNodeTree *ntree)
for(node= ntree->nodes.first; node; node= node->next) {
if( ELEM(node->type, CMP_NODE_R_LAYERS, CMP_NODE_IMAGE))
NodeTagChanged(ntree, node);
nodeUpdate(ntree, node);
}
}
/* XXX after render animation system gets a refresh, this call allows composite to end clean */
void ntreeClearTags(bNodeTree *ntree)
void ntreeCompositClearTags(bNodeTree *ntree)
{
bNode *node;
@@ -848,6 +853,6 @@ void ntreeClearTags(bNodeTree *ntree)
for(node= ntree->nodes.first; node; node= node->next) {
node->need_exec= 0;
if(node->type==NODE_GROUP)
ntreeClearTags((bNodeTree *)node->id);
ntreeCompositClearTags((bNodeTree *)node->id);
}
}

View File

@@ -239,9 +239,11 @@ bNode *node_group_make_from_selected(bNodeTree *ntree)
}
}
/* update of the group tree */
ngroup->update |= NTREE_UPDATE;
ntreeUpdateTree(ngroup);
ntree->update |= NTREE_UPDATE_NODES|NTREE_UPDATE_LINKS;
/* update of the tree containing the group instance node */
ntree->update |= NTREE_UPDATE_NODES | NTREE_UPDATE_LINKS;
ntreeUpdateTree(ntree);
return gnode;
@@ -559,7 +561,7 @@ int node_group_ungroup(bNodeTree *ntree, bNode *gnode)
/* free the group tree (takes care of user count) */
free_libblock(&G.main->nodetree, wgroup);
ntree->update |= NTREE_UPDATE_NODES|NTREE_UPDATE_LINKS;
ntree->update |= NTREE_UPDATE_NODES | NTREE_UPDATE_LINKS;
ntreeUpdateTree(ntree);
return 1;

View File

@@ -85,6 +85,11 @@ static void local_sync(bNodeTree *localtree, bNodeTree *ntree)
}
}
static void update(bNodeTree *ntree)
{
ntreeSetOutput(ntree);
}
bNodeTreeType ntreeType_Shader = {
/* type */ NTREE_SHADER,
/* id_name */ "NTShader Nodetree",
@@ -97,7 +102,7 @@ bNodeTreeType ntreeType_Shader = {
/* localize */ NULL,
/* local_sync */ local_sync,
/* local_merge */ NULL,
/* update */ NULL,
/* update */ update,
/* update_node */ NULL
};

View File

@@ -108,7 +108,7 @@ int ntreeTexTagAnimated(bNodeTree *ntree)
for(node= ntree->nodes.first; node; node= node->next) {
if(node->type==TEX_NODE_CURVE_TIME) {
NodeTagChanged(ntree, node);
nodeUpdate(ntree, node);
return 1;
}
else if(node->type==NODE_GROUP) {

View File

@@ -2261,7 +2261,7 @@ static void ntree_render_scenes(Render *re)
restore_scene= (scene != re->scene);
node->id->flag &= ~LIB_DOIT;
NodeTagChanged(re->scene->nodetree, node);
nodeUpdate(re->scene->nodetree, node);
}
}
}

View File

@@ -46,7 +46,7 @@
<key>LSEnvironment</key>
<dict>
<key>OMP_NUM_THREADS</key>
<string></string>
<string>4</string>
</dict>
</dict>
</plist>

View File

@@ -34,9 +34,9 @@
<key>name</key>
<string>ScriptWindowState</string>
<key>positionOfDivider</key>
<real>470</real>
<real>493</real>
<key>savedFrame</key>
<string>199 169 1197 810 0 0 1920 1178 </string>
<string>698 332 1163 846 0 0 1920 1178 </string>
<key>selectedTabView</key>
<string>result</string>
</dict>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 362 B

After

Width:  |  Height:  |  Size: 362 B