UI: Hide Content Selectively for Full Screen Area

Commit #142418 hid the navigation gizmo and text overlays while in Full
Screen Area by just not allowing those operations while in that mode.
This PR undoes that and instead selectively hides those items and
restores them afterward if they had been showing. The difference is
that this makes it possible to optionally bring them back while in the
mode. This adds a new fullscreen_flag to bScreen to store what was
visible to allow restoring afterward.

Pull Request: https://projects.blender.org/blender/blender/pulls/143144
This commit is contained in:
Harley Acheson
2025-07-29 20:22:11 +02:00
committed by Harley Acheson
parent 06fe1357cf
commit bbfc42fbf7
5 changed files with 93 additions and 10 deletions

View File

@@ -125,9 +125,6 @@ static bool WIDGETGROUP_navigate_poll(const bContext *C, wmGizmoGroupType * /*gz
if (area == nullptr) {
return false;
}
if (CTX_wm_screen(C)->state == SCREENFULL) {
return false;
}
switch (area->spacetype) {
case SPACE_SEQ: {
const SpaceSeq *sseq = static_cast<const SpaceSeq *>(area->spacedata.first);

View File

@@ -1679,6 +1679,45 @@ static bScreen *screen_state_to_nonnormal(bContext *C,
region->flag |= RGN_FLAG_HIDDEN;
}
}
/* Temporarily hide gizmos and overlays. */
screen->fullscreen_flag = 0;
if (newa->spacetype == SPACE_VIEW3D) {
View3D *v3d = static_cast<View3D *>(newa->spacedata.first);
if (v3d && !(v3d->gizmo_flag & V3D_GIZMO_HIDE_NAVIGATE)) {
screen->fullscreen_flag |= FULLSCREEN_RESTORE_GIZMO_NAVIGATE;
v3d->gizmo_flag |= V3D_GIZMO_HIDE_NAVIGATE;
}
if (v3d && !(v3d->overlay.flag & V3D_OVERLAY_HIDE_TEXT)) {
screen->fullscreen_flag |= FULLSCREEN_RESTORE_TEXT;
v3d->overlay.flag |= V3D_OVERLAY_HIDE_TEXT;
}
if (v3d && (v3d->overlay.flag & V3D_OVERLAY_STATS)) {
screen->fullscreen_flag |= FULLSCREEN_RESTORE_STATS;
v3d->overlay.flag &= ~V3D_OVERLAY_STATS;
}
}
else if (newa->spacetype == SPACE_CLIP) {
SpaceClip *sc = static_cast<SpaceClip *>(newa->spacedata.first);
if (sc && !(sc->gizmo_flag & SCLIP_GIZMO_HIDE_NAVIGATE)) {
screen->fullscreen_flag |= FULLSCREEN_RESTORE_GIZMO_NAVIGATE;
sc->gizmo_flag |= SCLIP_GIZMO_HIDE_NAVIGATE;
}
}
else if (newa->spacetype == SPACE_SEQ) {
SpaceSeq *sseq = static_cast<SpaceSeq *>(newa->spacedata.first);
if (sseq && !(sseq->gizmo_flag & SEQ_GIZMO_HIDE_NAVIGATE)) {
screen->fullscreen_flag |= FULLSCREEN_RESTORE_GIZMO_NAVIGATE;
sseq->gizmo_flag |= SEQ_GIZMO_HIDE_NAVIGATE;
}
}
else if (newa->spacetype == SPACE_IMAGE) {
SpaceImage *sima = static_cast<SpaceImage *>(newa->spacedata.first);
if (sima && !(sima->gizmo_flag & SI_GIZMO_HIDE_NAVIGATE)) {
screen->fullscreen_flag |= FULLSCREEN_RESTORE_GIZMO_NAVIGATE;
sima->gizmo_flag |= SI_GIZMO_HIDE_NAVIGATE;
}
}
}
if (toggle_area) {
@@ -1729,6 +1768,7 @@ ScrArea *ED_screen_state_toggle(bContext *C, wmWindow *win, ScrArea *area, const
screen->state = SCREENNORMAL;
screen->flag = oldscreen->flag;
screen->fullscreen_flag = oldscreen->fullscreen_flag;
/* Find old area we may have swapped dummy space data to. It's swapped back here. */
ScrArea *fullsa = nullptr;
@@ -1753,6 +1793,45 @@ ScrArea *ED_screen_state_toggle(bContext *C, wmWindow *win, ScrArea *area, const
LISTBASE_FOREACH (ARegion *, region, &area->regionbase) {
region->flag = region->flagfullscreen;
}
/* Restore gizmos and overlays to their prior states. */
if (area->spacetype == SPACE_VIEW3D) {
View3D *v3d = static_cast<View3D *>(area->spacedata.first);
if (v3d) {
v3d->gizmo_flag = (screen->fullscreen_flag & FULLSCREEN_RESTORE_GIZMO_NAVIGATE) ?
v3d->gizmo_flag & ~V3D_GIZMO_HIDE_NAVIGATE :
v3d->gizmo_flag | V3D_GIZMO_HIDE_NAVIGATE;
v3d->overlay.flag = (screen->fullscreen_flag & FULLSCREEN_RESTORE_TEXT) ?
v3d->overlay.flag & ~V3D_OVERLAY_HIDE_TEXT :
v3d->overlay.flag | V3D_OVERLAY_HIDE_TEXT;
v3d->overlay.flag = (screen->fullscreen_flag & FULLSCREEN_RESTORE_STATS) ?
v3d->overlay.flag | V3D_OVERLAY_STATS :
v3d->overlay.flag & ~V3D_OVERLAY_STATS;
}
}
else if (area->spacetype == SPACE_CLIP) {
SpaceClip *sc = static_cast<SpaceClip *>(area->spacedata.first);
if (sc) {
sc->gizmo_flag = (screen->fullscreen_flag & FULLSCREEN_RESTORE_GIZMO_NAVIGATE) ?
sc->gizmo_flag & ~SCLIP_GIZMO_HIDE_NAVIGATE :
sc->gizmo_flag | SCLIP_GIZMO_HIDE_NAVIGATE;
}
}
else if (area->spacetype == SPACE_SEQ) {
SpaceSeq *sseq = static_cast<SpaceSeq *>(area->spacedata.first);
if (sseq) {
sseq->gizmo_flag = (screen->fullscreen_flag & FULLSCREEN_RESTORE_GIZMO_NAVIGATE) ?
sseq->gizmo_flag & ~SEQ_GIZMO_HIDE_NAVIGATE :
sseq->gizmo_flag | SEQ_GIZMO_HIDE_NAVIGATE;
}
}
else if (area->spacetype == SPACE_IMAGE) {
SpaceImage *sima = static_cast<SpaceImage *>(area->spacedata.first);
if (sima) {
sima->gizmo_flag = (screen->fullscreen_flag & FULLSCREEN_RESTORE_GIZMO_NAVIGATE) ?
sima->gizmo_flag & ~SI_GIZMO_HIDE_NAVIGATE :
sima->gizmo_flag | SI_GIZMO_HIDE_NAVIGATE;
}
}
}
if (fullsa) {

View File

@@ -1559,10 +1559,7 @@ void view3d_draw_region_info(const bContext *C, ARegion *region)
BLF_batch_draw_begin();
bScreen *screen = CTX_wm_screen(C);
if ((v3d->gizmo_flag & (V3D_GIZMO_HIDE | V3D_GIZMO_HIDE_NAVIGATE)) ||
screen->state == SCREENFULL)
{
if (v3d->gizmo_flag & (V3D_GIZMO_HIDE | V3D_GIZMO_HIDE_NAVIGATE)) {
/* pass */
}
else {
@@ -1577,7 +1574,7 @@ void view3d_draw_region_info(const bContext *C, ARegion *region)
}
}
if ((v3d->flag2 & V3D_HIDE_OVERLAYS) == 0 && screen->state != SCREENFULL) {
if ((v3d->flag2 & V3D_HIDE_OVERLAYS) == 0) {
int xoffset = rect->xmin + (0.5f * U.widget_unit);
int yoffset = rect->ymax - (0.1f * U.widget_unit);

View File

@@ -153,8 +153,7 @@ static bool WIDGETGROUP_navigate_poll(const bContext *C, wmGizmoGroupType * /*gz
View3D *v3d = CTX_wm_view3d(C);
if ((((U.uiflag & USER_SHOW_GIZMO_NAVIGATE) == 0) &&
(U.mini_axis_type != USER_MINI_AXIS_TYPE_GIZMO)) ||
(v3d->gizmo_flag & (V3D_GIZMO_HIDE | V3D_GIZMO_HIDE_NAVIGATE)) ||
(CTX_wm_screen(C)->state == SCREENFULL))
(v3d->gizmo_flag & (V3D_GIZMO_HIDE | V3D_GIZMO_HIDE_NAVIGATE)))
{
return false;
}

View File

@@ -105,6 +105,10 @@ typedef struct bScreen {
/** Context callback. */
void /*bContextDataCallback*/ *context;
/* Used to restore after SCREENFULL state. */
short fullscreen_flag;
char _pad2[6];
/** Runtime. */
struct wmTooltipState *tool_tip;
@@ -600,6 +604,13 @@ enum {
SCREENFULL = 2,
};
/** #bScreen.fullscreen_flag */
typedef enum eScreen_Fullscreen_Flag {
FULLSCREEN_RESTORE_GIZMO_NAVIGATE = (1 << 0),
FULLSCREEN_RESTORE_TEXT = (1 << 1),
FULLSCREEN_RESTORE_STATS = (1 << 2),
} eScreen_Fullscreen_Flag;
/** #bScreen.redraws_flag */
typedef enum eScreen_Redraws_Flag {
TIME_REGION = (1 << 0),