Merging r47740 through r47782 from trunk into soc-2011-tomato
authorSergey Sharybin <sergey.vfx@gmail.com>
Tue, 12 Jun 2012 11:41:06 +0000 (11:41 +0000)
committerSergey Sharybin <sergey.vfx@gmail.com>
Tue, 12 Jun 2012 11:41:06 +0000 (11:41 +0000)
1  2 
source/blender/blenkernel/BKE_node.h
source/blender/blenkernel/intern/node.c
source/blender/makesrna/intern/rna_nodetree.c

index 73a0d2d375b210c8a847184244d194804c231fc0,ef664f8fc4fead58e3e7f3f8e520696b41b7cb37..dd61a7e4c0fecefdec1da7068b9b2fbb92aa6b64
@@@ -372,6 -372,7 +372,7 @@@ void                       nodeSetActive(struct bNodeTree *
  struct bNode  *nodeGetActive(struct bNodeTree *ntree);
  struct bNode  *nodeGetActiveID(struct bNodeTree *ntree, short idtype);
  int                           nodeSetActiveID(struct bNodeTree *ntree, short idtype, struct ID *id);
+ void                  nodeClearActive(struct bNodeTree *ntree);
  void                  nodeClearActiveID(struct bNodeTree *ntree, short idtype);
  struct bNode  *nodeGetActiveTexture(struct bNodeTree *ntree);
  
@@@ -447,9 -448,7 +448,7 @@@ struct bNodeSocket *node_group_add_sock
  struct bNodeSocket *node_group_expose_socket(struct bNodeTree *ngroup, struct bNodeSocket *sock, int in_out);
  void node_group_expose_all_sockets(struct bNodeTree *ngroup);
  void node_group_remove_socket(struct bNodeTree *ngroup, struct bNodeSocket *gsock, int in_out);
- struct bNode  *node_group_make_from_selected(struct bNodeTree *ntree);
- int                           node_group_ungroup(struct bNodeTree *ntree, struct bNode *gnode);
+ struct bNodeSocket *node_group_add_extern_socket(struct bNodeTree *ntree, ListBase *lb, int in_out, struct bNodeSocket *gsock);
  
  /* in node_common.c */
  void register_node_type_frame(struct bNodeTreeType *ttype);
@@@ -659,8 -658,6 +658,8 @@@ void                       ntreeGPUMaterialNodes(struct bNo
  #define CMP_NODE_DOUBLEEDGEMASK    266
  #define CMP_NODE_OUTPUT_MULTI_FILE__DEPRECATED        267     /* DEPRECATED multi file node has been merged into regular CMP_NODE_OUTPUT_FILE */
  #define CMP_NODE_MASK         268
 +#define CMP_NODE_KEYINGSCREEN         269
 +#define CMP_NODE_KEYING               270
  
  #define CMP_NODE_GLARE                301
  #define CMP_NODE_TONEMAP      302
index 3e5f3f5b24cbc46b5d934f58c79e0c86656ddf42,924e6a354ef7a080a7440b35da6d90352f1b192f..7fe4016f68000ff4818e208d43b245e073967781
@@@ -1313,6 -1313,17 +1313,17 @@@ void nodeClearActiveID(bNodeTree *ntree
                        node->flag &= ~NODE_ACTIVE_ID;
  }
  
+ void nodeClearActive(bNodeTree *ntree)
+ {
+       bNode *node;
+       if (ntree==NULL) return;
+       for (node= ntree->nodes.first; node; node= node->next)
+               node->flag &= ~(NODE_ACTIVE | NODE_ACTIVE_ID);
+ }
  /* two active flags, ID nodes have special flag for buttons display */
  void nodeSetActive(bNodeTree *ntree, bNode *node)
  {
@@@ -1889,8 -1900,6 +1900,8 @@@ static void registerCompositNodes(bNode
        register_node_type_cmp_color_spill(ttype);
        register_node_type_cmp_luma_matte(ttype);
        register_node_type_cmp_doubleedgemask(ttype);
 +      register_node_type_cmp_keyingscreen(ttype);
 +      register_node_type_cmp_keying(ttype);
  
        register_node_type_cmp_translate(ttype);
        register_node_type_cmp_rotate(ttype);
index d7e16481f40d2235aa4dc210ddae5761f1a3b0e3,92de882d48b737b0225ad5a056b04da08576a1a8..af4b3a7e16923ee08c7e0125294227103a1afc2e
@@@ -634,6 -634,23 +634,23 @@@ static EnumPropertyItem *rna_Node_chann
        return item;
  }
  
+ static PointerRNA rna_NodeTree_active_node_get(PointerRNA *ptr)
+ {
+       bNodeTree *ntree = (bNodeTree *)ptr->data;
+       bNode *node = nodeGetActive(ntree);
+       return rna_pointer_inherit_refine(ptr, &RNA_Node, node);
+ }
+ static void rna_NodeTree_active_node_set(PointerRNA *ptr, PointerRNA value)
+ {
+       bNodeTree *ntree = (bNodeTree *)ptr->data;
+       bNode *node = (bNode *)value.data;
+       if (node && BLI_findindex(&ntree->nodes, node) != -1)
+               nodeSetActive(ntree, node);
+       else
+               nodeClearActive(ntree);
+ }
  static bNode *rna_NodeTree_node_new(bNodeTree *ntree, bContext *C, ReportList *reports,
                                      int type, bNodeTree *group)
  {
@@@ -1041,6 -1058,7 +1058,7 @@@ static void init(void
        reg_node(NODE_FORLOOP, Category_LoopNode, "FORLOOP", "NodeForLoop", "Node", "ForLoop", "");
        reg_node(NODE_WHILELOOP, Category_LoopNode, "WHILELOOP", "NodeWhileLoop", "Node", "WhileLoop", "");
        reg_node(NODE_FRAME, Category_LayoutNode, "FRAME", "NodeFrame", "Node", "Frame", "");
+       reg_node(NODE_REROUTE, Category_LayoutNode, "REROUTE", "NodeReroute", "Node", "Reroute", "");
  }
  
  static StructRNA *def_node(BlenderRNA *brna, int node_id)
  static void alloc_node_type_items(EnumPropertyItem *items, int category)
  {
        int i;
-       int count = 3;
+       int count = 4;
        EnumPropertyItem *item  = items;
        
        for (i = 0; i < MaxNodes; i++)
        
        item++;
        
+       item->value = NODE_REROUTE;
+       item->identifier = "REROUTE";
+       item->icon = 0;
+       item->name = "Reroute";
+       item->description = "";
+       
+       item++;
+       
        /* NOTE!, increase 'count' when adding items here */
        
        memset(item, 0, sizeof(EnumPropertyItem));
@@@ -3070,85 -3096,6 +3096,85 @@@ static void def_cmp_mask(StructRNA *srn
        RNA_def_property_ui_text(prop, "Mask", "");
  }
  
 +static void def_cmp_keyingscreen(StructRNA *srna)
 +{
 +      PropertyRNA *prop;
 +
 +      prop = RNA_def_property(srna, "clip", PROP_POINTER, PROP_NONE);
 +      RNA_def_property_pointer_sdna(prop, NULL, "id");
 +      RNA_def_property_struct_type(prop, "MovieClip");
 +      RNA_def_property_flag(prop, PROP_EDITABLE);
 +      RNA_def_property_ui_text(prop, "Movie Clip", "");
 +      RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
 +
 +      RNA_def_struct_sdna_from(srna, "NodeKeyingScreenData", "storage");
 +
 +      prop = RNA_def_property(srna, "tracking_object", PROP_STRING, PROP_NONE);
 +      RNA_def_property_string_sdna(prop, NULL, "tracking_object");
 +      RNA_def_property_ui_text(prop, "Tracking Object", "");
 +      RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
 +}
 +
 +static void def_cmp_keying(StructRNA *srna)
 +{
 +      PropertyRNA *prop;
 +
 +      RNA_def_struct_sdna_from(srna, "NodeKeyingData", "storage");
 +
 +      prop = RNA_def_property(srna, "screen_balance", PROP_FLOAT, PROP_FACTOR);
 +      RNA_def_property_float_sdna(prop, NULL, "screen_balance");
 +      RNA_def_property_range(prop, 0.0f, 1.0f);
 +      RNA_def_property_ui_text(prop, "Screen Balance", "Balance between two non-primary channels primary channel is comparing against");
 +      RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
 +
 +      prop = RNA_def_property(srna, "despill_factor", PROP_FLOAT, PROP_FACTOR);
 +      RNA_def_property_float_sdna(prop, NULL, "despill_factor");
 +      RNA_def_property_range(prop, 0.0f, 1.0f);
 +      RNA_def_property_ui_text(prop, "Despill", "Factor of despilling screen color from image");
 +      RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
 +
 +      prop = RNA_def_property(srna, "clip_black", PROP_FLOAT, PROP_FACTOR);
 +      RNA_def_property_float_sdna(prop, NULL, "clip_black");
 +      RNA_def_property_range(prop, 0.0f, 1.0f);
 +      RNA_def_property_ui_text(prop, "Clip Black", "Value of on-scaled matte pixel which considers as fully background pixel");
 +      RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
 +
 +      prop = RNA_def_property(srna, "clip_white", PROP_FLOAT, PROP_FACTOR);
 +      RNA_def_property_float_sdna(prop, NULL, "clip_white");
 +      RNA_def_property_range(prop, 0.0f, 1.0f);
 +      RNA_def_property_ui_text(prop, "Clip White", "Value of on-scaled matte pixel which considers as fully foreground pixel");
 +      RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
 +
 +      prop = RNA_def_property(srna, "blur_pre", PROP_INT, PROP_NONE);
 +      RNA_def_property_int_sdna(prop, NULL, "blur_pre");
 +      RNA_def_property_range(prop, 0, 2048);
 +      RNA_def_property_ui_text(prop, "Pre Blur", "Chroma pre-blur size which applies before running keyer");
 +      RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
 +
 +      prop = RNA_def_property(srna, "blur_post", PROP_INT, PROP_NONE);
 +      RNA_def_property_int_sdna(prop, NULL, "blur_post");
 +      RNA_def_property_range(prop, 0, 2048);
 +      RNA_def_property_ui_text(prop, "Post Blur", "Matte blur size which applies after clipping and dilate/eroding");
 +      RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
 +
 +      prop = RNA_def_property(srna, "dilate_distance", PROP_INT, PROP_NONE);
 +      RNA_def_property_int_sdna(prop, NULL, "dilate_distance");
 +      RNA_def_property_range(prop, -100, 100);
 +      RNA_def_property_ui_text(prop, "Dilate/Erode", "Matte dilate/erode side");
 +      RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
 +
 +      prop = RNA_def_property(srna, "edge_kernel_radius", PROP_INT, PROP_NONE);
 +      RNA_def_property_int_sdna(prop, NULL, "edge_kernel_radius");
 +      RNA_def_property_range(prop, -100, 100);
 +      RNA_def_property_ui_text(prop, "Edge Kernel Radius", "Radius of kernel used to detect whether pixel belongs to edge");
 +      RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
 +
 +      prop = RNA_def_property(srna, "edge_kernel_tolerance", PROP_FLOAT, PROP_FACTOR);
 +      RNA_def_property_float_sdna(prop, NULL, "edge_kernel_tolerance");
 +      RNA_def_property_range(prop, 0.0f, 1.0f);
 +      RNA_def_property_ui_text(prop, "Edge Kernel Tolerance", "Tolerance to pixels inside kernel which are treating as belonging to the same plane");
 +      RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
 +}
  
  static void dev_cmd_transform(StructRNA *srna)
  {
@@@ -3711,6 -3658,19 +3737,19 @@@ static void rna_def_nodetree_link_api(B
        RNA_def_function_ui_description(func, "remove all node links from the node tree");
  }
  
+ /* shared between all note tree types*/
+ static void rna_def_nodetree_active_api(StructRNA *srna, PropertyRNA *cprop)
+ {
+       PropertyRNA *prop;
+       prop = RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
+       RNA_def_property_struct_type(prop, "Node");
+       RNA_def_property_pointer_funcs(prop, "rna_NodeTree_active_node_get", "rna_NodeTree_active_node_set", NULL, NULL);
+       RNA_def_property_flag(prop, PROP_EDITABLE | PROP_NEVER_UNLINK);
+       RNA_def_property_ui_text(prop, "Active Node", "Active node in this tree");
+       RNA_def_property_update(prop, NC_SCENE | ND_OB_ACTIVE, NULL);
+ }
  static void rna_def_composite_nodetree_api(BlenderRNA *brna, PropertyRNA *cprop)
  {
        StructRNA *srna;
  
        func = RNA_def_function(srna, "clear", "rna_NodeTree_node_clear");
        RNA_def_function_ui_description(func, "Remove all nodes from this node tree");
+       rna_def_nodetree_active_api(srna, cprop);
  }
  
  static void rna_def_shader_nodetree_api(BlenderRNA *brna, PropertyRNA *cprop)
  
        func = RNA_def_function(srna, "clear", "rna_NodeTree_node_clear");
        RNA_def_function_ui_description(func, "Remove all nodes from this node tree");
+       rna_def_nodetree_active_api(srna, cprop);
  }
  
  static void rna_def_texture_nodetree_api(BlenderRNA *brna, PropertyRNA *cprop)
  
        func = RNA_def_function(srna, "clear", "rna_NodeTree_node_clear");
        RNA_def_function_ui_description(func, "Remove all nodes from this node tree");
+       rna_def_nodetree_active_api(srna, cprop);
  }
  
  static void rna_def_node_socket(BlenderRNA *brna)
@@@ -3991,6 -3957,27 +4036,27 @@@ static void rna_def_node(BlenderRNA *br
        RNA_def_property_ui_text(prop, "Color", "Custom color of the node body");
        RNA_def_property_update(prop, NC_NODE | ND_DISPLAY, NULL);
  
+       prop = RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_sdna(prop, NULL, "flag", NODE_SELECT);
+       RNA_def_property_ui_text(prop, "Select", "");
+       prop = RNA_def_property(srna, "show_options", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_sdna(prop, NULL, "flag", NODE_OPTIONS);
+       RNA_def_property_ui_text(prop, "Show Options", "");
+       prop = RNA_def_property(srna, "show_preview", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_sdna(prop, NULL, "flag", NODE_PREVIEW);
+       RNA_def_property_ui_text(prop, "Show Preview", "");
+       prop = RNA_def_property(srna, "hide", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_sdna(prop, NULL, "flag", NODE_HIDDEN);
+       RNA_def_property_ui_text(prop, "Hide", "");
+       prop = RNA_def_property(srna, "mute", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_sdna(prop, NULL, "flag", NODE_MUTED);
+       RNA_def_property_ui_text(prop, "Mute", "");
+       RNA_def_property_update(prop, 0, "rna_Node_update");
        prop = RNA_def_property(srna, "show_texture", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "flag", NODE_ACTIVE_TEXTURE);
        RNA_def_property_ui_text(prop, "Show Texture", "Draw node in viewport textured draw mode");
@@@ -4230,6 -4217,7 +4296,7 @@@ void RNA_def_nodetree(BlenderRNA *brna
        define_specific_node(brna, NODE_FORLOOP, def_forloop);
        define_specific_node(brna, NODE_WHILELOOP, def_whileloop);
        define_specific_node(brna, NODE_FRAME, def_frame);
+       define_specific_node(brna, NODE_REROUTE, 0);
        
        /* special socket types */
        rna_def_cmp_output_file_slot_file(brna);