Compare commits

...

11 Commits

3 changed files with 118 additions and 23 deletions

View File

@@ -50,7 +50,7 @@ bool Application::Init() {
m_AppData.windowdata.eventCallback = [this](Event &event) { RaiseEvent(event); }; m_AppData.windowdata.eventCallback = [this](Event &event) { RaiseEvent(event); };
m_Window.push_back(std::make_shared<Window>(m_AppData.windowdata)); m_Window.push_back(std::make_shared<Window>(m_AppData.windowdata));
bool isSuccessful = m_Window[0]->Create(); bool isSuccessful = m_Window[0]->Create({m_AppData.windowdata.windowFlags});
if (!isSuccessful) { if (!isSuccessful) {
Shutdown(); Shutdown();
return false; return false;
@@ -138,8 +138,8 @@ void Application::Run() {
if (!m_isRunning) { if (!m_isRunning) {
break; break;
} }
// Rendering
// Rendering
for (auto &layer : m_LayerStack) { for (auto &layer : m_LayerStack) {
layer->OnRender(); layer->OnRender();
} }
@@ -147,7 +147,7 @@ void Application::Run() {
m_ImGui->Begin(); m_ImGui->Begin();
SDL_SetRenderScale(m_Renderer, io.DisplayFramebufferScale.x, io.DisplayFramebufferScale.y); SDL_SetRenderScale(m_Renderer, io.DisplayFramebufferScale.x, io.DisplayFramebufferScale.y);
SDL_SetRenderDrawColor(m_Renderer, (Uint8)111, (Uint8)232, (Uint8)168, (Uint8)0); SDL_SetRenderDrawColor(m_Renderer, (Uint8)111, (Uint8)232, (Uint8)168, (Uint8)255);
SDL_RenderClear(m_Renderer); SDL_RenderClear(m_Renderer);
for (auto &layer : m_LayerStack) { for (auto &layer : m_LayerStack) {

View File

@@ -1,25 +1,20 @@
#include "Window.h" #include "Window.h"
#include "Application.h"
#include "InputEvents.h" #include "InputEvents.h"
#include "Log.h" #include "Log.h"
#include "SDL3/SDL_events.h" #include "SDL3/SDL_events.h"
#include "SDL3/SDL_mouse.h" #include "SDL3/SDL_mouse.h"
#include "SDL3/SDL_video.h" #include "SDL3/SDL_video.h"
#include "WindowEvents.h" #include "WindowEvents.h"
#include <span>
namespace SakuraVNE { namespace SakuraVNE {
Window::Window(const WindowData &data) : m_Data(data) {} Window::Window(const WindowData &data) : m_Data(data), m_Flags(0) {}
Window::~Window() { Destroy(); } Window::~Window() { Destroy(); }
bool Window::Create(std::span<const SDL_WindowFlags> flags) { bool Window::Create(const SDL_WindowFlags flags) {
SDL_WindowFlags windowFlags = (SDL_WindowFlags)(SDL_WINDOW_RESIZABLE | SDL_WINDOW_HIGH_PIXEL_DENSITY); m_Flags |= flags;
for (auto &flag : flags) { m_Handle = SDL_CreateWindow(m_Data.title.c_str(), m_Data.width, m_Data.height, m_Flags);
windowFlags |= flag;
}
m_Handle = SDL_CreateWindow(m_Data.title.c_str(), m_Data.width, m_Data.height, windowFlags);
if (!m_Handle) { if (!m_Handle) {
LOG_ERROR("SDL window could not be created! {0}", SDL_GetError()); LOG_ERROR("SDL window could not be created! {0}", SDL_GetError());
@@ -94,6 +89,106 @@ void Window::ProcessEvent(const SDL_Event &event) {
} }
} }
void Window::AddFlags(std::span<const SDL_WindowFlags> flags) {
for (auto &flag : flags) {
switch (flag) {
case SDL_WINDOW_FULLSCREEN:
SDL_SetWindowFullscreen(m_Handle, true);
break;
case SDL_WINDOW_HIDDEN:
SDL_ShowWindow(m_Handle);
break;
case SDL_WINDOW_BORDERLESS:
SDL_SetWindowBordered(m_Handle, false);
break;
case SDL_WINDOW_RESIZABLE:
SDL_SetWindowResizable(m_Handle, true);
break;
case SDL_WINDOW_MINIMIZED:
SDL_MinimizeWindow(m_Handle);
break;
case SDL_WINDOW_MAXIMIZED:
SDL_MaximizeWindow(m_Handle);
break;
case SDL_WINDOW_MOUSE_GRABBED:
SDL_SetWindowMouseGrab(m_Handle, true);
break;
case SDL_WINDOW_MOUSE_CAPTURE:
SDL_SetWindowMouseGrab(m_Handle, true);
break;
case SDL_WINDOW_MOUSE_RELATIVE_MODE:
SDL_SetWindowRelativeMouseMode(m_Handle, true);
break;
case SDL_WINDOW_MODAL:
SDL_SetWindowModal(m_Handle, true);
break;
case SDL_WINDOW_ALWAYS_ON_TOP:
SDL_SetWindowAlwaysOnTop(m_Handle, true);
break;
case SDL_WINDOW_KEYBOARD_GRABBED:
SDL_SetWindowKeyboardGrab(m_Handle, true);
break;
case SDL_WINDOW_NOT_FOCUSABLE:
SDL_SetWindowFocusable(m_Handle, false);
break;
default:
LOG_WARN("You can only use this when creating a window or the flag is readonly");
break;
}
m_Flags |= flag;
}
}
void Window::RemoveFlags(std::span<const SDL_WindowFlags> flags) {
for (auto &flag : flags) {
switch (flag) {
case SDL_WINDOW_FULLSCREEN:
SDL_SetWindowFullscreen(m_Handle, false);
break;
case SDL_WINDOW_HIDDEN:
SDL_HideWindow(m_Handle);
break;
case SDL_WINDOW_BORDERLESS:
SDL_SetWindowBordered(m_Handle, true);
break;
case SDL_WINDOW_RESIZABLE:
SDL_SetWindowResizable(m_Handle, false);
break;
case SDL_WINDOW_MINIMIZED:
case SDL_WINDOW_MAXIMIZED:
SDL_RestoreWindow(m_Handle);
break;
case SDL_WINDOW_MOUSE_GRABBED:
SDL_SetWindowMouseGrab(m_Handle, false);
break;
case SDL_WINDOW_MOUSE_CAPTURE:
SDL_SetWindowMouseGrab(m_Handle, false);
break;
case SDL_WINDOW_MOUSE_RELATIVE_MODE:
SDL_SetWindowRelativeMouseMode(m_Handle, false);
break;
case SDL_WINDOW_MODAL:
SDL_SetWindowModal(m_Handle, false);
break;
case SDL_WINDOW_ALWAYS_ON_TOP:
SDL_SetWindowAlwaysOnTop(m_Handle, false);
break;
case SDL_WINDOW_KEYBOARD_GRABBED:
SDL_SetWindowKeyboardGrab(m_Handle, false);
break;
case SDL_WINDOW_NOT_FOCUSABLE:
SDL_SetWindowFocusable(m_Handle, true);
break;
default:
LOG_WARN("You can only use this when creating a window or the flag is readonly");
break;
}
m_Flags &= flag;
}
}
void Window::Resize() { void Window::Resize() {
SDL_GetWindowSize(m_Handle, &m_Data.width, &m_Data.height); SDL_GetWindowSize(m_Handle, &m_Data.width, &m_Data.height);
SDL_SetWindowSize(m_Handle, m_Data.width, m_Data.height); SDL_SetWindowSize(m_Handle, m_Data.width, m_Data.height);
@@ -114,13 +209,13 @@ void Window::RaiseEvent(Event &event) {
// TODO: this need testing because i am really not sure this is correct // TODO: this need testing because i am really not sure this is correct
// should this be static or go somewhere else | probably in application? // should this be static or go somewhere else | probably in application?
auto Window::GetMousePos() const { auto Window::GetMousePos() {
struct result { struct result {
float *x; float x;
float *y; float y;
}; };
SDL_GetMouseState(m_MouseXPos, m_MouseYPos); SDL_GetMouseState(&m_MouseXPos, &m_MouseYPos);
return result{m_MouseXPos, m_MouseYPos}; return result{m_MouseXPos, m_MouseYPos};
} }

View File

@@ -9,6 +9,7 @@
namespace SakuraVNE { namespace SakuraVNE {
struct WindowData { struct WindowData {
SDL_WindowFlags windowFlags = 0;
std::string title = "Window Title"; std::string title = "Window Title";
int width = 1280; int width = 1280;
int height = 720; int height = 720;
@@ -26,13 +27,11 @@ public:
Window(const WindowData &data = WindowData()); Window(const WindowData &data = WindowData());
~Window(); ~Window();
bool Create(std::span<const SDL_WindowFlags> flags = {}); bool Create(const SDL_WindowFlags flags = 0);
void Destroy(); void Destroy();
void Update(); void Update();
// TODO: implement
void AddFlags(std::span<const SDL_WindowFlags> flags = {}); void AddFlags(std::span<const SDL_WindowFlags> flags = {});
// TODO: implement
void RemoveFlags(std::span<const SDL_WindowFlags> flags = {}); void RemoveFlags(std::span<const SDL_WindowFlags> flags = {});
void Resize(); void Resize();
void ProcessEvent(const SDL_Event &event); void ProcessEvent(const SDL_Event &event);
@@ -40,15 +39,16 @@ public:
void RaiseEvent(Event &event); void RaiseEvent(Event &event);
bool ShouldClose() const; bool ShouldClose() const;
auto GetMousePos() const; auto GetMousePos();
SDL_Window *GetHandle() const { return m_Handle; } SDL_Window *GetHandle() const { return m_Handle; }
private: private:
WindowData m_Data; WindowData m_Data;
SDL_Window *m_Handle = nullptr; SDL_Window *m_Handle = nullptr;
float *m_MouseXPos = nullptr; SDL_WindowFlags m_Flags;
float *m_MouseYPos = nullptr; float m_MouseXPos;
float m_MouseYPos;
}; };
} // namespace SakuraVNE } // namespace SakuraVNE