summaryrefslogtreecommitdiff
path: root/source/modules/asura-core/window/window.h
diff options
context:
space:
mode:
Diffstat (limited to 'source/modules/asura-core/window/window.h')
-rw-r--r--source/modules/asura-core/window/window.h244
1 files changed, 121 insertions, 123 deletions
diff --git a/source/modules/asura-core/window/window.h b/source/modules/asura-core/window/window.h
index deffc10..872c40f 100644
--- a/source/modules/asura-core/window/window.h
+++ b/source/modules/asura-core/window/window.h
@@ -9,131 +9,129 @@
#include "../graphics/render_state.h"
#include "../graphics/render_target.h"
-namespace AsuraEngine
+namespace_begin(AsuraEngine)
+namespace_begin(Window)
+
+class WindowImpl;
+
+///
+/// SDLģһЩõġ
+///
+enum WindowFlag
+{
+ WINDOW_FULLSCREEN = 1 << 1, ///< fullscreen window
+ WINDOW_OPENGL = 1 << 2, ///< window usable with OpenGL context
+ WINDOW_SHOWN = 1 << 3, ///< window is visible
+ WINDOW_HIDDEN = 1 << 4, ///< window is not visible
+ WINDOW_BORDERLESS = 1 << 5, ///< no window decoration
+ WINDOW_RESIZABLE = 1 << 6, ///< window can be resized
+ WINDOW_MINIMIZED = 1 << 7, ///< window is minimized
+ WINDOW_MAXIMIZED = 1 << 8, ///< window is maximized
+ WINDOW_INPUT_GRABBED = 1 << 9, ///< window has grabbed input focus
+ WINDOW_INPUT_FOCUS = 1 << 10, ///< window has input focus
+ WINDOW_MOUSE_FOCUS = 1 << 11, ///< window has mouse focus
+ WINDOW_ALLOW_HIGHDPI = 1 << 12, ///< window should be created in high-DPI mode if supported.
+ ///< On macOS NSHighResolutionCapable must be set true in the
+ ///< application's Info.plist for this to have any effect.
+ WINDOW_MOUSE_CAPTURE = 1 << 13, ///< window has mouse captured (unrelated to INPUT_GRABBED)
+ WINDOW_ALWAYS_ON_TOP = 1 << 14, ///< window should always be above others
+};
+
+/// Windowʼ
+struct WindowConfig
+{
+ uint width, height; ///< ߴ
+ int x, y; ///< ڳʼ
+ std::string title; ///<
+ bool vsync; ///< ֱͬ
+ AEImage::ImageData* icon; ///< ͼ
+ bool show; ///< Ƿʾ
+ int flag; ///< ڱ
+};
+
+///
+/// ϷĵڣrunnerֻҪһڡͬĿͻʵִ˽ӿڲֶעᵽlua༭
+/// ᵼ࣬޽ӵ༭ⴰϡ
+///
+class Window ASURA_FINAL
+ : public AEScripting::Portable<Window, AEGraphics::RenderTarget>
+ , public Singleton<Window>
{
- namespace Window
- {
-
- class WindowImpl;
-
- ///
- /// SDLģһЩõġ
- ///
- enum WindowFlag
- {
- WINDOW_FULLSCREEN = 1 << 1, ///< fullscreen window
- WINDOW_OPENGL = 1 << 2, ///< window usable with OpenGL context
- WINDOW_SHOWN = 1 << 3, ///< window is visible
- WINDOW_HIDDEN = 1 << 4, ///< window is not visible
- WINDOW_BORDERLESS = 1 << 5, ///< no window decoration
- WINDOW_RESIZABLE = 1 << 6, ///< window can be resized
- WINDOW_MINIMIZED = 1 << 7, ///< window is minimized
- WINDOW_MAXIMIZED = 1 << 8, ///< window is maximized
- WINDOW_INPUT_GRABBED = 1 << 9, ///< window has grabbed input focus
- WINDOW_INPUT_FOCUS = 1 << 10, ///< window has input focus
- WINDOW_MOUSE_FOCUS = 1 << 11, ///< window has mouse focus
- WINDOW_ALLOW_HIGHDPI = 1 << 12, ///< window should be created in high-DPI mode if supported.
- ///< On macOS NSHighResolutionCapable must be set true in the
- ///< application's Info.plist for this to have any effect.
- WINDOW_MOUSE_CAPTURE = 1 << 13, ///< window has mouse captured (unrelated to INPUT_GRABBED)
- WINDOW_ALWAYS_ON_TOP = 1 << 14, ///< window should always be above others
- };
-
- /// Windowʼ
- struct WindowConfig
- {
- uint width, height; ///< ߴ
- int x, y; ///< ڳʼ
- std::string title; ///<
- bool vsync; ///< ֱͬ
- AEImage::ImageData* icon; ///< ͼ
- bool show; ///< Ƿʾ
- int flag; ///< ڱ
- };
-
- ///
- /// ϷĵڣrunnerֻҪһڡͬĿͻʵִ˽ӿڲֶעᵽlua༭
- /// ᵼ࣬޽ӵ༭ⴰϡ
- ///
- class Window ASURA_FINAL
- : public AEScripting::Portable<Window, AEGraphics::RenderTarget>
- , public Singleton<Window>
- {
- public:
-
- /// ϷʱĴΨһģ༭õࡣ
- LUAX_DECL_SINGLETON(Window);
-
- Window();
- ~Window();
-
- /// ڡ
- bool Init(const WindowConfig& config);
- void Exit();
-
- void SetSize(uint width, uint height);
- void SetPosition(int x, int y);
- void SetTitle(const std::string& title);
- void SetIcon(AEImage::ImageData* imgData);
-
- void Show();
- void Hide();
-
- /// ǿ˫ĴڣҪչʾǰ̨
- void SwapRenderBuffer();
-
- void Clear(const AEGraphics::Color& col = AEGraphics::Color::Black) override;
- void Clear(const Math::Recti& quad, const AEGraphics::Color& col = AEGraphics::Color::Black) override;
-
- void Draw(const AEGraphics::Drawable* texture, const AEGraphics::RenderState& state) override;
- void Draw(const AEGraphics::Drawable* texture, const Math::Recti& quad, const AEGraphics::RenderState& state) override;
-
- private:
-
- WindowImpl* m_Impl;
-
- luaxport:
-
- LUAX_DECL_ENUM(WindowFlag, 0);
-
- LUAX_DECL_METHOD(_Init);
- LUAX_DECL_METHOD(_Exit);
- LUAX_DECL_METHOD(_Show);
- LUAX_DECL_METHOD(_Hide);
- LUAX_DECL_METHOD(_SetSize);
- LUAX_DECL_METHOD(_SetPosition);
- LUAX_DECL_METHOD(_SetTitle);
- LUAX_DECL_METHOD(_SetIcon);
- LUAX_DECL_METHOD(_SwapRenderBuffer);
- LUAX_DECL_METHOD(_Clear);
- LUAX_DECL_METHOD(_Draw);
-
- };
-
- using RenderWindow = Window;
-
- ASURA_ABSTRACT class WindowImpl
- {
- public:
-
- WindowImpl() {};
- virtual ~WindowImpl() {};
-
- virtual bool Init(const WindowConfig& config);
-
- virtual void SetSize(uint width, uint height) = 0;
- virtual void SetPosition(int x, int y) = 0;
- virtual void SetTitils(const std::string& title) = 0;
-
- virtual void Show() = 0;
- virtual void Hide() = 0;
-
- virtual void SwapRenderBuffer() = 0;
-
- };
+public:
+
+ /// ϷʱĴΨһģ༭õࡣ
+ LUAX_DECL_SINGLETON(Window);
+
+ Window();
+ ~Window();
+
+ /// ڡ
+ bool Init(const WindowConfig& config);
+ void Exit();
+
+ void SetSize(uint width, uint height);
+ void SetPosition(int x, int y);
+ void SetTitle(const std::string& title);
+ void SetIcon(AEImage::ImageData* imgData);
+
+ void Show();
+ void Hide();
+
+ /// ǿ˫ĴڣҪչʾǰ̨
+ void SwapRenderBuffer();
+
+ void Clear(const AEGraphics::Color& col = AEGraphics::Color::Black) override;
+ void Clear(const Math::Recti& quad, const AEGraphics::Color& col = AEGraphics::Color::Black) override;
+
+ void Draw(const AEGraphics::Drawable* texture, const AEGraphics::RenderState& state) override;
+ void Draw(const AEGraphics::Drawable* texture, const Math::Recti& quad, const AEGraphics::RenderState& state) override;
+
+private:
+
+ WindowImpl* m_Impl;
+
+luaxport:
+
+ LUAX_DECL_ENUM(WindowFlag, 0);
+
+ LUAX_DECL_METHOD(_Init);
+ LUAX_DECL_METHOD(_Exit);
+ LUAX_DECL_METHOD(_Show);
+ LUAX_DECL_METHOD(_Hide);
+ LUAX_DECL_METHOD(_SetSize);
+ LUAX_DECL_METHOD(_SetPosition);
+ LUAX_DECL_METHOD(_SetTitle);
+ LUAX_DECL_METHOD(_SetIcon);
+ LUAX_DECL_METHOD(_SwapRenderBuffer);
+ LUAX_DECL_METHOD(_Clear);
+ LUAX_DECL_METHOD(_Draw);
+
+};
+
+using RenderWindow = Window;
+
+ASURA_ABSTRACT class WindowImpl
+{
+public:
+
+ WindowImpl() {};
+ virtual ~WindowImpl() {};
+
+ virtual bool Init(const WindowConfig& config);
+
+ virtual void SetSize(uint width, uint height) = 0;
+ virtual void SetPosition(int x, int y) = 0;
+ virtual void SetTitils(const std::string& title) = 0;
+
+ virtual void Show() = 0;
+ virtual void Hide() = 0;
+
+ virtual void SwapRenderBuffer() = 0;
+
+};
- }
-}
+namespace_end
+namespace_end
namespace AEWindow = AsuraEngine::Window;