Skip to content

Commit

Permalink
Do not depend on how many windows are opened to select flat/curved w…
Browse files Browse the repository at this point in the history
…hen entering fullscreen (#2690)
  • Loading branch information
MortimerGoro authored and bluemarvin committed Jan 24, 2020
1 parent af55bbe commit 6b88460
Show file tree
Hide file tree
Showing 5 changed files with 38 additions and 20 deletions.
Expand Up @@ -476,6 +476,10 @@ public void setCylinderDensity(float aDensity) {
editor.commit();
}

public boolean isCurvedModeEnabled() {
return getCylinderDensity() > 0;
}

public int getFoveatedLevelApp() {
return mPrefs.getInt(
mContext.getString(R.string.settings_key_foveated_app), FOVEATED_APP_DEFAULT_LEVEL);
Expand Down
Expand Up @@ -685,6 +685,7 @@ private void enterVRVideo(@VideoProjectionMenuWidget.VideoProjectionFlags int aP
mMediaControlsWidget.setMedia(mFullScreenMedia);
mMediaControlsWidget.setParentWidget(mAttachedWindow.getHandle());
mMediaControlsWidget.setProjectionSelectorEnabled(true);
mMediaControlsWidget.getPlacement().cylinder = SettingsStore.getInstance(getContext()).isCurvedModeEnabled();
mWidgetManager.updateWidget(mMediaControlsWidget);
mWidgetManager.showVRVideo(mAttachedWindow.getHandle(), aProjection);
}
Expand Down
Expand Up @@ -1122,8 +1122,11 @@ public void onFullScreen(@NonNull WindowWidget aWindow, boolean aFullScreen) {
if (aFullScreen) {
mFullscreenWindow = aWindow;
aWindow.saveBeforeFullscreenPlacement();
// Do not depend on how many windows are opened to select flat/curved when entering fullscreen.
boolean fullscreenCurved = SettingsStore.getInstance(mContext).isCurvedModeEnabled() && (mStoredCurvedMode || mForcedCurvedMode);
aWindow.getPlacement().cylinder = fullscreenCurved;
setFullScreenSize(aWindow);
placeWindow(aWindow, WindowPlacement.FRONT);
placeWindow(aWindow, WindowPlacement.FRONT, fullscreenCurved);
focusWindow(aWindow);
for (WindowWidget win: getCurrentWindows()) {
setWindowVisible(win, win == mFullscreenWindow);
Expand Down
43 changes: 24 additions & 19 deletions app/src/main/cpp/BrowserWorld.cpp
Expand Up @@ -229,6 +229,7 @@ struct BrowserWorld::State {
int ParentCount(const WidgetPtr& aWidget) const;
float ComputeNormalizedZ(const Widget& aWidget) const;
void SortWidgets();
void UpdateWidgetCylinder(const WidgetPtr& aWidget, const float aDensity);
};

void
Expand Down Expand Up @@ -657,9 +658,27 @@ BrowserWorld::State::SortWidgets() {
// Depth sort
return da->second.second < db->second.second;
});
}



void
BrowserWorld::State::UpdateWidgetCylinder(const WidgetPtr& aWidget, const float aDensity) {
const bool useCylinder = aDensity > 0 && aWidget->GetPlacement()->cylinder;
if (useCylinder && aWidget->GetCylinder()) {
aWidget->SetCylinderDensity(aDensity);
} else if (useCylinder && !aWidget->GetCylinder()) {
VRLayerSurfacePtr moveLayer = aWidget->GetLayer();
VRLayerCylinderPtr layer = device->CreateLayerCylinder(moveLayer);
CylinderPtr cylinder = Cylinder::Create(create, layer);
aWidget->SetCylinder(cylinder);
aWidget->SetCylinderDensity(aDensity);
} else if (aWidget->GetCylinder()) {
float w = 0, h = 0;
aWidget->GetWorldSize(w, h);
VRLayerSurfacePtr moveLayer = aWidget->GetLayer();
VRLayerQuadPtr layer = device->CreateLayerQuad(moveLayer);
QuadPtr quad = Quad::Create(create, w, h, layer);
aWidget->SetQuad(quad);
}
}

static BrowserWorldPtr sWorldInstance;
Expand Down Expand Up @@ -1037,7 +1056,7 @@ BrowserWorld::UpdateWidget(int32_t aHandle, const WidgetPlacementPtr& aPlacement
}

widget->SetPlacement(aPlacement);
widget->SetCylinderDensity(m.cylinderDensity);
m.UpdateWidgetCylinder(widget, m.cylinderDensity);
widget->ToggleWidget(aPlacement->visible);
widget->SetSurfaceTextureSize(aPlacement->GetTextureWidth(), aPlacement->GetTextureHeight());

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

if (!widget->GetCylinder() && parent) {
if (!widget->GetCylinder()) {
widget->LayoutQuadWithCylinderParent(parent);
}
}
Expand Down Expand Up @@ -1304,21 +1323,7 @@ void
BrowserWorld::SetCylinderDensity(const float aDensity) {
m.cylinderDensity = aDensity;
for (WidgetPtr& widget: m.widgets) {
const bool useCylinder = m.cylinderDensity > 0 && widget->GetPlacement()->cylinder;
if (useCylinder && widget->GetCylinder()) {
widget->SetCylinderDensity(aDensity);
} else if (useCylinder && !widget->GetCylinder()) {
VRLayerCylinderPtr layer = m.device->CreateLayerCylinder(widget->GetLayer());
CylinderPtr cylinder = Cylinder::Create(m.create, layer);
widget->SetCylinder(cylinder);
widget->SetCylinderDensity(aDensity);
} else if (widget->GetCylinder()) {
float w = 0, h = 0;
widget->GetWorldSize(w, h);
VRLayerQuadPtr layer = m.device->CreateLayerQuad(widget->GetLayer());
QuadPtr quad = Quad::Create(m.create, w, h, layer);
widget->SetQuad(quad);
}
m.UpdateWidgetCylinder(widget, aDensity);
}
}

Expand Down
5 changes: 5 additions & 0 deletions app/src/main/cpp/Widget.cpp
Expand Up @@ -629,6 +629,11 @@ Widget::SetProxifyLayer(const bool aValue) {
}

void Widget::LayoutQuadWithCylinderParent(const WidgetPtr& aParent) {
if (!aParent) {
// No parent, reset the container transform.
m.transformContainer->SetTransform(vrb::Matrix::Identity());
return;
}
CylinderPtr cylinder = aParent->GetCylinder();
if (cylinder) {
// The widget is flat and the parent is a cylinder.
Expand Down

0 comments on commit 6b88460

Please sign in to comment.