From 28c6c600d45b4ce16f13d08cfc7c9fbcc8461a63 Mon Sep 17 00:00:00 2001 From: Max Horn Date: Mon, 8 Mar 2010 10:29:00 +0000 Subject: Move some aspect ratio related stuff to graphics/scaler/aspect.h svn-id: r48186 --- backends/platform/gp2x/events.cpp | 1 + backends/platform/gp2x/graphics.cpp | 1 + backends/platform/gp2xwiz/gp2xwiz-graphics.cpp | 1 + backends/platform/linuxmoto/linuxmoto-events.cpp | 2 +- backends/platform/linuxmoto/linuxmoto-graphics.cpp | 1 + backends/platform/sdl/events.cpp | 1 + backends/platform/sdl/graphics.cpp | 7 +++ backends/platform/sdl/sdl.h | 5 +- graphics/scaler.cpp | 5 +- graphics/scaler.h | 12 ----- graphics/scaler/aspect.cpp | 2 +- graphics/scaler/aspect.h | 63 ++++++++++++++++++++++ 12 files changed, 80 insertions(+), 21 deletions(-) create mode 100644 graphics/scaler/aspect.h diff --git a/backends/platform/gp2x/events.cpp b/backends/platform/gp2x/events.cpp index e0117e9313..496e045ab0 100644 --- a/backends/platform/gp2x/events.cpp +++ b/backends/platform/gp2x/events.cpp @@ -33,6 +33,7 @@ #include "backends/keymapper/keymapper.h" #include "common/util.h" #include "common/events.h" +#include "graphics/scaler/aspect.h" // for aspect2Real // FIXME move joystick defines out and replace with confile file options // we should really allow users to map any key to a joystick button using the keymapper. diff --git a/backends/platform/gp2x/graphics.cpp b/backends/platform/gp2x/graphics.cpp index 27732007bc..cae596b9ff 100644 --- a/backends/platform/gp2x/graphics.cpp +++ b/backends/platform/gp2x/graphics.cpp @@ -34,6 +34,7 @@ #include "graphics/font.h" #include "graphics/fontman.h" #include "graphics/scaler.h" +#include "graphics/scaler/aspect.h" #include "graphics/surface.h" static const OSystem::GraphicsMode s_supportedGraphicsModes[] = { diff --git a/backends/platform/gp2xwiz/gp2xwiz-graphics.cpp b/backends/platform/gp2xwiz/gp2xwiz-graphics.cpp index 18b9fc133b..b23c3388e1 100644 --- a/backends/platform/gp2xwiz/gp2xwiz-graphics.cpp +++ b/backends/platform/gp2xwiz/gp2xwiz-graphics.cpp @@ -29,6 +29,7 @@ #include "graphics/font.h" #include "graphics/fontman.h" #include "graphics/scaler.h" +#include "graphics/scaler/aspect.h" #include "graphics/scaler/downscaler.h" #include "graphics/surface.h" diff --git a/backends/platform/linuxmoto/linuxmoto-events.cpp b/backends/platform/linuxmoto/linuxmoto-events.cpp index 007f7c732b..4bb3568ebd 100644 --- a/backends/platform/linuxmoto/linuxmoto-events.cpp +++ b/backends/platform/linuxmoto/linuxmoto-events.cpp @@ -24,7 +24,7 @@ */ #include "backends/platform/linuxmoto/linuxmoto-sdl.h" -#include "backends/platform/sdl/sdl.h" +#include "graphics/scaler/aspect.h" // for aspect2Real static int mapKey(SDLKey key, SDLMod mod, Uint16 unicode) { if (key >= SDLK_F1 && key <= SDLK_F9) { diff --git a/backends/platform/linuxmoto/linuxmoto-graphics.cpp b/backends/platform/linuxmoto/linuxmoto-graphics.cpp index b25dc16b91..01d954f9b9 100644 --- a/backends/platform/linuxmoto/linuxmoto-graphics.cpp +++ b/backends/platform/linuxmoto/linuxmoto-graphics.cpp @@ -29,6 +29,7 @@ #include "graphics/font.h" #include "graphics/fontman.h" #include "graphics/scaler.h" +#include "graphics/scaler/aspect.h" #include "graphics/scaler/downscaler.h" #include "graphics/surface.h" diff --git a/backends/platform/sdl/events.cpp b/backends/platform/sdl/events.cpp index fe7fd7e5f9..0eff23778b 100644 --- a/backends/platform/sdl/events.cpp +++ b/backends/platform/sdl/events.cpp @@ -26,6 +26,7 @@ #include "backends/platform/sdl/sdl.h" #include "common/util.h" #include "common/events.h" +#include "graphics/scaler/aspect.h" // for aspect2Real // FIXME move joystick defines out and replace with confile file options // we should really allow users to map any key to a joystick button diff --git a/backends/platform/sdl/graphics.cpp b/backends/platform/sdl/graphics.cpp index 10716fe89a..705b44215e 100644 --- a/backends/platform/sdl/graphics.cpp +++ b/backends/platform/sdl/graphics.cpp @@ -32,6 +32,7 @@ #include "graphics/font.h" #include "graphics/fontman.h" #include "graphics/scaler.h" +#include "graphics/scaler/aspect.h" #include "graphics/surface.h" static const OSystem::GraphicsMode s_supportedGraphicsModes[] = { @@ -476,6 +477,12 @@ void OSystem_SDL::initSize(uint w, uint h, const Graphics::PixelFormat *format) _dirtyChecksums = (uint32 *)calloc(_cksumNum * 2, sizeof(uint32)); } +int OSystem_SDL::effectiveScreenHeight() const { + return _videoMode.scaleFactor * + (_videoMode.aspectRatioCorrection + ? real2Aspect(_videoMode.screenHeight) + : _videoMode.screenHeight); +} static void fixupResolutionForAspectRatio(AspectRatio desiredAspectRatio, int &width, int &height) { assert(&width != &height); diff --git a/backends/platform/sdl/sdl.h b/backends/platform/sdl/sdl.h index 78793d4aad..2c1a22e7d6 100644 --- a/backends/platform/sdl/sdl.h +++ b/backends/platform/sdl/sdl.h @@ -485,10 +485,7 @@ protected: virtual bool saveScreenshot(const char *filename); // overloaded by CE backend - int effectiveScreenHeight() const { - return (_videoMode.aspectRatioCorrection ? real2Aspect(_videoMode.screenHeight) : _videoMode.screenHeight) - * _videoMode.scaleFactor; - } + int effectiveScreenHeight() const; void setupIcon(); void handleKbdMouse(); diff --git a/graphics/scaler.cpp b/graphics/scaler.cpp index a6ae544ff5..876be270ec 100644 --- a/graphics/scaler.cpp +++ b/graphics/scaler.cpp @@ -184,9 +184,8 @@ extern "C" void Normal2xAspectMask(const uint8 *srcPtr, /** * A 2x scaler which also does aspect ratio correction. - * Presumably this is Normal2x combined with vertical - * stretching, so it will scale a 320x200 surface to - * a 640x480 surface. + * This is Normal2x combined with vertical stretching, + * so it will scale a 320x200 surface to a 640x480 surface. */ void Normal2xAspect(const uint8 *srcPtr, uint32 srcPitch, diff --git a/graphics/scaler.h b/graphics/scaler.h index bdae161bd1..9d2e578bde 100644 --- a/graphics/scaler.h +++ b/graphics/scaler.h @@ -58,18 +58,6 @@ DECLARE_SCALER(HQ2x); DECLARE_SCALER(HQ3x); #endif -FORCEINLINE int real2Aspect(int y) { - return y + (y + 1) / 5; -} - -FORCEINLINE int aspect2Real(int y) { - return (y * 5 + 4) / 6; -} - -extern void makeRectStretchable(int &x, int &y, int &w, int &h); - -extern int stretch200To240(uint8 *buf, uint32 pitch, int width, int height, int srcX, int srcY, int origSrcY); - // creates a 160x100 thumbnail for 320x200 games // and 160x120 thumbnail for 320x240 and 640x480 games // only 565 mode diff --git a/graphics/scaler/aspect.cpp b/graphics/scaler/aspect.cpp index 4b3f194244..5f8f5f8279 100644 --- a/graphics/scaler/aspect.cpp +++ b/graphics/scaler/aspect.cpp @@ -24,7 +24,7 @@ */ #include "graphics/scaler/intern.h" -#include "graphics/scaler.h" +#include "graphics/scaler/aspect.h" #define kVeryFastAndUglyAspectMode 0 // No interpolation at all, but super-fast diff --git a/graphics/scaler/aspect.h b/graphics/scaler/aspect.h new file mode 100644 index 0000000000..ebe922ef00 --- /dev/null +++ b/graphics/scaler/aspect.h @@ -0,0 +1,63 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + */ + +#ifndef GRAPHICS_SCALER_ASPECT_H +#define GRAPHICS_SCALER_ASPECT_H + +#include "common/scummsys.h" + +/** + * TODO: explain + */ +FORCEINLINE int real2Aspect(int y) { + return y + (y + 1) / 5; +} + +/** + * TODO: explain + */ +FORCEINLINE int aspect2Real(int y) { + return (y * 5 + 4) / 6; +} + +/** + * TODO: explain + */ +void makeRectStretchable(int &x, int &y, int &w, int &h); + +/** + * TODO: explain + */ +int stretch200To240(uint8 *buf, + uint32 pitch, + int width, + int height, + int srcX, + int srcY, + int origSrcY); + +// TODO: Move Normal2xAspect & PocketPCLandscapeAspect here; +// also rename the latter to Normal1xAspect + +#endif -- cgit v1.2.3