Skip to content
This repository was archived by the owner on Jul 22, 2024. It is now read-only.

Commit 6b88460

Browse files
MortimerGorobluemarvin
authored andcommitted
Do not depend on how many windows are opened to select flat/curved when entering fullscreen (#2690)
1 parent af55bbe commit 6b88460

5 files changed

Lines changed: 38 additions & 20 deletions

File tree

app/src/common/shared/org/mozilla/vrbrowser/browser/SettingsStore.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -476,6 +476,10 @@ public void setCylinderDensity(float aDensity) {
476476
editor.commit();
477477
}
478478

479+
public boolean isCurvedModeEnabled() {
480+
return getCylinderDensity() > 0;
481+
}
482+
479483
public int getFoveatedLevelApp() {
480484
return mPrefs.getInt(
481485
mContext.getString(R.string.settings_key_foveated_app), FOVEATED_APP_DEFAULT_LEVEL);

app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/NavigationBarWidget.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -685,6 +685,7 @@ private void enterVRVideo(@VideoProjectionMenuWidget.VideoProjectionFlags int aP
685685
mMediaControlsWidget.setMedia(mFullScreenMedia);
686686
mMediaControlsWidget.setParentWidget(mAttachedWindow.getHandle());
687687
mMediaControlsWidget.setProjectionSelectorEnabled(true);
688+
mMediaControlsWidget.getPlacement().cylinder = SettingsStore.getInstance(getContext()).isCurvedModeEnabled();
688689
mWidgetManager.updateWidget(mMediaControlsWidget);
689690
mWidgetManager.showVRVideo(mAttachedWindow.getHandle(), aProjection);
690691
}

app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/Windows.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1122,8 +1122,11 @@ public void onFullScreen(@NonNull WindowWidget aWindow, boolean aFullScreen) {
11221122
if (aFullScreen) {
11231123
mFullscreenWindow = aWindow;
11241124
aWindow.saveBeforeFullscreenPlacement();
1125+
// Do not depend on how many windows are opened to select flat/curved when entering fullscreen.
1126+
boolean fullscreenCurved = SettingsStore.getInstance(mContext).isCurvedModeEnabled() && (mStoredCurvedMode || mForcedCurvedMode);
1127+
aWindow.getPlacement().cylinder = fullscreenCurved;
11251128
setFullScreenSize(aWindow);
1126-
placeWindow(aWindow, WindowPlacement.FRONT);
1129+
placeWindow(aWindow, WindowPlacement.FRONT, fullscreenCurved);
11271130
focusWindow(aWindow);
11281131
for (WindowWidget win: getCurrentWindows()) {
11291132
setWindowVisible(win, win == mFullscreenWindow);

app/src/main/cpp/BrowserWorld.cpp

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,7 @@ struct BrowserWorld::State {
229229
int ParentCount(const WidgetPtr& aWidget) const;
230230
float ComputeNormalizedZ(const Widget& aWidget) const;
231231
void SortWidgets();
232+
void UpdateWidgetCylinder(const WidgetPtr& aWidget, const float aDensity);
232233
};
233234

234235
void
@@ -657,9 +658,27 @@ BrowserWorld::State::SortWidgets() {
657658
// Depth sort
658659
return da->second.second < db->second.second;
659660
});
661+
}
660662

661-
662-
663+
void
664+
BrowserWorld::State::UpdateWidgetCylinder(const WidgetPtr& aWidget, const float aDensity) {
665+
const bool useCylinder = aDensity > 0 && aWidget->GetPlacement()->cylinder;
666+
if (useCylinder && aWidget->GetCylinder()) {
667+
aWidget->SetCylinderDensity(aDensity);
668+
} else if (useCylinder && !aWidget->GetCylinder()) {
669+
VRLayerSurfacePtr moveLayer = aWidget->GetLayer();
670+
VRLayerCylinderPtr layer = device->CreateLayerCylinder(moveLayer);
671+
CylinderPtr cylinder = Cylinder::Create(create, layer);
672+
aWidget->SetCylinder(cylinder);
673+
aWidget->SetCylinderDensity(aDensity);
674+
} else if (aWidget->GetCylinder()) {
675+
float w = 0, h = 0;
676+
aWidget->GetWorldSize(w, h);
677+
VRLayerSurfacePtr moveLayer = aWidget->GetLayer();
678+
VRLayerQuadPtr layer = device->CreateLayerQuad(moveLayer);
679+
QuadPtr quad = Quad::Create(create, w, h, layer);
680+
aWidget->SetQuad(quad);
681+
}
663682
}
664683

665684
static BrowserWorldPtr sWorldInstance;
@@ -1037,7 +1056,7 @@ BrowserWorld::UpdateWidget(int32_t aHandle, const WidgetPlacementPtr& aPlacement
10371056
}
10381057

10391058
widget->SetPlacement(aPlacement);
1040-
widget->SetCylinderDensity(m.cylinderDensity);
1059+
m.UpdateWidgetCylinder(widget, m.cylinderDensity);
10411060
widget->ToggleWidget(aPlacement->visible);
10421061
widget->SetSurfaceTextureSize(aPlacement->GetTextureWidth(), aPlacement->GetTextureHeight());
10431062

@@ -1233,7 +1252,7 @@ BrowserWorld::LayoutWidget(int32_t aHandle) {
12331252
}
12341253
widget->SetTransform(parent ? parent->GetTransform().PostMultiply(transform) : transform);
12351254

1236-
if (!widget->GetCylinder() && parent) {
1255+
if (!widget->GetCylinder()) {
12371256
widget->LayoutQuadWithCylinderParent(parent);
12381257
}
12391258
}
@@ -1304,21 +1323,7 @@ void
13041323
BrowserWorld::SetCylinderDensity(const float aDensity) {
13051324
m.cylinderDensity = aDensity;
13061325
for (WidgetPtr& widget: m.widgets) {
1307-
const bool useCylinder = m.cylinderDensity > 0 && widget->GetPlacement()->cylinder;
1308-
if (useCylinder && widget->GetCylinder()) {
1309-
widget->SetCylinderDensity(aDensity);
1310-
} else if (useCylinder && !widget->GetCylinder()) {
1311-
VRLayerCylinderPtr layer = m.device->CreateLayerCylinder(widget->GetLayer());
1312-
CylinderPtr cylinder = Cylinder::Create(m.create, layer);
1313-
widget->SetCylinder(cylinder);
1314-
widget->SetCylinderDensity(aDensity);
1315-
} else if (widget->GetCylinder()) {
1316-
float w = 0, h = 0;
1317-
widget->GetWorldSize(w, h);
1318-
VRLayerQuadPtr layer = m.device->CreateLayerQuad(widget->GetLayer());
1319-
QuadPtr quad = Quad::Create(m.create, w, h, layer);
1320-
widget->SetQuad(quad);
1321-
}
1326+
m.UpdateWidgetCylinder(widget, aDensity);
13221327
}
13231328
}
13241329

app/src/main/cpp/Widget.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -629,6 +629,11 @@ Widget::SetProxifyLayer(const bool aValue) {
629629
}
630630

631631
void Widget::LayoutQuadWithCylinderParent(const WidgetPtr& aParent) {
632+
if (!aParent) {
633+
// No parent, reset the container transform.
634+
m.transformContainer->SetTransform(vrb::Matrix::Identity());
635+
return;
636+
}
632637
CylinderPtr cylinder = aParent->GetCylinder();
633638
if (cylinder) {
634639
// The widget is flat and the parent is a cylinder.

0 commit comments

Comments
 (0)