Blender  V2.93
spacetypes.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) Blender Foundation, 2008
17  */
18 
23 #include <stdlib.h>
24 
25 #include "MEM_guardedalloc.h"
26 
27 #include "BLI_blenlib.h"
28 #include "BLI_utildefines.h"
29 
30 #include "DNA_scene_types.h"
32 
33 #include "BKE_context.h"
34 #include "BKE_screen.h"
35 
36 #include "GPU_state.h"
37 
38 #include "UI_interface.h"
39 #include "UI_view2d.h"
40 
41 #include "ED_anim_api.h"
42 #include "ED_armature.h"
43 #include "ED_asset.h"
44 #include "ED_clip.h"
45 #include "ED_curve.h"
46 #include "ED_fileselect.h"
47 #include "ED_geometry.h"
48 #include "ED_gizmo_library.h"
49 #include "ED_gpencil.h"
50 #include "ED_lattice.h"
51 #include "ED_markers.h"
52 #include "ED_mask.h"
53 #include "ED_mball.h"
54 #include "ED_mesh.h"
55 #include "ED_node.h"
56 #include "ED_object.h"
57 #include "ED_paint.h"
58 #include "ED_physics.h"
59 #include "ED_render.h"
60 #include "ED_scene.h"
61 #include "ED_screen.h"
62 #include "ED_sculpt.h"
63 #include "ED_sequencer.h"
64 #include "ED_sound.h"
65 #include "ED_space_api.h"
66 #include "ED_transform.h"
67 #include "ED_userpref.h"
68 #include "ED_util.h"
69 #include "ED_uvedit.h"
70 
71 #include "io_ops.h"
72 
73 /* Only called once on startup. storage is global in BKE kernel listbase. */
75 {
76  /* UI unit is a variable, may be used in some space type inits. */
77  U.widget_unit = 20;
78 
79  /* Create space types. */
99 
100  /* Register operator types for screen and all spaces. */
126 
129 
131 
132  /* Gizmo types. */
143 
144  /* Register types for operators and gizmos. */
147  /* Initialize gizmo types first, operator types need them. */
148  if (type->gizmos) {
149  type->gizmos();
150  }
151  if (type->operatortypes) {
152  type->operatortypes();
153  }
154  }
155 }
156 
158 {
159  /* Macros must go last since they reference other operators.
160  * They need to be registered after python operators too. */
176 
177  /* Register dropboxes (can use macros). */
180  if (type->dropboxes) {
181  type->dropboxes();
182  }
183  }
184 }
185 
191 {
192  ED_keymap_screen(keyconf);
193  ED_keymap_anim(keyconf);
194  ED_keymap_animchannels(keyconf);
195  ED_keymap_gpencil(keyconf);
196  ED_keymap_object(keyconf);
197  ED_keymap_lattice(keyconf);
198  ED_keymap_mesh(keyconf);
199  ED_keymap_uvedit(keyconf);
200  ED_keymap_curve(keyconf);
201  ED_keymap_armature(keyconf);
202  ED_keymap_physics(keyconf);
203  ED_keymap_metaball(keyconf);
204  ED_keymap_paint(keyconf);
205  ED_keymap_mask(keyconf);
206  ED_keymap_marker(keyconf);
207 
208  ED_keymap_view2d(keyconf);
209  ED_keymap_ui(keyconf);
210 
211  ED_keymap_transform(keyconf);
212 
215  if (type->keymap) {
216  type->keymap(keyconf);
217  }
218  LISTBASE_FOREACH (ARegionType *, region_type, &type->regiontypes) {
219  if (region_type->keymap) {
220  region_type->keymap(keyconf);
221  }
222  }
223  }
224 }
225 
226 /* ********************** Custom Draw Call API ***************** */
227 
228 typedef struct RegionDrawCB {
229  struct RegionDrawCB *next, *prev;
230 
231  void (*draw)(const struct bContext *, struct ARegion *, void *);
232  void *customdata;
233 
234  int type;
235 
237 
239  void (*draw)(const struct bContext *, struct ARegion *, void *),
240  void *customdata,
241  int type)
242 {
243  RegionDrawCB *rdc = MEM_callocN(sizeof(RegionDrawCB), "RegionDrawCB");
244 
245  BLI_addtail(&art->drawcalls, rdc);
246  rdc->draw = draw;
247  rdc->customdata = customdata;
248  rdc->type = type;
249 
250  return rdc;
251 }
252 
253 void ED_region_draw_cb_exit(ARegionType *art, void *handle)
254 {
255  LISTBASE_FOREACH (RegionDrawCB *, rdc, &art->drawcalls) {
256  if (rdc == (RegionDrawCB *)handle) {
257  BLI_remlink(&art->drawcalls, rdc);
258  MEM_freeN(rdc);
259  return;
260  }
261  }
262 }
263 
264 void ED_region_draw_cb_draw(const bContext *C, ARegion *region, int type)
265 {
267  if (rdc->type == type) {
268  rdc->draw(C, region, rdc->customdata);
269 
270  /* This is needed until we get rid of BGL which can change the states we are tracking. */
271  GPU_bgl_end();
272  }
273  }
274 }
275 
276 void ED_region_draw_cb_remove_by_type(ARegionType *art, void *draw_fn, void (*free)(void *))
277 {
279  if (rdc->draw == draw_fn) {
280  if (free) {
281  free(rdc->customdata);
282  }
283  BLI_remlink(&art->drawcalls, rdc);
284  MEM_freeN(rdc);
285  }
286  }
287 }
288 
289 /* ********************* space template *********************** */
290 /* forward declare */
291 void ED_spacetype_xxx(void);
292 
293 /* allocate and init some vars */
295 {
296  return NULL;
297 }
298 
299 /* not spacelink itself */
300 static void xxx_free(SpaceLink *UNUSED(sl))
301 {
302 }
303 
304 /* spacetype; init callback for usage, should be re-doable. */
306 {
307 
308  /* link area to SpaceXXX struct */
309 
310  /* define how many regions, the order and types */
311 
312  /* add types to regions */
313 }
314 
316 {
317 
318  return NULL;
319 }
320 
321 static void xxx_operatortypes(void)
322 {
323  /* register operator types for this space */
324 }
325 
326 static void xxx_keymap(wmKeyConfig *UNUSED(keyconf))
327 {
328  /* add default items to keymap */
329 }
330 
331 /* only called once, from screen/spacetypes.c */
333 {
334  static SpaceType st;
335 
336  st.spaceid = SPACE_VIEW3D;
337 
338  st.create = xxx_create;
339  st.free = xxx_free;
340  st.init = xxx_init;
343  st.keymap = xxx_keymap;
344 
346 }
347 
348 /* ****************************** end template *********************** */
void BKE_spacetype_register(struct SpaceType *st)
Definition: screen.c:420
const struct ListBase * BKE_spacetypes_list(void)
Definition: screen.c:415
void BLI_kdtree_nd_() free(KDTree *tree)
Definition: kdtree_impl.h:116
#define LISTBASE_FOREACH(type, var, list)
Definition: BLI_listbase.h:172
#define LISTBASE_FOREACH_MUTABLE(type, var, list)
Definition: BLI_listbase.h:188
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
Definition: listbase.c:110
void BLI_remlink(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
Definition: listbase.c:133
#define UNUSED(x)
@ SPACE_VIEW3D
void ED_operatormacros_graph(void)
Definition: graph_ops.c:484
void ED_operatormacros_action(void)
Definition: action_ops.c:91
void ED_operatormacros_clip(void)
Definition: clip_ops.c:1877
void ED_operatormacros_file(void)
Definition: file_ops.c:2910
void ED_gizmotypes_preselect_3d(void)
void ED_keymap_lattice(struct wmKeyConfig *keyconf)
Definition: lattice_ops.c:45
void ED_operatortypes_lattice(void)
Definition: lattice_ops.c:33
void ED_operatormacros_mask(void)
Definition: mask_edit.c:153
void ED_keymap_mask(struct wmKeyConfig *keyconf)
Definition: mask_edit.c:147
void ED_operatortypes_mask(void)
Definition: mask_edit.c:83
void ED_operatortypes_metaball(void)
Definition: mball_ops.c:36
void ED_keymap_metaball(struct wmKeyConfig *keyconf)
Definition: mball_ops.c:63
void ED_operatormacros_metaball(void)
Definition: mball_ops.c:49
void ED_operatortypes_mesh(void)
Definition: mesh_ops.c:38
void ED_keymap_mesh(struct wmKeyConfig *keyconf)
Definition: mesh_ops.c:376
void ED_operatormacros_mesh(void)
Definition: mesh_ops.c:224
void ED_operatormacros_node(void)
Definition: node_ops.c:128
void ED_operatortypes_object(void)
Definition: object_ops.c:44
void ED_operatormacros_object(void)
Definition: object_ops.c:283
void ED_keymap_object(struct wmKeyConfig *keyconf)
Definition: object_ops.c:317
void ED_keymap_paint(struct wmKeyConfig *keyconf)
Definition: paint_ops.c:1362
void ED_operatormacros_paint(void)
Definition: paint_ops.c:1256
void ED_operatortypes_paint(void)
Definition: paint_ops.c:1272
void ED_operatortypes_physics(void)
Definition: physics_ops.c:166
void ED_keymap_physics(struct wmKeyConfig *keyconf)
Definition: physics_ops.c:175
void ED_operatortypes_render(void)
Definition: render_ops.c:36
bool void ED_operatortypes_scene(void)
Definition: scene_edit.c:280
void ED_operatortypes_screen(void)
Definition: screen_ops.c:5478
void ED_operatortypes_workspace(void)
void ED_screen_user_menu_register(void)
void ED_keymap_screen(struct wmKeyConfig *keyconf)
Definition: screen_ops.c:5569
void ED_operatortypes_sculpt(void)
Definition: sculpt.c:9426
void ED_operatormacros_sequencer(void)
void ED_operatortypes_sound(void)
Definition: sound_ops.c:886
void ED_spacetype_buttons(void)
void ED_spacetype_console(void)
void ED_spacetype_ipo(void)
Definition: space_graph.c:828
void ED_spacetype_clip(void)
Definition: space_clip.c:1342
void ED_spacetype_file(void)
Definition: space_file.c:911
void ED_spacetype_action(void)
Definition: space_action.c:854
void ED_spacetype_topbar(void)
Definition: space_topbar.c:240
void ED_spacetype_spreadsheet(void)
void ED_spacetype_script(void)
Definition: space_script.c:166
void ED_spacetype_image(void)
Definition: space_image.c:1047
void ED_spacetype_sequencer(void)
void ED_spacetype_info(void)
Definition: space_info.c:269
void ED_spacetype_view3d(void)
void ED_spacetype_outliner(void)
void ED_spacetype_nla(void)
Definition: space_nla.c:595
void ED_spacetype_node(void)
Definition: space_node.c:1037
void ED_spacetype_text(void)
Definition: space_text.c:427
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:191
void ED_operatortypes_edutils(void)
Definition: ed_util_ops.cc:276
void ED_operatormacros_uvedit(void)
Definition: uvedit_ops.c:2067
void ED_keymap_uvedit(struct wmKeyConfig *keyconf)
Definition: uvedit_ops.c:2082
void ED_operatortypes_uvedit(void)
Definition: uvedit_ops.c:2016
_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:367
Read Guarded memory(de)allocation.
#define C
Definition: RandGen.cpp:39
void ED_operatortypes_ui(void)
void ED_keymap_ui(struct wmKeyConfig *keyconf)
User Interface Keymap.
void ED_keymap_view2d(struct wmKeyConfig *keyconf)
Definition: view2d_ops.c:2420
void ED_operatortypes_view2d(void)
Definition: view2d_ops.c:2393
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:516
void ED_keymap_anim(wmKeyConfig *keyconf)
Definition: anim_ops.c:556
void ED_operatortypes_armature(void)
Definition: armature_ops.c:37
void ED_operatormacros_armature(void)
Definition: armature_ops.c:153
void ED_keymap_armature(wmKeyConfig *keyconf)
Definition: armature_ops.c:189
void ED_gizmotypes_arrow_3d(void)
void ED_operatortypes_asset(void)
Definition: asset_ops.cc:255
void ED_gizmotypes_blank_3d(void)
Definition: blank3d_gizmo.c:73
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:697
void ED_keymap_curve(wmKeyConfig *keyconf)
Definition: curve_ops.c:160
void ED_operatortypes_curve(void)
Definition: curve_ops.c:42
void ED_operatormacros_curve(void)
Definition: curve_ops.c:136
Scene scene
void ED_gizmotypes_dial_3d(void)
Definition: dial3d_gizmo.c:706
void ED_operatortypes_geometry(void)
Definition: geometry_ops.c:32
void ED_operatormacros_gpencil(void)
Definition: gpencil_ops.c:701
void ED_operatortypes_gpencil(void)
Definition: gpencil_ops.c:514
void ED_keymap_gpencil(wmKeyConfig *keyconf)
Definition: gpencil_ops.c:482
void ED_operatortypes_io(void)
Definition: io_ops.c:43
void(* MEM_freeN)(void *vmemh)
Definition: mallocn.c:41
void *(* MEM_callocN)(size_t len, const char *str)
Definition: mallocn.c:45
void ED_gizmotypes_move_3d(void)
Definition: move3d_gizmo.c:478
static void area(int d1, int d2, int e1, int e2, float weights[2])
void ED_gizmotypes_primitive_3d(void)
static ListBase spacetypes
Definition: screen.c:341
void ED_gizmotypes_snap_3d(void)
Definition: snap3d_gizmo.c:768
static SpaceLink * xxx_create(const ScrArea *UNUSED(area), const Scene *UNUSED(scene))
Definition: spacetypes.c:294
void ED_spacetypes_keymap(wmKeyConfig *keyconf)
Definition: spacetypes.c:190
struct RegionDrawCB RegionDrawCB
static void xxx_init(wmWindowManager *UNUSED(wm), ScrArea *UNUSED(area))
Definition: spacetypes.c:305
void ED_region_draw_cb_remove_by_type(ARegionType *art, void *draw_fn, void(*free)(void *))
Definition: spacetypes.c:276
static void xxx_operatortypes(void)
Definition: spacetypes.c:321
void ED_region_draw_cb_exit(ARegionType *art, void *handle)
Definition: spacetypes.c:253
void ED_spacetypes_init(void)
Definition: spacetypes.c:74
void ED_spacetype_xxx(void)
Definition: spacetypes.c:332
void ED_region_draw_cb_draw(const bContext *C, ARegion *region, int type)
Definition: spacetypes.c:264
static SpaceLink * xxx_duplicate(SpaceLink *UNUSED(sl))
Definition: spacetypes.c:315
static void xxx_free(SpaceLink *UNUSED(sl))
Definition: spacetypes.c:300
void * ED_region_draw_cb_activate(ARegionType *art, void(*draw)(const struct bContext *, struct ARegion *, void *), void *customdata, int type)
Definition: spacetypes.c:238
void ED_spacemacros_init(void)
Definition: spacetypes.c:157
static void xxx_keymap(wmKeyConfig *UNUSED(keyconf))
Definition: spacetypes.c:326
ListBase drawcalls
Definition: BKE_screen.h:213
struct ARegionType * type
void(* draw)(const struct bContext *, struct ARegion *, void *)
Definition: spacetypes.c:231
void * customdata
Definition: spacetypes.c:232
struct RegionDrawCB * next
Definition: spacetypes.c:229
struct RegionDrawCB * prev
Definition: spacetypes.c:229
struct SpaceLink *(* duplicate)(struct SpaceLink *sl)
Definition: BKE_screen.h:104
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