From 03b7e7ccf18c6dea57a2bdcfcf4a1f80f66665f7 Mon Sep 17 00:00:00 2001 From: Joey Pollack Date: Thu, 7 Apr 2022 13:51:18 -0400 Subject: [PATCH] Bugfix: Map canvas now paints correctly when scrolled --- docs/Bugs.todo | 4 +- scripts/cmconfig.bat | 4 +- src/internal_libs/gui/gui.cpp | 493 ++++++++++++++++++ src/internal_libs/gui/gui.h | 27 + .../editor/contents/content_manager.cpp | 2 + .../editor/contents/content_manager.h | 2 + src/run_modes/editor/contents/editor_asset.h | 1 + src/run_modes/editor/contents/tile_set.cpp | 4 +- src/run_modes/editor/editor.cpp | 68 +++ src/run_modes/editor/editor.h | 1 + src/run_modes/editor/project.cpp | 1 + .../editor/tools/map_editor/map_editor.cpp | 2 +- .../tools/map_editor/panels/map_canvas.cpp | 7 +- test_data/imgui.ini | 172 ++---- 14 files changed, 666 insertions(+), 122 deletions(-) diff --git a/docs/Bugs.todo b/docs/Bugs.todo index f215bb7..1e16286 100644 --- a/docs/Bugs.todo +++ b/docs/Bugs.todo @@ -3,6 +3,8 @@ High Importance: ✔ The Map Editor does not get the tile maps when a project is opened @high @done (3/3/2022, 2:47:41 PM) ✔ Tile Set IDs (as opposed to the Asset ID) is not saved or loaded yet @high @done (3/11/2022, 2:10:30 PM) ✔ Had to flip the V component of the UVs for the sprite vertices. This fixes the partial image drawing but will need to be accounted for in other places in the editor. @done (3/14/2022, 1:46:48 PM) + ✔ @high Editor asset file paths are saved as absolute paths. They need to be relative to the project root. @done(22-03-18 20:41) Medium Importance: - ☐ Map Editor does not grab tile sets if the Map Editor is opened before a project is loaded \ No newline at end of file + ☐ Map Editor does not grab tile sets if the Map Editor is opened before a project is loaded + ✔ Map Editor paints the wrong tiles when scrolling with the middle mouse button (this may have to do with the parent window having the scroll bar) @done(22-04-07 13:50) \ No newline at end of file diff --git a/scripts/cmconfig.bat b/scripts/cmconfig.bat index f61d918..0e8c621 100644 --- a/scripts/cmconfig.bat +++ b/scripts/cmconfig.bat @@ -5,8 +5,8 @@ REM ex. scripts/cmconfig.bat IF "%~1" == "noedit" ( echo "no editor build" -cmake -Wno-dev -DNO_EDITOR=ON -DGLFW_BUILD_DOCS=OFF -DBOX2D_BUILD_TESTBED=OFF -B build/ -S . -G "Visual Studio 16 2019" -A x64 +cmake -Wno-dev -DNO_EDITOR=ON -DGLFW_BUILD_DOCS=OFF -DBOX2D_BUILD_TESTBED=OFF -B build/ -S . -G "Visual Studio 17 2022" -A x64 ) ELSE ( echo "WITH EDITOR" -cmake -Wno-dev -DNO_EDITOR=OFF -DGLFW_BUILD_DOCS=OFF -DBOX2D_BUILD_TESTBED=OFF -B build/ -S . -G "Visual Studio 16 2019" -A x64 +cmake -Wno-dev -DNO_EDITOR=OFF -DGLFW_BUILD_DOCS=OFF -DBOX2D_BUILD_TESTBED=OFF -B build/ -S . -G "Visual Studio 17 2022" -A x64 ) \ No newline at end of file diff --git a/src/internal_libs/gui/gui.cpp b/src/internal_libs/gui/gui.cpp index b5d11f4..f6a5a97 100644 --- a/src/internal_libs/gui/gui.cpp +++ b/src/internal_libs/gui/gui.cpp @@ -64,6 +64,8 @@ namespace lunarium // Setup Dear ImGui style ImGui::StyleColorsDark(); + mpBaseStyle = new ImGuiStyle; + memcpy(mpBaseStyle, &ImGui::GetStyle(), sizeof(ImGuiStyle)); //ImGui::StyleColorsClassic(); @@ -90,6 +92,8 @@ namespace lunarium void GUI::Shutdown() { + delete mpBaseStyle; + mpBaseStyle = nullptr; ImGui_ImplOpenGL3_Shutdown(); ImGui_ImplGlfw_Shutdown(); ImGui::DestroyContext(); @@ -133,4 +137,493 @@ namespace lunarium ImGui::ShowDemoWindow(&show); } + + + void GUI::SetStyle(GuiStyle style) + { + // Reset the style + ImGuiStyle* igstyle = &ImGui::GetStyle(); + memcpy(igstyle, mpBaseStyle, sizeof(ImGuiStyle)); + + // Apply the new style + switch (style) + { + case GuiStyle::STYLE_DEFAULT_CLASSIC: + ImGui::StyleColorsClassic(); + break; + + case GuiStyle::STYLE_DEFAULT_LIGHT: + ImGui::StyleColorsLight(); + break; + + case GuiStyle::STYLE_DEFAULT_DARK: + ImGui::StyleColorsDark(); + break; + + case GuiStyle::STYLE_DEEP_DARK: + EmbraceTheDarkness(); + break; + + case GuiStyle::STYLE_RED_DARK: + RedDark(); + break; + + case GuiStyle::STYLE_GREEN_BLUE: + GreenBlue(); + break; + + case GuiStyle::STYLE_OVERSHIFTED_DARK: + OverShiftedDark(); + break; + + case GuiStyle::STYLE_CHARCOAL: + Charcoal(); + break; + + case GuiStyle::STYLE_CORPORATE_GRAY: + CorporateGrey(); + break; + + case GuiStyle::STYLE_CORPORATE_GRAY_3D: + CorporateGrey(1); + break; + } + } + + void GUI::EmbraceTheDarkness() + { + // Theme By janekb04 + // https://github.com/ocornut/imgui/issues/707#issuecomment-917151020 + + ImVec4* colors = ImGui::GetStyle().Colors; + colors[ImGuiCol_Text] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f); + colors[ImGuiCol_TextDisabled] = ImVec4(0.50f, 0.50f, 0.50f, 1.00f); + colors[ImGuiCol_WindowBg] = ImVec4(0.10f, 0.10f, 0.10f, 1.00f); + colors[ImGuiCol_ChildBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f); + colors[ImGuiCol_PopupBg] = ImVec4(0.19f, 0.19f, 0.19f, 0.92f); + colors[ImGuiCol_Border] = ImVec4(0.19f, 0.19f, 0.19f, 0.29f); + colors[ImGuiCol_BorderShadow] = ImVec4(0.00f, 0.00f, 0.00f, 0.24f); + colors[ImGuiCol_FrameBg] = ImVec4(0.05f, 0.05f, 0.05f, 0.54f); + colors[ImGuiCol_FrameBgHovered] = ImVec4(0.19f, 0.19f, 0.19f, 0.54f); + colors[ImGuiCol_FrameBgActive] = ImVec4(0.20f, 0.22f, 0.23f, 1.00f); + colors[ImGuiCol_TitleBg] = ImVec4(0.00f, 0.00f, 0.00f, 1.00f); + colors[ImGuiCol_TitleBgActive] = ImVec4(0.06f, 0.06f, 0.06f, 1.00f); + colors[ImGuiCol_TitleBgCollapsed] = ImVec4(0.00f, 0.00f, 0.00f, 1.00f); + colors[ImGuiCol_MenuBarBg] = ImVec4(0.14f, 0.14f, 0.14f, 1.00f); + colors[ImGuiCol_ScrollbarBg] = ImVec4(0.05f, 0.05f, 0.05f, 0.54f); + colors[ImGuiCol_ScrollbarGrab] = ImVec4(0.34f, 0.34f, 0.34f, 0.54f); + colors[ImGuiCol_ScrollbarGrabHovered] = ImVec4(0.40f, 0.40f, 0.40f, 0.54f); + colors[ImGuiCol_ScrollbarGrabActive] = ImVec4(0.56f, 0.56f, 0.56f, 0.54f); + colors[ImGuiCol_CheckMark] = ImVec4(0.33f, 0.67f, 0.86f, 1.00f); + colors[ImGuiCol_SliderGrab] = ImVec4(0.34f, 0.34f, 0.34f, 0.54f); + colors[ImGuiCol_SliderGrabActive] = ImVec4(0.56f, 0.56f, 0.56f, 0.54f); + colors[ImGuiCol_Button] = ImVec4(0.05f, 0.05f, 0.05f, 0.54f); + colors[ImGuiCol_ButtonHovered] = ImVec4(0.19f, 0.19f, 0.19f, 0.54f); + colors[ImGuiCol_ButtonActive] = ImVec4(0.20f, 0.22f, 0.23f, 1.00f); + colors[ImGuiCol_Header] = ImVec4(0.00f, 0.00f, 0.00f, 0.52f); + colors[ImGuiCol_HeaderHovered] = ImVec4(0.00f, 0.00f, 0.00f, 0.36f); + colors[ImGuiCol_HeaderActive] = ImVec4(0.20f, 0.22f, 0.23f, 0.33f); + colors[ImGuiCol_Separator] = ImVec4(0.28f, 0.28f, 0.28f, 0.29f); + colors[ImGuiCol_SeparatorHovered] = ImVec4(0.44f, 0.44f, 0.44f, 0.29f); + colors[ImGuiCol_SeparatorActive] = ImVec4(0.40f, 0.44f, 0.47f, 1.00f); + colors[ImGuiCol_ResizeGrip] = ImVec4(0.28f, 0.28f, 0.28f, 0.29f); + colors[ImGuiCol_ResizeGripHovered] = ImVec4(0.44f, 0.44f, 0.44f, 0.29f); + colors[ImGuiCol_ResizeGripActive] = ImVec4(0.40f, 0.44f, 0.47f, 1.00f); + colors[ImGuiCol_Tab] = ImVec4(0.00f, 0.00f, 0.00f, 0.52f); + colors[ImGuiCol_TabHovered] = ImVec4(0.14f, 0.14f, 0.14f, 1.00f); + colors[ImGuiCol_TabActive] = ImVec4(0.20f, 0.20f, 0.20f, 0.36f); + colors[ImGuiCol_TabUnfocused] = ImVec4(0.00f, 0.00f, 0.00f, 0.52f); + colors[ImGuiCol_TabUnfocusedActive] = ImVec4(0.14f, 0.14f, 0.14f, 1.00f); + colors[ImGuiCol_DockingPreview] = ImVec4(0.33f, 0.67f, 0.86f, 1.00f); + colors[ImGuiCol_DockingEmptyBg] = ImVec4(1.00f, 0.00f, 0.00f, 1.00f); + colors[ImGuiCol_PlotLines] = ImVec4(1.00f, 0.00f, 0.00f, 1.00f); + colors[ImGuiCol_PlotLinesHovered] = ImVec4(1.00f, 0.00f, 0.00f, 1.00f); + colors[ImGuiCol_PlotHistogram] = ImVec4(1.00f, 0.00f, 0.00f, 1.00f); + colors[ImGuiCol_PlotHistogramHovered] = ImVec4(1.00f, 0.00f, 0.00f, 1.00f); + colors[ImGuiCol_TableHeaderBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.52f); + colors[ImGuiCol_TableBorderStrong] = ImVec4(0.00f, 0.00f, 0.00f, 0.52f); + colors[ImGuiCol_TableBorderLight] = ImVec4(0.28f, 0.28f, 0.28f, 0.29f); + colors[ImGuiCol_TableRowBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f); + colors[ImGuiCol_TableRowBgAlt] = ImVec4(1.00f, 1.00f, 1.00f, 0.06f); + colors[ImGuiCol_TextSelectedBg] = ImVec4(0.20f, 0.22f, 0.23f, 1.00f); + colors[ImGuiCol_DragDropTarget] = ImVec4(0.33f, 0.67f, 0.86f, 1.00f); + colors[ImGuiCol_NavHighlight] = ImVec4(1.00f, 0.00f, 0.00f, 1.00f); + colors[ImGuiCol_NavWindowingHighlight] = ImVec4(1.00f, 0.00f, 0.00f, 0.70f); + colors[ImGuiCol_NavWindowingDimBg] = ImVec4(1.00f, 0.00f, 0.00f, 0.20f); + colors[ImGuiCol_ModalWindowDimBg] = ImVec4(1.00f, 0.00f, 0.00f, 0.35f); + + ImGuiStyle& style = ImGui::GetStyle(); + style.WindowPadding = ImVec2(8.00f, 8.00f); + style.FramePadding = ImVec2(5.00f, 2.00f); + style.CellPadding = ImVec2(6.00f, 6.00f); + style.ItemSpacing = ImVec2(6.00f, 6.00f); + style.ItemInnerSpacing = ImVec2(6.00f, 6.00f); + style.TouchExtraPadding = ImVec2(0.00f, 0.00f); + style.IndentSpacing = 25; + style.ScrollbarSize = 15; + style.GrabMinSize = 10; + style.WindowBorderSize = 1; + style.ChildBorderSize = 1; + style.PopupBorderSize = 1; + style.FrameBorderSize = 1; + style.TabBorderSize = 1; + style.WindowRounding = 7; + style.ChildRounding = 4; + style.FrameRounding = 3; + style.PopupRounding = 4; + style.ScrollbarRounding = 9; + style.GrabRounding = 3; + style.LogSliderDeadzone = 4; + style.TabRounding = 4; + } + + void GUI::RedDark() + { + // Theme by: aiekick + // https://github.com/ocornut/imgui/issues/707#issuecomment-760220280 + + ImVec4* colors = ImGui::GetStyle().Colors; + colors[ImGuiCol_Text] = ImVec4(0.75f, 0.75f, 0.75f, 1.00f); + colors[ImGuiCol_TextDisabled] = ImVec4(0.35f, 0.35f, 0.35f, 1.00f); + colors[ImGuiCol_WindowBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.94f); + colors[ImGuiCol_ChildBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f); + colors[ImGuiCol_PopupBg] = ImVec4(0.08f, 0.08f, 0.08f, 0.94f); + colors[ImGuiCol_Border] = ImVec4(0.00f, 0.00f, 0.00f, 0.50f); + colors[ImGuiCol_BorderShadow] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f); + colors[ImGuiCol_FrameBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.54f); + colors[ImGuiCol_FrameBgHovered] = ImVec4(0.37f, 0.14f, 0.14f, 0.67f); + colors[ImGuiCol_FrameBgActive] = ImVec4(0.39f, 0.20f, 0.20f, 0.67f); + colors[ImGuiCol_TitleBg] = ImVec4(0.04f, 0.04f, 0.04f, 1.00f); + colors[ImGuiCol_TitleBgActive] = ImVec4(0.48f, 0.16f, 0.16f, 1.00f); + colors[ImGuiCol_TitleBgCollapsed] = ImVec4(0.48f, 0.16f, 0.16f, 1.00f); + colors[ImGuiCol_MenuBarBg] = ImVec4(0.14f, 0.14f, 0.14f, 1.00f); + colors[ImGuiCol_ScrollbarBg] = ImVec4(0.02f, 0.02f, 0.02f, 0.53f); + colors[ImGuiCol_ScrollbarGrab] = ImVec4(0.31f, 0.31f, 0.31f, 1.00f); + colors[ImGuiCol_ScrollbarGrabHovered] = ImVec4(0.41f, 0.41f, 0.41f, 1.00f); + colors[ImGuiCol_ScrollbarGrabActive] = ImVec4(0.51f, 0.51f, 0.51f, 1.00f); + colors[ImGuiCol_CheckMark] = ImVec4(0.56f, 0.10f, 0.10f, 1.00f); + colors[ImGuiCol_SliderGrab] = ImVec4(1.00f, 0.19f, 0.19f, 0.40f); + colors[ImGuiCol_SliderGrabActive] = ImVec4(0.89f, 0.00f, 0.19f, 1.00f); + colors[ImGuiCol_Button] = ImVec4(1.00f, 0.19f, 0.19f, 0.40f); + colors[ImGuiCol_ButtonHovered] = ImVec4(0.80f, 0.17f, 0.00f, 1.00f); + colors[ImGuiCol_ButtonActive] = ImVec4(0.89f, 0.00f, 0.19f, 1.00f); + colors[ImGuiCol_Header] = ImVec4(0.33f, 0.35f, 0.36f, 0.53f); + colors[ImGuiCol_HeaderHovered] = ImVec4(0.76f, 0.28f, 0.44f, 0.67f); + colors[ImGuiCol_HeaderActive] = ImVec4(0.47f, 0.47f, 0.47f, 0.67f); + colors[ImGuiCol_Separator] = ImVec4(0.32f, 0.32f, 0.32f, 1.00f); + colors[ImGuiCol_SeparatorHovered] = ImVec4(0.32f, 0.32f, 0.32f, 1.00f); + colors[ImGuiCol_SeparatorActive] = ImVec4(0.32f, 0.32f, 0.32f, 1.00f); + colors[ImGuiCol_ResizeGrip] = ImVec4(1.00f, 1.00f, 1.00f, 0.85f); + colors[ImGuiCol_ResizeGripHovered] = ImVec4(1.00f, 1.00f, 1.00f, 0.60f); + colors[ImGuiCol_ResizeGripActive] = ImVec4(1.00f, 1.00f, 1.00f, 0.90f); + colors[ImGuiCol_Tab] = ImVec4(0.07f, 0.07f, 0.07f, 0.51f); + colors[ImGuiCol_TabHovered] = ImVec4(0.86f, 0.23f, 0.43f, 0.67f); + colors[ImGuiCol_TabActive] = ImVec4(0.19f, 0.19f, 0.19f, 0.57f); + colors[ImGuiCol_TabUnfocused] = ImVec4(0.05f, 0.05f, 0.05f, 0.90f); + colors[ImGuiCol_TabUnfocusedActive] = ImVec4(0.13f, 0.13f, 0.13f, 0.74f); + colors[ImGuiCol_DockingPreview] = ImVec4(0.47f, 0.47f, 0.47f, 0.47f); + colors[ImGuiCol_DockingEmptyBg] = ImVec4(0.20f, 0.20f, 0.20f, 1.00f); + colors[ImGuiCol_PlotLines] = ImVec4(0.61f, 0.61f, 0.61f, 1.00f); + colors[ImGuiCol_PlotLinesHovered] = ImVec4(1.00f, 0.43f, 0.35f, 1.00f); + colors[ImGuiCol_PlotHistogram] = ImVec4(0.90f, 0.70f, 0.00f, 1.00f); + colors[ImGuiCol_PlotHistogramHovered] = ImVec4(1.00f, 0.60f, 0.00f, 1.00f); + colors[ImGuiCol_TableHeaderBg] = ImVec4(0.19f, 0.19f, 0.20f, 1.00f); + colors[ImGuiCol_TableBorderStrong] = ImVec4(0.31f, 0.31f, 0.35f, 1.00f); + colors[ImGuiCol_TableBorderLight] = ImVec4(0.23f, 0.23f, 0.25f, 1.00f); + colors[ImGuiCol_TableRowBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f); + colors[ImGuiCol_TableRowBgAlt] = ImVec4(1.00f, 1.00f, 1.00f, 0.07f); + colors[ImGuiCol_TextSelectedBg] = ImVec4(0.26f, 0.59f, 0.98f, 0.35f); + colors[ImGuiCol_DragDropTarget] = ImVec4(1.00f, 1.00f, 0.00f, 0.90f); + colors[ImGuiCol_NavHighlight] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f); + colors[ImGuiCol_NavWindowingHighlight] = ImVec4(1.00f, 1.00f, 1.00f, 0.70f); + colors[ImGuiCol_NavWindowingDimBg] = ImVec4(0.80f, 0.80f, 0.80f, 0.20f); + colors[ImGuiCol_ModalWindowDimBg] = ImVec4(0.80f, 0.80f, 0.80f, 0.35f); + } + + void GUI::GreenBlue() + { + // Theme by: aiekick + // https://github.com/ocornut/imgui/issues/707#issuecomment-760219522 + + ImVec4* colors = ImGui::GetStyle().Colors; + colors[ImGuiCol_Text] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f); + colors[ImGuiCol_TextDisabled] = ImVec4(0.50f, 0.50f, 0.50f, 1.00f); + colors[ImGuiCol_WindowBg] = ImVec4(0.06f, 0.06f, 0.06f, 0.94f); + colors[ImGuiCol_ChildBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f); + colors[ImGuiCol_PopupBg] = ImVec4(0.08f, 0.08f, 0.08f, 0.94f); + colors[ImGuiCol_Border] = ImVec4(0.43f, 0.43f, 0.50f, 0.50f); + colors[ImGuiCol_BorderShadow] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f); + colors[ImGuiCol_FrameBg] = ImVec4(0.44f, 0.44f, 0.44f, 0.60f); + colors[ImGuiCol_FrameBgHovered] = ImVec4(0.57f, 0.57f, 0.57f, 0.70f); + colors[ImGuiCol_FrameBgActive] = ImVec4(0.76f, 0.76f, 0.76f, 0.80f); + colors[ImGuiCol_TitleBg] = ImVec4(0.04f, 0.04f, 0.04f, 1.00f); + colors[ImGuiCol_TitleBgActive] = ImVec4(0.16f, 0.16f, 0.16f, 1.00f); + colors[ImGuiCol_TitleBgCollapsed] = ImVec4(0.00f, 0.00f, 0.00f, 0.60f); + colors[ImGuiCol_MenuBarBg] = ImVec4(0.14f, 0.14f, 0.14f, 1.00f); + colors[ImGuiCol_ScrollbarBg] = ImVec4(0.02f, 0.02f, 0.02f, 0.53f); + colors[ImGuiCol_ScrollbarGrab] = ImVec4(0.31f, 0.31f, 0.31f, 1.00f); + colors[ImGuiCol_ScrollbarGrabHovered] = ImVec4(0.41f, 0.41f, 0.41f, 1.00f); + colors[ImGuiCol_ScrollbarGrabActive] = ImVec4(0.51f, 0.51f, 0.51f, 1.00f); + colors[ImGuiCol_CheckMark] = ImVec4(0.13f, 0.75f, 0.55f, 0.80f); + colors[ImGuiCol_SliderGrab] = ImVec4(0.13f, 0.75f, 0.75f, 0.80f); + colors[ImGuiCol_SliderGrabActive] = ImVec4(0.13f, 0.75f, 1.00f, 0.80f); + colors[ImGuiCol_Button] = ImVec4(0.13f, 0.75f, 0.55f, 0.40f); + colors[ImGuiCol_ButtonHovered] = ImVec4(0.13f, 0.75f, 0.75f, 0.60f); + colors[ImGuiCol_ButtonActive] = ImVec4(0.13f, 0.75f, 1.00f, 0.80f); + colors[ImGuiCol_Header] = ImVec4(0.13f, 0.75f, 0.55f, 0.40f); + colors[ImGuiCol_HeaderHovered] = ImVec4(0.13f, 0.75f, 0.75f, 0.60f); + colors[ImGuiCol_HeaderActive] = ImVec4(0.13f, 0.75f, 1.00f, 0.80f); + colors[ImGuiCol_Separator] = ImVec4(0.13f, 0.75f, 0.55f, 0.40f); + colors[ImGuiCol_SeparatorHovered] = ImVec4(0.13f, 0.75f, 0.75f, 0.60f); + colors[ImGuiCol_SeparatorActive] = ImVec4(0.13f, 0.75f, 1.00f, 0.80f); + colors[ImGuiCol_ResizeGrip] = ImVec4(0.13f, 0.75f, 0.55f, 0.40f); + colors[ImGuiCol_ResizeGripHovered] = ImVec4(0.13f, 0.75f, 0.75f, 0.60f); + colors[ImGuiCol_ResizeGripActive] = ImVec4(0.13f, 0.75f, 1.00f, 0.80f); + colors[ImGuiCol_Tab] = ImVec4(0.13f, 0.75f, 0.55f, 0.80f); + colors[ImGuiCol_TabHovered] = ImVec4(0.13f, 0.75f, 0.75f, 0.80f); + colors[ImGuiCol_TabActive] = ImVec4(0.13f, 0.75f, 1.00f, 0.80f); + colors[ImGuiCol_TabUnfocused] = ImVec4(0.18f, 0.18f, 0.18f, 1.00f); + colors[ImGuiCol_TabUnfocusedActive] = ImVec4(0.36f, 0.36f, 0.36f, 0.54f); + colors[ImGuiCol_DockingPreview] = ImVec4(0.13f, 0.75f, 0.55f, 0.80f); + colors[ImGuiCol_DockingEmptyBg] = ImVec4(0.13f, 0.13f, 0.13f, 0.80f); + colors[ImGuiCol_PlotLines] = ImVec4(0.61f, 0.61f, 0.61f, 1.00f); + colors[ImGuiCol_PlotLinesHovered] = ImVec4(1.00f, 0.43f, 0.35f, 1.00f); + colors[ImGuiCol_PlotHistogram] = ImVec4(0.90f, 0.70f, 0.00f, 1.00f); + colors[ImGuiCol_PlotHistogramHovered] = ImVec4(1.00f, 0.60f, 0.00f, 1.00f); + colors[ImGuiCol_TableHeaderBg] = ImVec4(0.19f, 0.19f, 0.20f, 1.00f); + colors[ImGuiCol_TableBorderStrong] = ImVec4(0.31f, 0.31f, 0.35f, 1.00f); + colors[ImGuiCol_TableBorderLight] = ImVec4(0.23f, 0.23f, 0.25f, 1.00f); + colors[ImGuiCol_TableRowBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f); + colors[ImGuiCol_TableRowBgAlt] = ImVec4(1.00f, 1.00f, 1.00f, 0.07f); + colors[ImGuiCol_TextSelectedBg] = ImVec4(0.26f, 0.59f, 0.98f, 0.35f); + colors[ImGuiCol_DragDropTarget] = ImVec4(1.00f, 1.00f, 0.00f, 0.90f); + colors[ImGuiCol_NavHighlight] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f); + colors[ImGuiCol_NavWindowingHighlight] = ImVec4(1.00f, 1.00f, 1.00f, 0.70f); + colors[ImGuiCol_NavWindowingDimBg] = ImVec4(0.80f, 0.80f, 0.80f, 0.20f); + colors[ImGuiCol_ModalWindowDimBg] = ImVec4(0.80f, 0.80f, 0.80f, 0.35f); + } + + void GUI::OverShiftedDark() + { + // Theme by OverShifted + // https://github.com/ocornut/imgui/issues/707#issuecomment-678611331 + ImGuiStyle& style = ImGui::GetStyle(); + style.Colors[ImGuiCol_Text] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f); + style.Colors[ImGuiCol_TextDisabled] = ImVec4(0.50f, 0.50f, 0.50f, 1.00f); + style.Colors[ImGuiCol_WindowBg] = ImVec4(0.13f, 0.14f, 0.15f, 1.00f); + style.Colors[ImGuiCol_ChildBg] = ImVec4(0.13f, 0.14f, 0.15f, 1.00f); + style.Colors[ImGuiCol_PopupBg] = ImVec4(0.13f, 0.14f, 0.15f, 1.00f); + style.Colors[ImGuiCol_Border] = ImVec4(0.43f, 0.43f, 0.50f, 0.50f); + style.Colors[ImGuiCol_BorderShadow] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f); + style.Colors[ImGuiCol_FrameBg] = ImVec4(0.25f, 0.25f, 0.25f, 1.00f); + style.Colors[ImGuiCol_FrameBgHovered] = ImVec4(0.38f, 0.38f, 0.38f, 1.00f); + style.Colors[ImGuiCol_FrameBgActive] = ImVec4(0.67f, 0.67f, 0.67f, 0.39f); + style.Colors[ImGuiCol_TitleBg] = ImVec4(0.08f, 0.08f, 0.09f, 1.00f); + style.Colors[ImGuiCol_TitleBgActive] = ImVec4(0.08f, 0.08f, 0.09f, 1.00f); + style.Colors[ImGuiCol_TitleBgCollapsed] = ImVec4(0.00f, 0.00f, 0.00f, 0.51f); + style.Colors[ImGuiCol_MenuBarBg] = ImVec4(0.14f, 0.14f, 0.14f, 1.00f); + style.Colors[ImGuiCol_ScrollbarBg] = ImVec4(0.02f, 0.02f, 0.02f, 0.53f); + style.Colors[ImGuiCol_ScrollbarGrab] = ImVec4(0.31f, 0.31f, 0.31f, 1.00f); + style.Colors[ImGuiCol_ScrollbarGrabHovered] = ImVec4(0.41f, 0.41f, 0.41f, 1.00f); + style.Colors[ImGuiCol_ScrollbarGrabActive] = ImVec4(0.51f, 0.51f, 0.51f, 1.00f); + style.Colors[ImGuiCol_CheckMark] = ImVec4(0.11f, 0.64f, 0.92f, 1.00f); + style.Colors[ImGuiCol_SliderGrab] = ImVec4(0.11f, 0.64f, 0.92f, 1.00f); + style.Colors[ImGuiCol_SliderGrabActive] = ImVec4(0.08f, 0.50f, 0.72f, 1.00f); + style.Colors[ImGuiCol_Button] = ImVec4(0.25f, 0.25f, 0.25f, 1.00f); + style.Colors[ImGuiCol_ButtonHovered] = ImVec4(0.38f, 0.38f, 0.38f, 1.00f); + style.Colors[ImGuiCol_ButtonActive] = ImVec4(0.67f, 0.67f, 0.67f, 0.39f); + style.Colors[ImGuiCol_Header] = ImVec4(0.22f, 0.22f, 0.22f, 1.00f); + style.Colors[ImGuiCol_HeaderHovered] = ImVec4(0.25f, 0.25f, 0.25f, 1.00f); + style.Colors[ImGuiCol_HeaderActive] = ImVec4(0.67f, 0.67f, 0.67f, 0.39f); + style.Colors[ImGuiCol_Separator] = style.Colors[ImGuiCol_Border]; + style.Colors[ImGuiCol_SeparatorHovered] = ImVec4(0.41f, 0.42f, 0.44f, 1.00f); + style.Colors[ImGuiCol_SeparatorActive] = ImVec4(0.26f, 0.59f, 0.98f, 0.95f); + style.Colors[ImGuiCol_ResizeGrip] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f); + style.Colors[ImGuiCol_ResizeGripHovered] = ImVec4(0.29f, 0.30f, 0.31f, 0.67f); + style.Colors[ImGuiCol_ResizeGripActive] = ImVec4(0.26f, 0.59f, 0.98f, 0.95f); + style.Colors[ImGuiCol_Tab] = ImVec4(0.08f, 0.08f, 0.09f, 0.83f); + style.Colors[ImGuiCol_TabHovered] = ImVec4(0.33f, 0.34f, 0.36f, 0.83f); + style.Colors[ImGuiCol_TabActive] = ImVec4(0.23f, 0.23f, 0.24f, 1.00f); + style.Colors[ImGuiCol_TabUnfocused] = ImVec4(0.08f, 0.08f, 0.09f, 1.00f); + style.Colors[ImGuiCol_TabUnfocusedActive] = ImVec4(0.13f, 0.14f, 0.15f, 1.00f); + style.Colors[ImGuiCol_DockingPreview] = ImVec4(0.26f, 0.59f, 0.98f, 0.70f); + style.Colors[ImGuiCol_DockingEmptyBg] = ImVec4(0.20f, 0.20f, 0.20f, 1.00f); + style.Colors[ImGuiCol_PlotLines] = ImVec4(0.61f, 0.61f, 0.61f, 1.00f); + style.Colors[ImGuiCol_PlotLinesHovered] = ImVec4(1.00f, 0.43f, 0.35f, 1.00f); + style.Colors[ImGuiCol_PlotHistogram] = ImVec4(0.90f, 0.70f, 0.00f, 1.00f); + style.Colors[ImGuiCol_PlotHistogramHovered] = ImVec4(1.00f, 0.60f, 0.00f, 1.00f); + style.Colors[ImGuiCol_TextSelectedBg] = ImVec4(0.26f, 0.59f, 0.98f, 0.35f); + style.Colors[ImGuiCol_DragDropTarget] = ImVec4(0.11f, 0.64f, 0.92f, 1.00f); + style.Colors[ImGuiCol_NavHighlight] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f); + style.Colors[ImGuiCol_NavWindowingHighlight] = ImVec4(1.00f, 1.00f, 1.00f, 0.70f); + style.Colors[ImGuiCol_NavWindowingDimBg] = ImVec4(0.80f, 0.80f, 0.80f, 0.20f); + style.Colors[ImGuiCol_ModalWindowDimBg] = ImVec4(0.80f, 0.80f, 0.80f, 0.35f); + style.GrabRounding = style.FrameRounding = 2.3f; + } + + void GUI::Charcoal() + { + // Theme by: Derydoca + // https://github.com/ocornut/imgui/issues/707#issuecomment-463758243 + + ImGuiStyle* style = &ImGui::GetStyle(); + ImVec4* colors = style->Colors; + + colors[ImGuiCol_Text] = ImVec4(1.000f, 1.000f, 1.000f, 1.000f); + colors[ImGuiCol_TextDisabled] = ImVec4(0.500f, 0.500f, 0.500f, 1.000f); + colors[ImGuiCol_WindowBg] = ImVec4(0.180f, 0.180f, 0.180f, 1.000f); + colors[ImGuiCol_ChildBg] = ImVec4(0.280f, 0.280f, 0.280f, 0.000f); + colors[ImGuiCol_PopupBg] = ImVec4(0.313f, 0.313f, 0.313f, 1.000f); + colors[ImGuiCol_Border] = ImVec4(0.266f, 0.266f, 0.266f, 1.000f); + colors[ImGuiCol_BorderShadow] = ImVec4(0.000f, 0.000f, 0.000f, 0.000f); + colors[ImGuiCol_FrameBg] = ImVec4(0.160f, 0.160f, 0.160f, 1.000f); + colors[ImGuiCol_FrameBgHovered] = ImVec4(0.200f, 0.200f, 0.200f, 1.000f); + colors[ImGuiCol_FrameBgActive] = ImVec4(0.280f, 0.280f, 0.280f, 1.000f); + colors[ImGuiCol_TitleBg] = ImVec4(0.148f, 0.148f, 0.148f, 1.000f); + colors[ImGuiCol_TitleBgActive] = ImVec4(0.148f, 0.148f, 0.148f, 1.000f); + colors[ImGuiCol_TitleBgCollapsed] = ImVec4(0.148f, 0.148f, 0.148f, 1.000f); + colors[ImGuiCol_MenuBarBg] = ImVec4(0.195f, 0.195f, 0.195f, 1.000f); + colors[ImGuiCol_ScrollbarBg] = ImVec4(0.160f, 0.160f, 0.160f, 1.000f); + colors[ImGuiCol_ScrollbarGrab] = ImVec4(0.277f, 0.277f, 0.277f, 1.000f); + colors[ImGuiCol_ScrollbarGrabHovered] = ImVec4(0.300f, 0.300f, 0.300f, 1.000f); + colors[ImGuiCol_ScrollbarGrabActive] = ImVec4(1.000f, 0.391f, 0.000f, 1.000f); + colors[ImGuiCol_CheckMark] = ImVec4(1.000f, 1.000f, 1.000f, 1.000f); + colors[ImGuiCol_SliderGrab] = ImVec4(0.391f, 0.391f, 0.391f, 1.000f); + colors[ImGuiCol_SliderGrabActive] = ImVec4(1.000f, 0.391f, 0.000f, 1.000f); + colors[ImGuiCol_Button] = ImVec4(1.000f, 1.000f, 1.000f, 0.000f); + colors[ImGuiCol_ButtonHovered] = ImVec4(1.000f, 1.000f, 1.000f, 0.156f); + colors[ImGuiCol_ButtonActive] = ImVec4(1.000f, 1.000f, 1.000f, 0.391f); + colors[ImGuiCol_Header] = ImVec4(0.313f, 0.313f, 0.313f, 1.000f); + colors[ImGuiCol_HeaderHovered] = ImVec4(0.469f, 0.469f, 0.469f, 1.000f); + colors[ImGuiCol_HeaderActive] = ImVec4(0.469f, 0.469f, 0.469f, 1.000f); + colors[ImGuiCol_Separator] = colors[ImGuiCol_Border]; + colors[ImGuiCol_SeparatorHovered] = ImVec4(0.391f, 0.391f, 0.391f, 1.000f); + colors[ImGuiCol_SeparatorActive] = ImVec4(1.000f, 0.391f, 0.000f, 1.000f); + colors[ImGuiCol_ResizeGrip] = ImVec4(1.000f, 1.000f, 1.000f, 0.250f); + colors[ImGuiCol_ResizeGripHovered] = ImVec4(1.000f, 1.000f, 1.000f, 0.670f); + colors[ImGuiCol_ResizeGripActive] = ImVec4(1.000f, 0.391f, 0.000f, 1.000f); + colors[ImGuiCol_Tab] = ImVec4(0.098f, 0.098f, 0.098f, 1.000f); + colors[ImGuiCol_TabHovered] = ImVec4(0.352f, 0.352f, 0.352f, 1.000f); + colors[ImGuiCol_TabActive] = ImVec4(0.195f, 0.195f, 0.195f, 1.000f); + colors[ImGuiCol_TabUnfocused] = ImVec4(0.098f, 0.098f, 0.098f, 1.000f); + colors[ImGuiCol_TabUnfocusedActive] = ImVec4(0.195f, 0.195f, 0.195f, 1.000f); + colors[ImGuiCol_DockingPreview] = ImVec4(1.000f, 0.391f, 0.000f, 0.781f); + colors[ImGuiCol_DockingEmptyBg] = ImVec4(0.180f, 0.180f, 0.180f, 1.000f); + colors[ImGuiCol_PlotLines] = ImVec4(0.469f, 0.469f, 0.469f, 1.000f); + colors[ImGuiCol_PlotLinesHovered] = ImVec4(1.000f, 0.391f, 0.000f, 1.000f); + colors[ImGuiCol_PlotHistogram] = ImVec4(0.586f, 0.586f, 0.586f, 1.000f); + colors[ImGuiCol_PlotHistogramHovered] = ImVec4(1.000f, 0.391f, 0.000f, 1.000f); + colors[ImGuiCol_TextSelectedBg] = ImVec4(1.000f, 1.000f, 1.000f, 0.156f); + colors[ImGuiCol_DragDropTarget] = ImVec4(1.000f, 0.391f, 0.000f, 1.000f); + colors[ImGuiCol_NavHighlight] = ImVec4(1.000f, 0.391f, 0.000f, 1.000f); + colors[ImGuiCol_NavWindowingHighlight] = ImVec4(1.000f, 0.391f, 0.000f, 1.000f); + colors[ImGuiCol_NavWindowingDimBg] = ImVec4(0.000f, 0.000f, 0.000f, 0.586f); + colors[ImGuiCol_ModalWindowDimBg] = ImVec4(0.000f, 0.000f, 0.000f, 0.586f); + + style->ChildRounding = 4.0f; + style->FrameBorderSize = 1.0f; + style->FrameRounding = 2.0f; + style->GrabMinSize = 7.0f; + style->PopupRounding = 2.0f; + style->ScrollbarRounding = 12.0f; + style->ScrollbarSize = 13.0f; + style->TabBorderSize = 1.0f; + style->TabRounding = 0.0f; + style->WindowRounding = 4.0f; + } + + void GUI::CorporateGrey(int is3D) + { + // Theme By: malamanteau + // https://github.com/ocornut/imgui/issues/707#issuecomment-468798935 + + ImGuiStyle & style = ImGui::GetStyle(); + ImVec4 * colors = style.Colors; + + /// 0 = FLAT APPEARENCE + /// 1 = MORE "3D" LOOK + //int is3D = 0; + + colors[ImGuiCol_Text] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f); + colors[ImGuiCol_TextDisabled] = ImVec4(0.40f, 0.40f, 0.40f, 1.00f); + colors[ImGuiCol_ChildBg] = ImVec4(0.25f, 0.25f, 0.25f, 1.00f); + colors[ImGuiCol_WindowBg] = ImVec4(0.25f, 0.25f, 0.25f, 1.00f); + colors[ImGuiCol_PopupBg] = ImVec4(0.25f, 0.25f, 0.25f, 1.00f); + colors[ImGuiCol_Border] = ImVec4(0.12f, 0.12f, 0.12f, 0.71f); + colors[ImGuiCol_BorderShadow] = ImVec4(1.00f, 1.00f, 1.00f, 0.06f); + colors[ImGuiCol_FrameBg] = ImVec4(0.42f, 0.42f, 0.42f, 0.54f); + colors[ImGuiCol_FrameBgHovered] = ImVec4(0.42f, 0.42f, 0.42f, 0.40f); + colors[ImGuiCol_FrameBgActive] = ImVec4(0.56f, 0.56f, 0.56f, 0.67f); + colors[ImGuiCol_TitleBg] = ImVec4(0.19f, 0.19f, 0.19f, 1.00f); + colors[ImGuiCol_TitleBgActive] = ImVec4(0.22f, 0.22f, 0.22f, 1.00f); + colors[ImGuiCol_TitleBgCollapsed] = ImVec4(0.17f, 0.17f, 0.17f, 0.90f); + colors[ImGuiCol_MenuBarBg] = ImVec4(0.335f, 0.335f, 0.335f, 1.000f); + colors[ImGuiCol_ScrollbarBg] = ImVec4(0.24f, 0.24f, 0.24f, 0.53f); + colors[ImGuiCol_ScrollbarGrab] = ImVec4(0.41f, 0.41f, 0.41f, 1.00f); + colors[ImGuiCol_ScrollbarGrabHovered] = ImVec4(0.52f, 0.52f, 0.52f, 1.00f); + colors[ImGuiCol_ScrollbarGrabActive] = ImVec4(0.76f, 0.76f, 0.76f, 1.00f); + colors[ImGuiCol_CheckMark] = ImVec4(0.65f, 0.65f, 0.65f, 1.00f); + colors[ImGuiCol_SliderGrab] = ImVec4(0.52f, 0.52f, 0.52f, 1.00f); + colors[ImGuiCol_SliderGrabActive] = ImVec4(0.64f, 0.64f, 0.64f, 1.00f); + colors[ImGuiCol_Button] = ImVec4(0.54f, 0.54f, 0.54f, 0.35f); + colors[ImGuiCol_ButtonHovered] = ImVec4(0.52f, 0.52f, 0.52f, 0.59f); + colors[ImGuiCol_ButtonActive] = ImVec4(0.76f, 0.76f, 0.76f, 1.00f); + colors[ImGuiCol_Header] = ImVec4(0.38f, 0.38f, 0.38f, 1.00f); + colors[ImGuiCol_HeaderHovered] = ImVec4(0.47f, 0.47f, 0.47f, 1.00f); + colors[ImGuiCol_HeaderActive] = ImVec4(0.76f, 0.76f, 0.76f, 0.77f); + colors[ImGuiCol_Separator] = ImVec4(0.000f, 0.000f, 0.000f, 0.137f); + colors[ImGuiCol_SeparatorHovered] = ImVec4(0.700f, 0.671f, 0.600f, 0.290f); + colors[ImGuiCol_SeparatorActive] = ImVec4(0.702f, 0.671f, 0.600f, 0.674f); + colors[ImGuiCol_ResizeGrip] = ImVec4(0.26f, 0.59f, 0.98f, 0.25f); + colors[ImGuiCol_ResizeGripHovered] = ImVec4(0.26f, 0.59f, 0.98f, 0.67f); + colors[ImGuiCol_ResizeGripActive] = ImVec4(0.26f, 0.59f, 0.98f, 0.95f); + colors[ImGuiCol_PlotLines] = ImVec4(0.61f, 0.61f, 0.61f, 1.00f); + colors[ImGuiCol_PlotLinesHovered] = ImVec4(1.00f, 0.43f, 0.35f, 1.00f); + colors[ImGuiCol_PlotHistogram] = ImVec4(0.90f, 0.70f, 0.00f, 1.00f); + colors[ImGuiCol_PlotHistogramHovered] = ImVec4(1.00f, 0.60f, 0.00f, 1.00f); + colors[ImGuiCol_TextSelectedBg] = ImVec4(0.73f, 0.73f, 0.73f, 0.35f); + colors[ImGuiCol_ModalWindowDimBg] = ImVec4(0.80f, 0.80f, 0.80f, 0.35f); + colors[ImGuiCol_DragDropTarget] = ImVec4(1.00f, 1.00f, 0.00f, 0.90f); + colors[ImGuiCol_NavHighlight] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f); + colors[ImGuiCol_NavWindowingHighlight] = ImVec4(1.00f, 1.00f, 1.00f, 0.70f); + colors[ImGuiCol_NavWindowingDimBg] = ImVec4(0.80f, 0.80f, 0.80f, 0.20f); + + style.PopupRounding = 3; + + style.WindowPadding = ImVec2(4, 4); + style.FramePadding = ImVec2(6, 4); + style.ItemSpacing = ImVec2(6, 2); + + style.ScrollbarSize = 18; + + style.WindowBorderSize = 1; + style.ChildBorderSize = 1; + style.PopupBorderSize = 1; + style.FrameBorderSize = is3D; + + style.WindowRounding = 3; + style.ChildRounding = 3; + style.FrameRounding = 3; + style.ScrollbarRounding = 2; + style.GrabRounding = 3; + + #ifdef IMGUI_HAS_DOCK + style.TabBorderSize = is3D; + style.TabRounding = 3; + + colors[ImGuiCol_DockingEmptyBg] = ImVec4(0.38f, 0.38f, 0.38f, 1.00f); + colors[ImGuiCol_Tab] = ImVec4(0.25f, 0.25f, 0.25f, 1.00f); + colors[ImGuiCol_TabHovered] = ImVec4(0.40f, 0.40f, 0.40f, 1.00f); + colors[ImGuiCol_TabActive] = ImVec4(0.33f, 0.33f, 0.33f, 1.00f); + colors[ImGuiCol_TabUnfocused] = ImVec4(0.25f, 0.25f, 0.25f, 1.00f); + colors[ImGuiCol_TabUnfocusedActive] = ImVec4(0.33f, 0.33f, 0.33f, 1.00f); + colors[ImGuiCol_DockingPreview] = ImVec4(0.85f, 0.85f, 0.85f, 0.28f); + + if (ImGui::GetIO().ConfigFlags & ImGuiConfigFlags_ViewportsEnable) + { + style.WindowRounding = 0.0f; + style.Colors[ImGuiCol_WindowBg].w = 1.0f; + } + #endif + } } \ No newline at end of file diff --git a/src/internal_libs/gui/gui.h b/src/internal_libs/gui/gui.h index e023992..21fd894 100644 --- a/src/internal_libs/gui/gui.h +++ b/src/internal_libs/gui/gui.h @@ -12,9 +12,24 @@ #include struct GLFWwindow; +struct ImGuiStyle; namespace lunarium { + enum GuiStyle + { + STYLE_DEFAULT_DARK, + STYLE_DEFAULT_LIGHT, + STYLE_DEFAULT_CLASSIC, + STYLE_DEEP_DARK, + STYLE_RED_DARK, + STYLE_GREEN_BLUE, + STYLE_OVERSHIFTED_DARK, + STYLE_CHARCOAL, + STYLE_CORPORATE_GRAY, + STYLE_CORPORATE_GRAY_3D, + }; + class GUI { public: @@ -29,6 +44,8 @@ namespace lunarium bool WantCaptureKeyboard() const; + void SetStyle(GuiStyle style); + private: GUI(); GUI(const GUI&) = delete; @@ -37,7 +54,17 @@ namespace lunarium private: static GUI* mpInstance; bool mbIsInit; + ImGuiStyle* mpBaseStyle; //bool mbShowDemo; + + private: // STYLES + void EmbraceTheDarkness(); + void RedDark(); + void GreenBlue(); + void OverShiftedDark(); + void Charcoal(); + void CorporateGrey(int is3D = 0); + }; } diff --git a/src/run_modes/editor/contents/content_manager.cpp b/src/run_modes/editor/contents/content_manager.cpp index 76542f2..2568660 100644 --- a/src/run_modes/editor/contents/content_manager.cpp +++ b/src/run_modes/editor/contents/content_manager.cpp @@ -114,6 +114,7 @@ namespace lunarium { namespace editor // Load Type AssetType type = (AssetType)asset.attribute("Type").as_int(); EditorAsset* pAsset = CreateAsset(type); + pAsset->mAssetDir = mpProject->GetAssetDirectory(); if (!pAsset) { @@ -254,6 +255,7 @@ namespace lunarium { namespace editor } EditorAsset* pAsset = CreateAsset(type); + pAsset->mAssetDir = mpProject->GetAssetDirectory(); pAsset->mID = mNextID; mNextID++; pAsset->mLocation = to_location; diff --git a/src/run_modes/editor/contents/content_manager.h b/src/run_modes/editor/contents/content_manager.h index 6f6c615..2a8f174 100644 --- a/src/run_modes/editor/contents/content_manager.h +++ b/src/run_modes/editor/contents/content_manager.h @@ -45,6 +45,8 @@ namespace lunarium { namespace editor [[nodiscard]] OpRes AddGeneratedAsset(EditorAsset* asset, uint64_t& id); /// Import a raw asset file from outside of the project (like image or sound files) + /// file: the full path to the raw file + /// to_location: the location inside the project's asset directory to import to (this MUST be a relative path starting in the Asset dir) [[nodiscard]] OpRes ImportFile(std::filesystem::path file, std::filesystem::path to_location, AssetType type, uint64_t& id); void RemoveAsset(uint64_t asset_id); diff --git a/src/run_modes/editor/contents/editor_asset.h b/src/run_modes/editor/contents/editor_asset.h index d23597a..ee8be88 100644 --- a/src/run_modes/editor/contents/editor_asset.h +++ b/src/run_modes/editor/contents/editor_asset.h @@ -39,6 +39,7 @@ namespace lunarium { namespace editor std::filesystem::path mLocation; protected: + std::filesystem::path mAssetDir; }; }} diff --git a/src/run_modes/editor/contents/tile_set.cpp b/src/run_modes/editor/contents/tile_set.cpp index 0caa7a1..73ecf24 100644 --- a/src/run_modes/editor/contents/tile_set.cpp +++ b/src/run_modes/editor/contents/tile_set.cpp @@ -24,7 +24,7 @@ namespace lunarium { namespace editor OpRes TileSet::LoadRawFile() { - mSetImage = FileLoaders::LoadImage(GetFileLocation()); + mSetImage = FileLoaders::LoadImage(mAssetDir / GetFileLocation()); if (!mSetImage) { return OpRes::Fail("Could not load image file: %s", GetFileLocation().string().c_str()); @@ -40,7 +40,7 @@ namespace lunarium { namespace editor OpRes TileSet::LoadFromXML(pugi::xml_node& node) { // Load Image - mSetImage = FileLoaders::LoadImage(GetFileLocation()); + mSetImage = FileLoaders::LoadImage(mAssetDir / GetFileLocation()); if (!mSetImage) { return OpRes::Fail("Could not load image file: %s", GetFileLocation().string().c_str()); diff --git a/src/run_modes/editor/editor.cpp b/src/run_modes/editor/editor.cpp index ae08b42..25f8bcf 100644 --- a/src/run_modes/editor/editor.cpp +++ b/src/run_modes/editor/editor.cpp @@ -13,6 +13,7 @@ #include #include #include +#include #include // Panels @@ -151,6 +152,11 @@ namespace editor { return mProject.GetAssetDirectory() / ((AssetBrowser*)mPanelManager.GetPanel(gui::PanelType::PT_ASSET_BROWSER))->GetSelectedDirectory(); } + + Project* Editor::GetProject() + { + return &mProject; + } void Editor::RenderWindow() { @@ -313,6 +319,68 @@ namespace editor ImGui::EndMenu(); } + if (ImGui::BeginMenu("View")) + { + if (ImGui::BeginMenu("Styles")) + { + if (ImGui::MenuItem("Classic")) + { + GUI::GetInstance().SetStyle(GuiStyle::STYLE_DEFAULT_CLASSIC); + } + + if (ImGui::MenuItem("Default Dark")) + { + GUI::GetInstance().SetStyle(GuiStyle::STYLE_DEFAULT_DARK); + } + + if (ImGui::MenuItem("Default Light")) + { + GUI::GetInstance().SetStyle(GuiStyle::STYLE_DEFAULT_LIGHT); + } + + ImGui::Separator(); + + if (ImGui::MenuItem("Deep Dark")) + { + GUI::GetInstance().SetStyle(GuiStyle::STYLE_DEEP_DARK); + } + + if (ImGui::MenuItem("Red Dark")) + { + GUI::GetInstance().SetStyle(GuiStyle::STYLE_RED_DARK); + } + + if (ImGui::MenuItem("Green Blue")) + { + GUI::GetInstance().SetStyle(GuiStyle::STYLE_GREEN_BLUE); + } + + if (ImGui::MenuItem("OverShifted Dark")) + { + GUI::GetInstance().SetStyle(GuiStyle::STYLE_OVERSHIFTED_DARK); + } + + if (ImGui::MenuItem("Charcoal")) + { + GUI::GetInstance().SetStyle(GuiStyle::STYLE_CHARCOAL); + } + + if (ImGui::MenuItem("Corporate Gray")) + { + GUI::GetInstance().SetStyle(GuiStyle::STYLE_CORPORATE_GRAY); + } + + if (ImGui::MenuItem("Corporate Gray 3D")) + { + GUI::GetInstance().SetStyle(GuiStyle::STYLE_CORPORATE_GRAY_3D); + } + + ImGui::EndMenu(); + } + + ImGui::EndMenu(); + } + if (ImGui::BeginMenu("Windows")) { if (ImGui::MenuItem("Reset Window Docking")) diff --git a/src/run_modes/editor/editor.h b/src/run_modes/editor/editor.h index 28d7137..af640e2 100644 --- a/src/run_modes/editor/editor.h +++ b/src/run_modes/editor/editor.h @@ -53,6 +53,7 @@ namespace lunarium { namespace editor bool IsToolOpen(ToolType type) const; std::filesystem::path GetAssetBrowserLocation(); + Project* GetProject(); private: Editor(const Editor&) = delete; diff --git a/src/run_modes/editor/project.cpp b/src/run_modes/editor/project.cpp index 0303333..25fa2ac 100644 --- a/src/run_modes/editor/project.cpp +++ b/src/run_modes/editor/project.cpp @@ -116,4 +116,5 @@ namespace lunarium { namespace editor { return GetContentDirectory() / "assets"; } + }} \ No newline at end of file diff --git a/src/run_modes/editor/tools/map_editor/map_editor.cpp b/src/run_modes/editor/tools/map_editor/map_editor.cpp index a2570bb..1fb7310 100644 --- a/src/run_modes/editor/tools/map_editor/map_editor.cpp +++ b/src/run_modes/editor/tools/map_editor/map_editor.cpp @@ -270,7 +270,7 @@ namespace lunarium { namespace editor Logger::Log(Editor::LogCat, LogLevel::INFO, "Importing tile set: %s", path->string().c_str()); uint64_t id = 0; - ContentManager::GetInstance().ImportFile(*path, mpEditor->GetAssetBrowserLocation() / path->filename(), AssetType::EATYPE_TILE_SET, id).LogIfFailed(Editor::LogCat); + ContentManager::GetInstance().ImportFile(*path, /*mpEditor->GetAssetBrowserLocation() / */ path->filename(), AssetType::EATYPE_TILE_SET, id).LogIfFailed(Editor::LogCat); TileSet* ts = (TileSet*)ContentManager::GetInstance().GetAsset(id); ts->SetTileSize({16, 16}); // NOTE: Hardcoding the tile size for testing diff --git a/src/run_modes/editor/tools/map_editor/panels/map_canvas.cpp b/src/run_modes/editor/tools/map_editor/panels/map_canvas.cpp index f21498e..0861b4f 100644 --- a/src/run_modes/editor/tools/map_editor/panels/map_canvas.cpp +++ b/src/run_modes/editor/tools/map_editor/panels/map_canvas.cpp @@ -37,9 +37,14 @@ namespace lunarium { namespace editor x -= mWorkAreaPos.X; y -= mWorkAreaPos.Y; + // Check that mouse pos is within the window bool is_in_window = x >= 0.0f && x < mWorkAreaSize.X && y >= 0.0f && y < mWorkAreaSize.Y; + // Adjust for scrolling + x += mScrollOffset.X; + y += mScrollOffset.Y; + // Do zooming float wheel = ImGui::GetIO().MouseWheel; if (!(wheel < 0.1f && wheel > -0.1f) && is_in_window) @@ -129,7 +134,7 @@ namespace lunarium { namespace editor ImGui::PushStyleVar( ImGuiStyleVar_WindowRounding, 0.0f ); ImGui::PushStyleVar( ImGuiStyleVar_WindowBorderSize, 0.0f ); ImGui::PushStyleVar( ImGuiStyleVar_WindowPadding, ImVec2( 0.0f, 0.0f ) ); - if (!ImGui::Begin(GetName(), &mIsOpen)) + if (!ImGui::Begin(GetName(), &mIsOpen, ImGuiWindowFlags_NoScrollbar)) { ImGui::PopStyleVar(3); ImGui::End(); diff --git a/test_data/imgui.ini b/test_data/imgui.ini index 6c4bef4..348f42c 100644 --- a/test_data/imgui.ini +++ b/test_data/imgui.ini @@ -1,138 +1,80 @@ -[Window][Debug##Default] -ViewportPos=278,8 -ViewportId=0x9F5F46A1 -Size=400,400 -Collapsed=0 - -[Window][Dear ImGui Demo] -ViewportPos=292,184 -ViewportId=0xE927CF2F -Size=1280,666 -Collapsed=0 - -[Window][Dear ImGui Metrics/Debugger] -ViewportPos=438,264 -ViewportId=0x4AD707D2 -Size=812,295 -Collapsed=0 - -[Window][Lunarium Editor] +[Window][World Tree] Pos=0,24 -Size=1280,672 -Collapsed=0 - -[Window][LUA Console] -ViewportPos=516,220 -ViewportId=0xBCA52B8E -Size=834,396 -Collapsed=0 - -[Window][Debug Log] -Pos=0,470 -Size=1280,226 -Collapsed=0 -DockId=0x00000005,1 - -[Window][About] -ViewportPos=1450,160 -ViewportId=0x74350DE7 -Size=300,480 -Collapsed=0 - -[Window][status bar] -Pos=0,688 -Size=1280,32 -Collapsed=0 - -[Window][Example: Documents] -ViewportPos=687,626 -ViewportId=0x1FD64BEB -Size=641,176 +Size=204,520 Collapsed=0 +DockId=0x00000007,0 +ClassId=0x00000001 -[Window][About Dear ImGui] -Pos=60,60 -Size=568,134 +[Window][World View] +Pos=206,24 +Size=816,520 Collapsed=0 +DockId=0x00000008,0 +ClassId=0x00000001 -[Window][File Browser] -Pos=620,216 -Size=600,400 +[Window][Asset Browser] +Pos=0,546 +Size=1280,174 Collapsed=0 +DockId=0x00000003,0 +ClassId=0x00000001 -[Window][DockSpaceViewport_11111111] -Pos=0,24 -Size=1280,696 +[Window][Properties] +Pos=1024,24 +Size=256,520 Collapsed=0 +DockId=0x00000006,0 +ClassId=0x00000001 -[Window][DockSpace Demo] +[Window][Lunarium Editor] Pos=0,24 Size=1280,696 Collapsed=0 -[Window][DockSpaceViewport_BEB76114] -ViewportPos=100,124 -ViewportId=0xBEB76114 -Size=1280,672 -Collapsed=0 - -[Window][Asset Browser] -Pos=204,493 -Size=878,203 +[Window][Debug##Default] +Pos=60,60 +Size=400,400 Collapsed=0 -DockId=0x00000004,0 -[Window][World Tree] -Pos=0,22 -Size=202,674 +[Window][Map Editor] +ViewportPos=714,179 +ViewportId=0xDAA48CA2 +Size=1060,721 Collapsed=0 -DockId=0x00000005,0 -[Window][World View] -Pos=204,22 -Size=878,469 +[Window][Map Canvas] +ViewportPos=714,179 +ViewportId=0xDAA48CA2 +Pos=8,56 +Size=833,657 Collapsed=0 -DockId=0x00000003,0 +DockId=0x0000000E,0 +ClassId=0x0000044A -[Window][Properties] -Pos=1084,22 -Size=196,674 +[Window][Tile Set View] +ViewportPos=714,179 +ViewportId=0xDAA48CA2 +Pos=843,56 +Size=209,657 Collapsed=0 -DockId=0x00000007,0 - -[Table][0xC9935533,3] -Column 0 Weight=1.0000 -Column 1 Weight=1.0000 -Column 2 Weight=1.0000 - -[Table][0x64418101,3] -RefScale=18 -Column 0 Width=60 -Column 1 Width=60 -Column 2 Width=60 - -[Table][0x47600645,3] -RefScale=18 -Column 0 Width=63 -Column 1 Width=149 -Column 2 Weight=1.0000 - -[Table][0xDE6957FF,6] -RefScale=18 -Column 0 Width=61 -Column 1 Width=193 -Column 2 Width=-1 -Column 3 Weight=1.0000 -Column 4 Weight=1.0000 -Column 5 Weight=-1.0000 +DockId=0x0000000C,0 +ClassId=0x0000044A [Docking][Data] -DockNode ID=0x00000002 Pos=314,118 Size=1280,674 Split=X - DockNode ID=0x00000001 Parent=0x00000002 SizeRef=1082,674 Split=X - DockNode ID=0x00000005 Parent=0x00000001 SizeRef=202,674 Selected=0xFD1747F8 - DockNode ID=0x00000006 Parent=0x00000001 SizeRef=878,674 Split=Y - DockNode ID=0x00000003 Parent=0x00000006 SizeRef=1280,469 Selected=0xB4D4B2AA - DockNode ID=0x00000004 Parent=0x00000006 SizeRef=1280,203 Selected=0xB04EBF39 - DockNode ID=0x00000007 Parent=0x00000002 SizeRef=196,674 Selected=0xC89E3217 -DockSpace ID=0x8B93E3BD Window=0xA787BDB4 Pos=314,120 Size=1280,696 CentralNode=1 +DockSpace ID=0x27CF68A1 Pos=722,235 Size=1044,657 Split=Y + DockNode ID=0x00000009 Parent=0x27CF68A1 SizeRef=1280,538 Split=X + DockNode ID=0x0000000B Parent=0x00000009 SizeRef=1022,538 Split=X + DockNode ID=0x0000000D Parent=0x0000000B SizeRef=204,538 + DockNode ID=0x0000000E Parent=0x0000000B SizeRef=816,538 CentralNode=1 Selected=0xB3CA1100 + DockNode ID=0x0000000C Parent=0x00000009 SizeRef=256,538 Selected=0xB093288C + DockNode ID=0x0000000A Parent=0x27CF68A1 SizeRef=1280,180 +DockSpace ID=0x2F8DD699 Window=0xBEB76114 Pos=100,124 Size=1280,696 Split=Y + DockNode ID=0x00000001 Parent=0x2F8DD699 SizeRef=1280,538 Split=X + DockNode ID=0x00000005 Parent=0x00000001 SizeRef=1022,538 Split=X + DockNode ID=0x00000007 Parent=0x00000005 SizeRef=204,538 Selected=0xFD1747F8 + DockNode ID=0x00000008 Parent=0x00000005 SizeRef=816,538 CentralNode=1 Selected=0xB4D4B2AA + DockNode ID=0x00000006 Parent=0x00000001 SizeRef=256,538 Selected=0xC89E3217 + DockNode ID=0x00000002 Parent=0x2F8DD699 SizeRef=1280,180 Split=X + DockNode ID=0x00000003 Parent=0x00000002 SizeRef=255,180 Selected=0xB04EBF39 + DockNode ID=0x00000004 Parent=0x00000002 SizeRef=1023,180