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