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/space_node.c')
-rw-r--r--source/blender/editors/space_node/space_node.c60
1 files changed, 54 insertions, 6 deletions
diff --git a/source/blender/editors/space_node/space_node.c b/source/blender/editors/space_node/space_node.c
index afb2ec04f55..d9a4dda9d6e 100644
--- a/source/blender/editors/space_node/space_node.c
+++ b/source/blender/editors/space_node/space_node.c
@@ -40,19 +40,17 @@
#include "BLI_math.h"
#include "BLI_rand.h"
-#include "BKE_colortools.h"
#include "BKE_context.h"
#include "BKE_screen.h"
-#include "BKE_node.h"
#include "ED_render.h"
#include "ED_screen.h"
-#include "BIF_gl.h"
#include "WM_api.h"
#include "WM_types.h"
+#include "UI_resources.h"
#include "UI_view2d.h"
#include "RNA_access.h"
@@ -135,8 +133,8 @@ static SpaceLink *node_new(const bContext *C)
ar->v2d.max[0]= 32000.0f;
ar->v2d.max[1]= 32000.0f;
- ar->v2d.minzoom= 0.2f;
- ar->v2d.maxzoom= 1.21f;
+ 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;
@@ -199,7 +197,8 @@ static void node_area_listener(ScrArea *sa, wmNotifier *wmn)
ED_area_tag_redraw(sa);
break;
case NC_NODE:
- ED_area_tag_refresh(sa);
+ if (wmn->action == NA_EDITED)
+ ED_area_tag_refresh(sa);
break;
}
}
@@ -262,6 +261,7 @@ static void node_buttons_area_draw(const bContext *C, ARegion *ar)
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);
@@ -271,6 +271,11 @@ static void node_main_area_init(wmWindowManager *wm, ARegion *ar)
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)
@@ -280,6 +285,47 @@ static void node_main_area_draw(const bContext *C, ARegion *ar)
drawnodespace(C, ar, v2d);
}
+
+/* ************* dropboxes ************* */
+
+static int node_drop_poll(bContext *C, wmDrag *drag, wmEvent *event)
+{
+ 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? */
+ return 1;
+ }
+ return 0;
+}
+
+static void node_id_path_drop_copy(wmDrag *drag, wmDropBox *drop)
+{
+ ID *id= (ID *)drag->poin;
+
+ if(id) {
+ RNA_string_set(drop->ptr, "name", id->name+2);
+ }
+ if (drag->path[0]) {
+ RNA_string_set(drop->ptr, "filepath", drag->path);
+ }
+}
+
+/* this region dropbox definition */
+static void node_dropboxes(void)
+{
+ 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 *********** */
+
+
/* add handlers, stuff you only do once or on area/region changes */
static void node_header_area_init(wmWindowManager *wm, ARegion *ar)
{
@@ -340,6 +386,7 @@ static int node_context(const bContext *C, const char *member, bContextDataResul
CTX_data_list_add(result, &snode->edittree->id, &RNA_Node, node);
}
}
+ CTX_data_type_set(result, CTX_DATA_TYPE_COLLECTION);
return 1;
}
@@ -364,6 +411,7 @@ void ED_spacetype_node(void)
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");