Blender  V3.3
spacetypes.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later
2  * Copyright 2008 Blender Foundation. */
3 
8 #include <stdlib.h>
9 
10 #include "MEM_guardedalloc.h"
11 
12 #include "BLI_blenlib.h"
13 #include "BLI_utildefines.h"
14 
15 #include "DNA_scene_types.h"
17 
18 #include "BKE_context.h"
19 #include "BKE_screen.h"
20 
21 #include "GPU_state.h"
22 
23 #include "UI_interface.h"
24 #include "UI_view2d.h"
25 
26 #include "ED_anim_api.h"
27 #include "ED_armature.h"
28 #include "ED_asset.h"
29 #include "ED_clip.h"
30 #include "ED_curve.h"
31 #include "ED_curves.h"
32 #include "ED_curves_sculpt.h"
33 #include "ED_fileselect.h"
34 #include "ED_geometry.h"
35 #include "ED_gizmo_library.h"
36 #include "ED_gpencil.h"
37 #include "ED_lattice.h"
38 #include "ED_markers.h"
39 #include "ED_mask.h"
40 #include "ED_mball.h"
41 #include "ED_mesh.h"
42 #include "ED_node.h"
43 #include "ED_object.h"
44 #include "ED_paint.h"
45 #include "ED_physics.h"
46 #include "ED_render.h"
47 #include "ED_scene.h"
48 #include "ED_screen.h"
49 #include "ED_sculpt.h"
50 #include "ED_sequencer.h"
51 #include "ED_sound.h"
52 #include "ED_space_api.h"
53 #include "ED_transform.h"
54 #include "ED_userpref.h"
55 #include "ED_util.h"
56 #include "ED_uvedit.h"
57 
58 #include "io_ops.h"
59 
61 {
62  /* UI unit is a variable, may be used in some space type initialization. */
63  U.widget_unit = 20;
64 
65  /* Create space types. */
85 
86  /* Register operator types for screen and all spaces. */
114 
117 
119 
121 
122  /* Gizmo types. */
133 
134  /* Register types for operators and gizmos. */
137  /* Initialize gizmo types first, operator types need them. */
138  if (type->gizmos) {
139  type->gizmos();
140  }
141  if (type->operatortypes) {
142  type->operatortypes();
143  }
144  }
145 }
146 
148 {
149  /* Macros must go last since they reference other operators.
150  * They need to be registered after python operators too. */
167 
168  /* Register dropboxes (can use macros). */
169  ED_dropboxes_ui();
172  if (type->dropboxes) {
173  type->dropboxes();
174  }
175  }
176 }
177 
179 {
180  ED_keymap_screen(keyconf);
181  ED_keymap_anim(keyconf);
182  ED_keymap_animchannels(keyconf);
183  ED_keymap_gpencil(keyconf);
184  ED_keymap_object(keyconf);
185  ED_keymap_lattice(keyconf);
186  ED_keymap_mesh(keyconf);
187  ED_keymap_uvedit(keyconf);
188  ED_keymap_curve(keyconf);
189  ED_keymap_armature(keyconf);
190  ED_keymap_physics(keyconf);
191  ED_keymap_metaball(keyconf);
192  ED_keymap_paint(keyconf);
193  ED_keymap_mask(keyconf);
194  ED_keymap_marker(keyconf);
195 
196  ED_keymap_view2d(keyconf);
197  ED_keymap_ui(keyconf);
198 
199  ED_keymap_transform(keyconf);
200 
203  if (type->keymap) {
204  type->keymap(keyconf);
205  }
206  LISTBASE_FOREACH (ARegionType *, region_type, &type->regiontypes) {
207  if (region_type->keymap) {
208  region_type->keymap(keyconf);
209  }
210  }
211  }
212 }
213 
214 /* ********************** Custom Draw Call API ***************** */
215 
216 typedef struct RegionDrawCB {
217  struct RegionDrawCB *next, *prev;
218 
219  void (*draw)(const struct bContext *, struct ARegion *, void *);
220  void *customdata;
221 
222  int type;
223 
225 
227  void (*draw)(const struct bContext *, struct ARegion *, void *),
228  void *customdata,
229  int type)
230 {
231  RegionDrawCB *rdc = MEM_callocN(sizeof(RegionDrawCB), "RegionDrawCB");
232 
233  BLI_addtail(&art->drawcalls, rdc);
234  rdc->draw = draw;
235  rdc->customdata = customdata;
236  rdc->type = type;
237 
238  return rdc;
239 }
240 
241 bool ED_region_draw_cb_exit(ARegionType *art, void *handle)
242 {
243  LISTBASE_FOREACH (RegionDrawCB *, rdc, &art->drawcalls) {
244  if (rdc == (RegionDrawCB *)handle) {
245  BLI_remlink(&art->drawcalls, rdc);
246  MEM_freeN(rdc);
247  return true;
248  }
249  }
250  return false;
251 }
252 
253 static void ed_region_draw_cb_draw(const bContext *C, ARegion *region, ARegionType *art, int type)
254 {
256  if (rdc->type == type) {
257  rdc->draw(C, region, rdc->customdata);
258 
259  /* This is needed until we get rid of BGL which can change the states we are tracking. */
260  GPU_bgl_end();
261  }
262  }
263 }
264 
265 void ED_region_draw_cb_draw(const bContext *C, ARegion *region, int type)
266 {
267  ed_region_draw_cb_draw(C, region, region->type, type);
268 }
269 
271 {
273 }
274 
275 void ED_region_draw_cb_remove_by_type(ARegionType *art, void *draw_fn, void (*free)(void *))
276 {
278  if (rdc->draw == draw_fn) {
279  if (free) {
280  free(rdc->customdata);
281  }
282  BLI_remlink(&art->drawcalls, rdc);
283  MEM_freeN(rdc);
284  }
285  }
286 }
287 
288 /* ********************* space template *********************** */
289 /* forward declare */
290 void ED_spacetype_xxx(void);
291 
292 /* allocate and init some vars */
294 {
295  return NULL;
296 }
297 
298 /* not spacelink itself */
299 static void xxx_free(SpaceLink *UNUSED(sl))
300 {
301 }
302 
303 /* spacetype; init callback for usage, should be re-doable. */
305 {
306 
307  /* link area to SpaceXXX struct */
308 
309  /* define how many regions, the order and types */
310 
311  /* add types to regions */
312 }
313 
315 {
316 
317  return NULL;
318 }
319 
320 static void xxx_operatortypes(void)
321 {
322  /* register operator types for this space */
323 }
324 
325 static void xxx_keymap(wmKeyConfig *UNUSED(keyconf))
326 {
327  /* add default items to keymap */
328 }
329 
330 /* only called once, from screen/spacetypes.c */
332 {
333  static SpaceType st;
334 
335  st.spaceid = SPACE_VIEW3D;
336 
337  st.create = xxx_create;
338  st.free = xxx_free;
339  st.init = xxx_init;
340  st.duplicate = xxx_duplicate;
341  st.operatortypes = xxx_operatortypes;
342  st.keymap = xxx_keymap;
343 
345 }
346 
347 /* ****************************** end template *********************** */
void BKE_spacetype_register(struct SpaceType *st)
Definition: screen.c:391
const struct ListBase * BKE_spacetypes_list(void)
Definition: screen.c:386
void BLI_kdtree_nd_() free(KDTree *tree)
Definition: kdtree_impl.h:102
#define LISTBASE_FOREACH(type, var, list)
Definition: BLI_listbase.h:336
#define LISTBASE_FOREACH_MUTABLE(type, var, list)
Definition: BLI_listbase.h:354
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
Definition: listbase.c:80
void BLI_remlink(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
Definition: listbase.c:100
#define UNUSED(x)
@ SPACE_VIEW3D
void ED_operatormacros_graph(void)
Definition: graph_ops.c:487
void ED_operatormacros_nla(void)
Definition: nla_ops.c:143
void ED_operatormacros_action(void)
Definition: action_ops.c:75
void ED_operatormacros_clip(void)
Definition: clip_ops.c:1869
void ED_operatortypes_sculpt_curves(void)
void ED_operatormacros_file(void)
Definition: file_ops.c:3007
void ED_gizmotypes_preselect_3d(void)
void ED_keymap_lattice(struct wmKeyConfig *keyconf)
Definition: lattice_ops.c:29
void ED_operatortypes_lattice(void)
Definition: lattice_ops.c:17
void ED_operatormacros_mask(void)
Definition: mask_edit.c:169
void ED_keymap_mask(struct wmKeyConfig *keyconf)
Definition: mask_edit.c:163
void ED_operatortypes_mask(void)
Definition: mask_edit.c:99
void ED_operatortypes_metaball(void)
Definition: mball_ops.c:20
void ED_keymap_metaball(struct wmKeyConfig *keyconf)
Definition: mball_ops.c:47
void ED_operatormacros_metaball(void)
Definition: mball_ops.c:33
void ED_operatortypes_mesh(void)
Definition: mesh_ops.c:22
void ED_keymap_mesh(struct wmKeyConfig *keyconf)
Definition: mesh_ops.c:359
void ED_operatormacros_mesh(void)
Definition: mesh_ops.c:208
void ED_operatormacros_node(void)
Definition: node_ops.cc:125
void ED_operatortypes_object(void)
Definition: object_ops.c:28
void ED_operatormacros_object(void)
Definition: object_ops.c:280
void ED_keymap_object(struct wmKeyConfig *keyconf)
Definition: object_ops.c:314
void ED_keymap_paint(struct wmKeyConfig *keyconf)
Definition: paint_ops.c:1491
void ED_operatormacros_paint(void)
Definition: paint_ops.c:1383
void ED_operatortypes_paint(void)
Definition: paint_ops.c:1399
void ED_operatortypes_physics(void)
Definition: physics_ops.c:150
void ED_keymap_physics(struct wmKeyConfig *keyconf)
Definition: physics_ops.c:159
void ED_operatortypes_render(void)
Definition: render_ops.cc:20
bool void ED_operatortypes_scene(void)
Definition: scene_edit.c:427
void ED_operatortypes_screen(void)
Definition: screen_ops.c:5669
void ED_operatortypes_workspace(void)
void ED_screen_user_menu_register(void)
void ED_keymap_screen(struct wmKeyConfig *keyconf)
Definition: screen_ops.c:5758
void ED_operatortypes_sculpt(void)
Definition: sculpt_ops.c:1124
void ED_operatormacros_sequencer(void)
void ED_operatortypes_sound(void)
Definition: sound_ops.c:876
void ED_spacetype_buttons(void)
void ED_spacetype_console(void)
void ED_spacetype_ipo(void)
Definition: space_graph.c:807
void ED_spacetype_clip(void)
Definition: space_clip.c:1248
void ED_spacetype_file(void)
Definition: space_file.c:998
void ED_spacetype_action(void)
Definition: space_action.c:837
void ED_spacetype_topbar(void)
Definition: space_topbar.c:285
void ED_spacetype_spreadsheet(void)
void ED_spacetype_script(void)
Definition: space_script.c:149
void ED_spacetype_image(void)
Definition: space_image.c:1029
void ED_spacetype_sequencer(void)
void ED_spacetype_info(void)
Definition: space_info.c:251
void ED_spacetype_view3d(void)
void ED_spacetype_outliner(void)
void ED_spacetype_nla(void)
Definition: space_nla.c:565
void ED_spacetype_node(void)
Definition: space_node.cc:1016
void ED_spacetype_text(void)
Definition: space_text.c:400
void ED_spacetype_userpref(void)
void ED_spacetype_statusbar(void)
void ED_keymap_transform(struct wmKeyConfig *keyconf)
void ED_operatortypes_userpref(void)
Definition: userpref_ops.c:264
void ED_operatortypes_edutils(void)
Definition: ed_util_ops.cc:372
void ED_operatormacros_uvedit(void)
Definition: uvedit_ops.c:2108
void ED_keymap_uvedit(struct wmKeyConfig *keyconf)
Definition: uvedit_ops.c:2123
void ED_operatortypes_uvedit(void)
Definition: uvedit_ops.c:2055
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum type
void GPU_bgl_end(void)
Definition: gpu_state.cc:346
Read Guarded memory(de)allocation.
#define C
Definition: RandGen.cpp:25
void ED_dropboxes_ui(void)
void ED_operatortypes_ui(void)
void ED_keymap_ui(struct wmKeyConfig *keyconf)
User Interface Keymap.
void ED_uilisttypes_ui(void)
void ED_keymap_view2d(struct wmKeyConfig *keyconf)
Definition: view2d_ops.cc:2277
void ED_operatortypes_view2d(void)
Definition: view2d_ops.cc:2250
void ED_operatortypes_animchannels(void)
void ED_keymap_animchannels(wmKeyConfig *keyconf)
void ED_keymap_marker(wmKeyConfig *keyconf)
void ED_operatortypes_marker(void)
void ED_operatortypes_anim(void)
Definition: anim_ops.c:591
void ED_keymap_anim(wmKeyConfig *keyconf)
Definition: anim_ops.c:631
void ED_operatortypes_armature(void)
Definition: armature_ops.c:20
void ED_operatormacros_armature(void)
Definition: armature_ops.c:141
void ED_keymap_armature(wmKeyConfig *keyconf)
Definition: armature_ops.c:177
void ED_gizmotypes_arrow_3d(void)
void ED_operatortypes_asset()
Definition: asset_ops.cc:938
void ED_gizmotypes_blank_3d(void)
Definition: blank3d_gizmo.c:57
unsigned int U
Definition: btGjkEpa3.h:78
void ED_gizmotypes_button_2d(void)
void ED_gizmotypes_cage_2d(void)
void ED_gizmotypes_cage_3d(void)
Definition: cage3d_gizmo.c:688
void ED_keymap_curve(wmKeyConfig *keyconf)
Definition: curve_ops.c:145
void ED_operatortypes_curve(void)
Definition: curve_ops.c:26
void ED_operatormacros_curve(void)
Definition: curve_ops.c:121
void ED_operatortypes_curves()
Definition: curves_ops.cc:1031
Scene scene
void ED_gizmotypes_dial_3d(void)
Definition: dial3d_gizmo.c:722
SyclQueue void void size_t num_bytes void
void ED_operatortypes_geometry(void)
Definition: geometry_ops.cc:16
void ED_operatormacros_gpencil(void)
Definition: gpencil_ops.c:690
void ED_operatortypes_gpencil(void)
Definition: gpencil_ops.c:498
void ED_keymap_gpencil(wmKeyConfig *keyconf)
Definition: gpencil_ops.c:466
void ED_operatortypes_io(void)
Definition: io_ops.c:29
void(* MEM_freeN)(void *vmemh)
Definition: mallocn.c:27
void *(* MEM_callocN)(size_t len, const char *str)
Definition: mallocn.c:31
void ED_gizmotypes_move_3d(void)
Definition: move3d_gizmo.c:467
static void area(int d1, int d2, int e1, int e2, float weights[2])
static const pxr::TfToken st("st", pxr::TfToken::Immortal)
void ED_gizmotypes_primitive_3d(void)
static ListBase spacetypes
Definition: screen.c:312
void ED_gizmotypes_snap_3d(void)
Definition: snap3d_gizmo.c:412
static SpaceLink * xxx_create(const ScrArea *UNUSED(area), const Scene *UNUSED(scene))
Definition: spacetypes.c:293
void ED_spacetypes_keymap(wmKeyConfig *keyconf)
Definition: spacetypes.c:178
struct RegionDrawCB RegionDrawCB
static void xxx_init(wmWindowManager *UNUSED(wm), ScrArea *UNUSED(area))
Definition: spacetypes.c:304
void ED_region_draw_cb_remove_by_type(ARegionType *art, void *draw_fn, void(*free)(void *))
Definition: spacetypes.c:275
static void xxx_operatortypes(void)
Definition: spacetypes.c:320
static void ed_region_draw_cb_draw(const bContext *C, ARegion *region, ARegionType *art, int type)
Definition: spacetypes.c:253
void ED_spacetypes_init(void)
Definition: spacetypes.c:60
void ED_spacetype_xxx(void)
Definition: spacetypes.c:331
void ED_region_draw_cb_draw(const bContext *C, ARegion *region, int type)
Definition: spacetypes.c:265
static SpaceLink * xxx_duplicate(SpaceLink *UNUSED(sl))
Definition: spacetypes.c:314
static void xxx_free(SpaceLink *UNUSED(sl))
Definition: spacetypes.c:299
void * ED_region_draw_cb_activate(ARegionType *art, void(*draw)(const struct bContext *, struct ARegion *, void *), void *customdata, int type)
Definition: spacetypes.c:226
void ED_region_surface_draw_cb_draw(ARegionType *art, int type)
Definition: spacetypes.c:270
bool ED_region_draw_cb_exit(ARegionType *art, void *handle)
Definition: spacetypes.c:241
void ED_spacemacros_init(void)
Definition: spacetypes.c:147
static void xxx_keymap(wmKeyConfig *UNUSED(keyconf))
Definition: spacetypes.c:325
ListBase drawcalls
Definition: BKE_screen.h:195
struct ARegionType * type
void(* draw)(const struct bContext *, struct ARegion *, void *)
Definition: spacetypes.c:219
void * customdata
Definition: spacetypes.c:220
struct RegionDrawCB * next
Definition: spacetypes.c:217
struct RegionDrawCB * prev
Definition: spacetypes.c:217