svn merge ^/trunk/blender -r48415:48469
[blender.git] / source / blender / editors / space_node / space_node.c
index 09f7ca95124e4ba0443469beef84c913ce2fa809..6982c96391eb0356ee45c821dcbdc149f90b3807 100644 (file)
@@ -4,7 +4,7 @@
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
  * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version. 
+ * of the License, or (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -18,7 +18,7 @@
  * The Original Code is Copyright (C) 2008 Blender Foundation.
  * All rights reserved.
  *
- * 
+ *
  * Contributor(s): Blender Foundation
  *
  * ***** END GPL LICENSE BLOCK *****
@@ -64,7 +64,7 @@
 
 #include "RNA_access.h"
 
-#include "node_intern.h"       // own include
+#include "node_intern.h"    // own include
 
 /* ******************** manage regions ********************* */
 
@@ -72,23 +72,23 @@ ARegion *node_has_buttons_region(ScrArea *sa)
 {
        ARegion *ar, *arnew;
 
-       ar= BKE_area_find_region_type(sa, RGN_TYPE_UI);
+       ar = BKE_area_find_region_type(sa, RGN_TYPE_UI);
        if (ar) return ar;
-       
+
        /* add subdiv level; after header */
-       ar= BKE_area_find_region_type(sa, RGN_TYPE_HEADER);
+       ar = BKE_area_find_region_type(sa, RGN_TYPE_HEADER);
 
        /* is error! */
-       if (ar==NULL) return NULL;
-       
-       arnew= MEM_callocN(sizeof(ARegion), "buttons for node");
-       
+       if (ar == NULL) return NULL;
+
+       arnew = MEM_callocN(sizeof(ARegion), "buttons for node");
+
        BLI_insertlinkafter(&sa->regionbase, ar, arnew);
-       arnew->regiontype= RGN_TYPE_UI;
-       arnew->alignment= RGN_ALIGN_RIGHT;
-       
+       arnew->regiontype = RGN_TYPE_UI;
+       arnew->alignment = RGN_ALIGN_RIGHT;
+
        arnew->flag = RGN_FLAG_HIDDEN;
-       
+
        return arnew;
 }
 
@@ -98,66 +98,66 @@ static SpaceLink *node_new(const bContext *UNUSED(C))
 {
        ARegion *ar;
        SpaceNode *snode;
-       
-       snode= MEM_callocN(sizeof(SpaceNode), "initnode");
-       snode->spacetype= SPACE_NODE;   
-       
+
+       snode = MEM_callocN(sizeof(SpaceNode), "initnode");
+       snode->spacetype = SPACE_NODE;
+
        /* backdrop */
        snode->zoom = 1.0f;
 
        BKE_color_managed_view_settings_init(&snode->view_settings);
 
        /* header */
-       ar= MEM_callocN(sizeof(ARegion), "header for node");
-       
+       ar = MEM_callocN(sizeof(ARegion), "header for node");
+
        BLI_addtail(&snode->regionbase, ar);
-       ar->regiontype= RGN_TYPE_HEADER;
-       ar->alignment= RGN_ALIGN_BOTTOM;
-       
+       ar->regiontype = RGN_TYPE_HEADER;
+       ar->alignment = RGN_ALIGN_BOTTOM;
+
        /* buttons/list view */
-       ar= MEM_callocN(sizeof(ARegion), "buttons for node");
-       
+       ar = MEM_callocN(sizeof(ARegion), "buttons for node");
+
        BLI_addtail(&snode->regionbase, ar);
-       ar->regiontype= RGN_TYPE_UI;
-       ar->alignment= RGN_ALIGN_RIGHT;
+       ar->regiontype = RGN_TYPE_UI;
+       ar->alignment = RGN_ALIGN_RIGHT;
        ar->flag = RGN_FLAG_HIDDEN;
-       
+
        /* main area */
-       ar= MEM_callocN(sizeof(ARegion), "main area for node");
-       
+       ar = MEM_callocN(sizeof(ARegion), "main area for node");
+
        BLI_addtail(&snode->regionbase, ar);
-       ar->regiontype= RGN_TYPE_WINDOW;
-       
+       ar->regiontype = RGN_TYPE_WINDOW;
+
        ar->v2d.tot.xmin =  -256.0f;
        ar->v2d.tot.ymin =  -256.0f;
        ar->v2d.tot.xmax = 768.0f;
        ar->v2d.tot.ymax = 768.0f;
-       
+
        ar->v2d.cur.xmin =  -256.0f;
        ar->v2d.cur.ymin =  -256.0f;
        ar->v2d.cur.xmax = 768.0f;
        ar->v2d.cur.ymax = 768.0f;
-       
-       ar->v2d.min[0]= 1.0f;
-       ar->v2d.min[1]= 1.0f;
-       
-       ar->v2d.max[0]= 32000.0f;
-       ar->v2d.max[1]= 32000.0f;
-       
-       ar->v2d.minzoom= 0.09f;
-       ar->v2d.maxzoom= 2.31f;
-       
-       ar->v2d.scroll= (V2D_SCROLL_RIGHT|V2D_SCROLL_BOTTOM);
-       ar->v2d.keepzoom= V2D_LIMITZOOM|V2D_KEEPASPECT;
-       ar->v2d.keeptot= 0;
-       
+
+       ar->v2d.min[0] = 1.0f;
+       ar->v2d.min[1] = 1.0f;
+
+       ar->v2d.max[0] = 32000.0f;
+       ar->v2d.max[1] = 32000.0f;
+
+       ar->v2d.minzoom = 0.09f;
+       ar->v2d.maxzoom = 2.31f;
+
+       ar->v2d.scroll = (V2D_SCROLL_RIGHT | V2D_SCROLL_BOTTOM);
+       ar->v2d.keepzoom = V2D_LIMITZOOM | V2D_KEEPASPECT;
+       ar->v2d.keeptot = 0;
+
        return (SpaceLink *)snode;
 }
 
 /* not spacelink itself */
 static void node_free(SpaceLink *UNUSED(sl))
-{      
-       
+{
+
 }
 
 
@@ -170,10 +170,10 @@ static void node_init(struct wmWindowManager *UNUSED(wm), ScrArea *UNUSED(sa))
 static void node_area_listener(ScrArea *sa, wmNotifier *wmn)
 {
        /* note, ED_area_tag_refresh will re-execute compositor */
-       SpaceNode *snode= sa->spacedata.first;
-       int type= snode->treetype;
+       SpaceNode *snode = sa->spacedata.first;
+       int type = snode->treetype;
        short shader_type = snode->shaderfrom;
-       
+
        /* preview renders */
        switch (wmn->category) {
                case NC_SCENE:
@@ -186,9 +186,9 @@ static void node_area_listener(ScrArea *sa, wmNotifier *wmn)
                                        ED_area_tag_redraw(sa);
                                        break;
                                case ND_TRANSFORM_DONE:
-                                       if (type==NTREE_COMPOSIT) {
+                                       if (type == NTREE_COMPOSIT) {
                                                if (snode->flag & SNODE_AUTO_RENDER) {
-                                                       snode->recalc= 1;
+                                                       snode->recalc = 1;
                                                        ED_area_tag_refresh(sa);
                                                }
                                        }
@@ -196,43 +196,43 @@ static void node_area_listener(ScrArea *sa, wmNotifier *wmn)
                        }
                        break;
                case NC_WM:
-                       if (wmn->data==ND_FILEREAD)
+                       if (wmn->data == ND_FILEREAD)
                                ED_area_tag_refresh(sa);
                        break;
-               
+
                /* future: add ID checks? */
                case NC_MATERIAL:
-                       if (type==NTREE_SHADER) {
-                               if (wmn->data==ND_SHADING)
+                       if (type == NTREE_SHADER) {
+                               if (wmn->data == ND_SHADING)
                                        ED_area_tag_refresh(sa);
-                               else if (wmn->data==ND_SHADING_DRAW)
+                               else if (wmn->data == ND_SHADING_DRAW)
                                        ED_area_tag_refresh(sa);
-                               else if (wmn->action==NA_ADDED && snode->edittree)
+                               else if (wmn->action == NA_ADDED && snode->edittree)
                                        nodeSetActiveID(snode->edittree, ID_MA, wmn->reference);
-                                       
+
                        }
                        break;
                case NC_TEXTURE:
-                       if (type==NTREE_SHADER || type==NTREE_TEXTURE) {
-                               if (wmn->data==ND_NODES)
+                       if (type == NTREE_SHADER || type == NTREE_TEXTURE) {
+                               if (wmn->data == ND_NODES)
                                        ED_area_tag_refresh(sa);
                        }
                        break;
                case NC_WORLD:
-                       if (type==NTREE_SHADER && shader_type==SNODE_SHADER_WORLD) {
-                               ED_area_tag_refresh(sa);        
+                       if (type == NTREE_SHADER && shader_type == SNODE_SHADER_WORLD) {
+                               ED_area_tag_refresh(sa);
                        }
                        break;
                case NC_OBJECT:
-                       if (type==NTREE_SHADER) {
-                               if (wmn->data==ND_OB_SHADING)
+                       if (type == NTREE_SHADER) {
+                               if (wmn->data == ND_OB_SHADING)
                                        ED_area_tag_refresh(sa);
                        }
                        break;
                case NC_SPACE:
-                       if (wmn->data==ND_SPACE_NODE)
+                       if (wmn->data == ND_SPACE_NODE)
                                ED_area_tag_refresh(sa);
-                       else if (wmn->data==ND_SPACE_NODE_VIEW)
+                       else if (wmn->data == ND_SPACE_NODE_VIEW)
                                ED_area_tag_redraw(sa);
                        break;
                case NC_NODE:
@@ -250,7 +250,7 @@ static void node_area_listener(ScrArea *sa, wmNotifier *wmn)
                        break;
                case NC_MASK:
                        if (wmn->action == NA_EDITED) {
-                               if (type==NTREE_COMPOSIT) {
+                               if (type == NTREE_COMPOSIT) {
                                        ED_area_tag_refresh(sa);
                                }
                        }
@@ -258,7 +258,7 @@ static void node_area_listener(ScrArea *sa, wmNotifier *wmn)
 
                case NC_IMAGE:
                        if (wmn->action == NA_EDITED) {
-                               if (type==NTREE_COMPOSIT) {
+                               if (type == NTREE_COMPOSIT) {
                                        /* 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. */
@@ -273,42 +273,42 @@ static void node_area_listener(ScrArea *sa, wmNotifier *wmn)
 static void node_area_refresh(const struct bContext *C, struct ScrArea *sa)
 {
        /* default now: refresh node is starting preview */
-       SpaceNode *snode= sa->spacedata.first;
+       SpaceNode *snode = sa->spacedata.first;
 
        snode_set_context(snode, CTX_data_scene(C));
-       
+
        if (snode->nodetree) {
-               if (snode->treetype==NTREE_SHADER) {
+               if (snode->treetype == NTREE_SHADER) {
                        if (GS(snode->id->name) == ID_MA) {
-                               Material *ma= (Material *)snode->id;
+                               Material *ma = (Material *)snode->id;
                                if (ma->use_nodes)
                                        ED_preview_shader_job(C, sa, snode->id, NULL, NULL, 100, 100, PR_NODE_RENDER);
                        }
                        else if (GS(snode->id->name) == ID_LA) {
-                               Lamp *la= (Lamp *)snode->id;
+                               Lamp *la = (Lamp *)snode->id;
                                if (la->use_nodes)
                                        ED_preview_shader_job(C, sa, snode->id, NULL, NULL, 100, 100, PR_NODE_RENDER);
                        }
                        else if (GS(snode->id->name) == ID_WO) {
-                               World *wo= (World *)snode->id;
+                               World *wo = (World *)snode->id;
                                if (wo->use_nodes)
                                        ED_preview_shader_job(C, sa, snode->id, NULL, NULL, 100, 100, PR_NODE_RENDER);
                        }
                }
-               else if (snode->treetype==NTREE_COMPOSIT) {
-                       Scene *scene= (Scene *)snode->id;
+               else if (snode->treetype == NTREE_COMPOSIT) {
+                       Scene *scene = (Scene *)snode->id;
                        if (scene->use_nodes) {
                                /* recalc is set on 3d view changes for auto compo */
                                if (snode->recalc) {
-                                       snode->recalc= 0;
-                                       node_render_changed_exec((struct bContext*)C, NULL);
+                                       snode->recalc = 0;
+                                       node_render_changed_exec((struct bContext *)C, NULL);
                                }
-                               else 
+                               else
                                        snode_composite_job(C, sa);
                        }
                }
-               else if (snode->treetype==NTREE_TEXTURE) {
-                       Tex *tex= (Tex *)snode->id;
+               else if (snode->treetype == NTREE_TEXTURE) {
+                       Tex *tex = (Tex *)snode->id;
                        if (tex->use_nodes) {
                                ED_preview_shader_job(C, sa, snode->id, NULL, NULL, 100, 100, PR_NODE_RENDER);
                        }
@@ -319,11 +319,11 @@ static void node_area_refresh(const struct bContext *C, struct ScrArea *sa)
 static SpaceLink *node_duplicate(SpaceLink *sl)
 {
        SpaceImage *snode = (SpaceImage *) sl;
-       SpaceNode *snoden= MEM_dupallocN(sl);
+       SpaceNode *snoden = MEM_dupallocN(sl);
        
        /* clear or remove stuff from old */
-       snoden->nodetree= NULL;
-       snoden->linkdrag.first= snoden->linkdrag.last= NULL;
+       snoden->nodetree = NULL;
+       snoden->linkdrag.first = snoden->linkdrag.last = NULL;
 
        BKE_color_managed_view_settings_copy(&snoden->view_settings, &snode->view_settings);
 
@@ -337,7 +337,7 @@ static void node_buttons_area_init(wmWindowManager *wm, ARegion *ar)
        wmKeyMap *keymap;
 
        ED_region_panels_init(wm, ar);
-       
+
        keymap = WM_keymap_find(wm->defaultconf, "Node Generic", SPACE_NODE, 0);
        WM_event_add_keymap_handler(&ar->handlers, keymap);
 }
@@ -349,12 +349,12 @@ static void node_buttons_area_draw(const bContext *C, ARegion *ar)
 
 static void node_cursor(wmWindow *win, ScrArea *sa, ARegion *ar)
 {
-       SpaceNode *snode= sa->spacedata.first;
-       
+       SpaceNode *snode = sa->spacedata.first;
+
        /* convert mouse coordinates to v2d space */
        UI_view2d_region_to_view(&ar->v2d, win->eventstate->x - ar->winrct.xmin, win->eventstate->y - ar->winrct.ymin,
                                 &snode->mx, &snode->my);
-       
+
        node_set_cursor(win, snode);
 }
 
@@ -363,26 +363,26 @@ static void node_main_area_init(wmWindowManager *wm, ARegion *ar)
 {
        wmKeyMap *keymap;
        ListBase *lb;
-       
+
        UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_CUSTOM, ar->winx, ar->winy);
-       
+
        /* own keymaps */
        keymap = WM_keymap_find(wm->defaultconf, "Node Generic", SPACE_NODE, 0);
        WM_event_add_keymap_handler(&ar->handlers, keymap);
-       
+
        keymap = WM_keymap_find(wm->defaultconf, "Node Editor", SPACE_NODE, 0);
        WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct);
-       
+
        /* add drop boxes */
        lb = WM_dropboxmap_find("Node Editor", SPACE_NODE, RGN_TYPE_WINDOW);
-       
+
        WM_event_add_dropbox_handler(&ar->handlers, lb);
 }
 
 static void node_main_area_draw(const bContext *C, ARegion *ar)
 {
-       View2D *v2d= &ar->v2d;
-       
+       View2D *v2d = &ar->v2d;
+
        drawnodespace(C, ar, v2d);
 }
 
@@ -391,13 +391,13 @@ static void node_main_area_draw(const bContext *C, ARegion *ar)
 
 static int node_drop_poll(bContext *UNUSED(C), wmDrag *drag, wmEvent *UNUSED(event))
 {
-       if (drag->type==WM_DRAG_ID) {
-               ID *id= (ID *)drag->poin;
-               if ( GS(id->name)==ID_IM )
+       if (drag->type == WM_DRAG_ID) {
+               ID *id = (ID *)drag->poin;
+               if (GS(id->name) == ID_IM)
                        return 1;
        }
-       else if (drag->type==WM_DRAG_PATH) {
-               if (ELEM(drag->icon, 0, ICON_FILE_IMAGE))       /* rule might not work? */
+       else if (drag->type == WM_DRAG_PATH) {
+               if (ELEM(drag->icon, 0, ICON_FILE_IMAGE))   /* rule might not work? */
                        return 1;
        }
        return 0;
@@ -405,10 +405,10 @@ static int node_drop_poll(bContext *UNUSED(C), wmDrag *drag, wmEvent *UNUSED(eve
 
 static void node_id_path_drop_copy(wmDrag *drag, wmDropBox *drop)
 {
-       ID *id= (ID *)drag->poin;
-       
+       ID *id = (ID *)drag->poin;
+
        if (id) {
-               RNA_string_set(drop->ptr, "name", id->name+2);
+               RNA_string_set(drop->ptr, "name", id->name + 2);
        }
        if (drag->path[0]) {
                RNA_string_set(drop->ptr, "filepath", drag->path);
@@ -418,10 +418,10 @@ static void node_id_path_drop_copy(wmDrag *drag, wmDropBox *drop)
 /* this region dropbox definition */
 static void node_dropboxes(void)
 {
-       ListBase *lb= WM_dropboxmap_find("Node Editor", SPACE_NODE, RGN_TYPE_WINDOW);
-       
+       ListBase *lb = WM_dropboxmap_find("Node Editor", SPACE_NODE, RGN_TYPE_WINDOW);
+
        WM_dropbox_add(lb, "NODE_OT_add_file", node_drop_poll, node_id_path_drop_copy);
-       
+
 }
 
 /* ************* end drop *********** */
@@ -435,8 +435,8 @@ static void node_header_area_init(wmWindowManager *UNUSED(wm), ARegion *ar)
 
 static void node_header_area_draw(const bContext *C, ARegion *ar)
 {
-       SpaceNode *snode= CTX_wm_space_node(C);
-       Scene *scene= CTX_data_scene(C);
+       SpaceNode *snode = CTX_wm_space_node(C);
+       Scene *scene = CTX_data_scene(C);
 
        /* find and set the context */
        snode_set_context(snode, scene);
@@ -450,11 +450,11 @@ static void node_region_listener(ARegion *ar, wmNotifier *wmn)
        /* context changes */
        switch (wmn->category) {
                case NC_SPACE:
-                       if (wmn->data==ND_SPACE_NODE)
+                       if (wmn->data == ND_SPACE_NODE)
                                ED_region_tag_redraw(ar);
                        break;
                case NC_SCREEN:
-                       if (wmn->data == ND_GPENCIL)    
+                       if (wmn->data == ND_GPENCIL)
                                ED_region_tag_redraw(ar);
                        break;
                case NC_SCENE:
@@ -464,7 +464,7 @@ static void node_region_listener(ARegion *ar, wmNotifier *wmn)
                        ED_region_tag_redraw(ar);
                        break;
                case NC_OBJECT:
-                       if (wmn->data==ND_OB_SHADING)
+                       if (wmn->data == ND_OB_SHADING)
                                ED_region_tag_redraw(ar);
                        break;
                case NC_ID:
@@ -478,17 +478,17 @@ const char *node_context_dir[] = {"selected_nodes", "active_node", NULL};
 
 static int node_context(const bContext *C, const char *member, bContextDataResult *result)
 {
-       SpaceNode *snode= CTX_wm_space_node(C);
-       
+       SpaceNode *snode = CTX_wm_space_node(C);
+
        if (CTX_data_dir(member)) {
                CTX_data_dir_set(result, node_context_dir);
                return 1;
        }
        else if (CTX_data_equals(member, "selected_nodes")) {
                bNode *node;
-               
+
                if (snode->edittree) {
-                       for (node=snode->edittree->nodes.last; node; node=node->prev) {
+                       for (node = snode->edittree->nodes.last; node; node = node->prev) {
                                if (node->flag & NODE_SELECT) {
                                        CTX_data_list_add(result, &snode->edittree->id, &RNA_Node, node);
                                }
@@ -506,67 +506,67 @@ static int node_context(const bContext *C, const char *member, bContextDataResul
                CTX_data_type_set(result, CTX_DATA_TYPE_POINTER);
                return 1;
        }
-       
+
        return 0;
 }
 
 /* only called once, from space/spacetypes.c */
 void ED_spacetype_node(void)
 {
-       SpaceType *st= MEM_callocN(sizeof(SpaceType), "spacetype node");
+       SpaceType *st = MEM_callocN(sizeof(SpaceType), "spacetype node");
        ARegionType *art;
-       
-       st->spaceid= SPACE_NODE;
+
+       st->spaceid = SPACE_NODE;
        strncpy(st->name, "Node", BKE_ST_MAXNAME);
-       
-       st->new= node_new;
-       st->free= node_free;
-       st->init= node_init;
-       st->duplicate= node_duplicate;
-       st->operatortypes= node_operatortypes;
-       st->keymap= node_keymap;
-       st->listener= node_area_listener;
-       st->refresh= node_area_refresh;
-       st->context= node_context;
+
+       st->new = node_new;
+       st->free = node_free;
+       st->init = node_init;
+       st->duplicate = node_duplicate;
+       st->operatortypes = node_operatortypes;
+       st->keymap = node_keymap;
+       st->listener = node_area_listener;
+       st->refresh = node_area_refresh;
+       st->context = node_context;
        st->dropboxes = node_dropboxes;
-       
+
        /* regions: main window */
-       art= MEM_callocN(sizeof(ARegionType), "spacetype node region");
+       art = MEM_callocN(sizeof(ARegionType), "spacetype node region");
        art->regionid = RGN_TYPE_WINDOW;
-       art->init= node_main_area_init;
-       art->draw= node_main_area_draw;
-       art->listener= node_region_listener;
+       art->init = node_main_area_init;
+       art->draw = node_main_area_draw;
+       art->listener = node_region_listener;
        art->cursor = node_cursor;
        art->event_cursor = TRUE;
-       art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_VIEW2D|ED_KEYMAP_FRAMES|ED_KEYMAP_GPENCIL;
+       art->keymapflag = ED_KEYMAP_UI | ED_KEYMAP_VIEW2D | ED_KEYMAP_FRAMES | ED_KEYMAP_GPENCIL;
 
        BLI_addhead(&st->regiontypes, art);
-       
+
        /* regions: header */
-       art= MEM_callocN(sizeof(ARegionType), "spacetype node region");
+       art = MEM_callocN(sizeof(ARegionType), "spacetype node region");
        art->regionid = RGN_TYPE_HEADER;
-       art->prefsizey= HEADERY;
-       art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_VIEW2D|ED_KEYMAP_FRAMES|ED_KEYMAP_HEADER;
-       art->listener= node_region_listener;
-       art->init= node_header_area_init;
-       art->draw= node_header_area_draw;
-       
+       art->prefsizey = HEADERY;
+       art->keymapflag = ED_KEYMAP_UI | ED_KEYMAP_VIEW2D | ED_KEYMAP_FRAMES | ED_KEYMAP_HEADER;
+       art->listener = node_region_listener;
+       art->init = node_header_area_init;
+       art->draw = node_header_area_draw;
+
        BLI_addhead(&st->regiontypes, art);
 
        node_menus_register();
-       
+
        /* regions: listview/buttons */
-       art= MEM_callocN(sizeof(ARegionType), "spacetype node region");
+       art = MEM_callocN(sizeof(ARegionType), "spacetype node region");
        art->regionid = RGN_TYPE_UI;
-       art->prefsizex= 180; // XXX
-       art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_FRAMES;
-       art->listener= node_region_listener;
-       art->init= node_buttons_area_init;
-       art->draw= node_buttons_area_draw;
+       art->prefsizex = 180; // XXX
+       art->keymapflag = ED_KEYMAP_UI | ED_KEYMAP_FRAMES;
+       art->listener = node_region_listener;
+       art->init = node_buttons_area_init;
+       art->draw = node_buttons_area_draw;
        BLI_addhead(&st->regiontypes, art);
-       
+
        node_buttons_register(art);
-       
+
        BKE_spacetype_register(st);
 }