refactor: minor window module refactors
Some checks failed
continuous-integration/drone/push Build is failing
Some checks failed
continuous-integration/drone/push Build is failing
This commit is contained in:
parent
ee4483bfbb
commit
60ae1d52f7
4 changed files with 54 additions and 46 deletions
|
@ -12,7 +12,7 @@ public:
|
||||||
Mirror()
|
Mirror()
|
||||||
{
|
{
|
||||||
get_window().set_properties(
|
get_window().set_properties(
|
||||||
WindowProperties {
|
Window::Properties {
|
||||||
.title = "Mirror",
|
.title = "Mirror",
|
||||||
.size = glm::uvec2(1280u, 720u),
|
.size = glm::uvec2(1280u, 720u),
|
||||||
.vsync = true,
|
.vsync = true,
|
||||||
|
|
|
@ -16,18 +16,23 @@ public:
|
||||||
|
|
||||||
~lWindow() override;
|
~lWindow() override;
|
||||||
|
|
||||||
|
lWindow(lWindow &&) = delete;
|
||||||
|
|
||||||
|
lWindow(const lWindow &) = delete;
|
||||||
|
|
||||||
|
auto operator=(lWindow &&) -> lWindow & = delete;
|
||||||
|
|
||||||
|
auto operator=(const lWindow &) -> lWindow & = delete;
|
||||||
|
|
||||||
void poll_events() override;
|
void poll_events() override;
|
||||||
|
|
||||||
void on_event(const Event &event) override;
|
void on_event(const Event &event) override;
|
||||||
|
|
||||||
void set_properties(
|
void set_properties(const Properties &properties, bool overrideVisibility = false) override;
|
||||||
const WindowProperties &properties,
|
|
||||||
bool overrideVisibility = false
|
|
||||||
) override;
|
|
||||||
|
|
||||||
void set_title(const std::string &title) override;
|
void set_title(const std::string &title) override;
|
||||||
|
|
||||||
void set_size(const glm::uvec2 &size, bool additive = false) override;
|
void set_size(const glm::uvec2 &size) override;
|
||||||
|
|
||||||
void set_v_sync(bool vsync, bool toggle = false) override;
|
void set_v_sync(bool vsync, bool toggle = false) override;
|
||||||
|
|
||||||
|
@ -39,13 +44,17 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void on_window_resize(const WindowResizedEvent &event);
|
||||||
|
|
||||||
|
void bind_glfw_events();
|
||||||
|
|
||||||
GLFWwindow *m_handle { nullptr };
|
GLFWwindow *m_handle { nullptr };
|
||||||
|
|
||||||
std::function<void(Event &)> m_event_callback;
|
std::function<void(Event &)> m_event_callback;
|
||||||
|
|
||||||
void on_window_resize(const WindowResizedEvent &event);
|
Properties m_properties {};
|
||||||
|
|
||||||
void bind_glfw_events();
|
bool b_Closed {};
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace lt
|
} // namespace lt
|
||||||
|
|
|
@ -6,7 +6,11 @@ namespace lt {
|
||||||
|
|
||||||
class Event;
|
class Event;
|
||||||
|
|
||||||
struct WindowProperties
|
|
||||||
|
class Window
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
struct Properties
|
||||||
{
|
{
|
||||||
std::string title;
|
std::string title;
|
||||||
|
|
||||||
|
@ -15,32 +19,29 @@ struct WindowProperties
|
||||||
bool vsync, visible;
|
bool vsync, visible;
|
||||||
};
|
};
|
||||||
|
|
||||||
class Window
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
static Scope<Window> create(const std::function<void(Event &)> &callback);
|
static Scope<Window> create(const std::function<void(Event &)> &callback);
|
||||||
|
|
||||||
Window() = default;
|
Window() = default;
|
||||||
|
|
||||||
|
virtual ~Window();
|
||||||
|
|
||||||
|
Window(Window &&) = delete;
|
||||||
|
|
||||||
Window(const Window &) = delete;
|
Window(const Window &) = delete;
|
||||||
|
|
||||||
Window &operator=(const Window &) = delete;
|
auto operator=(Window &&) -> Window & = delete;
|
||||||
|
|
||||||
virtual ~Window();
|
auto operator=(const Window &) -> Window & = delete;
|
||||||
|
|
||||||
virtual void poll_events() = 0;
|
virtual void poll_events() = 0;
|
||||||
|
|
||||||
virtual void on_event(const Event &event) = 0;
|
virtual void on_event(const Event &event) = 0;
|
||||||
|
|
||||||
virtual void set_properties(
|
virtual void set_properties(const Properties &properties, bool affectVisibility = false) = 0;
|
||||||
const WindowProperties &properties,
|
|
||||||
bool affectVisibility = false
|
|
||||||
) = 0;
|
|
||||||
|
|
||||||
virtual void set_title(const std::string &title) = 0;
|
virtual void set_title(const std::string &title) = 0;
|
||||||
|
|
||||||
/** pass 0 for width or height for single dimension resizing */
|
virtual void set_size(const glm::uvec2 &size) = 0;
|
||||||
virtual void set_size(const glm::uvec2 &size, bool additive = false) = 0;
|
|
||||||
|
|
||||||
void close()
|
void close()
|
||||||
{
|
{
|
||||||
|
@ -51,7 +52,7 @@ public:
|
||||||
|
|
||||||
virtual void set_visibility(bool visible, bool toggle = false) = 0;
|
virtual void set_visibility(bool visible, bool toggle = false) = 0;
|
||||||
|
|
||||||
[[nodiscard]] auto get_properties() const -> const WindowProperties &
|
[[nodiscard]] auto get_properties() const -> const Properties &
|
||||||
{
|
{
|
||||||
return m_properties;
|
return m_properties;
|
||||||
}
|
}
|
||||||
|
@ -84,7 +85,13 @@ public:
|
||||||
virtual auto get_handle() -> void * = 0;
|
virtual auto get_handle() -> void * = 0;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
WindowProperties m_properties {};
|
auto get_properties_handle() -> Properties &
|
||||||
|
{
|
||||||
|
return m_properties;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
Properties m_properties {};
|
||||||
|
|
||||||
bool b_Closed {};
|
bool b_Closed {};
|
||||||
};
|
};
|
||||||
|
|
|
@ -8,8 +8,7 @@
|
||||||
|
|
||||||
namespace lt {
|
namespace lt {
|
||||||
|
|
||||||
Window::~Window()
|
Window::~Window() = default;
|
||||||
= default;
|
|
||||||
|
|
||||||
auto Window::create(const std::function<void(Event &)> &callback) -> Scope<Window>
|
auto Window::create(const std::function<void(Event &)> &callback) -> Scope<Window>
|
||||||
{
|
{
|
||||||
|
@ -17,19 +16,18 @@ auto Window::create(const std::function<void(Event &)> &callback) -> Scope<Windo
|
||||||
}
|
}
|
||||||
|
|
||||||
lWindow::lWindow(std::function<void(Event &)> callback)
|
lWindow::lWindow(std::function<void(Event &)> callback)
|
||||||
: m_handle(glfwCreateWindow(1u, 1u, "", nullptr, nullptr)), m_event_callback(std::move(std::move(callback)))
|
: m_handle(glfwCreateWindow(1u, 1u, "", nullptr, nullptr))
|
||||||
|
, m_event_callback(std::move(std::move(callback)))
|
||||||
{
|
{
|
||||||
// init glfw
|
ensure(glfwInit(), "Failed to initialize 'glfw'");
|
||||||
ensure(glfwInit(), "lWindow::lWindow: failed to initialize 'glfw'");
|
|
||||||
|
|
||||||
// create window
|
|
||||||
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
|
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
|
||||||
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 5);
|
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 5);
|
||||||
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
|
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
|
||||||
glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE);
|
glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE);
|
||||||
|
|
||||||
|
|
||||||
ensure(m_handle, "lWindow::lWindow: failed to create 'GLFWwindow'");
|
ensure(m_handle, "Failed to create 'GLFWwindow'");
|
||||||
|
|
||||||
glfwSetWindowUserPointer(m_handle, &m_event_callback);
|
glfwSetWindowUserPointer(m_handle, &m_event_callback);
|
||||||
bind_glfw_events();
|
bind_glfw_events();
|
||||||
|
@ -56,6 +54,8 @@ void lWindow::on_event(const Event &event)
|
||||||
case EventType::WindowResized:
|
case EventType::WindowResized:
|
||||||
on_window_resize(dynamic_cast<const WindowResizedEvent &>(event));
|
on_window_resize(dynamic_cast<const WindowResizedEvent &>(event));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -64,8 +64,7 @@ void lWindow::on_window_resize(const WindowResizedEvent &event)
|
||||||
m_properties.size = event.get_size();
|
m_properties.size = event.get_size();
|
||||||
}
|
}
|
||||||
|
|
||||||
void lWindow::
|
void lWindow::set_properties(const Properties &properties, bool overrideVisibility /* = false */)
|
||||||
set_properties(const WindowProperties &properties, bool overrideVisibility /* = false */)
|
|
||||||
{
|
{
|
||||||
// save the visibility status and re-assign if 'overrideVisibility' is false
|
// save the visibility status and re-assign if 'overrideVisibility' is false
|
||||||
auto visible = overrideVisibility ? properties.visible : m_properties.visible;
|
auto visible = overrideVisibility ? properties.visible : m_properties.visible;
|
||||||
|
@ -86,17 +85,10 @@ void lWindow::set_title(const std::string &title)
|
||||||
glfwSetWindowTitle(m_handle, title.c_str());
|
glfwSetWindowTitle(m_handle, title.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
void lWindow::set_size(const glm::uvec2 &size, bool additive /* = false */)
|
void lWindow::set_size(const glm::uvec2 &size)
|
||||||
{
|
{
|
||||||
m_properties.size.x = size.x == 0u ? m_properties.size.x :
|
m_properties.size = size;
|
||||||
additive ? m_properties.size.x + size.x :
|
glfwSetWindowSize(m_handle, static_cast<int>(size.x), static_cast<int>(size.y));
|
||||||
size.x;
|
|
||||||
m_properties.size.y = size.y == 0u ? m_properties.size.y :
|
|
||||||
additive ? m_properties.size.y + size.y :
|
|
||||||
size.y;
|
|
||||||
|
|
||||||
|
|
||||||
glfwSetWindowSize(m_handle, size.x, size.y);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void lWindow::set_v_sync(bool vsync, bool toggle /* = false */)
|
void lWindow::set_v_sync(bool vsync, bool toggle /* = false */)
|
||||||
|
|
Loading…
Add table
Reference in a new issue