Hide top-bar in fullscreen
Fullscreen as in the Alt+F10 fullscreen.
This commit is contained in:
@@ -133,13 +133,17 @@ int ED_area_global_size_y(const ScrArea *area);
|
||||
bool ED_area_is_global(const ScrArea *area);
|
||||
int ED_region_global_size_y(void);
|
||||
|
||||
/** Iterate over all areas visible in the screen (screen as in everything visible in the window, not just bScreen) */
|
||||
ScrArea *ED_screen_areas_iter_first(const struct wmWindow *win, const bScreen *screen);
|
||||
ScrArea *ED_screen_areas_iter_next(const bScreen *screen, const ScrArea *area);
|
||||
/**
|
||||
* Iterate over all areas visible in the screen (screen as in everything
|
||||
* visible in the window, not just bScreen).
|
||||
* \note Skips global areas with flag GLOBAL_AREA_IS_HIDDEN.
|
||||
*/
|
||||
#define ED_screen_areas_iter(win, screen, area_name) \
|
||||
for (ScrArea *area_name = (win)->global_areas.areabase.first ? \
|
||||
(win)->global_areas.areabase.first : \
|
||||
screen->areabase.first; \
|
||||
for (ScrArea *area_name = ED_screen_areas_iter_first(win, screen); \
|
||||
area_name != NULL; \
|
||||
area_name = (area_name == (win)->global_areas.areabase.last) ? (screen)->areabase.first : area_name->next)
|
||||
area_name = ED_screen_areas_iter_next(screen, area_name))
|
||||
#define ED_screen_verts_iter(win, screen, vert_name) \
|
||||
for (ScrVert *vert_name = (win)->global_areas.vertbase.first ? \
|
||||
(win)->global_areas.vertbase.first : \
|
||||
|
||||
@@ -710,7 +710,7 @@ static void fullscreen_azone_initialize(ScrArea *sa, ARegion *ar)
|
||||
{
|
||||
AZone *az;
|
||||
|
||||
if (ar->regiontype != RGN_TYPE_WINDOW)
|
||||
if (ED_area_is_global(sa) || (ar->regiontype != RGN_TYPE_WINDOW))
|
||||
return;
|
||||
|
||||
az = (AZone *)MEM_callocN(sizeof(AZone), "fullscreen action zone");
|
||||
@@ -1480,7 +1480,11 @@ void ED_area_initialize(wmWindowManager *wm, wmWindow *win, ScrArea *sa)
|
||||
const int window_size_y = WM_window_pixels_y(win);
|
||||
ARegion *ar;
|
||||
rcti rect;
|
||||
|
||||
|
||||
if (ED_area_is_global(sa) && (sa->global->flag & GLOBAL_AREA_IS_HIDDEN)) {
|
||||
return;
|
||||
}
|
||||
|
||||
/* set typedefinitions */
|
||||
sa->type = BKE_spacetype_from_id(sa->spacetype);
|
||||
|
||||
@@ -2200,6 +2204,34 @@ bool ED_area_is_global(const ScrArea *area)
|
||||
return area->global != NULL;
|
||||
}
|
||||
|
||||
ScrArea *ED_screen_areas_iter_first(const wmWindow *win, const bScreen *screen)
|
||||
{
|
||||
ScrArea *global_area = win->global_areas.areabase.first;
|
||||
|
||||
if (!global_area) {
|
||||
return screen->areabase.first;
|
||||
}
|
||||
else if ((global_area->global->flag & GLOBAL_AREA_IS_HIDDEN) == 0) {
|
||||
return global_area;
|
||||
}
|
||||
/* Find next visible area. */
|
||||
return ED_screen_areas_iter_next(screen, global_area);
|
||||
}
|
||||
ScrArea *ED_screen_areas_iter_next(const bScreen *screen, const ScrArea *area)
|
||||
{
|
||||
if (area->global) {
|
||||
for (ScrArea *area_iter = area->next; area_iter; area_iter = area_iter->next) {
|
||||
if ((area_iter->global->flag & GLOBAL_AREA_IS_HIDDEN) == 0) {
|
||||
return area_iter;
|
||||
}
|
||||
}
|
||||
/* No visible next global area found, start iterating over layout areas. */
|
||||
return screen->areabase.first;
|
||||
}
|
||||
|
||||
return area->next;
|
||||
}
|
||||
|
||||
/**
|
||||
* For now we just assume all global areas are made up out of horizontal bars
|
||||
* with the same size. A fixed size could be stored in ARegion instead if needed.
|
||||
|
||||
@@ -721,6 +721,9 @@ static void screen_vertices_scale(
|
||||
/* Global areas have a fixed size that only changes with the DPI. Here we ensure that exactly this size is set.
|
||||
* TODO Assumes global area to be top-aligned. Should be made more generic */
|
||||
for (ScrArea *area = win->global_areas.areabase.first; area; area = area->next) {
|
||||
if (area->global->flag & GLOBAL_AREA_IS_HIDDEN) {
|
||||
continue;
|
||||
}
|
||||
/* width */
|
||||
area->v1->vec.x = area->v2->vec.x = 0;
|
||||
area->v3->vec.x = area->v4->vec.x = window_size_x - 1;
|
||||
@@ -1464,6 +1467,10 @@ ScrArea *ED_screen_state_toggle(bContext *C, wmWindow *win, ScrArea *sa, const s
|
||||
}
|
||||
|
||||
if (state == SCREENFULL) {
|
||||
/* unhide global areas */
|
||||
for (ScrArea *glob_area = win->global_areas.areabase.first; glob_area; glob_area = glob_area->next) {
|
||||
glob_area->global->flag &= ~GLOBAL_AREA_IS_HIDDEN;
|
||||
}
|
||||
/* restore the old side panels/header visibility */
|
||||
for (ar = sa->regionbase.first; ar; ar = ar->next) {
|
||||
ar->flag = ar->flagfullscreen;
|
||||
@@ -1523,6 +1530,10 @@ ScrArea *ED_screen_state_toggle(bContext *C, wmWindow *win, ScrArea *sa, const s
|
||||
newa->flag = sa->flag; /* mostly for AREA_FLAG_WASFULLSCREEN */
|
||||
|
||||
if (state == SCREENFULL) {
|
||||
/* temporarily hide global areas */
|
||||
for (ScrArea *glob_area = win->global_areas.areabase.first; glob_area; glob_area = glob_area->next) {
|
||||
glob_area->global->flag |= GLOBAL_AREA_IS_HIDDEN;
|
||||
}
|
||||
/* temporarily hide the side panels/header */
|
||||
for (ar = newa->regionbase.first; ar; ar = ar->next) {
|
||||
ar->flagfullscreen = ar->flag;
|
||||
|
||||
@@ -240,9 +240,14 @@ typedef struct ScrGlobalAreaData {
|
||||
* if they are 'collapsed' or not. Value is set on area creation and not
|
||||
* touched afterwards. */
|
||||
short size_min, size_max;
|
||||
short pad;
|
||||
|
||||
short flag; /* GlobalAreaFlag */
|
||||
} ScrGlobalAreaData;
|
||||
|
||||
enum GlobalAreaFlag {
|
||||
GLOBAL_AREA_IS_HIDDEN = (1 << 0),
|
||||
};
|
||||
|
||||
typedef struct ScrArea {
|
||||
struct ScrArea *next, *prev;
|
||||
|
||||
|
||||
@@ -2107,7 +2107,9 @@ int WM_window_screen_pixels_y(const wmWindow *win)
|
||||
short screen_size_y = WM_window_pixels_y(win);
|
||||
|
||||
for (ScrArea *sa = win->global_areas.areabase.first; sa; sa = sa->next) {
|
||||
screen_size_y -= ED_area_global_size_y(sa);
|
||||
if ((sa->global->flag & GLOBAL_AREA_IS_HIDDEN) == 0) {
|
||||
screen_size_y -= ED_area_global_size_y(sa);
|
||||
}
|
||||
}
|
||||
|
||||
return screen_size_y;
|
||||
|
||||
Reference in New Issue
Block a user