BFWindow.h 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  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. };
  55. class RenderWindow;
  56. class BFMenu
  57. {
  58. public:
  59. BFMenu* mParent;
  60. Array<BFMenu*> mBFMenuList;
  61. uint32 mKeyCode;
  62. bool mKeyCtrl;
  63. bool mKeyAlt;
  64. bool mKeyShift;
  65. public:
  66. BFMenu();
  67. virtual ~BFMenu() { }
  68. virtual bool ParseHotKey(const StringImpl& hotKey);
  69. };
  70. class BFSysBitmap;
  71. #define KEYCODE_MAX 0x100
  72. #define MOUSEBUTTON_MAX 5
  73. class BFWindow;
  74. struct BFCoord
  75. {
  76. int mX;
  77. int mY;
  78. };
  79. class BFWindow
  80. {
  81. public:
  82. BFWindow* mParent;
  83. Array<BFWindow*> mChildren;
  84. int mFlags;
  85. bool mIsKeyDown[KEYCODE_MAX];
  86. bool mIsMouseDown[MOUSEBUTTON_MAX];
  87. BFCoord mMouseDownCoords[MOUSEBUTTON_MAX];
  88. int mMouseClickCount[MOUSEBUTTON_MAX];
  89. uint32 mMouseDownTicks[MOUSEBUTTON_MAX];
  90. BFMenu* mMenu;
  91. RenderWindow* mRenderWindow;
  92. bool mNonExclusiveMouseCapture;
  93. BFWindow_MovedFunc mMovedFunc;
  94. BFWindow_CloseQueryFunc mCloseQueryFunc;
  95. BFWindow_ClosedFunc mClosedFunc;
  96. BFWindow_GotFocusFunc mGotFocusFunc;
  97. BFWindow_LostFocusFunc mLostFocusFunc;
  98. BFWindow_KeyCharFunc mKeyCharFunc;
  99. BFWindow_KeyDownFunc mKeyDownFunc;
  100. BFWindow_KeyUpFunc mKeyUpFunc;
  101. BFWindow_HitTestFunc mHitTestFunc;
  102. BFWindow_MouseMove mMouseMoveFunc;
  103. BFWindow_MouseProxyMove mMouseProxyMoveFunc;
  104. BFWindow_MouseDown mMouseDownFunc;
  105. BFWindow_MouseUp mMouseUpFunc;
  106. BFWindow_MouseWheel mMouseWheelFunc;
  107. BFWindow_MouseLeave mMouseLeaveFunc;
  108. BFWindow_MenuItemSelectedFunc mMenuItemSelectedFunc;
  109. BFWindow_DragDropFileFunc mDragDropFileFunc;
  110. public:
  111. BFWindow();
  112. virtual ~BFWindow();
  113. virtual void* GetUnderlying() = 0;
  114. virtual void Destroy() = 0;
  115. virtual bool TryClose() = 0;
  116. virtual void SetTitle(const char* title) = 0;
  117. virtual void SetMinimumSize(int minWidth, int minHeight, bool clientSized) = 0;
  118. virtual void GetPosition(int* x, int* y, int* width, int* height, int* clientX, int* clientY, int* clientWidth, int* clientHeight) = 0;
  119. virtual void GetPlacement(int* normX, int* normY, int* normWidth, int* normHeight, int* showKind) = 0;
  120. virtual void Resize(int x, int y, int width, int height, int showKind) = 0;
  121. virtual void SetClientPosition(int x, int y) = 0;
  122. virtual void SetMouseVisible(bool isMouseVisible) = 0;
  123. virtual void SetAlpha(float alpha, uint32 destAlphaSrcMask, bool isMouseVisible) = 0;
  124. virtual void SetForeground() = 0;
  125. virtual void SetNonExclusiveMouseCapture() { mNonExclusiveMouseCapture = true; }
  126. virtual void CaptureMouse() {}
  127. virtual bool IsMouseCaptured() { return false; }
  128. virtual void LostFocus(BFWindow* newFocus) = 0;
  129. virtual int GetDPI() { return 0; }
  130. virtual BFMenu* AddMenuItem(BFMenu* parent, int insertIdx, const char* text, const char* hotKey, BFSysBitmap* bitmap, bool enabled, int checkState, bool radioCheck) = 0;
  131. virtual void ModifyMenuItem(BFMenu* item, const char* text, const char* hotKey, BFSysBitmap* bitmap, bool enabled, int checkState, bool radioCheck) = 0;
  132. virtual void RemoveMenuItem(BFMenu* item) = 0;
  133. virtual void ModalsRemoved() { }
  134. };
  135. NS_BF_END;