10#define DNA_DEPRECATED_ALLOW
16#include <fmt/format.h>
132 screen->regionbase.first = screen->regionbase.last =
nullptr;
133 screen->context =
nullptr;
134 screen->active_region =
nullptr;
135 screen->animtimer =
nullptr;
136 screen->tool_tip =
nullptr;
137 screen->scrubbing =
false;
143 printf(
"Error reading Screen %s... removing it.\n", screen->id.name + 2);
218 if (pt->rna_ext.free) {
219 pt->rna_ext.free(pt->rna_ext.data);
226 if (ht->rna_ext.free) {
227 ht->rna_ext.free(ht->rna_ext.data);
246 if (st->spaceid == spaceid) {
256 if (art->regionid == regionid) {
273 printf(
"error: redefinition of spacetype %s\n", stype->
name);
303 if (st && st->
free) {
318 *new_panel = *old_panel;
319 new_panel->
runtime = new_runtime;
325 LayoutPanelState *new_state = MEM_cnew<LayoutPanelState>(__func__, *src_state);
341 newar->
prev = newar->
next =
nullptr;
354 if (region->regiondata) {
410 art->do_lock = art->lock;
413 art->do_lock =
false;
423 const bool is_slink_active = slink == area->spacedata.first;
424 const ListBase *regionbase = (is_slink_active) ? &area->regionbase : &slink->
regionbase;
430 if (region_iter->regiontype == region_type) {
431 region = region_iter;
445 ID *new_id) =
nullptr;
477 if (region->gizmo_map !=
nullptr) {
487 area->runtime.tool =
nullptr;
488 area->runtime.is_tool_set =
false;
504 const bool default_closed)
520 Panel *panel = MEM_cnew<Panel>(__func__);
521 panel->
runtime = MEM_new<Panel_Runtime>(__func__);
522 panel->
type = panel_type;
555 if (panel->runtime->custom_data_ptr) {
556 MEM_delete(panel->runtime->custom_data_ptr);
568 if (art && art->
free) {
573 printf(
"regiondata free error\n");
576 else if (region->type && region->type->free) {
577 region->type->free(region);
583 if (uilst->dyn_data && uilst->dyn_data->free_runtime_data_fn) {
584 uilst->dyn_data->free_runtime_data_fn(uilst);
586 if (uilst->properties) {
592 if (region->gizmo_map !=
nullptr) {
596 if (region->runtime.block_name_map !=
nullptr) {
598 region->runtime.block_name_map =
nullptr;
649 if (se->v1 == v1 && se->v2 ==
v2) {
669 if (verg->newv ==
nullptr) {
672 if (v1->
newv ==
nullptr) {
673 if (v1->
vec.
x == verg->vec.x && v1->
vec.
y == verg->vec.y) {
686 se->v1 = se->v1->
newv;
689 se->v2 = se->v2->
newv;
695 if (area->v1->newv) {
696 area->v1 = area->v1->newv;
698 if (area->v2->newv) {
699 area->v2 = area->v2->newv;
701 if (area->v3->newv) {
702 area->v3 = area->v3->newv;
704 if (area->v4->newv) {
705 area->v4 = area->v4->newv;
725 if (verg->v1 == se->
v1 && verg->v2 == se->
v2) {
741 printf(
"error: area %d edge 1 doesn't exist\n", a);
748 printf(
"error: area %d edge 2 doesn't exist\n", a);
755 printf(
"error: area %d edge 3 doesn't exist\n", a);
762 printf(
"error: area %d edge 4 doesn't exist\n", a);
807 if (region->regiontype == region_type) {
819 if (region->regiontype == region_type) {
830 if (area ==
nullptr) {
835 BLI_findlink(&area->regionbase, area->region_active_win));
846 if (area ==
nullptr) {
895 const int space_index =
BLI_findindex(&area->spacedata, link);
896 if (space_index != -1) {
897 return fmt::format(
"areas[{}].spaces[{}]", area_index, space_index);
911 int size = area->
winx * area->winy;
912 if (size > maxsize) {
929 if (
xy[0] >= area->v1->vec.x &&
xy[0] <= area->v4->vec.x &&
xy[1] >= area->v1->vec.y &&
930 xy[1] <= area->v2->vec.y)
948 v3d->
camera = scene->camera;
950 if (v3d->
camera ==
nullptr) {
979 memcpy(shading, shading_default,
sizeof(*shading));
983 const int space_type,
1000 return powf((
float(
M_SQRT2) + camzoom / 50.0f), 2.0f) / 4.0f;
1005 return ((
sqrtf(4.0f * zoomfac) -
float(
M_SQRT2)) * 50.0f);
1015 return (screen->winid != 0);
1028 region->alignment = alignment;
1039 screen->do_refresh =
true;
1050 if (shading->prop) {
1057 if (shading->prop) {
1067 if (region->regiondata) {
1077 switch (spacetype) {
1091 printf(
"regiondata write missing!\n");
1095 printf(
"regiondata write missing!\n");
1157 area->butspacetype = area->spacetype;
1174 panel->runtime = MEM_new<Panel_Runtime>(__func__);
1175 panel->runtime_flag = 0;
1176 panel->activedata =
nullptr;
1177 panel->type =
nullptr;
1178 panel->drawname =
nullptr;
1189 memset(®ion->runtime, 0x0,
sizeof(region->runtime));
1202 ui_list->type =
nullptr;
1203 ui_list->dyn_data =
nullptr;
1211 ui_preview->tag = 0;
1216 region->regiondata =
nullptr;
1220 region->regiondata =
nullptr;
1227 if (region->regiondata ==
nullptr) {
1229 region->regiondata = MEM_cnew<RegionView3D>(
"region view3d");
1238 rv3d->
sms =
nullptr;
1250 region->v2d.sms =
nullptr;
1251 region->v2d.alpha_hor = region->v2d.alpha_vert = 255;
1255 region->headerstr =
nullptr;
1256 region->visible = 0;
1257 region->type =
nullptr;
1258 region->do_draw = 0;
1259 region->gizmo_map =
nullptr;
1260 region->regiontimer =
nullptr;
1261 region->draw_buffer =
nullptr;
1262 memset(®ion->drawrct, 0,
sizeof(region->drawrct));
1268 if (region->regiontype ==
RGN_TYPE_WINDOW && region->regiondata ==
nullptr) {
1273 rv3d->
persp = char(v3d->persp);
1274 rv3d->
view = char(v3d->view);
1275 rv3d->
dist = v3d->dist;
1293 area->type =
nullptr;
1295 memset(&area->runtime, 0x0,
sizeof(area->runtime));
1300 area->region_active_win = -1;
1302 area->flag &= ~AREA_FLAG_ACTIVE_TOOL_UPDATE;
1310 area->butspacetype = area->spacetype;
1321 if (area->spacedata.first ==
nullptr) {
1374 if (se->v1 ==
nullptr) {
1395 printf(
"Warning: region type %d missing in space type \"%s\" (id: %d) - removing region\n",
1409 ListBase *regionbase = (sl == area->spacedata.first) ? &area->regionbase : &sl->regionbase;
#define IDP_BlendDataRead(reader, prop)
void IDP_FreeProperty(IDProperty *prop)
void IDP_BlendWrite(BlendWriter *writer, const IDProperty *prop)
@ IDTYPE_FLAGS_NO_ANIMDATA
@ IDTYPE_FLAGS_ONLY_APPEND
@ IDTYPE_FLAGS_NO_MEMFILE_UNDO
#define MAIN_ID_SESSION_UID_UNSET
void BKE_id_blend_write(BlendWriter *writer, ID *id)
#define BKE_LIB_FOREACHID_PROCESS_FUNCTION_CALL(data_, func_call_)
#define BKE_LIB_FOREACHID_PROCESS_IDSUPER(data_, id_super_, cb_flag_)
int BKE_lib_query_foreachid_process_flags_get(const LibraryForeachIDData *data)
@ IDWALK_DO_DEPRECATED_POINTERS
void BKE_previewimg_blend_write(BlendWriter *writer, const PreviewImage *prv)
void BKE_previewimg_free(PreviewImage **prv)
void BKE_previewimg_blend_read(BlendDataReader *reader, PreviewImage *prv)
#define BLI_assert_unreachable()
void BLI_ghash_free(GHash *gh, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp)
#define LISTBASE_FOREACH(type, var, list)
void BLI_freelinkN(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
#define LISTBASE_FOREACH_MUTABLE(type, var, list)
void void void void void void BLI_duplicatelist(struct ListBase *dst, const struct ListBase *src) ATTR_NONNULL(1
BLI_INLINE void BLI_listbase_clear(struct ListBase *lb)
void * BLI_findlink(const struct ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
#define LISTBASE_FOREACH_INDEX(type, var, list, index_var)
void void BLI_freelistN(struct ListBase *listbase) ATTR_NONNULL(1)
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void BLI_remlink(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
int BLI_findindex(const struct ListBase *listbase, const void *vlink) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void copy_qt_qt(float q[4], const float a[4])
MINLINE void copy_v3_v3(float r[3], const float a[3])
bool BLI_rcti_isect_pt_v(const struct rcti *rect, const int xy[2])
char * BLI_strdup(const char *str) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1) ATTR_MALLOC
#define STRNCPY(dst, src)
#define SET_FLAG_FROM_TEST(value, test, flag)
Compatibility-like things for windows.
#define BLO_write_struct_at_address_with_filecode(writer, filecode, struct_name, address, data_ptr)
#define BLO_write_struct(writer, struct_name, data_ptr)
void BLO_read_string(BlendDataReader *reader, char **ptr_p)
void BLO_write_string(BlendWriter *writer, const char *data_ptr)
#define BLO_read_struct_list(reader, struct_name, list)
#define BLO_write_struct_list(writer, struct_name, list_ptr)
#define BLO_read_struct(reader, struct_name, ptr_p)
#define BLT_I18NCONTEXT_ID_SCREEN
void BPY_callback_screen_free(ARegionType *art)
#define DNA_struct_default_get(struct_name)
@ LAYOUT_PANEL_STATE_FLAG_OPEN
#define AREAMAP_FROM_SCREEN(screen)
@ RGN_FLAG_TEMP_REGIONDATA
@ RGN_FLAG_SEARCH_FILTER_ACTIVE
Read Guarded memory(de)allocation.
ATTR_WARN_UNUSED_RESULT const BMVert * v2
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
DEGForeachIDComponentCallback callback
void MEM_freeN(void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
void *(* MEM_dupallocN)(const void *vmemh)
void region_blend_read_data(BlendDataReader *reader, ARegion *region)
void region_blend_write(BlendWriter *writer, ARegion *region)
static void(* region_refresh_tag_gizmomap_callback)(wmGizmoMap *)
static void area_region_panels_free_recursive(Panel *panel)
static void(* region_free_gizmomap_callback)(wmGizmoMap *)
void BKE_screen_remove_unused_scrverts(bScreen *screen)
void BKE_screen_view3d_shading_blend_read_data(BlendDataReader *reader, View3DShading *shading)
bool BKE_screen_is_used(const bScreen *screen)
void BKE_screen_area_map_blend_write(BlendWriter *writer, ScrAreaMap *area_map)
void BKE_spacetypes_free()
void BKE_spacedata_draw_locks(bool set)
static void regions_remove_invalid(SpaceType *space_type, ListBase *regionbase)
void BKE_screen_remove_unused_scredges(bScreen *screen)
static void screen_blend_write(BlendWriter *writer, ID *id, const void *id_address)
ARegion * BKE_area_find_region_xy(const ScrArea *area, const int regiontype, const int xy[2])
void BKE_spacedata_copylist(ListBase *lb_dst, ListBase *lb_src)
float BKE_screen_view3d_zoom_from_fac(float zoomfac)
void BKE_screen_area_blend_read_after_liblink(BlendLibReader *reader, ID *parent_id, ScrArea *area)
void BKE_spacedata_callback_id_remap_set(void(*func)(ScrArea *area, SpaceLink *sl, ID *, ID *))
ARegion * BKE_screen_find_main_region_at_xy(const bScreen *screen, const int space_type, const int xy[2])
void BKE_screen_remove_double_scrverts(bScreen *screen)
bool BKE_screen_blend_read_data(BlendDataReader *reader, bScreen *screen)
void BKE_spacetype_register(std::unique_ptr< SpaceType > st)
ARegion * BKE_area_find_region_active_win(const ScrArea *area)
void BKE_spacedata_freelist(ListBase *lb)
static void write_area(BlendWriter *writer, ScrArea *area)
std::optional< std::string > BKE_screen_path_from_screen_to_space(const PointerRNA *ptr)
ScrArea * BKE_screen_area_map_find_area_xy(const ScrAreaMap *areamap, const int spacetype, const int xy[2])
static void region_copylist(SpaceType *st, ListBase *lb_dst, ListBase *lb_src)
Span< std::unique_ptr< SpaceType > > BKE_spacetypes_list()
void BKE_screen_view3d_shading_blend_write(BlendWriter *writer, View3DShading *shading)
void BKE_region_callback_free_gizmomap_set(void(*callback)(wmGizmoMap *))
ARegion * BKE_screen_find_region_xy(const bScreen *screen, const int regiontype, const int xy[2])
void BKE_screen_sort_scrvert(ScrVert **v1, ScrVert **v2)
ScrEdge * BKE_screen_find_edge(const bScreen *screen, ScrVert *v1, ScrVert *v2)
static void direct_link_panel_list(BlendDataReader *reader, ListBase *lb)
static void write_region(BlendWriter *writer, ARegion *region, int spacetype)
static Vector< std::unique_ptr< SpaceType > > & get_space_types()
void BKE_screen_area_free(ScrArea *area)
bool BKE_spacetype_exists(int spaceid)
SpaceType * BKE_spacetype_from_id(int spaceid)
static void write_panel_list(BlendWriter *writer, ListBase *lb)
ARegionType * BKE_regiontype_from_id(const SpaceType *st, int regionid)
void BKE_screen_header_alignment_reset(bScreen *screen)
ARegion * BKE_region_find_in_listbase_by_type(const ListBase *regionbase, const int region_type)
void BKE_screen_area_map_free(ScrAreaMap *area_map)
void BKE_spacedata_id_unref(ScrArea *area, SpaceLink *sl, ID *id)
void BKE_area_region_free(SpaceType *st, ARegion *region)
void BKE_screen_gizmo_tag_refresh(bScreen *screen)
bool BKE_screen_is_fullscreen_area(const bScreen *screen)
bool BKE_screen_area_map_blend_read_data(BlendDataReader *reader, ScrAreaMap *area_map)
ScrArea * BKE_screen_find_big_area(const bScreen *screen, const int spacetype, const short min)
static void(* spacedata_id_remap_cb)(ScrArea *area, SpaceLink *sl, ID *old_id, ID *new_id)
void BKE_screen_view3d_scene_sync(bScreen *screen, Scene *scene)
void BKE_panel_free(Panel *panel)
void BKE_screen_remove_double_scredges(bScreen *screen)
void BKE_region_callback_refresh_tag_gizmomap_set(void(*callback)(wmGizmoMap *))
void BKE_screen_runtime_refresh_for_blendfile(bScreen *screen)
float BKE_screen_view3d_zoom_to_fac(float camzoom)
Panel * BKE_panel_new(PanelType *panel_type)
void BKE_screen_view3d_shading_init(View3DShading *shading)
ARegion * BKE_area_find_region_type(const ScrArea *area, int region_type)
LayoutPanelState * BKE_panel_layout_panel_state_ensure(Panel *panel, const char *idname, const bool default_closed)
ScrArea * BKE_screen_find_area_xy(const bScreen *screen, const int spacetype, const int xy[2])
ARegion * BKE_area_region_copy(const SpaceType *st, const ARegion *region)
void BKE_screen_view3d_sync(View3D *v3d, Scene *scene)
ScrArea * BKE_screen_find_area_from_space(const bScreen *screen, const SpaceLink *sl)
static void direct_link_area(BlendDataReader *reader, ScrArea *area)
static void write_uilist(BlendWriter *writer, uiList *ui_list)
void BKE_area_region_panels_free(ListBase *panels)
static void screen_foreach_id(ID *id, LibraryForeachIDData *data)
ARegion * BKE_spacedata_find_region_type(const SpaceLink *slink, const ScrArea *area, int region_type)
void BKE_screen_view3d_do_versions_250(View3D *v3d, ListBase *regions)
static void screen_blend_read_after_liblink(BlendLibReader *reader, ID *id)
void BKE_screen_free_data(bScreen *screen)
static void direct_link_region(BlendDataReader *reader, ARegion *region, int spacetype)
void BKE_screen_foreach_id_screen_area(LibraryForeachIDData *data, ScrArea *area)
static void panel_list_copy(ListBase *newlb, const ListBase *lb)
static void screen_free_data(ID *id)
void *(* duplicate)(void *poin)
struct wmTimer * regiontimer
ListBase panels_category_active
struct wmDrawBuffer * draw_buffer
struct wmGizmoMap * gizmo_map
char idname[BKE_ST_MAXNAME]
ListBase layout_panel_states
struct Panel_Runtime * runtime
struct SmoothView3DStore * sms
struct ViewRender * view_render
struct RegionView3D * localvd
struct wmTimer * smooth_timer
SpaceLink *(* duplicate)(SpaceLink *sl)
void(* free)(SpaceLink *sl)
void(* blend_read_data)(BlendDataReader *reader, SpaceLink *space_link)
void(* blend_read_after_liblink)(BlendLibReader *reader, ID *parent_id, SpaceLink *space_link)
char name[BKE_ST_MAXNAME]
void(* blend_write)(BlendWriter *writer, SpaceLink *space_link)
void(* foreach_id)(SpaceLink *space_link, LibraryForeachIDData *data)