1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-08 19:48:20 +02:00
Beef/BeefySysLib/platform/win/WinBFApp.h

145 lines
4.9 KiB
C
Raw Permalink Normal View History

2019-08-23 11:56:54 -07:00
#pragma once
#include "Common.h"
#include "BFApp.h"
#include "BFWindow.h"
#include "util/Dictionary.h"
NS_BF_BEGIN;
class RenderDevice;
class DSoundManager;
2020-11-27 06:25:54 -08:00
class DInputManager;
2019-08-23 11:56:54 -07:00
typedef Dictionary<void*, HGLOBAL> PtrToHGlobalMap;
typedef Dictionary<String, uint32> StringToUIntMap;
class WinBFMenu : public BFMenu
{
2022-11-16 13:56:20 -08:00
public:
2019-08-23 11:56:54 -07:00
HMENU mMenu;
uint32 mMenuId;
2022-11-16 13:56:20 -08:00
static int mMenuCount;
2019-08-23 11:56:54 -07:00
bool mIsPlaceholder;
public:
WinBFMenu();
};
typedef Dictionary<uint32, WinBFMenu*> WinMenuIDMap;
typedef Dictionary<HMENU, WinBFMenu*> WinHMenuMap;
class WinBFWindow : public BFWindow
{
2022-11-16 13:56:20 -08:00
public:
HWND mHWnd;
bool mIsMouseInside;
2019-08-23 11:56:54 -07:00
WinMenuIDMap mMenuIDMap;
WinHMenuMap mHMenuMap;
int mModalCount;
int mAlphaMaskWidth;
int mAlphaMaskHeight;
HBITMAP mAlphaMaskBitmap;
HDC mAlphaMaskDC;
uint32* mAlphaMaskPixels;
bool mIsMenuKeyHandled;
int mMinWidth;
int mMinHeight;
bool mMouseVisible;
bool mHasFocus;
2022-11-16 13:56:20 -08:00
bool mSoftHasFocus; // Mostly tracks mHasFocus except for when we get an explicit 'LostFocus' callback
bool mAwaitKeyReleases;
2022-01-05 07:27:38 -05:00
int mAwaitKeyReleasesCheckIdx;
DWORD mAwaitKeyReleasesEventTick;
DWORD mFocusLostTick;
2022-01-05 07:27:38 -05:00
bool mNeedsStateReset;
bool mKeyLayoutHasAltGr;
2019-08-23 11:56:54 -07:00
public:
virtual LRESULT WindowProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
static LRESULT CALLBACK WindowProcStub(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
void RehupMouseOver(bool isMouseOver);
bool CheckKeyReleases(bool isKeyDown);
2022-01-05 07:27:38 -05:00
void GotFocus();
2019-08-23 11:56:54 -07:00
public:
WinBFWindow(BFWindow* parent, const StringImpl& title, int x, int y, int width, int height, int windowFlags);
~WinBFWindow();
virtual void* GetUnderlying() override;
virtual void Destroy() override;
virtual bool TryClose() override;
virtual void SetTitle(const char* title) override;
2022-11-16 13:56:20 -08:00
virtual void Show(ShowKind showKind) override;
virtual void SetForeground() override;
2019-08-23 11:56:54 -07:00
virtual void LostFocus(BFWindow* newFocus) override;
virtual void SetMinimumSize(int minWidth, int minHeight, bool clientSized) override;
2022-11-16 13:56:20 -08:00
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;
2022-11-16 13:56:20 -08:00
virtual void Resize(int x, int y, int width, int height, ShowKind showKind) override;
2019-08-23 11:56:54 -07:00
virtual void SetClientPosition(int x, int y) override;
virtual void SetMouseVisible(bool isMouseVisible) override;
virtual void SetAlpha(float alpha, uint32 destAlphaSrcMask, bool isMouseVisible) override;
virtual void CaptureMouse() override;
virtual bool IsMouseCaptured() override;
virtual int GetDPI() override; // { return ::GetDpiForWindow(mHWnd); }
2019-08-23 11:56:54 -07:00
virtual BFMenu* AddMenuItem(BFMenu* parent, int insertIdx, const char* text, const char* hotKey, BFSysBitmap* bitmap, bool enabled, int checkState, bool radioCheck) override;
virtual void ModifyMenuItem(BFMenu* item, const char* text, const char* hotKey, BFSysBitmap* bitmap, bool enabled, int checkState, bool radioCheck) override;
virtual void RemoveMenuItem(BFMenu* item) override;
virtual void ModalsRemoved() override;
};
class WinBFApp : public BFApp
{
2022-11-16 13:56:20 -08:00
public:
2019-08-23 11:56:54 -07:00
bool mInMsgProc;
StringToUIntMap mClipboardFormatMap;
DSoundManager* mDSoundManager;
2020-11-27 06:25:54 -08:00
DInputManager* mDInputManager;
2022-05-15 08:00:55 -07:00
BfpThreadId mVSyncThreadId;
2022-11-16 13:56:20 -08:00
BfpThread* mVSyncThread;
2022-05-15 08:00:55 -07:00
volatile bool mClosing;
2019-08-23 11:56:54 -07:00
protected:
2022-05-15 08:00:55 -07:00
void VSyncThreadProc();
static void BFP_CALLTYPE VSyncThreadProcThunk(void* ptr);
2022-11-16 13:56:20 -08:00
virtual void Draw() override;
2019-08-23 11:56:54 -07:00
virtual void PhysSetCursor() override;
2022-11-16 13:56:20 -08:00
2019-08-23 11:56:54 -07:00
uint32 GetClipboardFormat(const StringImpl& format);
public:
WinBFApp();
2022-11-16 13:56:20 -08:00
virtual ~WinBFApp();
2019-08-23 11:56:54 -07:00
virtual void Init() override;
2022-11-16 13:56:20 -08:00
virtual void Run() override;
2022-05-15 08:00:55 -07:00
virtual void Process() override;
2019-08-23 11:56:54 -07:00
2020-05-07 08:39:40 -07:00
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;
2022-11-16 13:56:20 -08:00
virtual BFWindow* CreateNewWindow(BFWindow* parent, const StringImpl& title, int x, int y, int width, int height, int windowFlags) override;
2019-08-23 11:56:54 -07:00
virtual DrawLayer* CreateDrawLayer(BFWindow* window);
virtual void* GetClipboardData(const StringImpl& format, int* size) override;
virtual void ReleaseClipboardData(void* ptr) override;
virtual void SetClipboardData(const StringImpl& format, const void* ptr, int size, bool resetClipboard) override;
virtual void RehupMouse() override;
2020-11-27 06:25:54 -08:00
virtual String EnumerateInputDevices() override;
virtual BFInputDevice* CreateInputDevice(const StringImpl& guid) override;
2019-08-23 11:56:54 -07:00
virtual BFSysBitmap* LoadSysBitmap(const WCHAR* fileName) override;
virtual BFSoundManager* GetSoundManager() override;
2022-05-15 08:00:55 -07:00
virtual intptr GetCriticalThreadId(int idx) override;
2019-08-23 11:56:54 -07:00
};
NS_BF_END;