Cleanup: renamed `do_draw_overlay` to `do_draw_paintcursor`
[blender.git] / source / blender / makesdna / DNA_screen_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_SCREEN_TYPES_H__
25 #define __DNA_SCREEN_TYPES_H__
26
27 #include "DNA_defs.h"
28 #include "DNA_listBase.h"
29 #include "DNA_vec_types.h"
30 #include "DNA_view2d_types.h"
31
32 #include "DNA_ID.h"
33
34 struct ARegion;
35 struct ARegionType;
36 struct PanelType;
37 struct Scene;
38 struct SpaceLink;
39 struct SpaceType;
40 struct uiLayout;
41 struct wmDrawBuffer;
42 struct wmTimer;
43 struct wmTooltipState;
44
45 /* TODO Doing this is quite ugly :)
46  * Once the top-bar is merged bScreen should be refactored to use ScrAreaMap. */
47 #define AREAMAP_FROM_SCREEN(screen) ((ScrAreaMap *)&(screen)->vertbase)
48
49 typedef struct bScreen {
50   ID id;
51
52   /* TODO Should become ScrAreaMap now.
53    * ** NOTE: KEEP ORDER IN SYNC WITH ScrAreaMap! (see AREAMAP_FROM_SCREEN macro above) ** */
54   /** Screens have vertices/edges to define areas. */
55   ListBase vertbase;
56   ListBase edgebase;
57   ListBase areabase;
58
59   /** Screen level regions (menus), runtime only. */
60   ListBase regionbase;
61
62   struct Scene *scene DNA_DEPRECATED;
63
64   /** General flags. */
65   short flag;
66   /** Winid from WM, starts with 1. */
67   short winid;
68   /** User-setting for which editors get redrawn during anim playback. */
69   short redraws_flag;
70
71   /** Temp screen in a temp window, don't save (like user prefs). */
72   char temp;
73   /** Temp screen for image render display or fileselect. */
74   char state;
75   /** Notifier for drawing edges. */
76   char do_draw;
77   /** Notifier for scale screen, changed screen, etc. */
78   char do_refresh;
79   /** Notifier for gesture draw. */
80   char do_draw_gesture;
81   /** Notifier for paint cursor draw. */
82   char do_draw_paintcursor;
83   /** Notifier for dragging draw. */
84   char do_draw_drag;
85   /** Set to delay screen handling after switching back from maximized area. */
86   char skip_handling;
87   /** Set when scrubbing to avoid some costly updates. */
88   char scrubbing;
89   char _pad[1];
90
91   /** Active region that has mouse focus. */
92   struct ARegion *active_region;
93
94   /** If set, screen has timer handler added in window. */
95   struct wmTimer *animtimer;
96   /** Context callback. */
97   void *context;
98
99   /** Runtime. */
100   struct wmTooltipState *tool_tip;
101
102   PreviewImage *preview;
103 } bScreen;
104
105 typedef struct ScrVert {
106   struct ScrVert *next, *prev, *newv;
107   vec2s vec;
108   /* first one used internally, second one for tools */
109   short flag, editflag;
110 } ScrVert;
111
112 typedef struct ScrEdge {
113   struct ScrEdge *next, *prev;
114   ScrVert *v1, *v2;
115   /** 1 when at edge of screen. */
116   short border;
117   short flag;
118   char _pad[4];
119 } ScrEdge;
120
121 typedef struct ScrAreaMap {
122   /* ** NOTE: KEEP ORDER IN SYNC WITH LISTBASES IN bScreen! ** */
123
124   /** ScrVert - screens have vertices/edges to define areas. */
125   ListBase vertbase;
126   /** ScrEdge. */
127   ListBase edgebase;
128   /** ScrArea. */
129   ListBase areabase;
130 } ScrAreaMap;
131
132 typedef struct Panel_Runtime {
133   /* Applied to Panel.ofsx, but saved separately so we can track changes between redraws. */
134   int region_ofsx;
135
136   /* For instanced panels: Index of the list item the panel corresponds to. */
137   int list_index;
138 } Panel_Runtime;
139
140 /** The part from uiBlock that needs saved in file. */
141 typedef struct Panel {
142   struct Panel *next, *prev;
143
144   /** Runtime. */
145   struct PanelType *type;
146   /** Runtime for drawing. */
147   struct uiLayout *layout;
148
149   /** Defined as UI_MAX_NAME_STR. */
150   char panelname[64];
151   /** Panel name is identifier for restoring location. */
152   char drawname[64];
153   /** Offset within the region. */
154   int ofsx, ofsy;
155   /** Panel size including children. */
156   int sizex, sizey;
157   /** Panel size excluding children. */
158   int blocksizex, blocksizey;
159   short labelofs;
160   char _pad[2];
161   short flag, runtime_flag;
162   short control;
163   short snap;
164   /** Panels are aligned according to increasing sort-order. */
165   int sortorder;
166   /** Runtime for panel manipulation. */
167   void *activedata;
168   /** Sub panels. */
169   ListBase children;
170
171   Panel_Runtime runtime;
172 } Panel;
173
174 /**
175  * Notes on Panel Categories:
176  *
177  * - #ARegion.panels_category (#PanelCategoryDyn)
178  *   is a runtime only list of categories collected during draw.
179  *
180  * - #ARegion.panels_category_active (#PanelCategoryStack)
181  *   is basically a list of strings (category id's).
182  *
183  * Clicking on a tab moves it to the front of region->panels_category_active,
184  * If the context changes so this tab is no longer displayed,
185  * then the first-most tab in #ARegion.panels_category_active is used.
186  *
187  * This way you can change modes and always have the tab you last clicked on.
188  */
189
190 /* region level tabs */
191 #
192 #
193 typedef struct PanelCategoryDyn {
194   struct PanelCategoryDyn *next, *prev;
195   char idname[64];
196   rcti rect;
197 } PanelCategoryDyn;
198
199 /* region stack of active tabs */
200 typedef struct PanelCategoryStack {
201   struct PanelCategoryStack *next, *prev;
202   char idname[64];
203 } PanelCategoryStack;
204
205 /* uiList dynamic data... */
206 /* These two Lines with # tell makesdna this struct can be excluded. */
207 #
208 #
209 typedef struct uiListDyn {
210   /** Number of rows needed to draw all elements. */
211   int height;
212   /** Actual visual height of the list (in rows). */
213   int visual_height;
214   /** Minimal visual height of the list (in rows). */
215   int visual_height_min;
216
217   /** Number of items in collection. */
218   int items_len;
219   /** Number of items actually visible after filtering. */
220   int items_shown;
221
222   /* Those are temp data used during drag-resize with GRIP button
223    * (they are in pixels, the meaningful data is the
224    * difference between resize_prev and resize)...
225    */
226   int resize;
227   int resize_prev;
228
229   /* Filtering data. */
230   /** Items_len length. */
231   int *items_filter_flags;
232   /** Org_idx -> new_idx, items_len length. */
233   int *items_filter_neworder;
234 } uiListDyn;
235
236 typedef struct uiList { /* some list UI data need to be saved in file */
237   struct uiList *next, *prev;
238
239   /** Runtime. */
240   struct uiListType *type;
241
242   /** Defined as UI_MAX_NAME_STR. */
243   char list_id[64];
244
245   /** How items are layedout in the list. */
246   int layout_type;
247   int flag;
248
249   int list_scroll;
250   int list_grip;
251   int list_last_len;
252   int list_last_activei;
253
254   /* Filtering data. */
255   /** Defined as UI_MAX_NAME_STR. */
256   char filter_byname[64];
257   int filter_flag;
258   int filter_sort_flag;
259
260   /* Custom sub-classes properties. */
261   IDProperty *properties;
262
263   /* Dynamic data (runtime). */
264   uiListDyn *dyn_data;
265 } uiList;
266
267 typedef struct TransformOrientation {
268   struct TransformOrientation *next, *prev;
269   /** MAX_NAME. */
270   char name[64];
271   float mat[3][3];
272   char _pad[4];
273 } TransformOrientation;
274
275 /** Some preview UI data need to be saved in file. */
276 typedef struct uiPreview {
277   struct uiPreview *next, *prev;
278
279   /** Defined as UI_MAX_NAME_STR. */
280   char preview_id[64];
281   short height;
282   char _pad1[6];
283 } uiPreview;
284
285 /* These two lines with # tell makesdna this struct can be excluded.
286  * Should be: #ifndef WITH_GLOBAL_AREA_WRITING */
287 #
288 #
289 typedef struct ScrGlobalAreaData {
290   /* Global areas have a non-dynamic size. That means, changing the window
291    * size doesn't affect their size at all. However, they can still be
292    * 'collapsed', by changing this value. Ignores DPI (ED_area_global_size_y
293    * and winx/winy don't) */
294   short cur_fixed_height;
295   /* For global areas, this is the min and max size they can use depending on
296    * if they are 'collapsed' or not. */
297   short size_min, size_max;
298   /** GlobalAreaAlign. */
299   short align;
300
301   /** GlobalAreaFlag. */
302   short flag;
303   char _pad[2];
304 } ScrGlobalAreaData;
305
306 enum GlobalAreaFlag {
307   GLOBAL_AREA_IS_HIDDEN = (1 << 0),
308 };
309
310 typedef enum GlobalAreaAlign {
311   GLOBAL_AREA_ALIGN_TOP = 0,
312   GLOBAL_AREA_ALIGN_BOTTOM = 1,
313 } GlobalAreaAlign;
314
315 typedef struct ScrArea_Runtime {
316   struct bToolRef *tool;
317   char is_tool_set;
318   char _pad0[7];
319 } ScrArea_Runtime;
320
321 typedef struct ScrArea {
322   struct ScrArea *next, *prev;
323
324   /** Ordered (bl, tl, tr, br). */
325   ScrVert *v1, *v2, *v3, *v4;
326   /** If area==full, this is the parent. */
327   bScreen *full;
328
329   /** Rect bound by v1 v2 v3 v4. */
330   rcti totrct;
331
332   /**
333    * eSpace_Type (SPACE_FOO).
334    *
335    * Temporarily used while switching area type, otherwise this should be SPACE_EMPTY.
336    * Also, versioning uses it to nicely replace deprecated * editors.
337    * It's been there for ages, name doesn't fit any more.
338    */
339   char spacetype;
340   /** #eSpace_Type (SPACE_FOO). */
341   char butspacetype;
342   short butspacetype_subtype;
343
344   /** Size. */
345   short winx, winy;
346
347   /** OLD! 0=no header, 1= down, 2= up. */
348   char headertype DNA_DEPRECATED;
349   /** Private, for spacetype refresh callback. */
350   char do_refresh;
351   short flag;
352   /**
353    * Index of last used region of 'RGN_TYPE_WINDOW'
354    * runtime variable, updated by executing operators.
355    */
356   short region_active_win;
357   char _pad[2];
358
359   /** Callbacks for this space type. */
360   struct SpaceType *type;
361
362   /* Non-NULL if this area is global. */
363   ScrGlobalAreaData *global;
364
365   /* A list of space links (editors) that were open in this area before. When
366    * changing the editor type, we try to reuse old editor data from this list.
367    * The first item is the active/visible one.
368    */
369   /** #SpaceLink. */
370   ListBase spacedata;
371   /* NOTE: This region list is the one from the active/visible editor (first item in
372    * spacedata list). Use SpaceLink.regionbase if it's inactive (but only then)!
373    */
374   /** #ARegion. */
375   ListBase regionbase;
376   /** #wmEventHandler. */
377   ListBase handlers;
378
379   /** #AZone. */
380   ListBase actionzones;
381
382   ScrArea_Runtime runtime;
383 } ScrArea;
384
385 typedef struct ARegion_Runtime {
386   /* Panel category to use between 'layout' and 'draw'. */
387   const char *category;
388
389   /**
390    * The visible part of the region, use with region overlap not to draw
391    * on top of the overlapping regions.
392    *
393    * Lazy initialize, zero'd when unset, relative to #ARegion.winrct x/y min. */
394   rcti visible_rect;
395
396   /* The offset needed to not overlap with window scrollbars. Only used by HUD regions for now. */
397   int offset_x, offset_y;
398 } ARegion_Runtime;
399
400 typedef struct ARegion {
401   struct ARegion *next, *prev;
402
403   /** 2D-View scrolling/zoom info (most regions are 2d anyways). */
404   View2D v2d;
405   /** Coordinates of region. */
406   rcti winrct;
407   /** Runtime for partial redraw, same or smaller than winrct. */
408   rcti drawrct;
409   /** Size. */
410   short winx, winy;
411
412   /** Region is currently visible on screen. */
413   short visible;
414   /** Window, header, etc. identifier for drawing. */
415   short regiontype;
416   /** How it should split. */
417   short alignment;
418   /** Hide, .... */
419   short flag;
420
421   /** Current split size in unscaled pixels (if zero it uses regiontype).
422    * To convert to pixels use: `UI_DPI_FAC * region->sizex + 0.5f`.
423    * However to get the current region size, you should usually use winx/winy from above, not this!
424    */
425   short sizex, sizey;
426
427   /** Private, cached notifier events. */
428   short do_draw;
429   /** Private, cached notifier events. */
430   short do_draw_paintcursor;
431   /** Private, set for indicate drawing overlapped. */
432   short overlap;
433   /** Temporary copy of flag settings for clean fullscreen. */
434   short flagfullscreen;
435
436   /** Callbacks for this region type. */
437   struct ARegionType *type;
438
439   /** #uiBlock. */
440   ListBase uiblocks;
441   /** Panel. */
442   ListBase panels;
443   /** Stack of panel categories. */
444   ListBase panels_category_active;
445   /** #uiList. */
446   ListBase ui_lists;
447   /** #uiPreview. */
448   ListBase ui_previews;
449   /** #wmEventHandler. */
450   ListBase handlers;
451   /** Panel categories runtime. */
452   ListBase panels_category;
453
454   /** Gizmo-map of this region. */
455   struct wmGizmoMap *gizmo_map;
456   /** Blend in/out. */
457   struct wmTimer *regiontimer;
458   struct wmDrawBuffer *draw_buffer;
459
460   /** Use this string to draw info. */
461   char *headerstr;
462   /** XXX 2.50, need spacedata equivalent?. */
463   void *regiondata;
464
465   ARegion_Runtime runtime;
466 } ARegion;
467
468 /** #ScrArea.flag */
469 enum {
470   HEADER_NO_PULLDOWN = (1 << 0),
471 //  AREA_FLAG_UNUSED_1           = (1 << 1),
472 //  AREA_FLAG_UNUSED_2           = (1 << 2),
473 #ifdef DNA_DEPRECATED_ALLOW
474   AREA_TEMP_INFO = (1 << 3), /* versioned to make slot reusable */
475 #endif
476   /** Update size of regions within the area. */
477   AREA_FLAG_REGION_SIZE_UPDATE = (1 << 3),
478   AREA_FLAG_ACTIVE_TOOL_UPDATE = (1 << 4),
479   // AREA_FLAG_UNUSED_5 = (1 << 5),
480
481   AREA_FLAG_UNUSED_6 = (1 << 6), /* cleared */
482
483   /**
484    * For temporary full-screens (file browser, image editor render)
485    * that are opened above user set full-screens.
486    */
487   AREA_FLAG_STACKED_FULLSCREEN = (1 << 7),
488   /** Update action zones (even if the mouse is not intersecting them). */
489   AREA_FLAG_ACTIONZONES_UPDATE = (1 << 8),
490 };
491
492 #define AREAGRID 4
493 #define AREAMINX 32
494 #define HEADER_PADDING_Y 6
495 #define HEADERY (20 + HEADER_PADDING_Y)
496
497 /** #bScreen.flag */
498 enum {
499   SCREEN_DEPRECATED = 1,
500   SCREEN_COLLAPSE_STATUSBAR = 2,
501 };
502
503 /** #bScreen.state */
504 enum {
505   SCREENNORMAL = 0,
506   SCREENMAXIMIZED = 1, /* one editor taking over the screen */
507   SCREENFULL = 2,      /* one editor taking over the screen with no bare-minimum UI elements */
508 };
509
510 /** #bScreen.redraws_flag */
511 typedef enum eScreen_Redraws_Flag {
512   TIME_REGION = (1 << 0),
513   TIME_ALL_3D_WIN = (1 << 1),
514   TIME_ALL_ANIM_WIN = (1 << 2),
515   TIME_ALL_BUTS_WIN = (1 << 3),
516   // TIME_WITH_SEQ_AUDIO    = (1 << 4), /* DEPRECATED */
517   TIME_SEQ = (1 << 5),
518   TIME_ALL_IMAGE_WIN = (1 << 6),
519   // TIME_CONTINUE_PHYSICS  = (1 << 7), /* UNUSED */
520   TIME_NODES = (1 << 8),
521   TIME_CLIPS = (1 << 9),
522
523   TIME_FOLLOW = (1 << 15),
524 } eScreen_Redraws_Flag;
525
526 /** #Panel.flag */
527 enum {
528   PNL_SELECT = (1 << 0),
529   PNL_CLOSEDX = (1 << 1),
530   PNL_CLOSEDY = (1 << 2),
531   PNL_CLOSED = (PNL_CLOSEDX | PNL_CLOSEDY),
532   /*PNL_TABBED    = (1 << 3), */ /*UNUSED*/
533   PNL_OVERLAP = (1 << 4),
534   PNL_PIN = (1 << 5),
535   PNL_POPOVER = (1 << 6),
536   /** The panel has been drag-drop reordered and the instanced panel list needs to be rebuilt. */
537   PNL_INSTANCED_LIST_ORDER_CHANGED = (1 << 7),
538 };
539
540 /** #Panel.snap - for snapping to screen edges */
541 #define PNL_SNAP_NONE 0
542 /* #define PNL_SNAP_TOP     1 */
543 /* #define PNL_SNAP_RIGHT       2 */
544 #define PNL_SNAP_BOTTOM 4
545 /* #define PNL_SNAP_LEFT        8 */
546
547 /* #define PNL_SNAP_DIST        9.0 */
548
549 /* paneltype flag */
550 enum {
551   PNL_DEFAULT_CLOSED = (1 << 0),
552   PNL_NO_HEADER = (1 << 1),
553   /** Makes buttons in the header shrink/stretch to fill full layout width. */
554   PNL_LAYOUT_HEADER_EXPAND = (1 << 2),
555   PNL_LAYOUT_VERT_BAR = (1 << 3),
556   /** This panel type represents data external to the UI. */
557   PNL_INSTANCED = (1 << 4),
558   /** Draw panel like a box widget. */
559   PNL_DRAW_BOX = (1 << 6),
560 };
561
562 /* Fallback panel category (only for old scripts which need updating) */
563 #define PNL_CATEGORY_FALLBACK "Misc"
564
565 /** #uiList.layout_type */
566 enum {
567   UILST_LAYOUT_DEFAULT = 0,
568   UILST_LAYOUT_COMPACT = 1,
569   UILST_LAYOUT_GRID = 2,
570 };
571
572 /** #uiList.flag */
573 enum {
574   /* Scroll list to make active item visible. */
575   UILST_SCROLL_TO_ACTIVE_ITEM = 1 << 0,
576 };
577
578 /* Value (in number of items) we have to go below minimum shown items to enable auto size. */
579 #define UI_LIST_AUTO_SIZE_THRESHOLD 1
580
581 /* uiList filter flags (dyn_data) */
582 /* WARNING! Those values are used by integer RNA too, which does not handle well values > INT_MAX.
583  *          So please do not use 32nd bit here. */
584 enum {
585   UILST_FLT_ITEM = 1 << 30, /* This item has passed the filter process successfully. */
586 };
587
588 /** #uiList.filter_flag */
589 enum {
590   UILST_FLT_SHOW = 1 << 0,            /* Show filtering UI. */
591   UILST_FLT_EXCLUDE = UILST_FLT_ITEM, /* Exclude filtered items, *must* use this same value. */
592 };
593
594 /** #uiList.filter_sort_flag */
595 enum {
596   /* Plain values (only one is valid at a time, once masked with UILST_FLT_SORT_MASK. */
597   /** Just for sake of consistency. */
598   /* UILST_FLT_SORT_INDEX = 0, */ /* UNUSED */
599   UILST_FLT_SORT_ALPHA = 1,
600
601   /* Bitflags affecting behavior of any kind of sorting. */
602   /** Special flag to indicate that order is locked (not user-changeable). */
603   UILST_FLT_SORT_LOCK = 1u << 30,
604   /** Special value, bitflag used to reverse order! */
605   UILST_FLT_SORT_REVERSE = 1u << 31,
606 };
607
608 #define UILST_FLT_SORT_MASK (((unsigned int)(UILST_FLT_SORT_REVERSE | UILST_FLT_SORT_LOCK)) - 1)
609
610 /* regiontype, first two are the default set */
611 /* Do NOT change order, append on end. Types are hardcoded needed */
612 typedef enum eRegionType {
613   RGN_TYPE_WINDOW = 0,
614   RGN_TYPE_HEADER = 1,
615   RGN_TYPE_CHANNELS = 2,
616   RGN_TYPE_TEMPORARY = 3,
617   RGN_TYPE_UI = 4,
618   RGN_TYPE_TOOLS = 5,
619   RGN_TYPE_TOOL_PROPS = 6,
620   RGN_TYPE_PREVIEW = 7,
621   RGN_TYPE_HUD = 8,
622   /* Region to navigate the main region from (RGN_TYPE_WINDOW). */
623   RGN_TYPE_NAV_BAR = 9,
624   /* A place for buttons to trigger execution of something that was set up in other regions. */
625   RGN_TYPE_EXECUTE = 10,
626   RGN_TYPE_FOOTER = 11,
627   RGN_TYPE_TOOL_HEADER = 12,
628 } eRegionType;
629 /* use for function args */
630 #define RGN_TYPE_ANY -1
631
632 /* Region supports panel tabs (categories). */
633 #define RGN_TYPE_HAS_CATEGORY_MASK (1 << RGN_TYPE_UI)
634
635 /** #ARegion.alignment */
636 enum {
637   RGN_ALIGN_NONE = 0,
638   RGN_ALIGN_TOP = 1,
639   RGN_ALIGN_BOTTOM = 2,
640   RGN_ALIGN_LEFT = 3,
641   RGN_ALIGN_RIGHT = 4,
642   RGN_ALIGN_HSPLIT = 5,
643   RGN_ALIGN_VSPLIT = 6,
644   RGN_ALIGN_FLOAT = 7,
645   RGN_ALIGN_QSPLIT = 8,
646   /* Maximum 15. */
647
648   /* Flags start here. */
649   RGN_SPLIT_PREV = 32,
650 };
651
652 /** Mask out flags so we can check the alignment. */
653 #define RGN_ALIGN_ENUM_FROM_MASK(align) ((align) & ((1 << 4) - 1))
654
655 /** #ARegion.flag */
656 enum {
657   RGN_FLAG_HIDDEN = (1 << 0),
658   RGN_FLAG_TOO_SMALL = (1 << 1),
659   /**
660    * Force delayed reinit of region size data, so that region size is calculated
661    * just big enough to show all its content (if enough space is available).
662    * Note that only ED_region_header supports this right now.
663    */
664   RGN_FLAG_DYNAMIC_SIZE = (1 << 2),
665   /** Region data is NULL'd on read, never written. */
666   RGN_FLAG_TEMP_REGIONDATA = (1 << 3),
667   /** The region must either use its prefsizex/y or be hidden. */
668   RGN_FLAG_PREFSIZE_OR_HIDDEN = (1 << 4),
669   /** Size has been clamped (floating regions only). */
670   RGN_FLAG_SIZE_CLAMP_X = (1 << 5),
671   RGN_FLAG_SIZE_CLAMP_Y = (1 << 6),
672   /** When the user sets the region is hidden,
673    * needed for floating regions that may be hidden for other reasons. */
674   RGN_FLAG_HIDDEN_BY_USER = (1 << 7),
675 };
676
677 /** #ARegion.do_draw */
678 enum {
679   /* Region must be fully redrawn. */
680   RGN_DRAW = 1,
681   /* Redraw only part of region, for sculpting and painting to get smoother
682    * stroke painting on heavy meshes. */
683   RGN_DRAW_PARTIAL = 2,
684   /* For outliner, to do faster redraw without rebuilding outliner tree.
685    * For 3D viewport, to display a new progressive render sample without
686    * while other buffers and overlays remain unchanged. */
687   RGN_DRAW_NO_REBUILD = 4,
688
689   /* Set while region is being drawn. */
690   RGN_DRAWING = 8,
691   /* For popups, to refresh UI layout along with drawing. */
692   RGN_REFRESH_UI = 16,
693
694   /* Only editor overlays (currently gizmos only!) should be redrawn. */
695   RGN_DRAW_EDITOR_OVERLAYS = 32,
696 };
697
698 #endif /* __DNA_SCREEN_TYPES_H__ */