From b1f4bb151dc3f524560c88088203e970863b956e Mon Sep 17 00:00:00 2001 From: AJ Kelly Date: Tue, 19 Jul 2011 19:40:44 -0500 Subject: [PATCH] [LoadingWindow] Added the ability for themes to have custom splash banners. (Currently Windows-only.) --- Docs/Changelog_sm5.txt | 5 ++ Themes/_fallback/Graphics/Common splash.png | Bin 0 -> 32208 bytes src/StepMania.cpp | 51 ++---------------- src/arch/LoadingWindow/LoadingWindow.h | 1 + src/arch/LoadingWindow/LoadingWindow_Gtk.h | 1 + src/arch/LoadingWindow/LoadingWindow_MacOSX.h | 1 + src/arch/LoadingWindow/LoadingWindow_Null.h | 1 + .../LoadingWindow/LoadingWindow_Win32.cpp | 34 +++++++++--- src/arch/LoadingWindow/LoadingWindow_Win32.h | 1 + 9 files changed, 40 insertions(+), 55 deletions(-) create mode 100644 Themes/_fallback/Graphics/Common splash.png diff --git a/Docs/Changelog_sm5.txt b/Docs/Changelog_sm5.txt index 6887ae8504..ce445d891e 100644 --- a/Docs/Changelog_sm5.txt +++ b/Docs/Changelog_sm5.txt @@ -8,6 +8,11 @@ ________________________________________________________________________________ StepMania 5.0 ????????? | 20110??? -------------------------------------------------------------------------------- +2011/07/19 +---------- +* [LoadingWindow] Added the ability for themes to have custom splash banners. + (Currently Windows-only.) [AJ] + 2011/07/17 ---------- * [Cache] No longer store #NOTES in the cache. This should speed things up diff --git a/Themes/_fallback/Graphics/Common splash.png b/Themes/_fallback/Graphics/Common splash.png new file mode 100644 index 0000000000000000000000000000000000000000..2c365a3306655f6d06aeca283456ba4cef7f7a84 GIT binary patch literal 32208 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 -#include "archutils/Win32/AppInstance.h" // used by SetWindowsHookEx -Aldo +#include #endif void ShutdownGame(); @@ -935,32 +934,6 @@ static void ApplyLogPreferences() static LocalizedString COULDNT_OPEN_LOADING_WINDOW( "StepMania", "Couldn't open any loading windows." ); -#if defined(WIN32) -// Low Level hooks go here, I only added Windows Key, but letting the player choose which system shortcuts -// wants to get disabled via PREFSMAN would be nice -Aldo -LRESULT CALLBACK SpecialKeysHook(int code,WPARAM wparam,LPARAM lparam) -{ - if( HOOKS->AppHasFocus() ) // only disable system shortcuts when the game has focus - { - PKBDLLHOOKSTRUCT key = (PKBDLLHOOKSTRUCT)lparam; - - switch(wparam) - { - case WM_KEYDOWN: - case WM_KEYUP: - case WM_SYSKEYDOWN: - case WM_SYSKEYUP: - if(key->vkCode==VK_LWIN || key->vkCode==VK_RWIN) - { - return 1; - } - } - } - - return CallNextHookEx(0,code,wparam,lparam); -} -#endif - int main(int argc, char* argv[]) { RageThreadRegister thread( "Main thread" ); @@ -1074,13 +1047,14 @@ int main(int argc, char* argv[]) GAMESTATE->m_bDopefish = true; { - /* Now that THEME is loaded, load the icon for the current theme into - * the loading window. */ + /* Now that THEME is loaded, load the icon and splash for the current + * theme into the loading window. */ RString sError; RageSurface *pIcon = RageSurfaceUtils::LoadFile( THEME->GetPathG( "Common", "window icon" ), sError ); if( pIcon ) pLoadingWindow->SetIcon( pIcon ); delete pIcon; + pLoadingWindow->SetSplash( THEME->GetPathG("Common","splash") ); } if( PREFSMAN->m_iSoundWriteAhead ) @@ -1151,23 +1125,6 @@ int main(int argc, char* argv[]) StoreActualGraphicOptions(); LOG->Info( "%s", GetActualGraphicOptionsString().c_str() ); -#if defined(WIN32) - // Apply Low Level hooks just after creating the display, so we have a valid - // HINSTANCE, rather than a NULL one -Aldo - AppInstance inst; - HHOOK hook; - hook = SetWindowsHookEx( - WH_KEYBOARD_LL, - SpecialKeysHook, - inst.Get(), - 0 - ); - if(!hook) - { - LOG->Warn("SetWindowsHookEx: Could not create hook (Error %d).", GetLastError()); - } -#endif - SONGMAN->PreloadSongImages(); /* Input handlers can have dependences on the video system so diff --git a/src/arch/LoadingWindow/LoadingWindow.h b/src/arch/LoadingWindow/LoadingWindow.h index 4cc23cd097..ec92728e1f 100644 --- a/src/arch/LoadingWindow/LoadingWindow.h +++ b/src/arch/LoadingWindow/LoadingWindow.h @@ -13,6 +13,7 @@ public: virtual void SetText( RString str ) = 0; virtual void SetIcon( const RageSurface *pIcon ) { } + virtual void SetSplash( const RString sPath ) { } virtual void SetProgress( const int progress ) { m_progress=progress; } virtual void SetTotalWork( const int totalWork ) { m_totalWork=totalWork; } virtual void SetIndeterminate( bool indeterminate ) { m_indeterminate=indeterminate; } diff --git a/src/arch/LoadingWindow/LoadingWindow_Gtk.h b/src/arch/LoadingWindow/LoadingWindow_Gtk.h index 6abeb87b4d..3ccca35841 100644 --- a/src/arch/LoadingWindow/LoadingWindow_Gtk.h +++ b/src/arch/LoadingWindow/LoadingWindow_Gtk.h @@ -12,6 +12,7 @@ public: RString Init(); ~LoadingWindow_Gtk(); void SetText( RString str ); + void SetSplash( const RString str ) {} void SetProgress( const int progress ); void SetTotalWork( const int totalWork ); void SetIndeterminate( bool indeterminate ); diff --git a/src/arch/LoadingWindow/LoadingWindow_MacOSX.h b/src/arch/LoadingWindow/LoadingWindow_MacOSX.h index 3a521a3170..37694a9a93 100644 --- a/src/arch/LoadingWindow/LoadingWindow_MacOSX.h +++ b/src/arch/LoadingWindow/LoadingWindow_MacOSX.h @@ -9,6 +9,7 @@ public: LoadingWindow_MacOSX(); ~LoadingWindow_MacOSX(); void SetText( RString str ); + void SetSplash( const RString path ) {} void SetProgress( const int progress ); void SetTotalWork( const int totalWork ); void SetIndeterminate( bool indeterminate ); diff --git a/src/arch/LoadingWindow/LoadingWindow_Null.h b/src/arch/LoadingWindow/LoadingWindow_Null.h index 1ca5d89341..4b470f80b2 100644 --- a/src/arch/LoadingWindow/LoadingWindow_Null.h +++ b/src/arch/LoadingWindow/LoadingWindow_Null.h @@ -7,6 +7,7 @@ class LoadingWindow_Null: public LoadingWindow { public: void SetText( RString str ) { } + void SetSplash( RString str ) { } }; #define USE_LOADING_WINDOW_NULL diff --git a/src/arch/LoadingWindow/LoadingWindow_Win32.cpp b/src/arch/LoadingWindow/LoadingWindow_Win32.cpp index f152af9b2b..8412965205 100644 --- a/src/arch/LoadingWindow/LoadingWindow_Win32.cpp +++ b/src/arch/LoadingWindow/LoadingWindow_Win32.cpp @@ -20,8 +20,7 @@ static HBITMAP g_hBitmap = NULL; #pragma comment(linker,"\"/manifestdependency:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"") - -/* Load a RageSurface into a GDI surface. */ +// Load a RageSurface into a GDI surface. static HBITMAP LoadWin32Surface( RageSurface *&s ) { RageSurfaceUtils::ConvertSurface( s, s->w, s->h, 32, 0xFF000000, 0x00FF0000, 0x0000FF00, 0 ); @@ -35,14 +34,14 @@ static HBITMAP LoadWin32Surface( RageSurface *&s ) HDC BitmapDC = CreateCompatibleDC( hScreen ); SelectObject( BitmapDC, bitmap ); - /* This is silly, but simple. We only do this once, on a small image. */ + // This is silly, but simple. We only do this once, on a small image. for( int y = 0; y < s->h; ++y ) { unsigned const char *line = ((unsigned char *) s->pixels) + (y * s->pitch); for( int x = 0; x < s->w; ++x ) { unsigned const char *data = line + (x*s->format->BytesPerPixel); - + SetPixelV( BitmapDC, x, y, RGB( data[3], data[2], data[1] ) ); } } @@ -62,7 +61,7 @@ static HBITMAP LoadWin32Surface( RString sFile, HWND hWnd ) if( pSurface == NULL ) return NULL; - /* Resize the splash image to fit the dialog. Stretch to fit horizontally, + /* Resize the splash image to fit the dialog. Stretch to fit horizontally, * maintaining aspect ratio. */ { RECT r; @@ -82,7 +81,6 @@ static HBITMAP LoadWin32Surface( RString sFile, HWND hWnd ) INT_PTR CALLBACK LoadingWindow_Win32::DlgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ) { - LoadingWindow_Win32 *self; if(msg==WM_INITDIALOG) { @@ -136,7 +134,7 @@ INT_PTR CALLBACK LoadingWindow_Win32::DlgProc( HWND hWnd, UINT msg, WPARAM wPara void LoadingWindow_Win32::SetIcon( const RageSurface *pIcon ) { - if( m_hIcon != NULL ) + if( g_hBitmap != NULL ) DestroyIcon( m_hIcon ); m_hIcon = IconFromSurface( pIcon ); @@ -144,6 +142,26 @@ void LoadingWindow_Win32::SetIcon( const RageSurface *pIcon ) SetClassLong( hwnd, GCL_HICON, (LONG) m_hIcon ); } +void LoadingWindow_Win32::SetSplash( const RString sPath ) +{ + if( g_hBitmap != NULL ) + { + DeleteObject( g_hBitmap ); + g_hBitmap = NULL; + } + + g_hBitmap = LoadWin32Surface( sPath, hwnd ); + if( g_hBitmap != NULL ) + { + SendDlgItemMessage( + hwnd, IDC_SPLASH, + STM_SETIMAGE, + (WPARAM) IMAGE_BITMAP, + (LPARAM) (HANDLE) g_hBitmap + ); + } +} + LoadingWindow_Win32::LoadingWindow_Win32() { INITCOMMONCONTROLSEX cceData; @@ -152,7 +170,7 @@ LoadingWindow_Win32::LoadingWindow_Win32() InitCommonControlsEx(&cceData); m_hIcon = NULL; - + runMessageLoop=true; guiReadyEvent=CreateEvent(NULL,FALSE,FALSE,NULL); diff --git a/src/arch/LoadingWindow/LoadingWindow_Win32.h b/src/arch/LoadingWindow/LoadingWindow_Win32.h index 3c45789779..3780c85178 100644 --- a/src/arch/LoadingWindow/LoadingWindow_Win32.h +++ b/src/arch/LoadingWindow/LoadingWindow_Win32.h @@ -15,6 +15,7 @@ public: void SetText( RString sText ); void SetIcon( const RageSurface *pIcon ); + void SetSplash( const RString sPath ); void SetProgress( const int progress ); void SetTotalWork( const int totalWork ); void SetIndeterminate( bool indeterminate );