Index: VulkanGame.vcxproj
===================================================================
--- VulkanGame.vcxproj	(revision d255d52c76a1ef970df87204c3b18504d7ed2379)
+++ VulkanGame.vcxproj	(revision 85b5fecdb1b2b3249583a225657b9a52d23bc726)
@@ -143,5 +143,5 @@
     <ClCompile Include="game-gui-sdl.cpp" />
     <ClCompile Include="gui\imgui\button-imgui.cpp" />
-    <ClCompile Include="gui\imgui\ui-wdget.cpp" />
+    <ClCompile Include="gui\imgui\ui-widget.cpp" />
     <ClCompile Include="IMGUI\imgui.cpp" />
     <ClCompile Include="IMGUI\imgui_demo.cpp" />
Index: VulkanGame.vcxproj.filters
===================================================================
--- VulkanGame.vcxproj.filters	(revision d255d52c76a1ef970df87204c3b18504d7ed2379)
+++ VulkanGame.vcxproj.filters	(revision 85b5fecdb1b2b3249583a225657b9a52d23bc726)
@@ -32,5 +32,5 @@
       <Filter>IMGUI SDL Reference</Filter>
     </ClCompile>
-    <ClCompile Include="gui\imgui\ui-wdget.cpp">
+    <ClCompile Include="gui\imgui\ui-widget.cpp">
       <Filter>gui\imgui</Filter>
     </ClCompile>
Index: sdl-game.cpp
===================================================================
--- sdl-game.cpp	(revision d255d52c76a1ef970df87204c3b18504d7ed2379)
+++ sdl-game.cpp	(revision 85b5fecdb1b2b3249583a225657b9a52d23bc726)
@@ -8,4 +8,6 @@
 
 #include "logger.hpp"
+
+#include "gui/imgui/button-imgui.hpp"
 
 using namespace std;
@@ -343,5 +345,5 @@
       ImGui::NewFrame();
 
-      (this->*currentRenderScreenFn)();
+      (this->*currentRenderScreenFn)(gui->getWindowWidth(), gui->getWindowHeight());
 
       ImGui::Render();
@@ -1009,12 +1011,9 @@
 }
 
-void VulkanGame::renderMainScreen() {
-   unsigned int windowWidth = 640;
-   unsigned int windowHeight = 480;
-
+void VulkanGame::renderMainScreen(int width, int height) {
    {
       int padding = 4;
-      ImGui::SetNextWindowPos(ImVec2(-padding, -padding), ImGuiCond_Once);
-      ImGui::SetNextWindowSize(ImVec2(windowWidth + 2 * padding, windowHeight + 2 * padding), ImGuiCond_Always);
+      ImGui::SetNextWindowPos(vec2(-padding, -padding), ImGuiCond_Once);
+      ImGui::SetNextWindowSize(vec2(width + 2 * padding, height + 2 * padding), ImGuiCond_Always);
       ImGui::Begin("WndMain", nullptr,
          ImGuiWindowFlags_NoTitleBar |
@@ -1022,15 +1021,15 @@
          ImGuiWindowFlags_NoMove);
 
-      ImGui::InvisibleButton("", ImVec2(10, 80));
-      ImGui::InvisibleButton("", ImVec2(285, 18));
-      ImGui::SameLine();
-      if (ImGui::Button("New Game")) {
+      ButtonImGui btn("New Game");
+
+      ImGui::InvisibleButton("", vec2(10, height / 6));
+      if (btn.draw((width - btn.getWidth()) / 2)) {
          goToScreen(&VulkanGame::renderGameScreen);
       }
 
-      ImGui::InvisibleButton("", ImVec2(10, 15));
-      ImGui::InvisibleButton("", ImVec2(300, 18));
-      ImGui::SameLine();
-      if (ImGui::Button("Quit")) {
+      ButtonImGui btn2("Quit");
+
+      ImGui::InvisibleButton("", vec2(10, 15));
+      if (btn2.draw((width - btn2.getWidth()) / 2)) {
          quitGame();
       }
@@ -1040,8 +1039,8 @@
 }
 
-void VulkanGame::renderGameScreen() {
+void VulkanGame::renderGameScreen(int width, int height) {
    {
-      ImGui::SetNextWindowSize(ImVec2(130, 65), ImGuiCond_Once);
-      ImGui::SetNextWindowPos(ImVec2(10, 50), ImGuiCond_Once);
+      ImGui::SetNextWindowSize(vec2(130, 65), ImGuiCond_Once);
+      ImGui::SetNextWindowPos(vec2(10, 50), ImGuiCond_Once);
       ImGui::Begin("WndStats", nullptr,
          ImGuiWindowFlags_NoTitleBar |
@@ -1056,11 +1055,11 @@
 
    {
-      ImGui::SetNextWindowSize(ImVec2(250, 35), ImGuiCond_Once);
-      ImGui::SetNextWindowPos(ImVec2(380, 10), ImGuiCond_Once);
+      ImGui::SetNextWindowSize(vec2(250, 35), ImGuiCond_Once);
+      ImGui::SetNextWindowPos(vec2(width - 260, 10), ImGuiCond_Always);
       ImGui::Begin("WndMenubar", nullptr,
          ImGuiWindowFlags_NoTitleBar |
          ImGuiWindowFlags_NoResize |
          ImGuiWindowFlags_NoMove);
-      ImGui::InvisibleButton("", ImVec2(155, 18));
+      ImGui::InvisibleButton("", vec2(155, 18));
       ImGui::SameLine();
       if (ImGui::Button("Main Menu")) {
@@ -1071,6 +1070,6 @@
 
    {
-      ImGui::SetNextWindowSize(ImVec2(200, 200), ImGuiCond_Once);
-      ImGui::SetNextWindowPos(ImVec2(430, 60), ImGuiCond_Once);
+      ImGui::SetNextWindowSize(vec2(200, 200), ImGuiCond_Once);
+      ImGui::SetNextWindowPos(vec2(width - 210, 60), ImGuiCond_Always);
       ImGui::Begin("WndDebug", nullptr,
          ImGuiWindowFlags_NoTitleBar |
@@ -1089,4 +1088,5 @@
 }
 
+// TODO: Probably turn this into a UI widget class
 void VulkanGame::renderGuiValueList(vector<UIValue>& values) {
    float maxWidth = 0.0f;
@@ -1126,6 +1126,10 @@
 }
 
-void VulkanGame::goToScreen(void (VulkanGame::* renderScreenFn)()) {
+void VulkanGame::goToScreen(void (VulkanGame::* renderScreenFn)(int width, int height)) {
    currentRenderScreenFn = renderScreenFn;
+
+   // TODO: Maybe just set shouldRecreateSwapChain to true instead. Check this render loop logic
+   // to make sure there'd be no issues
+   //recreateSwapChain();
 }
 
Index: sdl-game.hpp
===================================================================
--- sdl-game.hpp	(revision d255d52c76a1ef970df87204c3b18504d7ed2379)
+++ sdl-game.hpp	(revision 85b5fecdb1b2b3249583a225657b9a52d23bc726)
@@ -109,5 +109,6 @@
       /*** High-level vars ***/
 
-      void (VulkanGame::* currentRenderScreenFn)();
+      // TODO: Just typedef the type of this function to RenderScreenFn or something since it's used in a few places
+      void (VulkanGame::* currentRenderScreenFn)(int width, int height);
 
       map<string, vector<UIValue>> valueLists;
@@ -158,11 +159,11 @@
       /*** High-level functions ***/
 
-      void renderMainScreen();
-      void renderGameScreen();
+      void renderMainScreen(int width, int height);
+      void renderGameScreen(int width, int height);
 
       void initGuiValueLists(map<string, vector<UIValue>>& valueLists);
       void renderGuiValueList(vector<UIValue>& values);
 
-      void goToScreen(void (VulkanGame::* renderScreenFn)());
+      void goToScreen(void (VulkanGame::* renderScreenFn)(int width, int height));
       void quitGame();
 
Index: vulkan-game.cpp
===================================================================
--- vulkan-game.cpp	(revision d255d52c76a1ef970df87204c3b18504d7ed2379)
+++ vulkan-game.cpp	(revision 85b5fecdb1b2b3249583a225657b9a52d23bc726)
@@ -11,5 +11,4 @@
 
 #include "logger.hpp"
-
 #include "utils.hpp"
 
