Commit 2554cf6c authored by Daniel Buckmaster's avatar Daniel Buckmaster

Merge pull request #755 from eightyeight/fix_splash

Fix splashscreen
parents e4f43053 76b2e4e9
......@@ -1589,6 +1589,13 @@ DefineEngineFunction( displaySplashWindow, bool, (const char* path), ("art/gui/s
return Platform::displaySplashWindow(path);
}
DefineEngineFunction( closeSplashWindow, void, (),,
"Close our startup splash window.\n\n"
"@note This is currently only implemented on Windows.\n\n"
"@ingroup Platform" )
{
Platform::closeSplashWindow();
}
//-----------------------------------------------------------------------------
DefineEngineFunction( getWebDeployment, bool, (),,
......
......@@ -121,7 +121,8 @@ GuiCanvas::GuiCanvas(): GuiControl(),
mMiddleMouseLast(false),
mRightMouseLast(false),
mPlatformWindow(NULL),
mLastRenderMs(0)
mLastRenderMs(0),
mDisplayWindow(true)
{
setBounds(0, 0, 640, 480);
mAwake = true;
......@@ -176,6 +177,8 @@ void GuiCanvas::initPersistFields()
addGroup("Canvas Rendering");
addProtectedField( "numFences", TypeS32, Offset( mNumFences, GuiCanvas ), &setProtectedNumFences, &defaultProtectedGetFn, "The number of GFX fences to use." );
addField("displayWindow", TypeBool, Offset(mDisplayWindow, GuiCanvas), "Controls if the canvas window is rendered or not." );
endGroup("Canvas Rendering");
Parent::initPersistFields();
......@@ -252,6 +255,19 @@ bool GuiCanvas::onAdd()
// Make sure we're able to render.
newDevice->setAllowRender( true );
if(mDisplayWindow)
{
getPlatformWindow()->show();
WindowManager->setDisplayWindow(true);
getPlatformWindow()->setDisplayWindow(true);
}
else
{
getPlatformWindow()->hide();
WindowManager->setDisplayWindow(false);
getPlatformWindow()->setDisplayWindow(false);
}
// Propagate add to parents.
// CodeReview - if GuiCanvas fails to add for whatever reason, what happens to
// all the event registration above?
......@@ -2683,3 +2699,23 @@ ConsoleMethod( GuiCanvas, setVideoMode, void, 5, 8,
// Store the new mode into a pref.
Con::setVariable( "$pref::Video::mode", vm.toString() );
}
ConsoleMethod( GuiCanvas, showWindow, void, 2, 2, "" )
{
if (!object->getPlatformWindow())
return;
object->getPlatformWindow()->show();
WindowManager->setDisplayWindow(true);
object->getPlatformWindow()->setDisplayWindow(true);
}
ConsoleMethod( GuiCanvas, hideWindow, void, 2, 2, "" )
{
if (!object->getPlatformWindow())
return;
object->getPlatformWindow()->hide();
WindowManager->setDisplayWindow(false);
object->getPlatformWindow()->setDisplayWindow(false);
}
\ No newline at end of file
......@@ -108,6 +108,8 @@ protected:
bool mClampTorqueCursor;
bool mAlwaysHandleMouseButtons;
bool mDisplayWindow;
/// @}
/// @name Mouse Input
......
......@@ -338,6 +338,9 @@ namespace Platform
// display Splash Window
bool displaySplashWindow( String path );
// close Splash Window
bool closeSplashWindow();
void openFolder( const char* path );
// Open file at the OS level, according to registered file-types.
......
......@@ -70,6 +70,11 @@ bool Platform::displaySplashWindow()
return false;
}
bool Platform::closeSplashWindow()
{
return false;
}
#pragma mark ---- File IO ----
//-----------------------------------------------------------------------------
bool dPathCopy(const char* source, const char* dest, bool nooverwrite)
......
......@@ -93,6 +93,7 @@ void Platform::openFile(const char *path) { }
// window
bool Platform::displaySplashWindow(String path) { return false; }
bool Platform::closeSplashWindow() { return false; }
// font
PlatformFont *createPlatformFont(const char *name, U32 size, U32 charset) { return NULL; }
......
......@@ -89,6 +89,10 @@ protected:
/// Offscreen Render
bool mOffscreenRender;
/// This is set as part of the canvas being shown, and flags that the windows should render as normal from now on.
// Basically a flag that lets the window manager know that we've handled the splash screen, and to operate as normal.
bool mDisplayWindow;
/// Protected constructor so that the win
PlatformWindow()
{
......@@ -104,6 +108,7 @@ protected:
mSuppressReset = false;
mOffscreenRender = false;
mDisplayWindow = false;
}
public:
......@@ -180,6 +185,8 @@ public:
/// This is called to poll the window as to it's idle state.
virtual bool getOffscreenRender() { return mOffscreenRender; };
/// Set whether this window is should display as normal
virtual void setDisplayWindow(bool val ) { mDisplayWindow = val; };
/// Set Focused State (Foreground)
///
......
......@@ -133,6 +133,9 @@ public:
/// This method removes the curtain window.
virtual void raiseCurtain()=0;
/// This method indicates to created windows to show as normal.
virtual void setDisplayWindow(bool set){}
private:
/// Process command line arguments from StandardMainLoop. This is done to
/// allow web plugin functionality, where we are passed platform-specific
......
......@@ -121,6 +121,13 @@ void CloseSplashWindow(HINSTANCE hinst)
}
bool Platform::closeSplashWindow()
{
CloseSplashWindow(GetModuleHandle(NULL));
return true;
}
bool Platform::displaySplashWindow( String path )
{
if(path.isEmpty())
......
......@@ -153,7 +153,9 @@ void Win32Window::setVideoMode( const GFXVideoMode &mode )
{
SetWindowLong( getHWND(), GWL_STYLE, WS_POPUP);
SetWindowPos( getHWND(), HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_FRAMECHANGED);
ShowWindow(getHWND(), SW_SHOWNORMAL);
if(mDisplayWindow)
ShowWindow(getHWND(), SW_SHOWNORMAL);
// Clear the menu bar from the window for full screen
HMENU menu = GetMenu(getHWND());
......@@ -216,7 +218,9 @@ void Win32Window::setVideoMode( const GFXVideoMode &mode )
// We have to force Win32 to update the window frame and make the window
// visible and no longer topmost - this code might be possible to simplify.
SetWindowPos( getHWND(), HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_FRAMECHANGED);
ShowWindow( getHWND(), SW_SHOWNORMAL);
if(mDisplayWindow)
ShowWindow( getHWND(), SW_SHOWNORMAL);
}
mFullscreen = false;
......
......@@ -54,6 +54,8 @@ Win32WindowManager::Win32WindowManager()
mOffscreenRender = false;
mDisplayWindow = false;
buildMonitorsList();
}
......@@ -263,11 +265,13 @@ PlatformWindow *Win32WindowManager::createWindow(GFXDevice *device, const GFXVid
// If we're not rendering offscreen, make sure our window is shown and drawn to.
if (!mOffscreenRender)
ShowWindow( w32w->mWindowHandle, SW_SHOWDEFAULT );
w32w->setDisplayWindow(mDisplayWindow);
// Close any splash screen we created
CloseSplashWindow(winState.appInstance);
if (!mOffscreenRender && mDisplayWindow)
{
ShowWindow( w32w->mWindowHandle, SW_SHOWDEFAULT );
CloseSplashWindow(winState.appInstance);
}
// Bind the window to the specified device.
if(device)
......
......@@ -56,6 +56,10 @@ class Win32WindowManager : public PlatformWindowManager
// is intended for offscreen rendering
bool mOffscreenRender;
/// This is set as part of the canvas being shown, and flags that the windows should render as normal from now on.
// Basically a flag that lets the window manager know that we've handled the splash screen, and to operate as normal.
bool mDisplayWindow;
/// Internal structure used when enumerating monitors
struct MonitorInfo {
HMONITOR monitorHandle;
......@@ -117,6 +121,8 @@ public:
virtual void lowerCurtain();
virtual void raiseCurtain();
virtual void setDisplayWindow(bool set) { mDisplayWindow = set; }
};
#endif
\ No newline at end of file
......@@ -38,7 +38,10 @@ function createCanvas(%windowTitle)
}
// Create the Canvas
%foo = new GuiCanvas(Canvas);
%foo = new GuiCanvas(Canvas)
{
displayWindow = false;
};
// Set the window title
if (isObject(Canvas))
......@@ -246,6 +249,15 @@ if ($displayHelp) {
else {
onStart();
echo("Engine initialized...");
if( !$isDedicated )
{
// As we know at this point that the initial load is complete,
// we can hide any splash screen we have, and show the canvas.
// This keeps things looking nice, instead of having a blank window
closeSplashWindow();
Canvas.showWindow();
}
// Auto-load on the 360
if( $platform $= "xenon" )
......
......@@ -38,7 +38,10 @@ function createCanvas(%windowTitle)
}
// Create the Canvas
%foo = new GuiCanvas(Canvas);
%foo = new GuiCanvas(Canvas)
{
displayWindow = false;
};
// Set the window title
if (isObject(Canvas))
......@@ -246,6 +249,15 @@ if ($displayHelp) {
else {
onStart();
echo("Engine initialized...");
if( !$isDedicated )
{
// As we know at this point that the initial load is complete,
// we can hide any splash screen we have, and show the canvas.
// This keeps things looking nice, instead of having a blank window
closeSplashWindow();
Canvas.showWindow();
}
// Auto-load on the 360
if( $platform $= "xenon" )
......
......@@ -38,7 +38,10 @@ function createCanvas(%windowTitle)
}
// Create the Canvas
%foo = new GuiCanvas(Canvas);
%foo = new GuiCanvas(Canvas)
{
displayWindow = false;
};
// Set the window title
if (isObject(Canvas))
......@@ -246,6 +249,15 @@ if ($displayHelp) {
else {
onStart();
echo("Engine initialized...");
if( !$isDedicated )
{
// As we know at this point that the initial load is complete,
// we can hide any splash screen we have, and show the canvas.
// This keeps things looking nice, instead of having a blank window
closeSplashWindow();
Canvas.showWindow();
}
// Auto-load on the 360
if( $platform $= "xenon" )
......
......@@ -38,7 +38,10 @@ function createCanvas(%windowTitle)
}
// Create the Canvas
%foo = new GuiCanvas(Canvas);
%foo = new GuiCanvas(Canvas)
{
displayWindow = false;
};
// Set the window title
if (isObject(Canvas))
......@@ -246,6 +249,15 @@ if ($displayHelp) {
else {
onStart();
echo("Engine initialized...");
if( !$isDedicated )
{
// As we know at this point that the initial load is complete,
// we can hide any splash screen we have, and show the canvas.
// This keeps things looking nice, instead of having a blank window
closeSplashWindow();
Canvas.showWindow();
}
// Auto-load on the 360
if( $platform $= "xenon" )
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment