Blender V5.0
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
8
9#include <cstdlib>
10
11#include "MEM_guardedalloc.h"
12
14
15#include "BLI_listbase.h"
16
17#include "BKE_context.hh"
18#include "BKE_screen.hh"
19
20#include "GPU_state.hh"
21
22#include "UI_interface.hh"
23#include "UI_view2d.hh"
24
25#include "ED_anim_api.hh"
26#include "ED_armature.hh"
27#include "ED_asset.hh"
28#include "ED_clip.hh"
29#include "ED_curve.hh"
30#include "ED_curves.hh"
31#include "ED_curves_sculpt.hh"
32#include "ED_fileselect.hh"
33#include "ED_geometry.hh"
34#include "ED_gizmo_library.hh"
35#include "ED_gpencil_legacy.hh"
36#include "ED_grease_pencil.hh"
37#include "ED_lattice.hh"
38#include "ED_markers.hh"
39#include "ED_mask.hh"
40#include "ED_mball.hh"
41#include "ED_mesh.hh"
42#include "ED_node.hh"
43#include "ED_object.hh"
44#include "ED_paint.hh"
45#include "ED_physics.hh"
46#include "ED_pointcloud.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. */
87
88 /* Register operator types for screen and all spaces. */
118
121
123
125
126 /* Gizmo types. */
137
138 /* Register types for operators and gizmos. */
139 for (const std::unique_ptr<SpaceType> &type : BKE_spacetypes_list()) {
140 /* Initialize gizmo types first, operator types need them. */
141 if (type->gizmos) {
142 type->gizmos();
143 }
144 if (type->operatortypes) {
145 type->operatortypes();
146 }
147 }
148}
149
151{
152 using namespace blender::ed;
153 /* Macros must go last since they reference other operators.
154 * They need to be registered after python operators too. */
173
174 /* Register dropboxes (can use macros). */
176 for (const std::unique_ptr<SpaceType> &type : BKE_spacetypes_list()) {
177 if (type->dropboxes) {
178 type->dropboxes();
179 }
180 }
181}
182
184{
185 using namespace blender::ed;
186 ED_keymap_screen(keyconf);
187 ED_keymap_anim(keyconf);
188 ED_keymap_animchannels(keyconf);
191 object::keymap_object(keyconf);
192 ED_keymap_lattice(keyconf);
193 ED_keymap_mesh(keyconf);
194 ED_keymap_uvedit(keyconf);
195 ED_keymap_curve(keyconf);
196 curves::keymap_curves(keyconf);
198 ED_keymap_armature(keyconf);
199 ED_keymap_physics(keyconf);
200 ED_keymap_metaball(keyconf);
201 ED_keymap_paint(keyconf);
202 ED_keymap_mask(keyconf);
203 ED_keymap_marker(keyconf);
205
206 ED_keymap_view2d(keyconf);
207 ED_keymap_ui(keyconf);
208
210
211 for (const std::unique_ptr<SpaceType> &type : BKE_spacetypes_list()) {
212 if (type->keymap) {
213 type->keymap(keyconf);
214 }
215 LISTBASE_FOREACH (ARegionType *, region_type, &type->regiontypes) {
216 if (region_type->keymap) {
217 region_type->keymap(keyconf);
218 }
219 }
220 }
221}
222
223/* ********************** Custom Draw Call API ***************** */
224
227
228 void (*draw)(const bContext *, ARegion *, void *);
230
231 int type;
232};
233
235 void (*draw)(const bContext *, ARegion *, void *),
236 void *customdata,
237 int type)
238{
240
241 BLI_addtail(&art->drawcalls, rdc);
242 rdc->draw = draw;
243 rdc->customdata = customdata;
244 rdc->type = type;
245
246 return rdc;
247}
248
249bool ED_region_draw_cb_exit(ARegionType *art, void *handle)
250{
251 LISTBASE_FOREACH (RegionDrawCB *, rdc, &art->drawcalls) {
252 if (rdc == (RegionDrawCB *)handle) {
253 BLI_remlink(&art->drawcalls, rdc);
254 MEM_freeN(rdc);
255 return true;
256 }
257 }
258 return false;
259}
260
261static void ed_region_draw_cb_draw(const bContext *C, ARegion *region, ARegionType *art, int type)
262{
264 if (rdc->type == type) {
265 rdc->draw(C, region, rdc->customdata);
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->runtime->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:277
void BLI_kdtree_nd_ free(KDTree *tree)
#define LISTBASE_FOREACH(type, var, list)
#define LISTBASE_FOREACH_MUTABLE(type, var, list)
void BLI_addtail(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
Definition listbase.cc:111
void BLI_remlink(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
Definition listbase.cc:131
void ED_operatormacros_graph()
Definition graph_ops.cc:506
void ED_operatormacros_action()
Definition action_ops.cc:72
void ED_operatormacros_nla()
Definition nla_ops.cc:142
void ED_operatormacros_clip()
Definition clip_ops.cc:1886
void ED_operatortypes_sculpt_curves()
void ED_operatormacros_file()
Definition file_ops.cc:3405
void ED_gizmotypes_preselect_3d()
void ED_keymap_lattice(wmKeyConfig *keyconf)
void ED_operatortypes_lattice()
void ED_operatormacros_mask()
Definition mask_edit.cc:168
void ED_keymap_mask(wmKeyConfig *keyconf)
Definition mask_edit.cc:162
void ED_operatortypes_mask()
Definition mask_edit.cc:98
void ED_operatortypes_metaball()
Definition mball_ops.cc:19
void ED_operatormacros_metaball()
Definition mball_ops.cc:32
void ED_keymap_metaball(wmKeyConfig *keyconf)
Definition mball_ops.cc:46
void ED_operatortypes_mesh()
Definition mesh_ops.cc:21
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:142
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:19
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_operatortypes_sound()
Definition sound_ops.cc:925
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_script()
void ED_spacetype_buttons()
void ED_spacetype_nla()
Definition space_nla.cc:656
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_operatortypes_userpref()
void ED_operatortypes_edutils()
void ED_keymap_uvedit(wmKeyConfig *keyconf)
void ED_operatortypes_uvedit()
void ED_operatormacros_uvedit()
Read Guarded memory(de)allocation.
#define C
Definition RandGen.cpp:29
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:1397
void ED_keymap_anim(wmKeyConfig *keyconf)
Definition anim_ops.cc:1452
void ED_keymap_armature(wmKeyConfig *keyconf)
void ED_operatortypes_armature()
void ED_operatormacros_armature()
void ED_gizmotypes_arrow_3d()
void ED_gizmotypes_blank_3d()
#define U
void ED_gizmotypes_button_2d()
void ED_gizmotypes_cage_2d()
void ED_gizmotypes_cage_3d()
void ED_operatortypes_curve()
Definition curve_ops.cc:23
void ED_operatormacros_curve()
Definition curve_ops.cc:122
void ED_keymap_curve(wmKeyConfig *keyconf)
Definition curve_ops.cc:146
void ED_gizmotypes_dial_3d()
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:28
void * MEM_callocN(size_t len, const char *str)
Definition mallocn.cc:118
void MEM_freeN(void *vmemh)
Definition mallocn.cc:113
void ED_gizmotypes_move_3d()
void keymap_curves(wmKeyConfig *keyconf)
void keymap_object(wmKeyConfig *keyconf)
void operatortypes_object()
Definition object_ops.cc:29
void keymap_pointcloud(wmKeyConfig *keyconf)
Definition operators.cc:265
void keymap_sculpt(wmKeyConfig *keyconf)
void keymap_transform(wmKeyConfig *keyconf)
void ED_operatormacros_sequencer()
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
ARegionRuntimeHandle * runtime
void * customdata
void(* draw)(const bContext *, ARegion *, void *)
RegionDrawCB * next
RegionDrawCB * prev