diff options
author | Campbell Barton <ideasman42@gmail.com> | 2012-08-03 01:36:33 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2012-08-03 01:36:33 +0400 |
commit | 5e60ccc65c09f9b2e344ecfd9584611839ecdff6 (patch) | |
tree | 4cefda503ecd98627d49c2e7739cb9da2ef13ca3 /source/blender/editors/space_node/node_view.c | |
parent | e86e5074f6d4fdc455d64cc362f6b4f5005f79b8 (diff) |
rename node_state.c --> node_view.c
Diffstat (limited to 'source/blender/editors/space_node/node_view.c')
-rw-r--r-- | source/blender/editors/space_node/node_view.c | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/source/blender/editors/space_node/node_view.c b/source/blender/editors/space_node/node_view.c new file mode 100644 index 00000000000..b9fb812dc04 --- /dev/null +++ b/source/blender/editors/space_node/node_view.c @@ -0,0 +1,132 @@ +/* + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * The Original Code is Copyright (C) 2008 Blender Foundation. + * All rights reserved. + * + * + * Contributor(s): Blender Foundation, Nathan Letwory + * + * ***** END GPL LICENSE BLOCK ***** + */ + +/** \file blender/editors/space_node/node_view.c + * \ingroup spnode + */ + +#include <stdio.h> + +#include "DNA_node_types.h" +#include "DNA_scene_types.h" + +#include "BLI_rect.h" +#include "BLI_utildefines.h" + +#include "BKE_context.h" +#include "BKE_node.h" + +#include "ED_screen.h" + +#include "RNA_access.h" +#include "RNA_define.h" + +#include "WM_api.h" +#include "WM_types.h" + +#include "UI_view2d.h" + +#include "node_intern.h" + + +/* **************** View All Operator ************** */ + +static void snode_home(ScrArea *UNUSED(sa), ARegion *ar, SpaceNode* snode) +{ + bNode *node; + rctf *cur; + float oldwidth, oldheight, width, height; + int first= 1; + + cur= &ar->v2d.cur; + + oldwidth= cur->xmax - cur->xmin; + oldheight= cur->ymax - cur->ymin; + + cur->xmin = cur->ymin = 0.0f; + cur->xmax=ar->winx; + cur->ymax=ar->winy; + + if (snode->edittree) { + for (node= snode->edittree->nodes.first; node; node= node->next) { + if (first) { + first= 0; + ar->v2d.cur= node->totr; + } + else { + BLI_rctf_union(cur, &node->totr); + } + } + } + + snode->xof= 0; + snode->yof= 0; + width= cur->xmax - cur->xmin; + height= cur->ymax- cur->ymin; + + if (width > height) { + float newheight; + newheight= oldheight * width/oldwidth; + cur->ymin = cur->ymin - newheight/4; + cur->ymax = cur->ymax + newheight/4; + } + else { + float newwidth; + newwidth= oldwidth * height/oldheight; + cur->xmin = cur->xmin - newwidth/4; + cur->xmax = cur->xmax + newwidth/4; + } + + ar->v2d.tot= ar->v2d.cur; + UI_view2d_curRect_validate(&ar->v2d); +} + +static int node_view_all_exec(bContext *C, wmOperator *UNUSED(op)) +{ + ScrArea *sa= CTX_wm_area(C); + ARegion *ar= CTX_wm_region(C); + SpaceNode *snode= CTX_wm_space_node(C); + + snode_home(sa, ar, snode); + ED_region_tag_redraw(ar); + + return OPERATOR_FINISHED; +} + +void NODE_OT_view_all(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "View All"; + ot->idname = "NODE_OT_view_all"; + ot->description = "Resize view so you can see all nodes"; + + /* api callbacks */ + ot->exec = node_view_all_exec; + ot->poll = ED_operator_node_active; + + /* flags */ + ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO; +} |