mirror of https://github.com/ZDoom/qzdoom.git
- removed the native graphical startup screens.
ENDOOM is already working with this commit, the start screens still require some work to connect them.
This commit is contained in:
parent
d6886ed44f
commit
79f4a9c0f3
|
@ -79,114 +79,12 @@ protected:
|
||||||
int NetMaxPos, NetCurPos;
|
int NetMaxPos, NetCurPos;
|
||||||
};
|
};
|
||||||
|
|
||||||
class FGraphicalStartupScreen : public FBasicStartupScreen
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
FGraphicalStartupScreen(int max_progress);
|
|
||||||
~FGraphicalStartupScreen();
|
|
||||||
};
|
|
||||||
|
|
||||||
class FHereticStartupScreen : public FGraphicalStartupScreen
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
FHereticStartupScreen(int max_progress, long &hr);
|
|
||||||
|
|
||||||
void Progress();
|
|
||||||
void LoadingStatus(const char *message, int colors);
|
|
||||||
void AppendStatusLine(const char *status);
|
|
||||||
protected:
|
|
||||||
void SetWindowSize();
|
|
||||||
|
|
||||||
int ThermX, ThermY, ThermWidth, ThermHeight;
|
|
||||||
int HMsgY, SMsgX;
|
|
||||||
};
|
|
||||||
|
|
||||||
class FHexenStartupScreen : public FGraphicalStartupScreen
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
FHexenStartupScreen(int max_progress, long &hr);
|
|
||||||
~FHexenStartupScreen();
|
|
||||||
|
|
||||||
void Progress();
|
|
||||||
void NetProgress(int count);
|
|
||||||
void NetDone();
|
|
||||||
void SetWindowSize();
|
|
||||||
|
|
||||||
// Hexen's notch graphics, converted to chunky pixels.
|
|
||||||
uint8_t * NotchBits;
|
|
||||||
uint8_t * NetNotchBits;
|
|
||||||
};
|
|
||||||
|
|
||||||
class FStrifeStartupScreen : public FGraphicalStartupScreen
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
FStrifeStartupScreen(int max_progress, long &hr);
|
|
||||||
~FStrifeStartupScreen();
|
|
||||||
|
|
||||||
void Progress();
|
|
||||||
protected:
|
|
||||||
void DrawStuff(int old_laser, int new_laser);
|
|
||||||
void SetWindowSize();
|
|
||||||
|
|
||||||
uint8_t *StartupPics[4+2+1];
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
extern FStartupScreen *StartScreen;
|
extern FStartupScreen *StartScreen;
|
||||||
|
|
||||||
void DeleteStartupScreen();
|
|
||||||
extern void ST_Endoom();
|
extern void ST_Endoom();
|
||||||
|
|
||||||
// The entire set of functions here uses native Windows types. These are recreations of those types so that the code doesn't need to be changed more than necessary
|
|
||||||
|
|
||||||
struct BitmapInfoHeader
|
|
||||||
{
|
|
||||||
uint32_t biSize;
|
|
||||||
int32_t biWidth;
|
|
||||||
int32_t biHeight;
|
|
||||||
uint16_t biPlanes;
|
|
||||||
uint16_t biBitCount;
|
|
||||||
uint32_t biCompression;
|
|
||||||
uint32_t biSizeImage;
|
|
||||||
int32_t biXPelsPerMeter;
|
|
||||||
int32_t biYPelsPerMeter;
|
|
||||||
uint32_t biClrUsed;
|
|
||||||
uint32_t biClrImportant;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct RgbQuad
|
|
||||||
{
|
|
||||||
uint8_t rgbBlue;
|
|
||||||
uint8_t rgbGreen;
|
|
||||||
uint8_t rgbRed;
|
|
||||||
uint8_t rgbReserved;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
struct BitmapInfo
|
|
||||||
{
|
|
||||||
BitmapInfoHeader bmiHeader;
|
|
||||||
RgbQuad bmiColors[1];
|
|
||||||
};
|
|
||||||
|
|
||||||
extern BitmapInfo* StartupBitmap;
|
|
||||||
|
|
||||||
|
|
||||||
void ST_Util_PlanarToChunky4(uint8_t* dest, const uint8_t* src, int width, int height);
|
|
||||||
void ST_Util_DrawBlock(BitmapInfo* bitmap_info, const uint8_t* src, int x, int y, int bytewidth, int height);
|
|
||||||
void ST_Util_DrawBlock4(BitmapInfo* bitmap_info, const uint8_t* src, int x, int y, int bytewidth, int height);
|
|
||||||
void ST_Util_ClearBlock(BitmapInfo* bitmap_info, uint8_t fill, int x, int y, int bytewidth, int height);
|
|
||||||
BitmapInfo* ST_Util_CreateBitmap(int width, int height);
|
|
||||||
uint8_t* ST_Util_BitsForBitmap(BitmapInfo* bitmap_info);
|
|
||||||
void ST_Util_FreeBitmap(BitmapInfo* bitmap_info);
|
|
||||||
void ST_Util_BitmapColorsFromPlaypal(BitmapInfo* bitmap_info);
|
|
||||||
BitmapInfo* ST_Util_AllocTextBitmap();
|
|
||||||
void ST_Util_DrawTextScreen(BitmapInfo* bitmap_info, const uint8_t* text_screen);
|
|
||||||
int ST_Util_DrawChar(BitmapInfo* screen, int x, int y, unsigned charnum, uint8_t attrib);
|
|
||||||
void ST_Util_UpdateTextBlink(BitmapInfo* bitmap_info, const uint8_t* text_screen, bool on);
|
|
||||||
|
|
||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
//
|
//
|
||||||
// DeleteStartupScreen
|
// DeleteStartupScreen
|
||||||
|
|
|
@ -376,38 +376,6 @@ bool MainWindow::RunMessageLoop(bool (*timer_callback)(void*), void* userdata)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::ShowStartupScreen()
|
|
||||||
{
|
|
||||||
StartupScreen = CreateWindowEx(WS_EX_NOPARENTNOTIFY, L"STATIC", 0, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | SS_OWNERDRAW, 0, 0, 0, 0, Window, 0, GetModuleHandle(0), 0);
|
|
||||||
if (StartupScreen != 0)
|
|
||||||
SetWindowLong(StartupScreen, GWL_ID, IDC_STATIC_STARTUP);
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainWindow::HideStartupScreen()
|
|
||||||
{
|
|
||||||
if (StartupScreen != 0)
|
|
||||||
{
|
|
||||||
DestroyWindow(StartupScreen);
|
|
||||||
StartupScreen = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainWindow::InvalidateStartupScreen()
|
|
||||||
{
|
|
||||||
InvalidateRect(StartupScreen, 0, TRUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainWindow::InvalidateStartupScreen(int left, int top, int right, int bottom)
|
|
||||||
{
|
|
||||||
RECT rect;
|
|
||||||
GetClientRect(StartupScreen, &rect);
|
|
||||||
rect.left = left * rect.right / StartupBitmap->bmiHeader.biWidth - 1;
|
|
||||||
rect.top = top * rect.bottom / StartupBitmap->bmiHeader.biHeight - 1;
|
|
||||||
rect.right = right * rect.right / StartupBitmap->bmiHeader.biWidth + 1;
|
|
||||||
rect.bottom = bottom * rect.bottom / StartupBitmap->bmiHeader.biHeight + 1;
|
|
||||||
InvalidateRect(StartupScreen, &rect, FALSE);
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainWindow::UpdateLayout()
|
void MainWindow::UpdateLayout()
|
||||||
{
|
{
|
||||||
LayoutMainWindow(Window, 0);
|
LayoutMainWindow(Window, 0);
|
||||||
|
@ -456,18 +424,8 @@ void MainWindow::LayoutMainWindow(HWND hWnd, HWND pane)
|
||||||
leftside = GetSystemMetrics(SM_CXICON) + 6;
|
leftside = GetSystemMetrics(SM_CXICON) + 6;
|
||||||
MoveWindow(ErrorIcon, 0, bannerheight, leftside, h - bannerheight - errorpaneheight - progressheight - netpaneheight, TRUE);
|
MoveWindow(ErrorIcon, 0, bannerheight, leftside, h - bannerheight - errorpaneheight - progressheight - netpaneheight, TRUE);
|
||||||
}
|
}
|
||||||
// If there is a startup screen, it covers the log window
|
// The log window uses whatever space is left.
|
||||||
if (StartupScreen != NULL)
|
MoveWindow(ConWindow, leftside, bannerheight, w - leftside, h - bannerheight - errorpaneheight - progressheight - netpaneheight, TRUE);
|
||||||
{
|
|
||||||
SetWindowPos(StartupScreen, HWND_TOP, leftside, bannerheight, w - leftside, h - bannerheight - errorpaneheight - progressheight - netpaneheight, SWP_SHOWWINDOW);
|
|
||||||
InvalidateRect(StartupScreen, NULL, FALSE);
|
|
||||||
MoveWindow(ConWindow, 0, 0, 0, 0, TRUE);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// The log window uses whatever space is left.
|
|
||||||
MoveWindow(ConWindow, leftside, bannerheight, w - leftside, h - bannerheight - errorpaneheight - progressheight - netpaneheight, TRUE);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Lays out the error pane to the desired width, returning the required height.
|
// Lays out the error pane to the desired width, returning the required height.
|
||||||
|
@ -709,35 +667,6 @@ LRESULT MainWindow::OnDrawItem(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam
|
||||||
SelectObject(drawitem->hDC, oldfont);
|
SelectObject(drawitem->hDC, oldfont);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
// Draw startup screen
|
|
||||||
else if (wParam == IDC_STATIC_STARTUP)
|
|
||||||
{
|
|
||||||
if (StartupScreen != NULL)
|
|
||||||
{
|
|
||||||
drawitem = (LPDRAWITEMSTRUCT)lParam;
|
|
||||||
|
|
||||||
rect = drawitem->rcItem;
|
|
||||||
// Windows expects DIBs to be bottom-up but ours is top-down,
|
|
||||||
// so flip it vertically while drawing it.
|
|
||||||
StretchDIBits(drawitem->hDC, rect.left, rect.bottom - 1, rect.right - rect.left, rect.top - rect.bottom,
|
|
||||||
0, 0, StartupBitmap->bmiHeader.biWidth, StartupBitmap->bmiHeader.biHeight,
|
|
||||||
ST_Util_BitsForBitmap(StartupBitmap), reinterpret_cast<const BITMAPINFO*>(StartupBitmap), DIB_RGB_COLORS, SRCCOPY);
|
|
||||||
|
|
||||||
// If the title banner is gone, then this is an ENDOOM screen, so draw a short prompt
|
|
||||||
// where the command prompt would have been in DOS.
|
|
||||||
if (GameTitleWindow == NULL)
|
|
||||||
{
|
|
||||||
auto quitmsg = WideString(GStrings("TXT_QUITENDOOM"));
|
|
||||||
|
|
||||||
SetTextColor(drawitem->hDC, RGB(240, 240, 240));
|
|
||||||
SetBkMode(drawitem->hDC, TRANSPARENT);
|
|
||||||
oldfont = SelectObject(drawitem->hDC, (HFONT)GetStockObject(DEFAULT_GUI_FONT));
|
|
||||||
TextOutW(drawitem->hDC, 3, drawitem->rcItem.bottom - DefaultGUIFontHeight - 3, quitmsg.c_str(), (int)quitmsg.length());
|
|
||||||
SelectObject(drawitem->hDC, oldfont);
|
|
||||||
}
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Draw stop icon.
|
// Draw stop icon.
|
||||||
else if (wParam == IDC_ICONPIC)
|
else if (wParam == IDC_ICONPIC)
|
||||||
{
|
{
|
||||||
|
|
|
@ -39,11 +39,6 @@ public:
|
||||||
bool RunMessageLoop(bool (*timer_callback)(void*), void* userdata);
|
bool RunMessageLoop(bool (*timer_callback)(void*), void* userdata);
|
||||||
void HideNetStartPane();
|
void HideNetStartPane();
|
||||||
|
|
||||||
void ShowStartupScreen();
|
|
||||||
void HideStartupScreen();
|
|
||||||
void InvalidateStartupScreen();
|
|
||||||
void InvalidateStartupScreen(int left, int top, int right, int bottom);
|
|
||||||
|
|
||||||
void SetWindowTitle(const char* caption);
|
void SetWindowTitle(const char* caption);
|
||||||
|
|
||||||
HWND GetHandle() { return Window; }
|
HWND GetHandle() { return Window; }
|
||||||
|
|
|
@ -55,23 +55,10 @@
|
||||||
#include "texturemanager.h"
|
#include "texturemanager.h"
|
||||||
#include "i_mainwindow.h"
|
#include "i_mainwindow.h"
|
||||||
|
|
||||||
// MACROS ------------------------------------------------------------------
|
|
||||||
|
|
||||||
// How many ms elapse between blinking text flips. On a standard VGA
|
|
||||||
// adapter, the characters are on for 16 frames and then off for another 16.
|
|
||||||
// The number here therefore corresponds roughly to the blink rate on a
|
|
||||||
// 60 Hz display.
|
|
||||||
#define BLINK_PERIOD 267
|
|
||||||
|
|
||||||
|
|
||||||
// TYPES -------------------------------------------------------------------
|
|
||||||
|
|
||||||
// EXTERNAL FUNCTION PROTOTYPES --------------------------------------------
|
// EXTERNAL FUNCTION PROTOTYPES --------------------------------------------
|
||||||
|
|
||||||
void ST_Util_SizeWindowForBitmap (int scale);
|
void ST_Util_SizeWindowForBitmap (int scale);
|
||||||
|
|
||||||
// PUBLIC FUNCTION PROTOTYPES ----------------------------------------------
|
|
||||||
|
|
||||||
// EXTERNAL DATA DECLARATIONS ----------------------------------------------
|
// EXTERNAL DATA DECLARATIONS ----------------------------------------------
|
||||||
|
|
||||||
extern HINSTANCE g_hInst;
|
extern HINSTANCE g_hInst;
|
||||||
|
@ -80,12 +67,6 @@ extern HINSTANCE g_hInst;
|
||||||
|
|
||||||
FStartupScreen *StartScreen;
|
FStartupScreen *StartScreen;
|
||||||
|
|
||||||
CUSTOM_CVAR(Int, showendoom, 0, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
|
||||||
{
|
|
||||||
if (self < 0) self = 0;
|
|
||||||
else if (self > 2) self=2;
|
|
||||||
}
|
|
||||||
|
|
||||||
// PRIVATE DATA DEFINITIONS ------------------------------------------------
|
// PRIVATE DATA DEFINITIONS ------------------------------------------------
|
||||||
|
|
||||||
// CODE --------------------------------------------------------------------
|
// CODE --------------------------------------------------------------------
|
||||||
|
@ -101,34 +82,7 @@ CUSTOM_CVAR(Int, showendoom, 0, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
||||||
|
|
||||||
FStartupScreen *FStartupScreen::CreateInstance(int max_progress)
|
FStartupScreen *FStartupScreen::CreateInstance(int max_progress)
|
||||||
{
|
{
|
||||||
FStartupScreen *scr = NULL;
|
return new FBasicStartupScreen(max_progress, true);
|
||||||
HRESULT hr = E_FAIL;
|
|
||||||
|
|
||||||
if (!Args->CheckParm("-nostartup"))
|
|
||||||
{
|
|
||||||
if (GameStartupInfo.Type == FStartupInfo::HexenStartup)
|
|
||||||
{
|
|
||||||
scr = new FHexenStartupScreen(max_progress, hr);
|
|
||||||
}
|
|
||||||
else if (GameStartupInfo.Type == FStartupInfo::HereticStartup)
|
|
||||||
{
|
|
||||||
scr = new FHereticStartupScreen(max_progress, hr);
|
|
||||||
}
|
|
||||||
else if (GameStartupInfo.Type == FStartupInfo::StrifeStartup)
|
|
||||||
{
|
|
||||||
scr = new FStrifeStartupScreen(max_progress, hr);
|
|
||||||
}
|
|
||||||
if (scr != NULL && FAILED(hr))
|
|
||||||
{
|
|
||||||
delete scr;
|
|
||||||
scr = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (scr == NULL)
|
|
||||||
{
|
|
||||||
scr = new FBasicStartupScreen(max_progress, true);
|
|
||||||
}
|
|
||||||
return scr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
@ -258,235 +212,3 @@ bool FBasicStartupScreen::NetLoop(bool (*timer_callback)(void *), void *userdata
|
||||||
{
|
{
|
||||||
return mainwindow.RunMessageLoop(timer_callback, userdata);
|
return mainwindow.RunMessageLoop(timer_callback, userdata);
|
||||||
}
|
}
|
||||||
|
|
||||||
//==========================================================================
|
|
||||||
//
|
|
||||||
// FGraphicalStartupScreen Constructor
|
|
||||||
//
|
|
||||||
// This doesn't really do anything. The subclass is responsible for
|
|
||||||
// creating the resources that will be freed by this class's destructor.
|
|
||||||
//
|
|
||||||
//==========================================================================
|
|
||||||
|
|
||||||
FGraphicalStartupScreen::FGraphicalStartupScreen(int max_progress)
|
|
||||||
: FBasicStartupScreen(max_progress, false)
|
|
||||||
{
|
|
||||||
mainwindow.ShowStartupScreen();
|
|
||||||
}
|
|
||||||
|
|
||||||
//==========================================================================
|
|
||||||
//
|
|
||||||
// FGraphicalStartupScreen Destructor
|
|
||||||
//
|
|
||||||
//==========================================================================
|
|
||||||
|
|
||||||
FGraphicalStartupScreen::~FGraphicalStartupScreen()
|
|
||||||
{
|
|
||||||
mainwindow.HideStartupScreen();
|
|
||||||
if (StartupBitmap != NULL)
|
|
||||||
{
|
|
||||||
ST_Util_FreeBitmap (StartupBitmap);
|
|
||||||
StartupBitmap = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//==========================================================================
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//==========================================================================
|
|
||||||
|
|
||||||
void FHexenStartupScreen::SetWindowSize()
|
|
||||||
{
|
|
||||||
ST_Util_SizeWindowForBitmap(1);
|
|
||||||
mainwindow.UpdateLayout();
|
|
||||||
mainwindow.InvalidateStartupScreen();
|
|
||||||
}
|
|
||||||
|
|
||||||
//==========================================================================
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//==========================================================================
|
|
||||||
|
|
||||||
void FHereticStartupScreen::SetWindowSize()
|
|
||||||
{
|
|
||||||
ST_Util_SizeWindowForBitmap(1);
|
|
||||||
mainwindow.UpdateLayout();
|
|
||||||
mainwindow.InvalidateStartupScreen();
|
|
||||||
}
|
|
||||||
|
|
||||||
//==========================================================================
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//==========================================================================
|
|
||||||
|
|
||||||
void FStrifeStartupScreen::SetWindowSize()
|
|
||||||
{
|
|
||||||
ST_Util_SizeWindowForBitmap(2);
|
|
||||||
mainwindow.UpdateLayout();
|
|
||||||
mainwindow.InvalidateStartupScreen();
|
|
||||||
}
|
|
||||||
|
|
||||||
//==========================================================================
|
|
||||||
//
|
|
||||||
// ST_Endoom
|
|
||||||
//
|
|
||||||
// Shows an ENDOOM text screen
|
|
||||||
//
|
|
||||||
//==========================================================================
|
|
||||||
|
|
||||||
int RunEndoom()
|
|
||||||
{
|
|
||||||
if (showendoom == 0 || endoomName.Len() == 0)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int endoom_lump = fileSystem.CheckNumForFullName (endoomName, true);
|
|
||||||
|
|
||||||
uint8_t endoom_screen[4000];
|
|
||||||
MSG mess;
|
|
||||||
BOOL bRet;
|
|
||||||
bool blinking = false, blinkstate = false;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
if (endoom_lump < 0 || fileSystem.FileLength (endoom_lump) != 4000)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fileSystem.GetFileContainer(endoom_lump) == fileSystem.GetMaxIwadNum() && showendoom == 2)
|
|
||||||
{
|
|
||||||
// showendoom==2 means to show only lumps from PWADs.
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
mainwindow.ShowStartupScreen();
|
|
||||||
|
|
||||||
I_ShutdownGraphics ();
|
|
||||||
mainwindow.RestoreConView ();
|
|
||||||
S_StopMusic(true);
|
|
||||||
|
|
||||||
fileSystem.ReadFile (endoom_lump, endoom_screen);
|
|
||||||
|
|
||||||
// Draw the loading screen to a bitmap.
|
|
||||||
StartupBitmap = ST_Util_AllocTextBitmap();
|
|
||||||
ST_Util_DrawTextScreen (StartupBitmap, endoom_screen);
|
|
||||||
|
|
||||||
// Make the title banner go away.
|
|
||||||
mainwindow.HideGameTitleWindow();
|
|
||||||
|
|
||||||
ST_Util_SizeWindowForBitmap (1);
|
|
||||||
mainwindow.UpdateLayout();
|
|
||||||
mainwindow.InvalidateStartupScreen();
|
|
||||||
|
|
||||||
// Does this screen need blinking?
|
|
||||||
for (i = 0; i < 80*25; ++i)
|
|
||||||
{
|
|
||||||
if (endoom_screen[1+i*2] & 0x80)
|
|
||||||
{
|
|
||||||
blinking = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (blinking && SetTimer (mainwindow.GetHandle(), 0x5A15A, BLINK_PERIOD, NULL) == 0)
|
|
||||||
{
|
|
||||||
blinking = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Wait until any key has been pressed or a quit message has been received
|
|
||||||
for (;;)
|
|
||||||
{
|
|
||||||
bRet = GetMessage (&mess, NULL, 0, 0);
|
|
||||||
if (bRet == 0 || bRet == -1 || // bRet == 0 means we received WM_QUIT
|
|
||||||
mess.message == WM_KEYDOWN || mess.message == WM_SYSKEYDOWN || mess.message == WM_LBUTTONDOWN)
|
|
||||||
{
|
|
||||||
if (blinking)
|
|
||||||
{
|
|
||||||
KillTimer (mainwindow.GetHandle(), 0x5A15A);
|
|
||||||
}
|
|
||||||
ST_Util_FreeBitmap (StartupBitmap);
|
|
||||||
return int(bRet == 0 ? mess.wParam : 0);
|
|
||||||
}
|
|
||||||
else if (blinking && mess.message == WM_TIMER && mess.hwnd == mainwindow.GetHandle() && mess.wParam == 0x5A15A)
|
|
||||||
{
|
|
||||||
ST_Util_UpdateTextBlink (StartupBitmap, endoom_screen, blinkstate);
|
|
||||||
blinkstate = !blinkstate;
|
|
||||||
}
|
|
||||||
TranslateMessage (&mess);
|
|
||||||
DispatchMessage (&mess);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void ST_Endoom()
|
|
||||||
{
|
|
||||||
TexMan.DeleteAll();
|
|
||||||
int code = RunEndoom();
|
|
||||||
throw CExitEvent(code);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
//==========================================================================
|
|
||||||
//
|
|
||||||
// ST_Util_SizeWindowForBitmap
|
|
||||||
//
|
|
||||||
// Resizes the main window so that the startup bitmap will be drawn
|
|
||||||
// at the desired scale.
|
|
||||||
//
|
|
||||||
//==========================================================================
|
|
||||||
|
|
||||||
void ST_Util_SizeWindowForBitmap (int scale)
|
|
||||||
{
|
|
||||||
DEVMODE displaysettings;
|
|
||||||
int w, h, cx, cy, x, y;
|
|
||||||
RECT rect;
|
|
||||||
|
|
||||||
RECT sizerect = { 0, 0, StartupBitmap->bmiHeader.biWidth * scale, StartupBitmap->bmiHeader.biHeight * scale + mainwindow.GetGameTitleWindowHeight() };
|
|
||||||
AdjustWindowRectEx(&sizerect, WS_VISIBLE|WS_OVERLAPPEDWINDOW, FALSE, WS_EX_APPWINDOW);
|
|
||||||
w = sizerect.right - sizerect.left;
|
|
||||||
h = sizerect.bottom - sizerect.top;
|
|
||||||
|
|
||||||
// Resize the window, but keep its center point the same, unless that
|
|
||||||
// puts it partially offscreen.
|
|
||||||
memset (&displaysettings, 0, sizeof(displaysettings));
|
|
||||||
displaysettings.dmSize = sizeof(displaysettings);
|
|
||||||
EnumDisplaySettings (NULL, ENUM_CURRENT_SETTINGS, &displaysettings);
|
|
||||||
GetWindowRect (mainwindow.GetHandle(), &rect);
|
|
||||||
cx = (rect.left + rect.right) / 2;
|
|
||||||
cy = (rect.top + rect.bottom) / 2;
|
|
||||||
x = cx - w / 2;
|
|
||||||
y = cy - h / 2;
|
|
||||||
if (x + w > (int)displaysettings.dmPelsWidth)
|
|
||||||
{
|
|
||||||
x = displaysettings.dmPelsWidth - w;
|
|
||||||
}
|
|
||||||
if (x < 0)
|
|
||||||
{
|
|
||||||
x = 0;
|
|
||||||
}
|
|
||||||
if (y + h > (int)displaysettings.dmPelsHeight)
|
|
||||||
{
|
|
||||||
y = displaysettings.dmPelsHeight - h;
|
|
||||||
}
|
|
||||||
if (y < 0)
|
|
||||||
{
|
|
||||||
y = 0;
|
|
||||||
}
|
|
||||||
MoveWindow (mainwindow.GetHandle(), x, y, w, h, TRUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
//==========================================================================
|
|
||||||
//
|
|
||||||
// ST_Util_InvalidateRect
|
|
||||||
//
|
|
||||||
// Invalidates the portion of the window that the specified rect of the
|
|
||||||
// bitmap appears in.
|
|
||||||
//
|
|
||||||
//==========================================================================
|
|
||||||
|
|
||||||
void ST_Util_InvalidateRect(BitmapInfo* bitmap_info, int left, int top, int right, int bottom)
|
|
||||||
{
|
|
||||||
mainwindow.InvalidateStartupScreen(left, top, right, bottom);
|
|
||||||
}
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -66,13 +66,13 @@
|
||||||
// TYPES -------------------------------------------------------------------
|
// TYPES -------------------------------------------------------------------
|
||||||
|
|
||||||
// PUBLIC DATA DEFINITIONS -------------------------------------------------
|
// PUBLIC DATA DEFINITIONS -------------------------------------------------
|
||||||
#if 0
|
|
||||||
CUSTOM_CVAR(Int, showendoom, 1, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
CUSTOM_CVAR(Int, showendoom, 1, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
||||||
{
|
{
|
||||||
if (self < 0) self = 0;
|
if (self < 0) self = 0;
|
||||||
else if (self > 2) self=2;
|
else if (self > 2) self=2;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
// PRIVATE DATA DEFINITIONS ------------------------------------------------
|
// PRIVATE DATA DEFINITIONS ------------------------------------------------
|
||||||
|
|
||||||
// CODE --------------------------------------------------------------------
|
// CODE --------------------------------------------------------------------
|
||||||
|
@ -138,7 +138,6 @@ void FEndoomScreen::Update()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#if 0 // this part is not ready yet.
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
// ST_Endoom
|
// ST_Endoom
|
||||||
|
@ -198,4 +197,3 @@ void ST_Endoom()
|
||||||
int code = RunEndoom();
|
int code = RunEndoom();
|
||||||
throw CExitEvent(code);
|
throw CExitEvent(code);
|
||||||
}
|
}
|
||||||
#endif
|
|
|
@ -368,8 +368,9 @@ FStartScreen* GetGameStartScreen(int max_progress)
|
||||||
Printf("Error creating start screen: %s\n", err.what());
|
Printf("Error creating start screen: %s\n", err.what());
|
||||||
// fall through to the generic startup screen
|
// fall through to the generic startup screen
|
||||||
}
|
}
|
||||||
|
return CreateGenericStartScreen(max_progress);
|
||||||
}
|
}
|
||||||
return CreateGenericStartScreen(max_progress);
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
Loading…
Reference in New Issue