mirror of
https://github.com/beefytech/Beef.git
synced 2025-07-10 02:05:59 +02:00
Beefy2D windows enhancements
This commit is contained in:
parent
6045137bce
commit
2428fe8e57
9 changed files with 125 additions and 52 deletions
|
@ -87,11 +87,12 @@ static int SDLConvertScanCode(int scanCode)
|
|||
{
|
||||
if ((scanCode >= SDL_SCANCODE_A) && (scanCode <= SDL_SCANCODE_Z))
|
||||
return (scanCode - SDL_SCANCODE_A) + 'A';
|
||||
if ((scanCode >= SDL_SCANCODE_0) && (scanCode <= SDL_SCANCODE_9))
|
||||
return (scanCode - SDL_SCANCODE_0) + '0';
|
||||
if ((scanCode >= SDL_SCANCODE_1) && (scanCode <= SDL_SCANCODE_9))
|
||||
return (scanCode - SDL_SCANCODE_1) + '1';
|
||||
|
||||
switch (scanCode)
|
||||
{
|
||||
case SDL_SCANCODE_9: return '0';
|
||||
case SDL_SCANCODE_CANCEL: return 0x03;
|
||||
case SDL_SCANCODE_AC_BACK: return 0x08;
|
||||
case SDL_SCANCODE_TAB: return 0x09;
|
||||
|
|
|
@ -28,7 +28,7 @@ public:
|
|||
virtual void SetTitle(const char* title) override {}
|
||||
virtual void SetMinimumSize(int minWidth, int minHeight, bool clientSized) override {}
|
||||
virtual void GetPlacement(int* normX, int* normY, int* normWidth, int* normHeight, int* showKind) override { }
|
||||
virtual void Resize(int x, int y, int width, int height, int showKind) override {}
|
||||
virtual void Resize(int x, int y, int width, int height, ShowKind showKind) override {}
|
||||
virtual void SetMouseVisible(bool isMouseVisible) override {}
|
||||
|
||||
virtual bool TryClose() override;
|
||||
|
@ -43,6 +43,7 @@ public:
|
|||
|
||||
virtual void ModalsRemoved() override;
|
||||
|
||||
virtual void Show(ShowKind showKind) {}
|
||||
virtual void SetForeground() override {};
|
||||
};
|
||||
|
||||
|
|
|
@ -243,6 +243,9 @@ WinBFWindow::WinBFWindow(BFWindow* parent, const StringImpl& title, int x, int y
|
|||
mSoftHasFocus = false;
|
||||
}
|
||||
|
||||
if ((windowFlags & BFWINDOW_NOSHOW))
|
||||
showFlags = SWP_HIDEWINDOW;
|
||||
|
||||
if (windowFlags & (BFWINDOW_SHOWMINIMIZED | BFWINDOW_SHOWMAXIMIZED))
|
||||
{
|
||||
WINDOWPLACEMENT wndPlacement = { sizeof(WINDOWPLACEMENT), 0 };
|
||||
|
@ -353,6 +356,27 @@ void WinBFWindow::SetTitle(const char* title)
|
|||
SetWindowTextA(mHWnd, title);
|
||||
}
|
||||
|
||||
static int ToWShow(BFWindow::ShowKind showKind)
|
||||
{
|
||||
switch (showKind)
|
||||
{
|
||||
case BFWindow::ShowKind_Hide: return SW_HIDE;
|
||||
case BFWindow::ShowKind_Normal: return SW_NORMAL;
|
||||
case BFWindow::ShowKind_Minimized: return SW_MINIMIZE;
|
||||
case BFWindow::ShowKind_Maximized: return SW_MAXIMIZE;
|
||||
case BFWindow::ShowKind_Show: return SW_SHOW;
|
||||
case BFWindow::ShowKind_ShowNormal: return SW_SHOWNORMAL;
|
||||
case BFWindow::ShowKind_ShowMinimized: return SW_SHOWMINIMIZED;
|
||||
case BFWindow::ShowKind_ShowMaximized: return SW_SHOWMAXIMIZED;
|
||||
}
|
||||
return SW_SHOW;
|
||||
}
|
||||
|
||||
void WinBFWindow::Show(ShowKind showKind)
|
||||
{
|
||||
::ShowWindow(mHWnd, ToWShow(showKind));
|
||||
}
|
||||
|
||||
void WinBFWindow::LostFocus(BFWindow* newFocus)
|
||||
{
|
||||
///OutputDebugStrF("Lost focus\n");
|
||||
|
@ -1607,35 +1631,23 @@ void WinBFWindow::GetPlacement(int* normX, int* normY, int* normWidth, int* norm
|
|||
switch (wndPlacement.showCmd)
|
||||
{
|
||||
case SW_SHOWMINIMIZED:
|
||||
*showKind = 1;
|
||||
*showKind = ShowKind_ShowMinimized;
|
||||
break;
|
||||
case SW_SHOWMAXIMIZED:
|
||||
*showKind = 2;
|
||||
*showKind = ShowKind_ShowMaximized;
|
||||
break;
|
||||
default:
|
||||
*showKind = 0;
|
||||
*showKind = ShowKind_Hide;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void WinBFWindow::Resize(int x, int y, int width, int height, int showKind)
|
||||
void WinBFWindow::Resize(int x, int y, int width, int height, ShowKind showKind)
|
||||
{
|
||||
WINDOWPLACEMENT wndPlacement = { sizeof(WINDOWPLACEMENT), 0 };
|
||||
::GetWindowPlacement(mHWnd, &wndPlacement);
|
||||
|
||||
switch (showKind)
|
||||
{
|
||||
case 1:
|
||||
wndPlacement.showCmd = SW_SHOWMINIMIZED;
|
||||
break;
|
||||
case 2:
|
||||
wndPlacement.showCmd = SW_SHOWMAXIMIZED;
|
||||
break;
|
||||
case 3:
|
||||
wndPlacement.showCmd = SW_SHOWNORMAL;
|
||||
break;
|
||||
}
|
||||
|
||||
wndPlacement.showCmd = ToWShow(showKind);
|
||||
wndPlacement.rcNormalPosition.left = x;
|
||||
wndPlacement.rcNormalPosition.top = y;
|
||||
wndPlacement.rcNormalPosition.right = x + width;
|
||||
|
|
|
@ -17,10 +17,10 @@ typedef Dictionary<String, uint32> StringToUIntMap;
|
|||
|
||||
class WinBFMenu : public BFMenu
|
||||
{
|
||||
public:
|
||||
public:
|
||||
HMENU mMenu;
|
||||
uint32 mMenuId;
|
||||
static int mMenuCount;
|
||||
static int mMenuCount;
|
||||
bool mIsPlaceholder;
|
||||
|
||||
public:
|
||||
|
@ -32,9 +32,9 @@ typedef Dictionary<HMENU, WinBFMenu*> WinHMenuMap;
|
|||
|
||||
class WinBFWindow : public BFWindow
|
||||
{
|
||||
public:
|
||||
HWND mHWnd;
|
||||
bool mIsMouseInside;
|
||||
public:
|
||||
HWND mHWnd;
|
||||
bool mIsMouseInside;
|
||||
WinMenuIDMap mMenuIDMap;
|
||||
WinHMenuMap mHMenuMap;
|
||||
|
||||
|
@ -49,7 +49,7 @@ public:
|
|||
int mMinHeight;
|
||||
bool mMouseVisible;
|
||||
bool mHasFocus;
|
||||
bool mSoftHasFocus; // Mostly tracks mHasFocus except for when we get an explicit 'LostFocus' callback
|
||||
bool mSoftHasFocus; // Mostly tracks mHasFocus except for when we get an explicit 'LostFocus' callback
|
||||
bool mAwaitKeyReleases;
|
||||
int mAwaitKeyReleasesCheckIdx;
|
||||
DWORD mAwaitKeyReleasesEventTick;
|
||||
|
@ -72,12 +72,13 @@ public:
|
|||
virtual void Destroy() override;
|
||||
virtual bool TryClose() override;
|
||||
virtual void SetTitle(const char* title) override;
|
||||
virtual void SetForeground() override;
|
||||
virtual void Show(ShowKind showKind) override;
|
||||
virtual void SetForeground() override;
|
||||
virtual void LostFocus(BFWindow* newFocus) override;
|
||||
virtual void SetMinimumSize(int minWidth, int minHeight, bool clientSized) override;
|
||||
virtual void GetPosition(int* x, int* y, int* width, int* height, int* clientX, int* clientY, int* clientWidth, int* clientHeight) override;
|
||||
virtual void GetPosition(int* x, int* y, int* width, int* height, int* clientX, int* clientY, int* clientWidth, int* clientHeight) override;
|
||||
virtual void GetPlacement(int* normX, int* normY, int* normWidth, int* normHeight, int* showKind) override;
|
||||
virtual void Resize(int x, int y, int width, int height, int showKind) override;
|
||||
virtual void Resize(int x, int y, int width, int height, ShowKind showKind) override;
|
||||
virtual void SetClientPosition(int x, int y) override;
|
||||
virtual void SetMouseVisible(bool isMouseVisible) override;
|
||||
virtual void SetAlpha(float alpha, uint32 destAlphaSrcMask, bool isMouseVisible) override;
|
||||
|
@ -93,36 +94,36 @@ public:
|
|||
|
||||
class WinBFApp : public BFApp
|
||||
{
|
||||
public:
|
||||
public:
|
||||
bool mInMsgProc;
|
||||
StringToUIntMap mClipboardFormatMap;
|
||||
DSoundManager* mDSoundManager;
|
||||
DInputManager* mDInputManager;
|
||||
BfpThreadId mVSyncThreadId;
|
||||
BfpThread* mVSyncThread;
|
||||
BfpThread* mVSyncThread;
|
||||
volatile bool mClosing;
|
||||
|
||||
protected:
|
||||
void VSyncThreadProc();
|
||||
static void BFP_CALLTYPE VSyncThreadProcThunk(void* ptr);
|
||||
|
||||
virtual void Draw() override;
|
||||
virtual void Draw() override;
|
||||
virtual void PhysSetCursor() override;
|
||||
|
||||
|
||||
uint32 GetClipboardFormat(const StringImpl& format);
|
||||
|
||||
public:
|
||||
WinBFApp();
|
||||
virtual ~WinBFApp();
|
||||
virtual ~WinBFApp();
|
||||
|
||||
virtual void Init() override;
|
||||
virtual void Run() override;
|
||||
virtual void Run() override;
|
||||
virtual void Process() override;
|
||||
|
||||
virtual void GetDesktopResolution(int& width, int& height) override;
|
||||
virtual void GetWorkspaceRect(int& x, int& y, int& width, int& height) override;
|
||||
virtual void GetWorkspaceRectFrom(int fromX, int fromY, int fromWidth, int fromHeight, int& outX, int& outY, int& outWidth, int& outHeight) override;
|
||||
virtual BFWindow* CreateNewWindow(BFWindow* parent, const StringImpl& title, int x, int y, int width, int height, int windowFlags) override;
|
||||
virtual BFWindow* CreateNewWindow(BFWindow* parent, const StringImpl& title, int x, int y, int width, int height, int windowFlags) override;
|
||||
virtual DrawLayer* CreateDrawLayer(BFWindow* window);
|
||||
|
||||
virtual void* GetClipboardData(const StringImpl& format, int* size) override;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue