[#34013] [video sequence editor] Offset and crop of strips are wrong
[blender.git] / source / blender / blenkernel / BKE_screen.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): none yet.
24  *
25  * ***** END GPL LICENSE BLOCK *****
26  */
27 #ifndef __BKE_SCREEN_H__
28 #define __BKE_SCREEN_H__
29
30 /** \file BKE_screen.h
31  *  \ingroup bke
32  *  \since March 2001
33  *  \author nzc
34  */
35
36 struct ARegion;
37 struct Header;
38 struct ListBase;
39 struct Menu;
40 struct Panel;
41 struct Scene;
42 struct ScrArea;
43 struct SpaceType;
44 struct View3D;
45 struct bContext;
46 struct bContextDataResult;
47 struct bScreen;
48 struct uiLayout;
49 struct uiList;
50 struct uiMenuItem;
51 struct wmKeyConfig;
52 struct wmNotifier;
53 struct wmWindow;
54 struct wmWindowManager;
55
56 #include "RNA_types.h"
57
58 /* spacetype has everything stored to get an editor working, it gets initialized via 
59  * ED_spacetypes_init() in editors/space_api/spacetypes.c   */
60 /* an editor in Blender is a combined ScrArea + SpaceType + SpaceData */
61
62 #define BKE_ST_MAXNAME  64
63
64 typedef struct SpaceType {
65         struct SpaceType *next, *prev;
66         
67         char name[BKE_ST_MAXNAME];                  /* for menus */
68         int spaceid;                                /* unique space identifier */
69         int iconid;                                 /* icon lookup for menus */
70         
71         /* initial allocation, after this WM will call init() too */
72         struct SpaceLink    *(*new)(const struct bContext *C);
73         /* not free spacelink itself */
74         void (*free)(struct SpaceLink *);
75         
76         /* init is to cope with file load, screen (size) changes, check handlers */
77         void (*init)(struct wmWindowManager *, struct ScrArea *);
78         /* Listeners can react to bContext changes */
79         void (*listener)(struct ScrArea *, struct wmNotifier *);
80         
81         /* refresh context, called after filereads, ED_area_tag_refresh() */
82         void (*refresh)(const struct bContext *, struct ScrArea *);
83         
84         /* after a spacedata copy, an init should result in exact same situation */
85         struct SpaceLink    *(*duplicate)(struct SpaceLink *);
86
87         /* register operator types on startup */
88         void (*operatortypes)(void);
89         /* add default items to WM keymap */
90         void (*keymap)(struct wmKeyConfig *);
91         /* on startup, define dropboxes for spacetype+regions */
92         void (*dropboxes)(void);
93
94         /* return context data */
95         int (*context)(const struct bContext *, const char *, struct bContextDataResult *);
96
97         /* region type definitions */
98         ListBase regiontypes;
99         
100         /* tool shelf definitions */
101         ListBase toolshelf;
102                 
103         /* read and write... */
104         
105         /* default keymaps to add */
106         int keymapflag;
107         
108 } SpaceType;
109
110 /* region types are also defined using spacetypes_init, via a callback */
111
112 typedef struct ARegionType {
113         struct ARegionType *next, *prev;
114         
115         int regionid;           /* unique identifier within this space, defines RGN_TYPE_xxxx */
116         
117         /* add handlers, stuff you only do once or on area/region type/size changes */
118         void (*init)(struct wmWindowManager *, struct ARegion *);
119         /* draw entirely, view changes should be handled here */
120         void (*draw)(const struct bContext *, struct ARegion *);
121         /* contextual changes should be handled here */
122         void (*listener)(struct ARegion *, struct wmNotifier *);
123         
124         void (*free)(struct ARegion *);
125
126         /* split region, copy data optionally */
127         void        *(*duplicate)(void *);
128
129         
130         /* register operator types on startup */
131         void (*operatortypes)(void);
132         /* add own items to keymap */
133         void (*keymap)(struct wmKeyConfig *);
134         /* allows default cursor per region */
135         void (*cursor)(struct wmWindow *, struct ScrArea *, struct ARegion *ar);
136
137         /* return context data */
138         int (*context)(const struct bContext *, const char *, struct bContextDataResult *);
139
140         /* custom drawing callbacks */
141         ListBase drawcalls;
142
143         /* panels type definitions */
144         ListBase paneltypes;
145
146         /* header type definitions */
147         ListBase headertypes;
148         
149         /* hardcoded constraints, smaller than these values region is not visible */
150         int minsizex, minsizey;
151         /* when new region opens (region prefsizex/y are zero then */
152         int prefsizex, prefsizey;
153         /* default keymaps to add */
154         int keymapflag;
155         /* return without drawing. lock is set by region definition, and copied to do_lock by render. can become flag */
156         short do_lock, lock;
157         /* call cursor function on each move event */
158         short event_cursor;
159 } ARegionType;
160
161 /* panel types */
162
163 typedef struct PanelType {
164         struct PanelType *next, *prev;
165         
166         char idname[BKE_ST_MAXNAME];            /* unique name */
167         char label[BKE_ST_MAXNAME];             /* for panel header */
168         char context[BKE_ST_MAXNAME];           /* for buttons window */
169         int space_type;
170         int region_type;
171
172         int flag;
173
174         /* verify if the panel should draw or not */
175         int (*poll)(const struct bContext *, struct PanelType *);
176         /* draw header (optional) */
177         void (*draw_header)(const struct bContext *, struct Panel *);
178         /* draw entirely, view changes should be handled here */
179         void (*draw)(const struct bContext *, struct Panel *);
180
181         /* RNA integration */
182         ExtensionRNA ext;
183 } PanelType;
184
185 /* uilist types */
186
187 /* draw an item in the uiList */
188 typedef void (*uiListDrawItemFunc)(struct uiList *, struct bContext *, struct uiLayout *, struct PointerRNA *,
189                                    struct PointerRNA *, int, struct PointerRNA *, const char *, int);
190
191 typedef struct uiListType {
192         struct uiListType *next, *prev;
193
194         char idname[BKE_ST_MAXNAME];            /* unique name */
195
196         uiListDrawItemFunc draw_item;
197
198         /* RNA integration */
199         ExtensionRNA ext;
200 } uiListType;
201
202 /* header types */
203
204 typedef struct HeaderType {
205         struct HeaderType *next, *prev;
206
207         char idname[BKE_ST_MAXNAME];        /* unique name */
208         int space_type;
209
210         /* draw entirely, view changes should be handled here */
211         void (*draw)(const struct bContext *, struct Header *);
212
213         /* RNA integration */
214         ExtensionRNA ext;
215 } HeaderType;
216
217 typedef struct Header {
218         struct HeaderType *type;    /* runtime */
219         struct uiLayout *layout;    /* runtime for drawing */
220 } Header;
221
222
223 /* menu types */
224
225 typedef struct MenuType {
226         struct MenuType *next, *prev;
227
228         char idname[BKE_ST_MAXNAME];        /* unique name */
229         char label[BKE_ST_MAXNAME];         /* for button text */
230         char       *description;
231
232         /* verify if the menu should draw or not */
233         int (*poll)(const struct bContext *, struct MenuType *);
234         /* draw entirely, view changes should be handled here */
235         void (*draw)(const struct bContext *, struct Menu *);
236
237         /* RNA integration */
238         ExtensionRNA ext;
239 } MenuType;
240
241 typedef struct Menu {
242         struct MenuType *type;      /* runtime */
243         struct uiLayout *layout;    /* runtime for drawing */
244 } Menu;
245
246 /* spacetypes */
247 struct SpaceType *BKE_spacetype_from_id(int spaceid);
248 struct ARegionType *BKE_regiontype_from_id(struct SpaceType *st, int regionid);
249 const struct ListBase *BKE_spacetypes_list(void);
250 void BKE_spacetype_register(struct SpaceType *st);
251 void BKE_spacetypes_free(void); /* only for quitting blender */
252
253 /* spacedata */
254 void BKE_spacedata_freelist(ListBase *lb);
255 void BKE_spacedata_copylist(ListBase *lb1, ListBase *lb2);
256 void BKE_spacedata_draw_locks(int set);
257
258 /* area/regions */
259 struct ARegion *BKE_area_region_copy(struct SpaceType *st, struct ARegion *ar);
260 void            BKE_area_region_free(struct SpaceType *st, struct ARegion *ar);
261 void            BKE_screen_area_free(struct ScrArea *sa);
262
263 struct ARegion *BKE_area_find_region_type(struct ScrArea *sa, int type);
264 struct ARegion *BKE_area_find_region_active_win(struct ScrArea *sa);
265 struct ScrArea *BKE_screen_find_big_area(struct bScreen *sc, const int spacetype, const short min);
266
267 void BKE_screen_view3d_sync(struct View3D *v3d, struct Scene *scene);
268 void BKE_screen_view3d_scene_sync(struct bScreen *sc);
269 void BKE_screen_view3d_main_sync(ListBase *screen_lb, struct Scene *scene);
270
271 /* zoom factor conversion */
272 float BKE_screen_view3d_zoom_to_fac(float camzoom);
273 float BKE_screen_view3d_zoom_from_fac(float zoomfac);
274
275 /* screen */
276 void BKE_screen_free(struct bScreen *sc); 
277 unsigned int BKE_screen_visible_layers(struct bScreen *screen, struct Scene *scene);
278
279 #endif
280