123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- #pragma once
- #include "Common.h"
- NS_BF_BEGIN;
- class BFMenu;
- class BFWindow;
- typedef void (*BFWindow_MovedFunc)(BFWindow* window);
- typedef int (*BFWindow_CloseQueryFunc)(BFWindow* window);
- typedef void (*BFWindow_ClosedFunc)(BFWindow* window);
- typedef void (*BFWindow_GotFocusFunc)(BFWindow* window);
- typedef void (*BFWindow_LostFocusFunc)(BFWindow* window);
- typedef void (*BFWindow_KeyCharFunc)(BFWindow* window, wchar_t theChar);
- typedef bool (*BFWindow_KeyDownFunc)(BFWindow* window, int keyCode, int isRepeat);
- typedef void (*BFWindow_KeyUpFunc)(BFWindow* window, int keyCode);
- typedef int (*BFWindow_HitTestFunc)(BFWindow* window, int x, int y);
- typedef void (*BFWindow_MouseMove)(BFWindow* window, int x, int y);
- typedef void (*BFWindow_MouseProxyMove)(BFWindow* window, int x, int y);
- typedef void (*BFWindow_MouseDown)(BFWindow* window, int x, int y, int btn, int btnCount);
- typedef void (*BFWindow_MouseUp)(BFWindow* window, int x, int y, int btn);
- typedef void (*BFWindow_MouseWheel)(BFWindow* window, int x, int y, float deltaX, float deltaY);
- typedef void (*BFWindow_MouseLeave)(BFWindow* window);
- typedef void (*BFWindow_MenuItemSelectedFunc)(BFWindow* window, BFMenu* menu);
- typedef void (*BFWindow_DragDropFileFunc)(BFWindow* window, const char* filePath);
- enum
- {
- BFWINDOW_BORDER = 0x000001,
- BFWINDOW_THICKFRAME = 0x000002,
- BFWINDOW_RESIZABLE = 0x000004,
- BFWINDOW_SYSMENU = 0x000008,
- BFWINDOW_CAPTION = 0x000010,
- BFWINDOW_MINIMIZE = 0x000020,
- BFWINDOW_MAXIMIZE = 0x000040,
- BFWINDOW_CLIENT_SIZED = 0x000080,
- BFWINDOW_QUIT_ON_CLOSE = 0x000100,
- BFWINDOW_VSYNC = 0x000200,
- BFWINDOW_POPUP_POSITION = 0x000400,
- BFWINDOW_DEST_ALPHA = 0x000800,
- BFWINDOW_ALPHA_MASK = 0x0001000,
- BFWINDOW_CHILD = 0x002000,
- BFWINDOW_TOPMOST = 0x004000,
- BFWINDOW_TOOLWINDOW = 0x008000,
- BFWINDOW_NO_ACTIVATE = 0x010000,
- BFWINDOW_NO_MOUSE_ACTIVATE = 0x020000,
- BFWINDOW_MENU = 0x040000,
- BFWINDOW_MODAL = 0x080000,
- BFWINDOW_SCALE_CONTENT = 0x100000,
- BFWINDOW_USE_PARENT_MENU = 0x200000,
- BFWINDOW_CAPTURE_MEDIA_KEYS = 0x400000,
- BFWINDOW_FULLSCREEN = 0x800000,
- BFWINDOW_FAKEFOCUS = 0x1000000,
- BFWINDOW_SHOWMINIMIZED = 0x2000000,
- BFWINDOW_SHOWMAXIMIZED = 0x4000000,
- BFWINDOW_ALLOW_FULLSCREEN = 0x8000000,
- BFWINDOW_ACCEPTFILES = 0x10000000,
- BFWINDOW_NOSHOW = 0x20000000,
- BFWINDOW_NO_MOUSE = 0x40000000
- };
- class RenderWindow;
- class BFMenu
- {
- public:
- BFMenu* mParent;
- Array<BFMenu*> mBFMenuList;
- uint32 mKeyCode;
- bool mKeyCtrl;
- bool mKeyAlt;
- bool mKeyShift;
- public:
- BFMenu();
- virtual ~BFMenu() { }
- virtual bool ParseHotKey(const StringImpl& hotKey);
- };
- class BFSysBitmap;
- #define KEYCODE_MAX 0x100
- #define MOUSEBUTTON_MAX 5
- class BFWindow;
- struct BFCoord
- {
- int mX;
- int mY;
- };
- class BFWindow
- {
- public:
- enum ShowKind : int8
- {
- ShowKind_Hide,
- ShowKind_Normal,
- ShowKind_Minimized,
- ShowKind_Maximized,
- ShowKind_Show,
- ShowKind_ShowNormal,
- ShowKind_ShowMinimized,
- ShowKind_ShowMaximized
- };
- public:
- BFWindow* mParent;
- Array<BFWindow*> mChildren;
- int mFlags;
- bool mIsKeyDown[KEYCODE_MAX];
- bool mIsMouseDown[MOUSEBUTTON_MAX];
- BFCoord mMouseDownCoords[MOUSEBUTTON_MAX];
- int mMouseClickCount[MOUSEBUTTON_MAX];
- uint32 mMouseDownTicks[MOUSEBUTTON_MAX];
- BFMenu* mMenu;
- RenderWindow* mRenderWindow;
- bool mNonExclusiveMouseCapture;
- BFWindow_MovedFunc mMovedFunc;
- BFWindow_CloseQueryFunc mCloseQueryFunc;
- BFWindow_ClosedFunc mClosedFunc;
- BFWindow_GotFocusFunc mGotFocusFunc;
- BFWindow_LostFocusFunc mLostFocusFunc;
- BFWindow_KeyCharFunc mKeyCharFunc;
- BFWindow_KeyDownFunc mKeyDownFunc;
- BFWindow_KeyUpFunc mKeyUpFunc;
- BFWindow_HitTestFunc mHitTestFunc;
- BFWindow_MouseMove mMouseMoveFunc;
- BFWindow_MouseProxyMove mMouseProxyMoveFunc;
- BFWindow_MouseDown mMouseDownFunc;
- BFWindow_MouseUp mMouseUpFunc;
- BFWindow_MouseWheel mMouseWheelFunc;
- BFWindow_MouseLeave mMouseLeaveFunc;
- BFWindow_MenuItemSelectedFunc mMenuItemSelectedFunc;
- BFWindow_DragDropFileFunc mDragDropFileFunc;
- public:
- BFWindow();
- virtual ~BFWindow();
- virtual void* GetUnderlying() = 0;
- virtual void Destroy() = 0;
- virtual bool TryClose() = 0;
- virtual void SetTitle(const char* title) = 0;
- virtual void SetMinimumSize(int minWidth, int minHeight, bool clientSized) = 0;
- virtual void GetPosition(int* x, int* y, int* width, int* height, int* clientX, int* clientY, int* clientWidth, int* clientHeight) = 0;
- virtual void GetPlacement(int* normX, int* normY, int* normWidth, int* normHeight, int* showKind) = 0;
- virtual void Resize(int x, int y, int width, int height, ShowKind showKind) = 0;
- virtual void SetClientPosition(int x, int y) = 0;
- virtual void SetMouseVisible(bool isMouseVisible) = 0;
- virtual void SetAlpha(float alpha, uint32 destAlphaSrcMask, bool isMouseVisible) = 0;
- virtual void Show(ShowKind showKind) = 0;
- virtual void SetForeground() = 0;
- virtual void SetNonExclusiveMouseCapture() { mNonExclusiveMouseCapture = true; }
- virtual void CaptureMouse() {}
- virtual bool IsMouseCaptured() { return false; }
- virtual void LostFocus(BFWindow* newFocus) = 0;
- virtual int GetDPI() { return 0; }
- virtual BFMenu* AddMenuItem(BFMenu* parent, int insertIdx, const char* text, const char* hotKey, BFSysBitmap* bitmap, bool enabled, int checkState, bool radioCheck) = 0;
- virtual void ModifyMenuItem(BFMenu* item, const char* text, const char* hotKey, BFSysBitmap* bitmap, bool enabled, int checkState, bool radioCheck) = 0;
- virtual void RemoveMenuItem(BFMenu* item) = 0;
- virtual void ModalsRemoved() { }
- };
- NS_BF_END;
|