Blender  V2.93
space_outliner.c
Go to the documentation of this file.
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) 2008 Blender Foundation.
17  * All rights reserved.
18  */
19 
24 #include <stdio.h>
25 #include <string.h>
26 
27 #include "MEM_guardedalloc.h"
28 
29 #include "BLI_blenlib.h"
30 #include "BLI_mempool.h"
31 #include "BLI_utildefines.h"
32 
33 #include "BKE_context.h"
34 #include "BKE_outliner_treehash.h"
35 #include "BKE_screen.h"
36 
37 #include "ED_screen.h"
38 #include "ED_space_api.h"
39 
40 #include "WM_api.h"
41 #include "WM_message.h"
42 #include "WM_types.h"
43 
44 #include "RNA_access.h"
45 
46 #include "DNA_object_types.h"
47 #include "DNA_scene_types.h"
48 
49 #include "UI_resources.h"
50 #include "UI_view2d.h"
51 
52 #include "outliner_intern.h"
53 #include "tree/tree_display.h"
54 
56 {
57  ListBase *lb;
58  wmKeyMap *keymap;
59 
60  /* make sure we keep the hide flags */
62  region->v2d.scroll &= ~(V2D_SCROLL_LEFT | V2D_SCROLL_TOP); /* prevent any noise of past */
65 
68  region->v2d.keeptot = V2D_KEEPTOT_STRICT;
69  region->v2d.minzoom = region->v2d.maxzoom = 1.0f;
70 
71  UI_view2d_region_reinit(&region->v2d, V2D_COMMONVIEW_LIST, region->winx, region->winy);
72 
73  /* own keymap */
74  keymap = WM_keymap_ensure(wm->defaultconf, "Outliner", SPACE_OUTLINER, 0);
76 
77  /* Add dropboxes */
80 }
81 
82 static void outliner_main_region_draw(const bContext *C, ARegion *region)
83 {
84  View2D *v2d = &region->v2d;
85 
86  /* clear */
88 
90 
91  /* reset view matrix */
93 
94  /* scrollers */
96 }
97 
99 {
100 }
101 
103 {
104  ScrArea *area = params->area;
105  ARegion *region = params->region;
106  wmNotifier *wmn = params->notifier;
107  SpaceOutliner *space_outliner = area->spacedata.first;
108 
109  /* context changes */
110  switch (wmn->category) {
111  case NC_WM:
112  switch (wmn->data) {
114  ED_region_tag_redraw(region);
115  break;
116  }
117  break;
118  case NC_SCENE:
119  switch (wmn->data) {
120  case ND_OB_ACTIVE:
121  case ND_OB_SELECT:
123  ED_region_tag_redraw(region);
124  }
125  else {
127  }
128  break;
129  case ND_OB_VISIBLE:
130  case ND_OB_RENDER:
131  case ND_MODE:
132  case ND_KEYINGSET:
133  case ND_FRAME:
134  case ND_RENDER_OPTIONS:
135  case ND_SEQUENCER:
136  case ND_LAYER_CONTENT:
137  case ND_WORLD:
138  case ND_SCENEBROWSE:
139  ED_region_tag_redraw(region);
140  break;
141  case ND_LAYER:
142  /* Avoid rebuild if only the active collection changes */
143  if ((wmn->subtype == NS_LAYER_COLLECTION) && (wmn->action == NA_ACTIVATED)) {
145  break;
146  }
147 
148  ED_region_tag_redraw(region);
149  break;
150  }
151  if (wmn->action == NA_EDITED) {
153  }
154  break;
155  case NC_OBJECT:
156  switch (wmn->data) {
157  case ND_TRANSFORM:
158  case ND_BONE_ACTIVE:
159  case ND_BONE_SELECT:
160  case ND_DRAW:
161  case ND_PARENT:
162  case ND_OB_SHADING:
163  ED_region_tag_redraw(region);
164  break;
165  case ND_CONSTRAINT:
166  /* all constraint actions now, for reordering */
167  ED_region_tag_redraw(region);
168  break;
169  case ND_MODIFIER:
170  /* all modifier actions now */
171  ED_region_tag_redraw(region);
172  break;
173  default:
174  /* Trigger update for NC_OBJECT itself */
175  ED_region_tag_redraw(region);
176  break;
177  }
178  break;
179  case NC_GROUP:
180  /* all actions now, todo: check outliner view mode? */
181  ED_region_tag_redraw(region);
182  break;
183  case NC_LAMP:
184  /* For updating light icons, when changing light type */
185  if (wmn->data == ND_LIGHTING_DRAW) {
186  ED_region_tag_redraw(region);
187  }
188  break;
189  case NC_SPACE:
190  if (wmn->data == ND_SPACE_OUTLINER) {
191  ED_region_tag_redraw(region);
192  }
193  break;
194  case NC_ID:
195  if (ELEM(wmn->action, NA_RENAME, NA_ADDED)) {
196  ED_region_tag_redraw(region);
197  }
198  break;
199  case NC_MATERIAL:
200  switch (wmn->data) {
201  case ND_SHADING_LINKS:
203  break;
204  }
205  break;
206  case NC_GEOM:
207  switch (wmn->data) {
208  case ND_VERTEX_GROUP:
209  case ND_DATA:
210  ED_region_tag_redraw(region);
211  break;
212  }
213  break;
214  case NC_ANIMATION:
215  switch (wmn->data) {
216  case ND_NLA_ACTCHANGE:
217  case ND_KEYFRAME:
218  ED_region_tag_redraw(region);
219  break;
220  case ND_ANIMCHAN:
221  if (ELEM(wmn->action, NA_SELECTED, NA_RENAME)) {
222  ED_region_tag_redraw(region);
223  }
224  break;
225  case ND_NLA:
226  if (ELEM(wmn->action, NA_ADDED, NA_REMOVED)) {
227  ED_region_tag_redraw(region);
228  }
229  break;
230  case ND_NLA_ORDER:
231  ED_region_tag_redraw(region);
232  break;
233  }
234  break;
235  case NC_GPENCIL:
236  if (ELEM(wmn->action, NA_EDITED, NA_SELECTED)) {
237  ED_region_tag_redraw(region);
238  }
239  break;
240  case NC_SCREEN:
241  if (ELEM(wmn->data, ND_LAYOUTDELETE, ND_LAYER)) {
242  ED_region_tag_redraw(region);
243  }
244  break;
245  case NC_MASK:
246  if (ELEM(wmn->action, NA_ADDED)) {
247  ED_region_tag_redraw(region);
248  }
249  break;
250  case NC_PAINTCURVE:
251  if (ELEM(wmn->action, NA_ADDED)) {
252  ED_region_tag_redraw(region);
253  }
254  break;
255  case NC_TEXT:
256  if (ELEM(wmn->action, NA_ADDED, NA_REMOVED)) {
257  ED_region_tag_redraw(region);
258  }
259  break;
260  }
261 }
262 
264 {
265  struct wmMsgBus *mbus = params->message_bus;
266  ScrArea *area = params->area;
267  ARegion *region = params->region;
268  SpaceOutliner *space_outliner = area->spacedata.first;
269 
270  wmMsgSubscribeValue msg_sub_value_region_tag_redraw = {
271  .owner = region,
272  .user_data = region,
274  };
275 
276  if (ELEM(space_outliner->outlinevis, SO_VIEW_LAYER, SO_SCENES, SO_OVERRIDES_LIBRARY)) {
277  WM_msg_subscribe_rna_anon_prop(mbus, Window, view_layer, &msg_sub_value_region_tag_redraw);
278  }
279 }
280 
281 /* ************************ header outliner area region *********************** */
282 
283 /* add handlers, stuff you only do once or on area/region changes */
285 {
286  ED_region_header_init(region);
287 }
288 
289 static void outliner_header_region_draw(const bContext *C, ARegion *region)
290 {
291  ED_region_header(C, region);
292 }
293 
295 {
296 }
297 
299 {
300  ARegion *region = params->region;
301  wmNotifier *wmn = params->notifier;
302 
303  /* context changes */
304  switch (wmn->category) {
305  case NC_SCENE:
306  if (wmn->data == ND_KEYINGSET) {
307  ED_region_tag_redraw(region);
308  }
309  break;
310  case NC_SPACE:
311  if (wmn->data == ND_SPACE_OUTLINER) {
312  ED_region_tag_redraw(region);
313  }
314  break;
315  }
316 }
317 
318 /* ******************** default callbacks for outliner space ***************** */
319 
321 {
322  ARegion *region;
323  SpaceOutliner *space_outliner;
324 
325  space_outliner = MEM_callocN(sizeof(SpaceOutliner), "initoutliner");
326  space_outliner->spacetype = SPACE_OUTLINER;
327  space_outliner->filter_id_type = ID_GR;
329  space_outliner->outlinevis = SO_VIEW_LAYER;
331  space_outliner->flag = SO_SYNC_SELECT | SO_MODE_COLUMN;
332 
333  /* header */
334  region = MEM_callocN(sizeof(ARegion), "header for outliner");
335 
336  BLI_addtail(&space_outliner->regionbase, region);
337  region->regiontype = RGN_TYPE_HEADER;
339 
340  /* main region */
341  region = MEM_callocN(sizeof(ARegion), "main region for outliner");
342 
343  BLI_addtail(&space_outliner->regionbase, region);
344  region->regiontype = RGN_TYPE_WINDOW;
345 
346  return (SpaceLink *)space_outliner;
347 }
348 
349 /* not spacelink itself */
350 static void outliner_free(SpaceLink *sl)
351 {
352  SpaceOutliner *space_outliner = (SpaceOutliner *)sl;
353 
354  outliner_free_tree(&space_outliner->tree);
355  if (space_outliner->treestore) {
356  BLI_mempool_destroy(space_outliner->treestore);
357  }
358 
359  if (space_outliner->runtime) {
361  if (space_outliner->runtime->treehash) {
362  BKE_outliner_treehash_free(space_outliner->runtime->treehash);
363  }
364  MEM_freeN(space_outliner->runtime);
365  }
366 }
367 
368 /* spacetype; init callback */
370 {
371  SpaceOutliner *space_outliner = area->spacedata.first;
372 
373  if (space_outliner->runtime == NULL) {
374  space_outliner->runtime = MEM_callocN(sizeof(*space_outliner->runtime),
375  "SpaceOutliner_Runtime");
376  }
377 }
378 
380 {
381  SpaceOutliner *space_outliner = (SpaceOutliner *)sl;
382  SpaceOutliner *space_outliner_new = MEM_dupallocN(space_outliner);
383 
384  BLI_listbase_clear(&space_outliner_new->tree);
385  space_outliner_new->treestore = NULL;
386 
388 
389  if (space_outliner->runtime) {
390  space_outliner_new->runtime = MEM_dupallocN(space_outliner->runtime);
391  space_outliner_new->runtime->tree_display = NULL;
392  space_outliner_new->runtime->treehash = NULL;
393  }
394 
395  return (SpaceLink *)space_outliner_new;
396 }
397 
398 static void outliner_id_remap(ScrArea *area, SpaceLink *slink, ID *old_id, ID *new_id)
399 {
400  SpaceOutliner *space_outliner = (SpaceOutliner *)slink;
401 
402  /* Some early out checks. */
403  if (!TREESTORE_ID_TYPE(old_id)) {
404  return; /* ID type is not used by outliner. */
405  }
406 
407  if (space_outliner->search_tse.id == old_id) {
408  space_outliner->search_tse.id = new_id;
409  }
410 
411  if (space_outliner->treestore) {
412  TreeStoreElem *tselem;
413  BLI_mempool_iter iter;
414  bool changed = false;
415 
416  BLI_mempool_iternew(space_outliner->treestore, &iter);
417  while ((tselem = BLI_mempool_iterstep(&iter))) {
418  if (tselem->id == old_id) {
419  tselem->id = new_id;
420  changed = true;
421  }
422  }
423 
424  /* Note that the Outliner may not be the active editor of the area, and hence not initialized.
425  * So runtime data might not have been created yet. */
426  if (space_outliner->runtime && space_outliner->runtime->treehash && changed) {
427  /* rebuild hash table, because it depends on ids too */
428  /* postpone a full rebuild because this can be called many times on-free */
429  space_outliner->storeflag |= SO_TREESTORE_REBUILD;
430 
431  if (new_id == NULL) {
432  /* Redraw is needed when removing data for multiple outlines show the same data.
433  * without this, the stale data won't get fully flushed when this outliner
434  * is not the active outliner the user is interacting with. See T85976. */
436  }
437  }
438  }
439 }
440 
441 static void outliner_deactivate(struct ScrArea *area)
442 {
443  /* Remove hover highlights */
444  SpaceOutliner *space_outliner = area->spacedata.first;
445  outliner_flag_set(&space_outliner->tree, TSE_HIGHLIGHTED_ANY, false);
447 }
448 
449 /* only called once, from space_api/spacetypes.c */
451 {
452  SpaceType *st = MEM_callocN(sizeof(SpaceType), "spacetype time");
453  ARegionType *art;
454 
455  st->spaceid = SPACE_OUTLINER;
456  strncpy(st->name, "Outliner", BKE_ST_MAXNAME);
457 
458  st->create = outliner_create;
459  st->free = outliner_free;
460  st->init = outliner_init;
463  st->keymap = outliner_keymap;
468 
469  /* regions: main window */
470  art = MEM_callocN(sizeof(ARegionType), "spacetype outliner region");
471  art->regionid = RGN_TYPE_WINDOW;
473 
479  BLI_addhead(&st->regiontypes, art);
480 
481  /* regions: header */
482  art = MEM_callocN(sizeof(ARegionType), "spacetype outliner header region");
483  art->regionid = RGN_TYPE_HEADER;
484  art->prefsizey = HEADERY;
486 
491  BLI_addhead(&st->regiontypes, art);
492 
494 }
void BKE_outliner_treehash_free(void *treehash)
struct ARegion * BKE_area_find_region_type(const struct ScrArea *area, int type)
#define BKE_ST_MAXNAME
Definition: BKE_screen.h:68
void BKE_spacetype_register(struct SpaceType *st)
Definition: screen.c:420
void BLI_addhead(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
Definition: listbase.c:87
BLI_INLINE void BLI_listbase_clear(struct ListBase *lb)
Definition: BLI_listbase.h:128
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
Definition: listbase.c:110
void BLI_mempool_iternew(BLI_mempool *pool, BLI_mempool_iter *iter) ATTR_NONNULL()
Definition: BLI_mempool.c:537
void * BLI_mempool_iterstep(BLI_mempool_iter *iter) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
Definition: BLI_mempool.c:645
void BLI_mempool_destroy(BLI_mempool *pool) ATTR_NONNULL(1)
Definition: BLI_mempool.c:757
#define UNUSED(x)
#define ELEM(...)
@ ID_GR
Definition: DNA_ID_enums.h:77
Object is a sort of wrapper for general info.
@ TSE_HIGHLIGHTED_ANY
#define HEADERY
@ RGN_ALIGN_BOTTOM
@ RGN_ALIGN_TOP
@ RGN_TYPE_WINDOW
@ RGN_TYPE_HEADER
@ SPACE_OUTLINER
@ SO_RESTRICT_HIDE
@ SO_RESTRICT_RENDER
@ SO_RESTRICT_ENABLE
@ SO_SYNC_SELECT
@ SO_MODE_COLUMN
@ SO_TREESTORE_REBUILD
@ SO_OVERRIDES_LIBRARY
@ SO_VIEW_LAYER
@ SO_SCENES
@ USER_HEADER_BOTTOM
@ V2D_KEEPTOT_STRICT
@ V2D_SCROLL_LEFT
@ V2D_SCROLL_HORIZONTAL_HIDE
@ V2D_SCROLL_VERTICAL_HIDE
@ V2D_SCROLL_TOP
@ V2D_SCROLL_RIGHT
@ V2D_SCROLL_BOTTOM
@ V2D_ALIGN_NO_NEG_X
@ V2D_ALIGN_NO_POS_Y
@ V2D_LIMITZOOM
@ V2D_LOCKZOOM_X
@ V2D_KEEPASPECT
@ V2D_LOCKZOOM_Y
#define WM_OUTLINER_SYNC_SELECT_FROM_ALL
void ED_area_tag_redraw(ScrArea *area)
Definition: area.c:745
void ED_region_header(const struct bContext *C, struct ARegion *region)
void ED_region_do_msg_notify_tag_redraw(struct bContext *C, struct wmMsgSubscribeKey *msg_key, struct wmMsgSubscribeValue *msg_val)
void ED_region_tag_redraw_no_rebuild(struct ARegion *region)
Definition: area.c:686
void ED_region_tag_redraw(struct ARegion *region)
Definition: area.c:667
void ED_region_header_init(struct ARegion *region)
Definition: area.c:3358
@ ED_KEYMAP_UI
Definition: ED_screen.h:440
@ ED_KEYMAP_HEADER
Definition: ED_screen.h:446
@ ED_KEYMAP_VIEW2D
Definition: ED_screen.h:443
Read Guarded memory(de)allocation.
#define C
Definition: RandGen.cpp:39
@ TH_BACK
Definition: UI_resources.h:55
void UI_ThemeClearColor(int colorid)
Definition: resources.c:1478
void UI_view2d_region_reinit(struct View2D *v2d, short type, int winx, int winy)
Definition: view2d.c:240
void UI_view2d_view_restore(const struct bContext *C)
void UI_view2d_scrollers_draw(struct View2D *v2d, const struct rcti *mask_custom)
@ V2D_COMMONVIEW_LIST
Definition: UI_view2d.h:53
#define ND_SEQUENCER
Definition: WM_types.h:337
#define ND_WORLD
Definition: WM_types.h:353
#define NA_ACTIVATED
Definition: WM_types.h:468
#define NC_ID
Definition: WM_types.h:296
#define NC_GEOM
Definition: WM_types.h:294
#define ND_NLA_ACTCHANGE
Definition: WM_types.h:398
#define ND_DRAW
Definition: WM_types.h:362
#define ND_OB_ACTIVE
Definition: WM_types.h:340
#define NC_WM
Definition: WM_types.h:276
#define ND_DATA
Definition: WM_types.h:408
#define ND_LIGHTING_DRAW
Definition: WM_types.h:384
#define ND_RENDER_OPTIONS
Definition: WM_types.h:335
#define NC_ANIMATION
Definition: WM_types.h:289
#define ND_VERTEX_GROUP
Definition: WM_types.h:409
#define NC_PAINTCURVE
Definition: WM_types.h:297
#define NC_SCREEN
Definition: WM_types.h:278
#define ND_MODE
Definition: WM_types.h:345
#define ND_LIB_OVERRIDE_CHANGED
Definition: WM_types.h:318
#define ND_OB_SELECT
Definition: WM_types.h:342
#define ND_KEYINGSET
Definition: WM_types.h:348
#define NC_SCENE
Definition: WM_types.h:279
#define NA_ADDED
Definition: WM_types.h:464
#define ND_OB_VISIBLE
Definition: WM_types.h:343
#define ND_LAYER_CONTENT
Definition: WM_types.h:354
#define NC_GROUP
Definition: WM_types.h:284
#define ND_MODIFIER
Definition: WM_types.h:363
#define NA_EDITED
Definition: WM_types.h:462
#define ND_PARENT
Definition: WM_types.h:368
#define NC_TEXT
Definition: WM_types.h:287
#define NC_MATERIAL
Definition: WM_types.h:281
#define NC_LAMP
Definition: WM_types.h:283
#define ND_CONSTRAINT
Definition: WM_types.h:365
#define ND_FRAME
Definition: WM_types.h:334
#define NA_REMOVED
Definition: WM_types.h:465
#define ND_NLA_ORDER
Definition: WM_types.h:400
#define NC_GPENCIL
Definition: WM_types.h:300
#define ND_NLA
Definition: WM_types.h:397
#define ND_BONE_ACTIVE
Definition: WM_types.h:360
#define ND_OB_RENDER
Definition: WM_types.h:344
#define ND_TRANSFORM
Definition: WM_types.h:357
#define ND_LAYER
Definition: WM_types.h:350
#define NC_MASK
Definition: WM_types.h:299
#define NA_RENAME
Definition: WM_types.h:466
#define ND_BONE_SELECT
Definition: WM_types.h:361
#define ND_OB_SHADING
Definition: WM_types.h:358
#define ND_KEYFRAME
Definition: WM_types.h:394
#define NC_OBJECT
Definition: WM_types.h:280
#define ND_SCENEBROWSE
Definition: WM_types.h:332
#define ND_LAYOUTDELETE
Definition: WM_types.h:322
#define ND_ANIMCHAN
Definition: WM_types.h:396
#define ND_SHADING_LINKS
Definition: WM_types.h:379
#define NS_LAYER_COLLECTION
Definition: WM_types.h:458
#define NC_SPACE
Definition: WM_types.h:293
#define NA_SELECTED
Definition: WM_types.h:467
#define ND_SPACE_OUTLINER
Definition: WM_types.h:422
unsigned int U
Definition: btGjkEpa3.h:78
Scene scene
uiWidgetBaseParameters params[MAX_WIDGET_BASE_BATCH]
void(* MEM_freeN)(void *vmemh)
Definition: mallocn.c:41
void *(* MEM_dupallocN)(const void *vmemh)
Definition: mallocn.c:42
void *(* MEM_callocN)(size_t len, const char *str)
Definition: mallocn.c:45
static void area(int d1, int d2, int e1, int e2, float weights[2])
int outliner_context(const bContext *C, const char *member, bContextDataResult *result)
void outliner_dropboxes(void)
void draw_outliner(const bContext *C)
bool outliner_flag_set(ListBase *lb, short flag, short set)
bool outliner_requires_rebuild_on_select_or_active_change(const struct SpaceOutliner *space_outliner)
#define TREESTORE_ID_TYPE(_id)
void outliner_free_tree(ListBase *tree)
void outliner_keymap(struct wmKeyConfig *keyconf)
Definition: outliner_ops.c:112
void outliner_operatortypes(void)
Definition: outliner_ops.c:32
static void outliner_header_region_free(ARegion *UNUSED(region))
static SpaceLink * outliner_create(const ScrArea *UNUSED(area), const Scene *UNUSED(scene))
static SpaceLink * outliner_duplicate(SpaceLink *sl)
static void outliner_header_region_listener(const wmRegionListenerParams *params)
static void outliner_init(wmWindowManager *UNUSED(wm), ScrArea *area)
static void outliner_main_region_message_subscribe(const wmRegionMessageSubscribeParams *params)
static void outliner_main_region_init(wmWindowManager *wm, ARegion *region)
static void outliner_main_region_listener(const wmRegionListenerParams *params)
void ED_spacetype_outliner(void)
static void outliner_id_remap(ScrArea *area, SpaceLink *slink, ID *old_id, ID *new_id)
static void outliner_header_region_draw(const bContext *C, ARegion *region)
static void outliner_main_region_free(ARegion *UNUSED(region))
static void outliner_header_region_init(wmWindowManager *UNUSED(wm), ARegion *region)
static void outliner_main_region_draw(const bContext *C, ARegion *region)
static void outliner_free(SpaceLink *sl)
static void outliner_deactivate(struct ScrArea *area)
void(* draw)(const struct bContext *C, struct ARegion *region)
Definition: BKE_screen.h:169
void(* message_subscribe)(const wmRegionMessageSubscribeParams *params)
Definition: BKE_screen.h:185
void(* listener)(const wmRegionListenerParams *params)
Definition: BKE_screen.h:183
int keymapflag
Definition: BKE_screen.h:226
void(* free)(struct ARegion *)
Definition: BKE_screen.h:187
void(* init)(struct wmWindowManager *wm, struct ARegion *region)
Definition: BKE_screen.h:165
ListBase handlers
short alignment
short regiontype
Definition: DNA_ID.h:273
struct GHash * treehash
struct TreeDisplay * tree_display
struct TreeStoreElem search_tse
ListBase regionbase
SpaceOutliner_Runtime * runtime
struct BLI_mempool * treestore
struct SpaceLink *(* duplicate)(struct SpaceLink *sl)
Definition: BKE_screen.h:104
ListBase regiontypes
Definition: BKE_screen.h:130
void(* deactivate)(struct ScrArea *area)
Definition: BKE_screen.h:98
void(* keymap)(struct wmKeyConfig *keyconf)
Definition: BKE_screen.h:109
void(* operatortypes)(void)
Definition: BKE_screen.h:107
void(* free)(struct SpaceLink *sl)
Definition: BKE_screen.h:88
struct SpaceLink *(* create)(const struct ScrArea *area, const struct Scene *scene)
Definition: BKE_screen.h:86
void(* init)(struct wmWindowManager *wm, struct ScrArea *area)
Definition: BKE_screen.h:91
int spaceid
Definition: BKE_screen.h:81
bContextDataCallback context
Definition: BKE_screen.h:117
void(* id_remap)(struct ScrArea *area, struct SpaceLink *sl, struct ID *old_id, struct ID *new_id)
Definition: BKE_screen.h:120
char name[BKE_ST_MAXNAME]
Definition: BKE_screen.h:80
void(* dropboxes)(void)
Definition: BKE_screen.h:111
float minzoom
short align
short keeptot
short keepzoom
short scroll
float maxzoom
unsigned int data
Definition: WM_types.h:260
unsigned int action
Definition: WM_types.h:260
unsigned int category
Definition: WM_types.h:260
unsigned int subtype
Definition: WM_types.h:260
struct wmKeyConfig * defaultconf
void outliner_tree_display_destroy(TreeDisplay **tree_display)
Definition: tree_display.cc:59
ListBase * WM_dropboxmap_find(const char *idname, int spaceid, int regionid)
Definition: wm_dragdrop.c:77
wmEventHandler_Dropbox * WM_event_add_dropbox_handler(ListBase *handlers, ListBase *dropboxes)
wmEventHandler_Keymap * WM_event_add_keymap_handler_v2d_mask(ListBase *handlers, wmKeyMap *keymap)
wmKeyMap * WM_keymap_ensure(wmKeyConfig *keyconf, const char *idname, int spaceid, int regionid)
Definition: wm_keymap.c:852
#define WM_msg_subscribe_rna_anon_prop(mbus, type_, prop_, value)