986996e43416bfb6cef7341b745fec8bfbba440b
[blender-staging.git] / source / blender / makesdna / DNA_view2d_types.h
1 /**
2  * blenlib/DNA_view2d_types.h (mar-2001 nzc)
3  *      
4  * $Id$ 
5  *
6  * ***** BEGIN GPL LICENSE BLOCK *****
7  *
8  * This program is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License
10  * as published by the Free Software Foundation; either version 2
11  * of the License, or (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software Foundation,
20  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
21  *
22  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
23  * All rights reserved.
24  *
25  * The Original Code is: all of this file.
26  *
27  * Contributor(s): Joshua Leung
28  *
29  * ***** END GPL LICENSE BLOCK *****
30  */
31 #ifndef DNA_VIEW2D_TYPES_H
32 #define DNA_VIEW2D_TYPES_H
33
34 #include "DNA_vec_types.h"
35
36 /* ---------------------------------- */
37
38 /* View 2D data - stored per region */
39 typedef struct View2D {
40         rctf tot, cur;                                  /* tot - area that data can be drawn in; cur - region of tot that is visible in viewport */
41         rcti vert, hor;                                 /* vert - vertical scrollbar region; hor - horizontal scrollbar region */
42         rcti mask;                                              /* mask - region (in screenspace) within which 'cur' can be viewed */
43         
44         float min[2], max[2];                   /* min/max sizes of 'cur' rect (only when keepzoom not set) */
45         float minzoom, maxzoom;                 /* self explanatory. allowable zoom factor range (only when keepzoom set) */
46         
47         short scroll;                                   /* scroll - scrollbars to display (bitflag) */
48         short keeptot;                                  /* keeptot - 'cur' rect cannot move outside the 'tot' rect? */
49         short keepzoom;                                 /* keepzoom - axes that zooming cannot occur on, and also clamp within zoom-limits */
50         short keepofs;                                  /* keepofs - axes that translation is not allowed to occur on */
51         
52         short flag;                                             /* settings */
53         short align;                                    /* alignment of content in totrect */
54         short type;                                             /* basic 'type' of View2D (for easy init) */ // err... do we want to store this?
55         
56         short winx, winy;                               /* storage of current winx/winy values, set in UI_view2d_size_update */
57         short oldwinx, oldwiny;                 /* storage of previous winx/winy values encountered by UI_view2d_curRect_validate(), for keepaspect */
58         
59         short around;                                   /* pivot point for transforms (rotate and scale) */
60         float cursor[2];                                /* only used in the UV view for now (for 2D-cursor) */
61 } View2D;
62
63 /* ---------------------------------- */
64
65 /* view zooming restrictions, per axis (v2d->keepzoom) */
66 #define V2D_KEEPZOOM            0x0001
67 #define V2D_KEEPASPECT          0x0002
68 #define V2D_LOCKZOOM_X          0x0100
69 #define V2D_LOCKZOOM_Y          0x0200
70
71 /* view panning restrictions, per axis (v2d->keepofs) */
72 #define V2D_LOCKOFS_X   (1<<1)
73 #define V2D_LOCKOFS_Y   (1<<2)
74
75 /* general refresh settings (v2d->flag) */
76         /* global view2d horizontal locking (for showing same time interval) */
77 #define V2D_VIEWSYNC_X          (1<<0)
78         /* within region view2d vertical locking */
79 #define V2D_VIEWSYNC_Y          (1<<1)
80
81
82 /* scroller thickness */
83 #define V2D_SCROLL_HEIGHT       16
84 #define V2D_SCROLL_WIDTH        16
85
86 /* half the size (in pixels) of scroller 'handles' */
87 #define V2D_SCROLLER_HANDLE_SIZE        5
88
89
90 /* scroller flags for View2D (v2d->scroll) */
91         /* left scrollbar */
92 #define V2D_SCROLL_LEFT                         (1<<0)          
93 #define V2D_SCROLL_RIGHT                        (1<<1)
94 #define V2D_SCROLL_VERTICAL             (V2D_SCROLL_LEFT|V2D_SCROLL_RIGHT)
95         /* horizontal scrollbar */
96 #define V2D_SCROLL_TOP                          (1<<2)
97 #define V2D_SCROLL_BOTTOM                       (1<<3)
98 #define V2D_SCROLL_HORIZONTAL           (V2D_SCROLL_TOP|V2D_SCROLL_BOTTOM)
99         /* special hacks for outliner hscroll - prevent hanging older versions of Blender */
100 #define V2D_SCROLL_BOTTOM_O             (1<<4)
101 #define V2D_SCROLL_HORIZONTAL_O         (V2D_SCROLL_TOP|V2D_SCROLL_BOTTOM_O)
102         /* scale markings - vertical */
103 #define V2D_SCROLL_SCALE_LEFT           (1<<5)
104 #define V2D_SCROLL_SCALE_RIGHT          (1<<6)
105 #define V2D_SCROLL_SCALE_VERTICAL       (V2D_SCROLL_SCALE_LEFT|V2D_SCROLL_SCALE_RIGHT)
106         /* scale markings - horizontal */
107 #define V2D_SCROLL_SCALE_BOTTOM         (1<<7)
108 #define V2D_SCROLL_SCALE_TOP            (1<<8)  
109 #define V2D_SCROLL_SCALE_HORIZONTAL     (V2D_SCROLL_SCALE_BOTTOM|V2D_SCROLL_SCALE_TOP)
110
111 /* alignment flags for totrect, flags use 'shading-out' convention (v2d->align) */
112         /* all quadrants free */
113 #define V2D_ALIGN_FREE                  0
114         /* horizontal restrictions */
115 #define V2D_ALIGN_NO_POS_X              (1<<0)
116 #define V2D_ALIGN_NO_NEG_X              (1<<1)
117         /* vertical restrictions */
118 #define V2D_ALIGN_NO_POS_Y              (1<<2)
119 #define V2D_ALIGN_NO_NEG_Y              (1<<3)
120
121
122 #endif
123