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:
committed by
Harley Acheson
parent
06fe1357cf
commit
bbfc42fbf7
@@ -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);
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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),
|
||||
|
||||
Reference in New Issue
Block a user