forked from beefytech/Beef
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathBFWindow.h
156 lines (135 loc) · 5.17 KB
/
BFWindow.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
#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
};
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:
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, int 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 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;