Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/blenkernel/intern/screen.c')
-rw-r--r--source/blender/blenkernel/intern/screen.c1057
1 files changed, 536 insertions, 521 deletions
diff --git a/source/blender/blenkernel/intern/screen.c b/source/blender/blenkernel/intern/screen.c
index 7b4b11674ed..9fa70d38574 100644
--- a/source/blender/blenkernel/intern/screen.c
+++ b/source/blender/blenkernel/intern/screen.c
@@ -55,231 +55,229 @@ static ListBase spacetypes = {NULL, NULL};
/* not SpaceType itself */
static void spacetype_free(SpaceType *st)
{
- ARegionType *art;
- PanelType *pt;
- HeaderType *ht;
+ ARegionType *art;
+ PanelType *pt;
+ HeaderType *ht;
- for (art = st->regiontypes.first; art; art = art->next) {
- BLI_freelistN(&art->drawcalls);
+ for (art = st->regiontypes.first; art; art = art->next) {
+ BLI_freelistN(&art->drawcalls);
- for (pt = art->paneltypes.first; pt; pt = pt->next) {
- if (pt->ext.free) {
- pt->ext.free(pt->ext.data);
- }
+ for (pt = art->paneltypes.first; pt; pt = pt->next) {
+ if (pt->ext.free) {
+ pt->ext.free(pt->ext.data);
+ }
- BLI_freelistN(&pt->children);
- }
+ BLI_freelistN(&pt->children);
+ }
- for (ht = art->headertypes.first; ht; ht = ht->next) {
- if (ht->ext.free) {
- ht->ext.free(ht->ext.data);
- }
- }
+ for (ht = art->headertypes.first; ht; ht = ht->next) {
+ if (ht->ext.free) {
+ ht->ext.free(ht->ext.data);
+ }
+ }
- BLI_freelistN(&art->paneltypes);
- BLI_freelistN(&art->headertypes);
- }
+ BLI_freelistN(&art->paneltypes);
+ BLI_freelistN(&art->headertypes);
+ }
- BLI_freelistN(&st->regiontypes);
+ BLI_freelistN(&st->regiontypes);
}
void BKE_spacetypes_free(void)
{
- SpaceType *st;
+ SpaceType *st;
- for (st = spacetypes.first; st; st = st->next) {
- spacetype_free(st);
- }
+ for (st = spacetypes.first; st; st = st->next) {
+ spacetype_free(st);
+ }
- BLI_freelistN(&spacetypes);
+ BLI_freelistN(&spacetypes);
}
SpaceType *BKE_spacetype_from_id(int spaceid)
{
- SpaceType *st;
+ SpaceType *st;
- for (st = spacetypes.first; st; st = st->next) {
- if (st->spaceid == spaceid)
- return st;
- }
- return NULL;
+ for (st = spacetypes.first; st; st = st->next) {
+ if (st->spaceid == spaceid)
+ return st;
+ }
+ return NULL;
}
ARegionType *BKE_regiontype_from_id_or_first(SpaceType *st, int regionid)
{
- ARegionType *art;
+ ARegionType *art;
- for (art = st->regiontypes.first; art; art = art->next)
- if (art->regionid == regionid)
- return art;
+ for (art = st->regiontypes.first; art; art = art->next)
+ if (art->regionid == regionid)
+ return art;
- printf("Error, region type %d missing in - name:\"%s\", id:%d\n", regionid, st->name, st->spaceid);
- return st->regiontypes.first;
+ printf(
+ "Error, region type %d missing in - name:\"%s\", id:%d\n", regionid, st->name, st->spaceid);
+ return st->regiontypes.first;
}
ARegionType *BKE_regiontype_from_id(SpaceType *st, int regionid)
{
- ARegionType *art;
+ ARegionType *art;
- for (art = st->regiontypes.first; art; art = art->next) {
- if (art->regionid == regionid) {
- return art;
- }
- }
- return NULL;
+ for (art = st->regiontypes.first; art; art = art->next) {
+ if (art->regionid == regionid) {
+ return art;
+ }
+ }
+ return NULL;
}
-
const ListBase *BKE_spacetypes_list(void)
{
- return &spacetypes;
+ return &spacetypes;
}
void BKE_spacetype_register(SpaceType *st)
{
- SpaceType *stype;
+ SpaceType *stype;
- /* sanity check */
- stype = BKE_spacetype_from_id(st->spaceid);
- if (stype) {
- printf("error: redefinition of spacetype %s\n", stype->name);
- spacetype_free(stype);
- MEM_freeN(stype);
- }
+ /* sanity check */
+ stype = BKE_spacetype_from_id(st->spaceid);
+ if (stype) {
+ printf("error: redefinition of spacetype %s\n", stype->name);
+ spacetype_free(stype);
+ MEM_freeN(stype);
+ }
- BLI_addtail(&spacetypes, st);
+ BLI_addtail(&spacetypes, st);
}
bool BKE_spacetype_exists(int spaceid)
{
- return BKE_spacetype_from_id(spaceid) != NULL;
+ return BKE_spacetype_from_id(spaceid) != NULL;
}
/* ***************** Space handling ********************** */
void BKE_spacedata_freelist(ListBase *lb)
{
- SpaceLink *sl;
- ARegion *ar;
+ SpaceLink *sl;
+ ARegion *ar;
- for (sl = lb->first; sl; sl = sl->next) {
- SpaceType *st = BKE_spacetype_from_id(sl->spacetype);
+ for (sl = lb->first; sl; sl = sl->next) {
+ SpaceType *st = BKE_spacetype_from_id(sl->spacetype);
- /* free regions for pushed spaces */
- for (ar = sl->regionbase.first; ar; ar = ar->next)
- BKE_area_region_free(st, ar);
+ /* free regions for pushed spaces */
+ for (ar = sl->regionbase.first; ar; ar = ar->next)
+ BKE_area_region_free(st, ar);
- BLI_freelistN(&sl->regionbase);
+ BLI_freelistN(&sl->regionbase);
- if (st && st->free)
- st->free(sl);
- }
+ if (st && st->free)
+ st->free(sl);
+ }
- BLI_freelistN(lb);
+ BLI_freelistN(lb);
}
static void panel_list_copy(ListBase *newlb, const ListBase *lb)
{
- BLI_listbase_clear(newlb);
- BLI_duplicatelist(newlb, lb);
+ BLI_listbase_clear(newlb);
+ BLI_duplicatelist(newlb, lb);
- /* copy panel pointers */
- Panel *newpa = newlb->first;
- Panel *pa = lb->first;
- for (; newpa; newpa = newpa->next, pa = pa->next) {
- newpa->activedata = NULL;
+ /* copy panel pointers */
+ Panel *newpa = newlb->first;
+ Panel *pa = lb->first;
+ for (; newpa; newpa = newpa->next, pa = pa->next) {
+ newpa->activedata = NULL;
- Panel *newpatab = newlb->first;
- Panel *patab = lb->first;
- while (newpatab) {
- if (newpa->paneltab == patab) {
- newpa->paneltab = newpatab;
- break;
- }
- newpatab = newpatab->next;
- patab = patab->next;
- }
+ Panel *newpatab = newlb->first;
+ Panel *patab = lb->first;
+ while (newpatab) {
+ if (newpa->paneltab == patab) {
+ newpa->paneltab = newpatab;
+ break;
+ }
+ newpatab = newpatab->next;
+ patab = patab->next;
+ }
- panel_list_copy(&newpa->children, &pa->children);
- }
+ panel_list_copy(&newpa->children, &pa->children);
+ }
}
ARegion *BKE_area_region_copy(SpaceType *st, ARegion *ar)
{
- ARegion *newar = MEM_dupallocN(ar);
+ ARegion *newar = MEM_dupallocN(ar);
- newar->prev = newar->next = NULL;
- BLI_listbase_clear(&newar->handlers);
- BLI_listbase_clear(&newar->uiblocks);
- BLI_listbase_clear(&newar->panels_category);
- BLI_listbase_clear(&newar->panels_category_active);
- BLI_listbase_clear(&newar->ui_lists);
- newar->visible = 0;
- newar->gizmo_map = NULL;
- newar->regiontimer = NULL;
- newar->headerstr = NULL;
- newar->draw_buffer = NULL;
+ newar->prev = newar->next = NULL;
+ BLI_listbase_clear(&newar->handlers);
+ BLI_listbase_clear(&newar->uiblocks);
+ BLI_listbase_clear(&newar->panels_category);
+ BLI_listbase_clear(&newar->panels_category_active);
+ BLI_listbase_clear(&newar->ui_lists);
+ newar->visible = 0;
+ newar->gizmo_map = NULL;
+ newar->regiontimer = NULL;
+ newar->headerstr = NULL;
+ newar->draw_buffer = NULL;
- /* use optional regiondata callback */
- if (ar->regiondata) {
- ARegionType *art = BKE_regiontype_from_id(st, ar->regiontype);
+ /* use optional regiondata callback */
+ if (ar->regiondata) {
+ ARegionType *art = BKE_regiontype_from_id(st, ar->regiontype);
- if (art && art->duplicate) {
- newar->regiondata = art->duplicate(ar->regiondata);
- }
- else if (ar->flag & RGN_FLAG_TEMP_REGIONDATA) {
- newar->regiondata = NULL;
- }
- else {
- newar->regiondata = MEM_dupallocN(ar->regiondata);
- }
- }
+ if (art && art->duplicate) {
+ newar->regiondata = art->duplicate(ar->regiondata);
+ }
+ else if (ar->flag & RGN_FLAG_TEMP_REGIONDATA) {
+ newar->regiondata = NULL;
+ }
+ else {
+ newar->regiondata = MEM_dupallocN(ar->regiondata);
+ }
+ }
- if (ar->v2d.tab_offset)
- newar->v2d.tab_offset = MEM_dupallocN(ar->v2d.tab_offset);
+ if (ar->v2d.tab_offset)
+ newar->v2d.tab_offset = MEM_dupallocN(ar->v2d.tab_offset);
- panel_list_copy(&newar->panels, &ar->panels);
+ panel_list_copy(&newar->panels, &ar->panels);
- BLI_listbase_clear(&newar->ui_previews);
- BLI_duplicatelist(&newar->ui_previews, &ar->ui_previews);
+ BLI_listbase_clear(&newar->ui_previews);
+ BLI_duplicatelist(&newar->ui_previews, &ar->ui_previews);
- return newar;
+ return newar;
}
-
/* from lb2 to lb1, lb1 is supposed to be freed */
static void region_copylist(SpaceType *st, ListBase *lb1, ListBase *lb2)
{
- ARegion *ar;
+ ARegion *ar;
- /* to be sure */
- BLI_listbase_clear(lb1);
+ /* to be sure */
+ BLI_listbase_clear(lb1);
- for (ar = lb2->first; ar; ar = ar->next) {
- ARegion *arnew = BKE_area_region_copy(st, ar);
- BLI_addtail(lb1, arnew);
- }
+ for (ar = lb2->first; ar; ar = ar->next) {
+ ARegion *arnew = BKE_area_region_copy(st, ar);
+ BLI_addtail(lb1, arnew);
+ }
}
-
/* lb1 should be empty */
void BKE_spacedata_copylist(ListBase *lb1, ListBase *lb2)
{
- SpaceLink *sl;
+ SpaceLink *sl;
- BLI_listbase_clear(lb1); /* to be sure */
+ BLI_listbase_clear(lb1); /* to be sure */
- for (sl = lb2->first; sl; sl = sl->next) {
- SpaceType *st = BKE_spacetype_from_id(sl->spacetype);
+ for (sl = lb2->first; sl; sl = sl->next) {
+ SpaceType *st = BKE_spacetype_from_id(sl->spacetype);
- if (st && st->duplicate) {
- SpaceLink *slnew = st->duplicate(sl);
+ if (st && st->duplicate) {
+ SpaceLink *slnew = st->duplicate(sl);
- BLI_addtail(lb1, slnew);
+ BLI_addtail(lb1, slnew);
- region_copylist(st, &slnew->regionbase, &sl->regionbase);
- }
- }
+ region_copylist(st, &slnew->regionbase, &sl->regionbase);
+ }
+ }
}
/* facility to set locks for drawing to survive (render) threads accessing drawing data */
@@ -287,18 +285,18 @@ void BKE_spacedata_copylist(ListBase *lb1, ListBase *lb2)
/* should be replaced in future by better local data handling for threads */
void BKE_spacedata_draw_locks(int set)
{
- SpaceType *st;
+ SpaceType *st;
- for (st = spacetypes.first; st; st = st->next) {
- ARegionType *art;
+ for (st = spacetypes.first; st; st = st->next) {
+ ARegionType *art;
- for (art = st->regiontypes.first; art; art = art->next) {
- if (set)
- art->do_lock = art->lock;
- else
- art->do_lock = false;
- }
- }
+ for (art = st->regiontypes.first; art; art = art->next) {
+ if (set)
+ art->do_lock = art->lock;
+ else
+ art->do_lock = false;
+ }
+ }
}
/**
@@ -306,38 +304,39 @@ void BKE_spacedata_draw_locks(int set)
*/
ARegion *BKE_spacedata_find_region_type(const SpaceLink *slink, const ScrArea *sa, int region_type)
{
- const bool is_slink_active = slink == sa->spacedata.first;
- const ListBase *regionbase = (is_slink_active) ?
- &sa->regionbase : &slink->regionbase;
- ARegion *ar = NULL;
+ const bool is_slink_active = slink == sa->spacedata.first;
+ const ListBase *regionbase = (is_slink_active) ? &sa->regionbase : &slink->regionbase;
+ ARegion *ar = NULL;
- BLI_assert(BLI_findindex(&sa->spacedata, slink) != -1);
- for (ar = regionbase->first; ar; ar = ar->next) {
- if (ar->regiontype == region_type) {
- break;
- }
- }
+ BLI_assert(BLI_findindex(&sa->spacedata, slink) != -1);
+ for (ar = regionbase->first; ar; ar = ar->next) {
+ if (ar->regiontype == region_type) {
+ break;
+ }
+ }
- /* Should really unit test this instead. */
- BLI_assert(!is_slink_active || ar == BKE_area_find_region_type(sa, region_type));
+ /* Should really unit test this instead. */
+ BLI_assert(!is_slink_active || ar == BKE_area_find_region_type(sa, region_type));
- return ar;
+ return ar;
}
-
-static void (*spacedata_id_remap_cb)(struct ScrArea *sa, struct SpaceLink *sl, ID *old_id, ID *new_id) = NULL;
+static void (*spacedata_id_remap_cb)(struct ScrArea *sa,
+ struct SpaceLink *sl,
+ ID *old_id,
+ ID *new_id) = NULL;
void BKE_spacedata_callback_id_remap_set(void (*func)(ScrArea *sa, SpaceLink *sl, ID *, ID *))
{
- spacedata_id_remap_cb = func;
+ spacedata_id_remap_cb = func;
}
/* UNUSED!!! */
void BKE_spacedata_id_unref(struct ScrArea *sa, struct SpaceLink *sl, struct ID *id)
{
- if (spacedata_id_remap_cb) {
- spacedata_id_remap_cb(sa, sl, id, NULL);
- }
+ if (spacedata_id_remap_cb) {
+ spacedata_id_remap_cb(sa, sl, id, NULL);
+ }
}
/**
@@ -347,24 +346,24 @@ static void (*region_refresh_tag_gizmomap_callback)(struct wmGizmoMap *) = NULL;
void BKE_region_callback_refresh_tag_gizmomap_set(void (*callback)(struct wmGizmoMap *))
{
- region_refresh_tag_gizmomap_callback = callback;
+ region_refresh_tag_gizmomap_callback = callback;
}
void BKE_screen_gizmo_tag_refresh(struct bScreen *sc)
{
- if (region_refresh_tag_gizmomap_callback == NULL) {
- return;
- }
+ if (region_refresh_tag_gizmomap_callback == NULL) {
+ return;
+ }
- ScrArea *sa;
- ARegion *ar;
- for (sa = sc->areabase.first; sa; sa = sa->next) {
- for (ar = sa->regionbase.first; ar; ar = ar->next) {
- if (ar->gizmo_map != NULL) {
- region_refresh_tag_gizmomap_callback(ar->gizmo_map);
- }
- }
- }
+ ScrArea *sa;
+ ARegion *ar;
+ for (sa = sc->areabase.first; sa; sa = sa->next) {
+ for (ar = sa->regionbase.first; ar; ar = ar->next) {
+ if (ar->gizmo_map != NULL) {
+ region_refresh_tag_gizmomap_callback(ar->gizmo_map);
+ }
+ }
+ }
}
/**
@@ -374,288 +373,301 @@ static void (*region_free_gizmomap_callback)(struct wmGizmoMap *) = NULL;
void BKE_region_callback_free_gizmomap_set(void (*callback)(struct wmGizmoMap *))
{
- region_free_gizmomap_callback = callback;
+ region_free_gizmomap_callback = callback;
}
void BKE_area_region_panels_free(ListBase *lb)
{
- Panel *pa, *pa_next;
- for (pa = lb->first; pa; pa = pa_next) {
- pa_next = pa->next;
- if (pa->activedata) {
- MEM_freeN(pa->activedata);
- }
- BKE_area_region_panels_free(&pa->children);
- }
+ Panel *pa, *pa_next;
+ for (pa = lb->first; pa; pa = pa_next) {
+ pa_next = pa->next;
+ if (pa->activedata) {
+ MEM_freeN(pa->activedata);
+ }
+ BKE_area_region_panels_free(&pa->children);
+ }
- BLI_freelistN(lb);
+ BLI_freelistN(lb);
}
/* not region itself */
void BKE_area_region_free(SpaceType *st, ARegion *ar)
{
- uiList *uilst;
-
- if (st) {
- ARegionType *art = BKE_regiontype_from_id(st, ar->regiontype);
-
- if (art && art->free)
- art->free(ar);
-
- if (ar->regiondata)
- printf("regiondata free error\n");
- }
- else if (ar->type && ar->type->free)
- ar->type->free(ar);
-
- if (ar->v2d.tab_offset) {
- MEM_freeN(ar->v2d.tab_offset);
- ar->v2d.tab_offset = NULL;
- }
-
- BKE_area_region_panels_free(&ar->panels);
-
- for (uilst = ar->ui_lists.first; uilst; uilst = uilst->next) {
- if (uilst->dyn_data) {
- uiListDyn *dyn_data = uilst->dyn_data;
- if (dyn_data->items_filter_flags) {
- MEM_freeN(dyn_data->items_filter_flags);
- }
- if (dyn_data->items_filter_neworder) {
- MEM_freeN(dyn_data->items_filter_neworder);
- }
- MEM_freeN(dyn_data);
- }
- if (uilst->properties) {
- IDP_FreeProperty(uilst->properties);
- MEM_freeN(uilst->properties);
- }
- }
-
- if (ar->gizmo_map != NULL) {
- region_free_gizmomap_callback(ar->gizmo_map);
- }
-
- BLI_freelistN(&ar->ui_lists);
- BLI_freelistN(&ar->ui_previews);
- BLI_freelistN(&ar->panels_category);
- BLI_freelistN(&ar->panels_category_active);
+ uiList *uilst;
+
+ if (st) {
+ ARegionType *art = BKE_regiontype_from_id(st, ar->regiontype);
+
+ if (art && art->free)
+ art->free(ar);
+
+ if (ar->regiondata)
+ printf("regiondata free error\n");
+ }
+ else if (ar->type && ar->type->free)
+ ar->type->free(ar);
+
+ if (ar->v2d.tab_offset) {
+ MEM_freeN(ar->v2d.tab_offset);
+ ar->v2d.tab_offset = NULL;
+ }
+
+ BKE_area_region_panels_free(&ar->panels);
+
+ for (uilst = ar->ui_lists.first; uilst; uilst = uilst->next) {
+ if (uilst->dyn_data) {
+ uiListDyn *dyn_data = uilst->dyn_data;
+ if (dyn_data->items_filter_flags) {
+ MEM_freeN(dyn_data->items_filter_flags);
+ }
+ if (dyn_data->items_filter_neworder) {
+ MEM_freeN(dyn_data->items_filter_neworder);
+ }
+ MEM_freeN(dyn_data);
+ }
+ if (uilst->properties) {
+ IDP_FreeProperty(uilst->properties);
+ MEM_freeN(uilst->properties);
+ }
+ }
+
+ if (ar->gizmo_map != NULL) {
+ region_free_gizmomap_callback(ar->gizmo_map);
+ }
+
+ BLI_freelistN(&ar->ui_lists);
+ BLI_freelistN(&ar->ui_previews);
+ BLI_freelistN(&ar->panels_category);
+ BLI_freelistN(&ar->panels_category_active);
}
/* not area itself */
void BKE_screen_area_free(ScrArea *sa)
{
- SpaceType *st = BKE_spacetype_from_id(sa->spacetype);
- ARegion *ar;
+ SpaceType *st = BKE_spacetype_from_id(sa->spacetype);
+ ARegion *ar;
- for (ar = sa->regionbase.first; ar; ar = ar->next)
- BKE_area_region_free(st, ar);
+ for (ar = sa->regionbase.first; ar; ar = ar->next)
+ BKE_area_region_free(st, ar);
- MEM_SAFE_FREE(sa->global);
- BLI_freelistN(&sa->regionbase);
+ MEM_SAFE_FREE(sa->global);
+ BLI_freelistN(&sa->regionbase);
- BKE_spacedata_freelist(&sa->spacedata);
+ BKE_spacedata_freelist(&sa->spacedata);
- BLI_freelistN(&sa->actionzones);
+ BLI_freelistN(&sa->actionzones);
}
void BKE_screen_area_map_free(ScrAreaMap *area_map)
{
- for (ScrArea *area = area_map->areabase.first, *area_next; area; area = area_next) {
- area_next = area->next;
- BKE_screen_area_free(area);
- }
+ for (ScrArea *area = area_map->areabase.first, *area_next; area; area = area_next) {
+ area_next = area->next;
+ BKE_screen_area_free(area);
+ }
- BLI_freelistN(&area_map->vertbase);
- BLI_freelistN(&area_map->edgebase);
- BLI_freelistN(&area_map->areabase);
+ BLI_freelistN(&area_map->vertbase);
+ BLI_freelistN(&area_map->edgebase);
+ BLI_freelistN(&area_map->areabase);
}
/** Free (or release) any data used by this screen (does not free the screen itself). */
void BKE_screen_free(bScreen *sc)
{
- ARegion *ar;
+ ARegion *ar;
- /* No animdata here. */
+ /* No animdata here. */
- for (ar = sc->regionbase.first; ar; ar = ar->next)
- BKE_area_region_free(NULL, ar);
+ for (ar = sc->regionbase.first; ar; ar = ar->next)
+ BKE_area_region_free(NULL, ar);
- BLI_freelistN(&sc->regionbase);
+ BLI_freelistN(&sc->regionbase);
- BKE_screen_area_map_free(AREAMAP_FROM_SCREEN(sc));
+ BKE_screen_area_map_free(AREAMAP_FROM_SCREEN(sc));
- BKE_previewimg_free(&sc->preview);
+ BKE_previewimg_free(&sc->preview);
- /* Region and timer are freed by the window manager. */
- MEM_SAFE_FREE(sc->tool_tip);
+ /* Region and timer are freed by the window manager. */
+ MEM_SAFE_FREE(sc->tool_tip);
}
/* ***************** Screen edges & verts ***************** */
ScrEdge *BKE_screen_find_edge(bScreen *sc, ScrVert *v1, ScrVert *v2)
{
- ScrEdge *se;
+ ScrEdge *se;
- BKE_screen_sort_scrvert(&v1, &v2);
- for (se = sc->edgebase.first; se; se = se->next) {
- if (se->v1 == v1 && se->v2 == v2) {
- return se;
- }
- }
+ BKE_screen_sort_scrvert(&v1, &v2);
+ for (se = sc->edgebase.first; se; se = se->next) {
+ if (se->v1 == v1 && se->v2 == v2) {
+ return se;
+ }
+ }
- return NULL;
+ return NULL;
}
void BKE_screen_sort_scrvert(ScrVert **v1, ScrVert **v2)
{
- ScrVert *tmp;
+ ScrVert *tmp;
- if (*v1 > *v2) {
- tmp = *v1;
- *v1 = *v2;
- *v2 = tmp;
- }
+ if (*v1 > *v2) {
+ tmp = *v1;
+ *v1 = *v2;
+ *v2 = tmp;
+ }
}
void BKE_screen_remove_double_scrverts(bScreen *sc)
{
- ScrVert *v1, *verg;
- ScrEdge *se;
- ScrArea *sa;
-
- verg = sc->vertbase.first;
- while (verg) {
- if (verg->newv == NULL) { /* !!! */
- v1 = verg->next;
- while (v1) {
- if (v1->newv == NULL) { /* !?! */
- if (v1->vec.x == verg->vec.x && v1->vec.y == verg->vec.y) {
- /* printf("doublevert\n"); */
- v1->newv = verg;
- }
- }
- v1 = v1->next;
- }
- }
- verg = verg->next;
- }
-
- /* replace pointers in edges and faces */
- se = sc->edgebase.first;
- while (se) {
- if (se->v1->newv) se->v1 = se->v1->newv;
- if (se->v2->newv) se->v2 = se->v2->newv;
- /* edges changed: so.... */
- BKE_screen_sort_scrvert(&(se->v1), &(se->v2));
- se = se->next;
- }
- sa = sc->areabase.first;
- while (sa) {
- if (sa->v1->newv) sa->v1 = sa->v1->newv;
- if (sa->v2->newv) sa->v2 = sa->v2->newv;
- if (sa->v3->newv) sa->v3 = sa->v3->newv;
- if (sa->v4->newv) sa->v4 = sa->v4->newv;
- sa = sa->next;
- }
-
- /* remove */
- verg = sc->vertbase.first;
- while (verg) {
- v1 = verg->next;
- if (verg->newv) {
- BLI_remlink(&sc->vertbase, verg);
- MEM_freeN(verg);
- }
- verg = v1;
- }
-
+ ScrVert *v1, *verg;
+ ScrEdge *se;
+ ScrArea *sa;
+
+ verg = sc->vertbase.first;
+ while (verg) {
+ if (verg->newv == NULL) { /* !!! */
+ v1 = verg->next;
+ while (v1) {
+ if (v1->newv == NULL) { /* !?! */
+ if (v1->vec.x == verg->vec.x && v1->vec.y == verg->vec.y) {
+ /* printf("doublevert\n"); */
+ v1->newv = verg;
+ }
+ }
+ v1 = v1->next;
+ }
+ }
+ verg = verg->next;
+ }
+
+ /* replace pointers in edges and faces */
+ se = sc->edgebase.first;
+ while (se) {
+ if (se->v1->newv)
+ se->v1 = se->v1->newv;
+ if (se->v2->newv)
+ se->v2 = se->v2->newv;
+ /* edges changed: so.... */
+ BKE_screen_sort_scrvert(&(se->v1), &(se->v2));
+ se = se->next;
+ }
+ sa = sc->areabase.first;
+ while (sa) {
+ if (sa->v1->newv)
+ sa->v1 = sa->v1->newv;
+ if (sa->v2->newv)
+ sa->v2 = sa->v2->newv;
+ if (sa->v3->newv)
+ sa->v3 = sa->v3->newv;
+ if (sa->v4->newv)
+ sa->v4 = sa->v4->newv;
+ sa = sa->next;
+ }
+
+ /* remove */
+ verg = sc->vertbase.first;
+ while (verg) {
+ v1 = verg->next;
+ if (verg->newv) {
+ BLI_remlink(&sc->vertbase, verg);
+ MEM_freeN(verg);
+ }
+ verg = v1;
+ }
}
void BKE_screen_remove_double_scredges(bScreen *sc)
{
- ScrEdge *verg, *se, *sn;
+ ScrEdge *verg, *se, *sn;
- /* compare */
- verg = sc->edgebase.first;
- while (verg) {
- se = verg->next;
- while (se) {
- sn = se->next;
- if (verg->v1 == se->v1 && verg->v2 == se->v2) {
- BLI_remlink(&sc->edgebase, se);
- MEM_freeN(se);
- }
- se = sn;
- }
- verg = verg->next;
- }
+ /* compare */
+ verg = sc->edgebase.first;
+ while (verg) {
+ se = verg->next;
+ while (se) {
+ sn = se->next;
+ if (verg->v1 == se->v1 && verg->v2 == se->v2) {
+ BLI_remlink(&sc->edgebase, se);
+ MEM_freeN(se);
+ }
+ se = sn;
+ }
+ verg = verg->next;
+ }
}
void BKE_screen_remove_unused_scredges(bScreen *sc)
{
- ScrEdge *se, *sen;
- ScrArea *sa;
- int a = 0;
-
- /* sets flags when edge is used in area */
- sa = sc->areabase.first;
- while (sa) {
- se = BKE_screen_find_edge(sc, sa->v1, sa->v2);
- if (se == NULL) printf("error: area %d edge 1 doesn't exist\n", a);
- else se->flag = 1;
- se = BKE_screen_find_edge(sc, sa->v2, sa->v3);
- if (se == NULL) printf("error: area %d edge 2 doesn't exist\n", a);
- else se->flag = 1;
- se = BKE_screen_find_edge(sc, sa->v3, sa->v4);
- if (se == NULL) printf("error: area %d edge 3 doesn't exist\n", a);
- else se->flag = 1;
- se = BKE_screen_find_edge(sc, sa->v4, sa->v1);
- if (se == NULL) printf("error: area %d edge 4 doesn't exist\n", a);
- else se->flag = 1;
- sa = sa->next;
- a++;
- }
- se = sc->edgebase.first;
- while (se) {
- sen = se->next;
- if (se->flag == 0) {
- BLI_remlink(&sc->edgebase, se);
- MEM_freeN(se);
- }
- else {
- se->flag = 0;
- }
- se = sen;
- }
+ ScrEdge *se, *sen;
+ ScrArea *sa;
+ int a = 0;
+
+ /* sets flags when edge is used in area */
+ sa = sc->areabase.first;
+ while (sa) {
+ se = BKE_screen_find_edge(sc, sa->v1, sa->v2);
+ if (se == NULL)
+ printf("error: area %d edge 1 doesn't exist\n", a);
+ else
+ se->flag = 1;
+ se = BKE_screen_find_edge(sc, sa->v2, sa->v3);
+ if (se == NULL)
+ printf("error: area %d edge 2 doesn't exist\n", a);
+ else
+ se->flag = 1;
+ se = BKE_screen_find_edge(sc, sa->v3, sa->v4);
+ if (se == NULL)
+ printf("error: area %d edge 3 doesn't exist\n", a);
+ else
+ se->flag = 1;
+ se = BKE_screen_find_edge(sc, sa->v4, sa->v1);
+ if (se == NULL)
+ printf("error: area %d edge 4 doesn't exist\n", a);
+ else
+ se->flag = 1;
+ sa = sa->next;
+ a++;
+ }
+ se = sc->edgebase.first;
+ while (se) {
+ sen = se->next;
+ if (se->flag == 0) {
+ BLI_remlink(&sc->edgebase, se);
+ MEM_freeN(se);
+ }
+ else {
+ se->flag = 0;
+ }
+ se = sen;
+ }
}
void BKE_screen_remove_unused_scrverts(bScreen *sc)
{
- ScrVert *sv, *svn;
- ScrEdge *se;
+ ScrVert *sv, *svn;
+ ScrEdge *se;
- /* we assume edges are ok */
+ /* we assume edges are ok */
- se = sc->edgebase.first;
- while (se) {
- se->v1->flag = 1;
- se->v2->flag = 1;
- se = se->next;
- }
+ se = sc->edgebase.first;
+ while (se) {
+ se->v1->flag = 1;
+ se->v2->flag = 1;
+ se = se->next;
+ }
- sv = sc->vertbase.first;
- while (sv) {
- svn = sv->next;
- if (sv->flag == 0) {
- BLI_remlink(&sc->vertbase, sv);
- MEM_freeN(sv);
- }
- else {
- sv->flag = 0;
- }
- sv = svn;
- }
+ sv = sc->vertbase.first;
+ while (sv) {
+ svn = sv->next;
+ if (sv->flag == 0) {
+ BLI_remlink(&sc->vertbase, sv);
+ MEM_freeN(sv);
+ }
+ else {
+ sv->flag = 0;
+ }
+ sv = svn;
+ }
}
/* ***************** Utilities ********************** */
@@ -668,45 +680,45 @@ void BKE_screen_remove_unused_scrverts(bScreen *sc)
*/
ARegion *BKE_area_find_region_type(const ScrArea *sa, int region_type)
{
- if (sa) {
- for (ARegion *ar = sa->regionbase.first; ar; ar = ar->next) {
- if (ar->regiontype == region_type)
- return ar;
- }
- }
+ if (sa) {
+ for (ARegion *ar = sa->regionbase.first; ar; ar = ar->next) {
+ if (ar->regiontype == region_type)
+ return ar;
+ }
+ }
- return NULL;
+ return NULL;
}
ARegion *BKE_area_find_region_active_win(ScrArea *sa)
{
- if (sa) {
- ARegion *ar = BLI_findlink(&sa->regionbase, sa->region_active_win);
- if (ar && (ar->regiontype == RGN_TYPE_WINDOW)) {
- return ar;
- }
+ if (sa) {
+ ARegion *ar = BLI_findlink(&sa->regionbase, sa->region_active_win);
+ if (ar && (ar->regiontype == RGN_TYPE_WINDOW)) {
+ return ar;
+ }
- /* fallback to any */
- return BKE_area_find_region_type(sa, RGN_TYPE_WINDOW);
- }
- return NULL;
+ /* fallback to any */
+ return BKE_area_find_region_type(sa, RGN_TYPE_WINDOW);
+ }
+ return NULL;
}
ARegion *BKE_area_find_region_xy(ScrArea *sa, const int regiontype, int x, int y)
{
- ARegion *ar_found = NULL;
- if (sa) {
- ARegion *ar;
- for (ar = sa->regionbase.first; ar; ar = ar->next) {
- if ((regiontype == RGN_TYPE_ANY) || (ar->regiontype == regiontype)) {
- if (BLI_rcti_isect_pt(&ar->winrct, x, y)) {
- ar_found = ar;
- break;
- }
- }
- }
- }
- return ar_found;
+ ARegion *ar_found = NULL;
+ if (sa) {
+ ARegion *ar;
+ for (ar = sa->regionbase.first; ar; ar = ar->next) {
+ if ((regiontype == RGN_TYPE_ANY) || (ar->regiontype == regiontype)) {
+ if (BLI_rcti_isect_pt(&ar->winrct, x, y)) {
+ ar_found = ar;
+ break;
+ }
+ }
+ }
+ }
+ return ar_found;
}
/**
@@ -715,15 +727,15 @@ ARegion *BKE_area_find_region_xy(ScrArea *sa, const int regiontype, int x, int y
*/
ScrArea *BKE_screen_find_area_from_space(struct bScreen *sc, SpaceLink *sl)
{
- ScrArea *sa;
+ ScrArea *sa;
- for (sa = sc->areabase.first; sa; sa = sa->next) {
- if (BLI_findindex(&sa->spacedata, sl) != -1) {
- break;
- }
- }
+ for (sa = sc->areabase.first; sa; sa = sa->next) {
+ if (BLI_findindex(&sa->spacedata, sl) != -1) {
+ break;
+ }
+ }
- return sa;
+ return sa;
}
/**
@@ -732,92 +744,95 @@ ScrArea *BKE_screen_find_area_from_space(struct bScreen *sc, SpaceLink *sl)
*/
ScrArea *BKE_screen_find_big_area(bScreen *sc, const int spacetype, const short min)
{
- ScrArea *sa, *big = NULL;
- int size, maxsize = 0;
-
- for (sa = sc->areabase.first; sa; sa = sa->next) {
- if ((spacetype == SPACE_TYPE_ANY) || (sa->spacetype == spacetype)) {
- if (min <= sa->winx && min <= sa->winy) {
- size = sa->winx * sa->winy;
- if (size > maxsize) {
- maxsize = size;
- big = sa;
- }
- }
- }
- }
-
- return big;
-}
-
-ScrArea *BKE_screen_area_map_find_area_xy(const ScrAreaMap *areamap, const int spacetype, int x, int y)
-{
- for (ScrArea *sa = areamap->areabase.first; sa; sa = sa->next) {
- if (BLI_rcti_isect_pt(&sa->totrct, x, y)) {
- if ((spacetype == SPACE_TYPE_ANY) || (sa->spacetype == spacetype)) {
- return sa;
- }
- break;
- }
- }
- return NULL;
+ ScrArea *sa, *big = NULL;
+ int size, maxsize = 0;
+
+ for (sa = sc->areabase.first; sa; sa = sa->next) {
+ if ((spacetype == SPACE_TYPE_ANY) || (sa->spacetype == spacetype)) {
+ if (min <= sa->winx && min <= sa->winy) {
+ size = sa->winx * sa->winy;
+ if (size > maxsize) {
+ maxsize = size;
+ big = sa;
+ }
+ }
+ }
+ }
+
+ return big;
+}
+
+ScrArea *BKE_screen_area_map_find_area_xy(const ScrAreaMap *areamap,
+ const int spacetype,
+ int x,
+ int y)
+{
+ for (ScrArea *sa = areamap->areabase.first; sa; sa = sa->next) {
+ if (BLI_rcti_isect_pt(&sa->totrct, x, y)) {
+ if ((spacetype == SPACE_TYPE_ANY) || (sa->spacetype == spacetype)) {
+ return sa;
+ }
+ break;
+ }
+ }
+ return NULL;
}
ScrArea *BKE_screen_find_area_xy(bScreen *sc, const int spacetype, int x, int y)
{
- return BKE_screen_area_map_find_area_xy(AREAMAP_FROM_SCREEN(sc), spacetype, x, y);
+ return BKE_screen_area_map_find_area_xy(AREAMAP_FROM_SCREEN(sc), spacetype, x, y);
}
void BKE_screen_view3d_sync(View3D *v3d, struct Scene *scene)
{
- if (v3d->scenelock && v3d->localvd == NULL) {
- v3d->camera = scene->camera;
+ if (v3d->scenelock && v3d->localvd == NULL) {
+ v3d->camera = scene->camera;
- if (v3d->camera == NULL) {
- ARegion *ar;
+ if (v3d->camera == NULL) {
+ ARegion *ar;
- for (ar = v3d->regionbase.first; ar; ar = ar->next) {
- if (ar->regiontype == RGN_TYPE_WINDOW) {
- RegionView3D *rv3d = ar->regiondata;
- if (rv3d->persp == RV3D_CAMOB)
- rv3d->persp = RV3D_PERSP;
- }
- }
- }
- }
+ for (ar = v3d->regionbase.first; ar; ar = ar->next) {
+ if (ar->regiontype == RGN_TYPE_WINDOW) {
+ RegionView3D *rv3d = ar->regiondata;
+ if (rv3d->persp == RV3D_CAMOB)
+ rv3d->persp = RV3D_PERSP;
+ }
+ }
+ }
+ }
}
void BKE_screen_view3d_scene_sync(bScreen *sc, Scene *scene)
{
- /* are there cameras in the views that are not in the scene? */
- ScrArea *sa;
- for (sa = sc->areabase.first; sa; sa = sa->next) {
- SpaceLink *sl;
- for (sl = sa->spacedata.first; sl; sl = sl->next) {
- if (sl->spacetype == SPACE_VIEW3D) {
- View3D *v3d = (View3D *) sl;
- BKE_screen_view3d_sync(v3d, scene);
- }
- }
- }
+ /* are there cameras in the views that are not in the scene? */
+ ScrArea *sa;
+ for (sa = sc->areabase.first; sa; sa = sa->next) {
+ SpaceLink *sl;
+ for (sl = sa->spacedata.first; sl; sl = sl->next) {
+ if (sl->spacetype == SPACE_VIEW3D) {
+ View3D *v3d = (View3D *)sl;
+ BKE_screen_view3d_sync(v3d, scene);
+ }
+ }
+ }
}
void BKE_screen_view3d_shading_init(View3DShading *shading)
{
- memset(shading, 0, sizeof(*shading));
+ memset(shading, 0, sizeof(*shading));
- shading->type = OB_SOLID;
- shading->prev_type = OB_SOLID;
- shading->flag = V3D_SHADING_SPECULAR_HIGHLIGHT | V3D_SHADING_XRAY_BONE;
- shading->light = V3D_LIGHTING_STUDIO;
- shading->shadow_intensity = 0.5f;
- shading->xray_alpha = 0.5f;
- shading->xray_alpha_wire = 0.5f;
- shading->cavity_valley_factor = 1.0f;
- shading->cavity_ridge_factor = 1.0f;
- shading->curvature_ridge_factor = 1.0f;
- shading->curvature_valley_factor = 1.0f;
- copy_v3_fl(shading->single_color, 0.8f);
- copy_v3_fl(shading->background_color, 0.05f);
+ shading->type = OB_SOLID;
+ shading->prev_type = OB_SOLID;
+ shading->flag = V3D_SHADING_SPECULAR_HIGHLIGHT | V3D_SHADING_XRAY_BONE;
+ shading->light = V3D_LIGHTING_STUDIO;
+ shading->shadow_intensity = 0.5f;
+ shading->xray_alpha = 0.5f;
+ shading->xray_alpha_wire = 0.5f;
+ shading->cavity_valley_factor = 1.0f;
+ shading->cavity_ridge_factor = 1.0f;
+ shading->curvature_ridge_factor = 1.0f;
+ shading->curvature_valley_factor = 1.0f;
+ copy_v3_fl(shading->single_color, 0.8f);
+ copy_v3_fl(shading->background_color, 0.05f);
}
/* magic zoom calculation, no idea what
@@ -830,44 +845,44 @@ void BKE_screen_view3d_shading_init(View3DShading *shading)
*/
float BKE_screen_view3d_zoom_to_fac(float camzoom)
{
- return powf(((float)M_SQRT2 + camzoom / 50.0f), 2.0f) / 4.0f;
+ return powf(((float)M_SQRT2 + camzoom / 50.0f), 2.0f) / 4.0f;
}
float BKE_screen_view3d_zoom_from_fac(float zoomfac)
{
- return ((sqrtf(4.0f * zoomfac) - (float)M_SQRT2) * 50.0f);
+ return ((sqrtf(4.0f * zoomfac) - (float)M_SQRT2) * 50.0f);
}
bool BKE_screen_is_fullscreen_area(const bScreen *screen)
{
- return ELEM(screen->state, SCREENMAXIMIZED, SCREENFULL);
+ return ELEM(screen->state, SCREENMAXIMIZED, SCREENFULL);
}
bool BKE_screen_is_used(const bScreen *screen)
{
- return (screen->winid != 0);
+ return (screen->winid != 0);
}
void BKE_screen_header_alignment_reset(bScreen *screen)
{
- int alignment = (U.uiflag & USER_HEADER_BOTTOM) ? RGN_ALIGN_BOTTOM : RGN_ALIGN_TOP;
- for (ScrArea *sa = screen->areabase.first; sa; sa = sa->next) {
- for (ARegion *ar = sa->regionbase.first; ar; ar = ar->next) {
- if (ar->regiontype == RGN_TYPE_HEADER) {
- if (ELEM(sa->spacetype, SPACE_FILE, SPACE_USERPREF, SPACE_OUTLINER, SPACE_PROPERTIES)) {
- ar->alignment = RGN_ALIGN_TOP;
- continue;
- }
- ar->alignment = alignment;
- }
- if (ar->regiontype == RGN_TYPE_FOOTER) {
- if (ELEM(sa->spacetype, SPACE_FILE, SPACE_USERPREF, SPACE_OUTLINER, SPACE_PROPERTIES)) {
- ar->alignment = RGN_ALIGN_BOTTOM;
- continue;
- }
- ar->alignment = (U.uiflag & USER_HEADER_BOTTOM) ? RGN_ALIGN_TOP : RGN_ALIGN_BOTTOM;
- }
- }
- }
- screen->do_refresh = true;
+ int alignment = (U.uiflag & USER_HEADER_BOTTOM) ? RGN_ALIGN_BOTTOM : RGN_ALIGN_TOP;
+ for (ScrArea *sa = screen->areabase.first; sa; sa = sa->next) {
+ for (ARegion *ar = sa->regionbase.first; ar; ar = ar->next) {
+ if (ar->regiontype == RGN_TYPE_HEADER) {
+ if (ELEM(sa->spacetype, SPACE_FILE, SPACE_USERPREF, SPACE_OUTLINER, SPACE_PROPERTIES)) {
+ ar->alignment = RGN_ALIGN_TOP;
+ continue;
+ }
+ ar->alignment = alignment;
+ }
+ if (ar->regiontype == RGN_TYPE_FOOTER) {
+ if (ELEM(sa->spacetype, SPACE_FILE, SPACE_USERPREF, SPACE_OUTLINER, SPACE_PROPERTIES)) {
+ ar->alignment = RGN_ALIGN_BOTTOM;
+ continue;
+ }
+ ar->alignment = (U.uiflag & USER_HEADER_BOTTOM) ? RGN_ALIGN_TOP : RGN_ALIGN_BOTTOM;
+ }
+ }
+ }
+ screen->do_refresh = true;
}