UI: rename navigation buttons -> controls
[blender.git] / source / blender / makesdna / DNA_view2d_types.h
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
17  * All rights reserved.
18  */
19
20 /** \file
21  * \ingroup DNA
22  */
23
24 #ifndef __DNA_VIEW2D_TYPES_H__
25 #define __DNA_VIEW2D_TYPES_H__
26
27 #include "DNA_vec_types.h"
28
29 /* ---------------------------------- */
30
31 /* View 2D data - stored per region */
32 typedef struct View2D {
33   /** Tot - area that data can be drawn in; cur - region of tot that is visible in viewport. */
34   rctf tot, cur;
35   /** Vert - vertical scrollbar region; hor - horizontal scrollbar region. */
36   rcti vert, hor;
37   /** Mask - region (in screenspace) within which 'cur' can be viewed. */
38   rcti mask;
39
40   /** Min/max sizes of 'cur' rect (only when keepzoom not set). */
41   float min[2], max[2];
42   /** Allowable zoom factor range (only when (keepzoom & V2D_LIMITZOOM)) is set. */
43   float minzoom, maxzoom;
44
45   /** Scroll - scrollbars to display (bitflag). */
46   short scroll;
47   /** Scroll_ui - temp settings used for UI drawing of scrollers. */
48   short scroll_ui;
49
50   /** Keeptot - 'cur' rect cannot move outside the 'tot' rect?. */
51   short keeptot;
52   /** Keepzoom - axes that zooming cannot occur on, and also clamp within zoom-limits. */
53   short keepzoom;
54   /** Keepofs - axes that translation is not allowed to occur on. */
55   short keepofs;
56
57   /** Settings. */
58   short flag;
59   /** Alignment of content in totrect. */
60   short align;
61
62   /** Storage of current winx/winy values, set in UI_view2d_size_update. */
63   short winx, winy;
64   /** Storage of previous winx/winy values encountered by UI_view2d_curRect_validate(),
65    * for keepaspect. */
66   short oldwinx, oldwiny;
67
68   /** Pivot point for transforms (rotate and scale). */
69   short around;
70
71   /** Different offset per tab, for buttons. */
72   float *tab_offset;
73   /** Number of tabs stored. */
74   int tab_num;
75   /** Current tab. */
76   int tab_cur;
77
78   /* Usually set externally (as in, not in view2d files). */
79   /** Alpha of vertical and horizontal scrollbars (range is [0, 255]). */
80   char alpha_vert, alpha_hor;
81   char _pad[6];
82
83   /* animated smooth view */
84   struct SmoothView2DStore *sms;
85   struct wmTimer *smooth_timer;
86 } View2D;
87
88 /* ---------------------------------- */
89
90 /* view zooming restrictions, per axis (v2d->keepzoom) */
91 enum {
92   /* zoom is clamped to lie within limits set by minzoom and maxzoom */
93   V2D_LIMITZOOM = (1 << 0),
94   /* aspect ratio is maintained on view resize */
95   V2D_KEEPASPECT = (1 << 1),
96   /* zoom is kept when the window resizes */
97   V2D_KEEPZOOM = (1 << 2),
98   /* zooming on x-axis is not allowed */
99   V2D_LOCKZOOM_X = (1 << 8),
100   /* zooming on y-axis is not allowed */
101   V2D_LOCKZOOM_Y = (1 << 9),
102 };
103
104 /* view panning restrictions, per axis (v2d->keepofs) */
105 enum {
106   /* panning on x-axis is not allowed */
107   V2D_LOCKOFS_X = (1 << 1),
108   /* panning on y-axis is not allowed */
109   V2D_LOCKOFS_Y = (1 << 2),
110   /* on resize, keep the x offset */
111   V2D_KEEPOFS_X = (1 << 3),
112   /* on resize, keep the y offset */
113   V2D_KEEPOFS_Y = (1 << 4),
114 };
115
116 /* view extent restrictions (v2d->keeptot) */
117 enum {
118   /** 'cur' view can be out of extents of 'tot' */
119   V2D_KEEPTOT_FREE = 0,
120   /** 'cur' rect is adjusted so that it satisfies the extents of 'tot', with some compromises */
121   V2D_KEEPTOT_BOUNDS = 1,
122   /** 'cur' rect is moved so that the 'minimum' bounds of the 'tot' rect are always respected
123    * (particularly in x-axis) */
124   V2D_KEEPTOT_STRICT = 2,
125 };
126
127 /* general refresh settings (v2d->flag) */
128 enum {
129   /* global view2d horizontal locking (for showing same time interval) */
130   /* TODO: this flag may be set in old files but is not accessible currently,
131    * should be exposed from RNA - Campbell */
132   V2D_VIEWSYNC_SCREEN_TIME = (1 << 0),
133   /* within area (i.e. between regions) view2d vertical locking */
134   V2D_VIEWSYNC_AREA_VERTICAL = (1 << 1),
135   /* apply pixel offsets on x-axis when setting view matrices */
136   V2D_PIXELOFS_X = (1 << 2),
137   /* apply pixel offsets on y-axis when setting view matrices */
138   V2D_PIXELOFS_Y = (1 << 3),
139   /* view settings need to be set still... */
140   V2D_IS_INITIALISED = (1 << 10),
141 };
142
143 /* scroller flags for View2D (v2d->scroll) */
144 enum {
145   /* left scrollbar */
146   V2D_SCROLL_LEFT = (1 << 0),
147   V2D_SCROLL_RIGHT = (1 << 1),
148   V2D_SCROLL_VERTICAL = (V2D_SCROLL_LEFT | V2D_SCROLL_RIGHT),
149   /* horizontal scrollbar */
150   V2D_SCROLL_TOP = (1 << 2),
151   V2D_SCROLL_BOTTOM = (1 << 3),
152   /* UNUSED                    = (1 << 4), */
153   V2D_SCROLL_HORIZONTAL = (V2D_SCROLL_TOP | V2D_SCROLL_BOTTOM),
154   /* display vertical scale handles */
155   V2D_SCROLL_VERTICAL_HANDLES = (1 << 5),
156   /* display horizontal scale handles */
157   V2D_SCROLL_HORIZONTAL_HANDLES = (1 << 6),
158   /* induce hiding of scrollbars - set by region drawing in response to size of region */
159   V2D_SCROLL_VERTICAL_HIDE = (1 << 7),
160   V2D_SCROLL_HORIZONTAL_HIDE = (1 << 8),
161   /* scrollbar extends beyond its available window -
162    * set when calculating scrollbars for drawing */
163   V2D_SCROLL_VERTICAL_FULLR = (1 << 9),
164   V2D_SCROLL_HORIZONTAL_FULLR = (1 << 10),
165 };
166
167 /* scroll_ui, activate flag for drawing */
168 enum {
169   V2D_SCROLL_H_ACTIVE = (1 << 0),
170   V2D_SCROLL_V_ACTIVE = (1 << 1),
171 };
172
173 /* alignment flags for totrect, flags use 'shading-out' convention (v2d->align) */
174 enum {
175   /* all quadrants free */
176   V2D_ALIGN_FREE = 0,
177   /* horizontal restrictions */
178   V2D_ALIGN_NO_POS_X = (1 << 0),
179   V2D_ALIGN_NO_NEG_X = (1 << 1),
180   /* vertical restrictions */
181   V2D_ALIGN_NO_POS_Y = (1 << 2),
182   V2D_ALIGN_NO_NEG_Y = (1 << 3),
183 };
184
185 #endif