MYST3: Allow the widescreen mod to work in windowed mode

This commit is contained in:
Bastien Bouclet 2018-07-27 19:18:29 +02:00
parent 8aaa2606a6
commit f5319ce6e6
3 changed files with 22 additions and 3 deletions

View File

@ -188,7 +188,16 @@ Renderer *createRenderer(OSystem *system) {
bool fullscreen = ConfMan.getBool("fullscreen");
bool isAccelerated = matchingRendererType != Graphics::kRendererTypeTinyGL;
system->setupScreen(Renderer::kOriginalWidth, Renderer::kOriginalHeight, fullscreen, isAccelerated);
uint width;
uint height = Renderer::kOriginalHeight;
if (ConfMan.getBool("widescreen_mod")) {
width = Renderer::kOriginalWidth * Renderer::kOriginalHeight / Renderer::kFrameHeight;
} else {
width = Renderer::kOriginalWidth;
}
system->setupScreen(width, height, fullscreen, isAccelerated);
#if defined(USE_OPENGL)
// Check the OpenGL context actually supports shaders

View File

@ -24,6 +24,7 @@
#include "engines/myst3/cursor.h"
#include "engines/myst3/database.h"
#include "engines/myst3/scene.h"
#include "engines/myst3/state.h"
namespace Myst3 {
@ -296,7 +297,11 @@ Common::Rect Inventory::getPosition() const {
Common::Rect frame;
if (_vm->isWideScreenModEnabled()) {
frame = Common::Rect(screen.width(), Renderer::kBottomBorderHeight);
frame.translate(0, screen.height() - frame.height());
Common::Rect scenePosition = _vm->_scene->getPosition();
int16 top = CLIP<int16>(screen.height() - frame.height(), 0, scenePosition.bottom);
frame.translate(0, top);
} else {
frame = Common::Rect(screen.width(), screen.height() * Renderer::kBottomBorderHeight / Renderer::kOriginalHeight);
frame.translate(screen.left, screen.top + screen.height() * (Renderer::kTopBorderHeight + Renderer::kFrameHeight) / Renderer::kOriginalHeight);

View File

@ -22,6 +22,7 @@
#include "engines/myst3/subtitles.h"
#include "engines/myst3/myst3.h"
#include "engines/myst3/scene.h"
#include "engines/myst3/state.h"
#include "common/archive.h"
@ -535,7 +536,11 @@ Common::Rect Subtitles::getPosition() const {
if (_vm->isWideScreenModEnabled()) {
frame = Common::Rect(screen.width(), Renderer::kBottomBorderHeight);
frame.translate(0, screen.height() - frame.height());
Common::Rect scenePosition = _vm->_scene->getPosition();
int16 top = CLIP<int16>(screen.height() - frame.height(), 0, scenePosition.bottom);
frame.translate(0, top);
} else {
frame = Common::Rect(screen.width(), screen.height() * Renderer::kBottomBorderHeight / Renderer::kOriginalHeight);
frame.translate(screen.left, screen.top + screen.height() * (Renderer::kTopBorderHeight + Renderer::kFrameHeight) / Renderer::kOriginalHeight);