2
0

BFWindow.h 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. #pragma once
  2. #include "Common.h"
  3. NS_BF_BEGIN;
  4. class BFMenu;
  5. class BFWindow;
  6. typedef void (*BFWindow_MovedFunc)(BFWindow* window);
  7. typedef int (*BFWindow_CloseQueryFunc)(BFWindow* window);
  8. typedef void (*BFWindow_ClosedFunc)(BFWindow* window);
  9. typedef void (*BFWindow_GotFocusFunc)(BFWindow* window);
  10. typedef void (*BFWindow_LostFocusFunc)(BFWindow* window);
  11. typedef void (*BFWindow_KeyCharFunc)(BFWindow* window, wchar_t theChar);
  12. typedef bool (*BFWindow_KeyDownFunc)(BFWindow* window, int keyCode, int isRepeat);
  13. typedef void (*BFWindow_KeyUpFunc)(BFWindow* window, int keyCode);
  14. typedef int (*BFWindow_HitTestFunc)(BFWindow* window, int x, int y);
  15. typedef void (*BFWindow_MouseMove)(BFWindow* window, int x, int y);
  16. typedef void (*BFWindow_MouseProxyMove)(BFWindow* window, int x, int y);
  17. typedef void (*BFWindow_MouseDown)(BFWindow* window, int x, int y, int btn, int btnCount);
  18. typedef void (*BFWindow_MouseUp)(BFWindow* window, int x, int y, int btn);
  19. typedef void (*BFWindow_MouseWheel)(BFWindow* window, int x, int y, float deltaX, float deltaY);
  20. typedef void (*BFWindow_MouseLeave)(BFWindow* window);
  21. typedef void (*BFWindow_MenuItemSelectedFunc)(BFWindow* window, BFMenu* menu);
  22. typedef void (*BFWindow_DragDropFileFunc)(BFWindow* window, const char* filePath);
  23. enum
  24. {
  25. BFWINDOW_BORDER = 0x000001,
  26. BFWINDOW_THICKFRAME = 0x000002,
  27. BFWINDOW_RESIZABLE = 0x000004,
  28. BFWINDOW_SYSMENU = 0x000008,
  29. BFWINDOW_CAPTION = 0x000010,
  30. BFWINDOW_MINIMIZE = 0x000020,
  31. BFWINDOW_MAXIMIZE = 0x000040,
  32. BFWINDOW_CLIENT_SIZED = 0x000080,
  33. BFWINDOW_QUIT_ON_CLOSE = 0x000100,
  34. BFWINDOW_VSYNC = 0x000200,
  35. BFWINDOW_POPUP_POSITION = 0x000400,
  36. BFWINDOW_DEST_ALPHA = 0x000800,
  37. BFWINDOW_ALPHA_MASK = 0x0001000,
  38. BFWINDOW_CHILD = 0x002000,
  39. BFWINDOW_TOPMOST = 0x004000,
  40. BFWINDOW_TOOLWINDOW = 0x008000,
  41. BFWINDOW_NO_ACTIVATE = 0x010000,
  42. BFWINDOW_NO_MOUSE_ACTIVATE = 0x020000,
  43. BFWINDOW_MENU = 0x040000,
  44. BFWINDOW_MODAL = 0x080000,
  45. BFWINDOW_SCALE_CONTENT = 0x100000,
  46. BFWINDOW_USE_PARENT_MENU = 0x200000,
  47. BFWINDOW_CAPTURE_MEDIA_KEYS = 0x400000,
  48. BFWINDOW_FULLSCREEN = 0x800000,
  49. BFWINDOW_FAKEFOCUS = 0x1000000,
  50. BFWINDOW_SHOWMINIMIZED = 0x2000000,
  51. BFWINDOW_SHOWMAXIMIZED = 0x4000000,
  52. BFWINDOW_ALLOW_FULLSCREEN = 0x8000000,
  53. BFWINDOW_ACCEPTFILES = 0x10000000,
  54. BFWINDOW_NOSHOW = 0x20000000,
  55. BFWINDOW_NO_MOUSE = 0x40000000
  56. };
  57. class RenderWindow;
  58. class BFMenu
  59. {
  60. public:
  61. BFMenu* mParent;
  62. Array<BFMenu*> mBFMenuList;
  63. uint32 mKeyCode;
  64. bool mKeyCtrl;
  65. bool mKeyAlt;
  66. bool mKeyShift;
  67. public:
  68. BFMenu();
  69. virtual ~BFMenu() { }
  70. virtual bool ParseHotKey(const StringImpl& hotKey);
  71. };
  72. class BFSysBitmap;
  73. #define KEYCODE_MAX 0x100
  74. #define MOUSEBUTTON_MAX 5
  75. class BFWindow;
  76. struct BFCoord
  77. {
  78. int mX;
  79. int mY;
  80. };
  81. class BFWindow
  82. {
  83. public:
  84. enum ShowKind : int8
  85. {
  86. ShowKind_Hide,
  87. ShowKind_Normal,
  88. ShowKind_Minimized,
  89. ShowKind_Maximized,
  90. ShowKind_Show,
  91. ShowKind_ShowNormal,
  92. ShowKind_ShowMinimized,
  93. ShowKind_ShowMaximized
  94. };
  95. public:
  96. BFWindow* mParent;
  97. Array<BFWindow*> mChildren;
  98. int mFlags;
  99. bool mIsKeyDown[KEYCODE_MAX];
  100. bool mIsMouseDown[MOUSEBUTTON_MAX];
  101. BFCoord mMouseDownCoords[MOUSEBUTTON_MAX];
  102. int mMouseClickCount[MOUSEBUTTON_MAX];
  103. uint32 mMouseDownTicks[MOUSEBUTTON_MAX];
  104. BFMenu* mMenu;
  105. RenderWindow* mRenderWindow;
  106. bool mNonExclusiveMouseCapture;
  107. BFWindow_MovedFunc mMovedFunc;
  108. BFWindow_CloseQueryFunc mCloseQueryFunc;
  109. BFWindow_ClosedFunc mClosedFunc;
  110. BFWindow_GotFocusFunc mGotFocusFunc;
  111. BFWindow_LostFocusFunc mLostFocusFunc;
  112. BFWindow_KeyCharFunc mKeyCharFunc;
  113. BFWindow_KeyDownFunc mKeyDownFunc;
  114. BFWindow_KeyUpFunc mKeyUpFunc;
  115. BFWindow_HitTestFunc mHitTestFunc;
  116. BFWindow_MouseMove mMouseMoveFunc;
  117. BFWindow_MouseProxyMove mMouseProxyMoveFunc;
  118. BFWindow_MouseDown mMouseDownFunc;
  119. BFWindow_MouseUp mMouseUpFunc;
  120. BFWindow_MouseWheel mMouseWheelFunc;
  121. BFWindow_MouseLeave mMouseLeaveFunc;
  122. BFWindow_MenuItemSelectedFunc mMenuItemSelectedFunc;
  123. BFWindow_DragDropFileFunc mDragDropFileFunc;
  124. public:
  125. BFWindow();
  126. virtual ~BFWindow();
  127. virtual void* GetUnderlying() = 0;
  128. virtual void Destroy() = 0;
  129. virtual bool TryClose() = 0;
  130. virtual void SetTitle(const char* title) = 0;
  131. virtual void SetMinimumSize(int minWidth, int minHeight, bool clientSized) = 0;
  132. virtual void GetPosition(int* x, int* y, int* width, int* height, int* clientX, int* clientY, int* clientWidth, int* clientHeight) = 0;
  133. virtual void GetPlacement(int* normX, int* normY, int* normWidth, int* normHeight, int* showKind) = 0;
  134. virtual void Resize(int x, int y, int width, int height, ShowKind showKind) = 0;
  135. virtual void SetClientPosition(int x, int y) = 0;
  136. virtual void SetMouseVisible(bool isMouseVisible) = 0;
  137. virtual void SetAlpha(float alpha, uint32 destAlphaSrcMask, bool isMouseVisible) = 0;
  138. virtual void Show(ShowKind showKind) = 0;
  139. virtual void SetForeground() = 0;
  140. virtual void SetNonExclusiveMouseCapture() { mNonExclusiveMouseCapture = true; }
  141. virtual void CaptureMouse() {}
  142. virtual bool IsMouseCaptured() { return false; }
  143. virtual void LostFocus(BFWindow* newFocus) = 0;
  144. virtual int GetDPI() { return 0; }
  145. virtual BFMenu* AddMenuItem(BFMenu* parent, int insertIdx, const char* text, const char* hotKey, BFSysBitmap* bitmap, bool enabled, int checkState, bool radioCheck) = 0;
  146. virtual void ModifyMenuItem(BFMenu* item, const char* text, const char* hotKey, BFSysBitmap* bitmap, bool enabled, int checkState, bool radioCheck) = 0;
  147. virtual void RemoveMenuItem(BFMenu* item) = 0;
  148. virtual void ModalsRemoved() { }
  149. };
  150. NS_BF_END;