X-Git-Url: http://vcs.maemo.org/git/?a=blobdiff_plain;f=platform%2Fsdlvscalers.cpp;h=8afbdf83910f5a7783f01b39dffd8049fa133e15;hb=9902256814785f0b3f08d336a98c481c296ac7e5;hp=cd48c33ac63f1d7d01e020967dcb12b7c540eedc;hpb=eed86017c48a6e264f5f3ee56bf686f787a85fd5;p=drnoksnes diff --git a/platform/sdlvscalers.cpp b/platform/sdlvscalers.cpp index cd48c33..8afbdf8 100644 --- a/platform/sdlvscalers.cpp +++ b/platform/sdlvscalers.cpp @@ -6,6 +6,7 @@ #include #if CONF_XSP +# include # include #endif #if CONF_HD @@ -13,7 +14,6 @@ #endif #include "snes9x.h" -#include "display.h" #include "platform.h" #include "sdlv.h" @@ -372,20 +372,30 @@ class HAAScalerBase : public Scaler const int m_w, m_h, m_Bpp; const float ratio_x, ratio_y; + static bool initialized; + protected: HAAScalerBase(SDL_Surface* screen, int w, int h, float r_x, float r_y) : m_screen(screen), m_w(w), m_h(h), m_Bpp(m_screen->format->BitsPerPixel / 8), ratio_x(r_x), ratio_y(r_y) { + const bool fullscreen = m_screen->flags & SDL_FULLSCREEN; centerRectangle(m_area, GUI.Width, GUI.Height, w * r_x, h * r_y); // Clear the SDL screen with black, just in case it gets drawn. SDL_FillRect(screen, 0, SDL_MapRGB(screen->format, 0, 0, 0)); - HAA_Init(m_screen->flags & SDL_FULLSCREEN); + if (!initialized) { + HAA_Init(0); + initialized = true; + } else { + HAA_SetVideoMode(); // Tell HAA we might have changed video mode + } + actor = HAA_CreateActor(0, m_w, m_h, m_screen->format->BitsPerPixel); - HAA_SetPosition(actor, m_area.x, m_area.y + 60); + HAA_SetPosition(actor, m_area.x, m_area.y + (fullscreen ? 0 : 60)); + // In windowed mode, take care of the title bar (xoffset = 60) HAA_SetScale(actor, r_x, r_y); HAA_Show(actor); } @@ -394,7 +404,6 @@ public: virtual ~HAAScalerBase() { HAA_FreeActor(actor); - HAA_Quit(); }; uint8* getDrawBuffer() const @@ -436,6 +445,7 @@ public: return HAA_FilterEvent(&event) == 0; }; }; +bool HAAScalerBase::initialized = false; class HAAFillScaler : public HAAScalerBase {