Blender V4.3
spacetypes.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2008 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
9#include <cstdlib>
10
11#include "MEM_guardedalloc.h"
12
13#include "BLI_utildefines.h"
14
15#include "DNA_scene_types.h"
17
18#include "BKE_context.hh"
19#include "BKE_screen.hh"
20
21#include "GPU_state.hh"
22
23#include "UI_interface.hh"
24#include "UI_view2d.hh"
25
26#include "ED_anim_api.hh"
27#include "ED_armature.hh"
28#include "ED_asset.hh"
29#include "ED_clip.hh"
30#include "ED_curve.hh"
31#include "ED_curves.hh"
32#include "ED_curves_sculpt.hh"
33#include "ED_fileselect.hh"
34#include "ED_geometry.hh"
35#include "ED_gizmo_library.hh"
36#include "ED_gpencil_legacy.hh"
37#include "ED_grease_pencil.hh"
38#include "ED_lattice.hh"
39#include "ED_markers.hh"
40#include "ED_mask.hh"
41#include "ED_mball.hh"
42#include "ED_mesh.hh"
43#include "ED_node.hh"
44#include "ED_object.hh"
45#include "ED_paint.hh"
46#include "ED_physics.hh"
47#include "ED_render.hh"
48#include "ED_scene.hh"
49#include "ED_screen.hh"
50#include "ED_sculpt.hh"
51#include "ED_sequencer.hh"
52#include "ED_sound.hh"
53#include "ED_space_api.hh"
54#include "ED_transform.hh"
55#include "ED_userpref.hh"
56#include "ED_util.hh"
57#include "ED_uvedit.hh"
58
59#include "io_ops.hh"
60
62{
63 using namespace blender::ed;
64 /* UI unit is a variable, may be used in some space type initialization. */
65 U.widget_unit = 20;
66
67 /* Create space types. */
86 spreadsheet::register_spacetype();
87
88 /* Register operator types for screen and all spaces. */
95 asset::operatortypes_asset();
98 object::operatortypes_object();
102 sculpt_paint::operatortypes_sculpt();
108 curves::operatortypes_curves();
117
120
122
124
125 /* Gizmo types. */
136
137 /* Register types for operators and gizmos. */
138 for (const std::unique_ptr<SpaceType> &type : BKE_spacetypes_list()) {
139 /* Initialize gizmo types first, operator types need them. */
140 if (type->gizmos) {
141 type->gizmos();
142 }
143 if (type->operatortypes) {
144 type->operatortypes();
145 }
146 }
147}
148
150{
151 using namespace blender::ed;
152 /* Macros must go last since they reference other operators.
153 * They need to be registered after python operators too. */
159 object::operatormacros_object();
165 curves::operatormacros_curves();
171
172 /* Register dropboxes (can use macros). */
174 for (const std::unique_ptr<SpaceType> &type : BKE_spacetypes_list()) {
175 if (type->dropboxes) {
176 type->dropboxes();
177 }
178 }
179}
180
182{
183 using namespace blender::ed;
184 ED_keymap_screen(keyconf);
185 ED_keymap_anim(keyconf);
186 ED_keymap_animchannels(keyconf);
189 object::keymap_object(keyconf);
190 ED_keymap_lattice(keyconf);
191 ED_keymap_mesh(keyconf);
192 ED_keymap_uvedit(keyconf);
193 ED_keymap_curve(keyconf);
194 curves::keymap_curves(keyconf);
195 ED_keymap_armature(keyconf);
196 ED_keymap_physics(keyconf);
197 ED_keymap_metaball(keyconf);
198 ED_keymap_paint(keyconf);
199 ED_keymap_mask(keyconf);
200 ED_keymap_marker(keyconf);
201 sculpt_paint::keymap_sculpt(keyconf);
202
203 ED_keymap_view2d(keyconf);
204 ED_keymap_ui(keyconf);
205
206 ED_keymap_transform(keyconf);
207
208 for (const std::unique_ptr<SpaceType> &type : BKE_spacetypes_list()) {
209 if (type->keymap) {
210 type->keymap(keyconf);
211 }
212 LISTBASE_FOREACH (ARegionType *, region_type, &type->regiontypes) {
213 if (region_type->keymap) {
214 region_type->keymap(keyconf);
215 }
216 }
217 }
218}
219
220/* ********************** Custom Draw Call API ***************** */
221
224
225 void (*draw)(const bContext *, ARegion *, void *);
227
228 int type;
229};
230
232 void (*draw)(const bContext *, ARegion *, void *),
233 void *customdata,
234 int type)
235{
236 RegionDrawCB *rdc = MEM_cnew<RegionDrawCB>(__func__);
237
238 BLI_addtail(&art->drawcalls, rdc);
239 rdc->draw = draw;
240 rdc->customdata = customdata;
241 rdc->type = type;
242
243 return rdc;
244}
245
246bool ED_region_draw_cb_exit(ARegionType *art, void *handle)
247{
248 LISTBASE_FOREACH (RegionDrawCB *, rdc, &art->drawcalls) {
249 if (rdc == (RegionDrawCB *)handle) {
250 BLI_remlink(&art->drawcalls, rdc);
251 MEM_freeN(rdc);
252 return true;
253 }
254 }
255 return false;
256}
257
258static void ed_region_draw_cb_draw(const bContext *C, ARegion *region, ARegionType *art, int type)
259{
261 if (rdc->type == type) {
262 rdc->draw(C, region, rdc->customdata);
263
264 /* This is needed until we get rid of BGL which can change the states we are tracking. */
265 GPU_bgl_end();
266 }
267 }
268}
269
270void ED_region_draw_cb_draw(const bContext *C, ARegion *region, int type)
271{
272 ed_region_draw_cb_draw(C, region, region->type, type);
273}
274
276{
277 ed_region_draw_cb_draw(nullptr, nullptr, art, type);
278}
279
280void ED_region_draw_cb_remove_by_type(ARegionType *art, void *draw_fn, void (*free)(void *))
281{
283 if (rdc->draw == draw_fn) {
284 if (free) {
285 free(rdc->customdata);
286 }
287 BLI_remlink(&art->drawcalls, rdc);
288 MEM_freeN(rdc);
289 }
290 }
291}
blender::Span< std::unique_ptr< SpaceType > > BKE_spacetypes_list()
Definition screen.cc:263
void BLI_kdtree_nd_ free(KDTree *tree)
#define LISTBASE_FOREACH(type, var, list)
#define LISTBASE_FOREACH_MUTABLE(type, var, list)
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
Definition listbase.cc:110
void BLI_remlink(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
Definition listbase.cc:130
void ED_operatormacros_graph()
Definition graph_ops.cc:503
void ED_operatormacros_action()
Definition action_ops.cc:76
void ED_operatormacros_nla()
Definition nla_ops.cc:143
void ED_operatormacros_clip()
Definition clip_ops.cc:1876
void ED_operatortypes_sculpt_curves()
void ED_operatormacros_file()
Definition file_ops.cc:3309
void ED_gizmotypes_preselect_3d()
void ED_keymap_lattice(wmKeyConfig *keyconf)
void ED_operatortypes_lattice()
void ED_operatormacros_mask()
Definition mask_edit.cc:170
void ED_keymap_mask(wmKeyConfig *keyconf)
Definition mask_edit.cc:164
void ED_operatortypes_mask()
Definition mask_edit.cc:100
void ED_operatortypes_metaball()
Definition mball_ops.cc:21
void ED_operatormacros_metaball()
Definition mball_ops.cc:34
void ED_keymap_metaball(wmKeyConfig *keyconf)
Definition mball_ops.cc:48
void ED_operatortypes_mesh()
Definition mesh_ops.cc:23
void ED_keymap_mesh(wmKeyConfig *keyconf)
Definition mesh_ops.cc:362
void ED_operatormacros_mesh()
Definition mesh_ops.cc:211
void ED_operatormacros_node()
Definition node_ops.cc:131
void ED_operatortypes_paint()
Definition paint_ops.cc:969
void ED_operatormacros_paint()
Definition paint_ops.cc:953
void ED_keymap_paint(wmKeyConfig *keyconf)
void ED_keymap_physics(wmKeyConfig *keyconf)
void ED_operatortypes_physics()
void ED_operatortypes_render()
Definition render_ops.cc:21
bool void ED_operatortypes_scene()
void ED_keymap_screen(wmKeyConfig *keyconf)
void ED_operatortypes_screen()
void ED_operatortypes_workspace()
void ED_screen_user_menu_register()
void ED_operatormacros_sequencer()
void ED_operatortypes_sound()
Definition sound_ops.cc:914
void ED_spacetype_topbar()
void ED_spacetype_outliner()
void ED_spacetype_file()
void ED_spacetype_ipo()
void ED_spacetype_userpref()
void ED_spacetype_clip()
void ED_spacetype_image()
void ED_spacetype_sequencer()
void ED_spacetype_script()
void ED_spacetype_buttons()
void ED_spacetype_nla()
Definition space_nla.cc:609
void ED_spacetype_text()
void ED_spacetype_console()
void ED_spacetype_action()
void ED_spacetype_view3d()
void ED_spacetype_statusbar()
void ED_spacetype_node()
void ED_spacetype_info()
void ED_keymap_transform(wmKeyConfig *keyconf)
void ED_operatortypes_userpref()
void ED_operatortypes_edutils()
void ED_keymap_uvedit(wmKeyConfig *keyconf)
void ED_operatortypes_uvedit()
void ED_operatormacros_uvedit()
void GPU_bgl_end()
Definition gpu_state.cc:349
Read Guarded memory(de)allocation.
void ED_dropboxes_ui()
void ED_operatortypes_ui()
void ED_keymap_ui(wmKeyConfig *keyconf)
User Interface Keymap.
void ED_uilisttypes_ui()
void ED_operatortypes_view2d()
void ED_keymap_view2d(wmKeyConfig *keyconf)
void ED_keymap_animchannels(wmKeyConfig *keyconf)
void ED_operatortypes_animchannels()
void ED_keymap_marker(wmKeyConfig *keyconf)
void ED_operatortypes_marker()
void ED_operatortypes_anim()
Definition anim_ops.cc:937
void ED_keymap_anim(wmKeyConfig *keyconf)
Definition anim_ops.cc:983
void ED_keymap_armature(wmKeyConfig *keyconf)
void ED_operatortypes_armature()
void ED_operatormacros_armature()
void ED_gizmotypes_arrow_3d()
void ED_gizmotypes_blank_3d()
unsigned int U
Definition btGjkEpa3.h:78
void ED_gizmotypes_button_2d()
void ED_gizmotypes_cage_2d()
void ED_gizmotypes_cage_3d()
void ED_operatortypes_curve()
Definition curve_ops.cc:26
void ED_operatormacros_curve()
Definition curve_ops.cc:125
void ED_keymap_curve(wmKeyConfig *keyconf)
Definition curve_ops.cc:149
void ED_gizmotypes_dial_3d()
void ED_operatortypes_geometry()
void ED_keymap_gpencil_legacy(wmKeyConfig *keyconf)
void ED_operatortypes_gpencil_legacy()
void ED_operatormacros_grease_pencil()
void ED_keymap_grease_pencil(wmKeyConfig *keyconf)
void ED_operatortypes_grease_pencil()
void ED_operatortypes_io()
Definition io_ops.cc:32
void MEM_freeN(void *vmemh)
Definition mallocn.cc:105
void ED_gizmotypes_move_3d()
void ED_gizmotypes_primitive_3d()
void ED_gizmotypes_snap_3d()
void ED_spacetypes_keymap(wmKeyConfig *keyconf)
void * ED_region_draw_cb_activate(ARegionType *art, void(*draw)(const bContext *, ARegion *, void *), void *customdata, int type)
void ED_region_draw_cb_remove_by_type(ARegionType *art, void *draw_fn, void(*free)(void *))
static void ed_region_draw_cb_draw(const bContext *C, ARegion *region, ARegionType *art, int type)
void ED_region_draw_cb_draw(const bContext *C, ARegion *region, int type)
void ED_region_surface_draw_cb_draw(ARegionType *art, int type)
void ED_spacetypes_init()
Definition spacetypes.cc:61
bool ED_region_draw_cb_exit(ARegionType *art, void *handle)
void ED_spacemacros_init()
ListBase drawcalls
void * customdata
void(* draw)(const bContext *, ARegion *, void *)
RegionDrawCB * next
RegionDrawCB * prev