summaryrefslogtreecommitdiffhomepage
path: root/editor
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2023-03-03 22:40:50 +0100
committerStanislaw Halik <sthalik@misaki.pl>2023-03-03 22:40:50 +0100
commita6fc3e36dcffe8b42bffa0af349ff7424bdf38c4 (patch)
tree97e67ee26938fc211f3cd419760459f866a1f628 /editor
parent98a2cc9c8e05eadd15791c24f4e86e501095514d (diff)
editor/imgui: move to separate files
Diffstat (limited to 'editor')
-rw-r--r--editor/imgui-editors.cpp (renamed from editor/imgui-scenery.cpp)47
-rw-r--r--editor/imgui-misc.cpp51
-rw-r--r--editor/imgui.cpp103
3 files changed, 99 insertions, 102 deletions
diff --git a/editor/imgui-scenery.cpp b/editor/imgui-editors.cpp
index e418924c..cdc99c69 100644
--- a/editor/imgui-scenery.cpp
+++ b/editor/imgui-editors.cpp
@@ -4,6 +4,7 @@
#include "anim-atlas.hpp"
#include "loader/loader.hpp"
#include "floormat/main.hpp"
+#include <Magnum/Math/Color.h>
namespace floormat {
@@ -90,4 +91,50 @@ void app::draw_editor_scenery_pane(scenery_editor& ed)
}
}
+void app::draw_editor_pane(float main_menu_height)
+{
+ auto* ed = _editor.current_tile_editor();
+ auto* sc = _editor.current_scenery_editor();
+ fm_assert(!ed || !sc);
+
+ const auto window_size = M->window_size();
+ const auto dpi = M->dpi_scale();
+
+ if (const bool active = M->is_text_input_active();
+ ImGui::GetIO().WantTextInput != active)
+ active ? M->start_text_input() : M->stop_text_input();
+
+ [[maybe_unused]] const raii_wrapper vars[] = {
+ push_style_var(ImGuiStyleVar_WindowPadding, {8*dpi[0], 8*dpi[1]}),
+ push_style_var(ImGuiStyleVar_WindowBorderSize, 0),
+ push_style_var(ImGuiStyleVar_FramePadding, {4*dpi[0], 4*dpi[1]}),
+ push_style_color(ImGuiCol_WindowBg, {0, 0, 0, .5}),
+ push_style_color(ImGuiCol_FrameBg, {0, 0, 0, 0}),
+ };
+
+ const auto& style = ImGui::GetStyle();
+
+ if (main_menu_height > 0)
+ {
+ const auto b = push_id("editor");
+
+ ImGui::SetNextWindowPos({0, main_menu_height+style.WindowPadding.y});
+ ImGui::SetNextFrameWantCaptureKeyboard(false);
+ ImGui::SetNextWindowSize({425 * dpi[0], window_size[1] - main_menu_height - style.WindowPadding.y});
+ if (const auto flags = ImGuiWindowFlags_(ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoSavedSettings);
+ auto b = begin_window({}, nullptr, flags))
+ {
+ const auto b2 = push_id("editor-pane");
+ if (auto b3 = begin_list_box("##atlases", {-FLT_MIN, -1}))
+ {
+ if (ed)
+ for (const auto& [k, v] : *ed)
+ draw_editor_tile_pane_atlas(*ed, k, v);
+ else if (sc)
+ draw_editor_scenery_pane(*sc);
+ }
+ }
+ }
+}
+
} // namespace floormat
diff --git a/editor/imgui-misc.cpp b/editor/imgui-misc.cpp
new file mode 100644
index 00000000..82320244
--- /dev/null
+++ b/editor/imgui-misc.cpp
@@ -0,0 +1,51 @@
+#include "app.hpp"
+#include "floormat/main.hpp"
+#include "imgui-raii.hpp"
+#include "compat/format.hpp"
+
+namespace floormat {
+using namespace floormat::imgui;
+
+
+void app::draw_fps()
+{
+ const auto dpi = M->dpi_scale();
+ const auto frame_time = M->smoothed_dt();
+ char buf[16];
+ const double hz = frame_time > 1e-6f ? (int)std::round(10./(double)frame_time + .05) * .1 : 9999;
+ snformat(buf, "{:.1f} FPS"_cf, hz);
+ const ImVec2 size = ImGui::CalcTextSize(buf);
+ ImDrawList& draw = *ImGui::GetForegroundDrawList();
+ draw.AddText(nullptr, ImGui::GetCurrentContext()->FontSize,
+ {M->window_size()[0] - size.x - 3.5f*dpi[0], 3*dpi[1]}, ImGui::ColorConvertFloat4ToU32({0, 1, 0, 1}), buf);
+#if 0
+ static auto timer = fm_begin( Timeline t; t.start(); return t; );
+ if (timer.currentFrameDuration() >= 2)
+ {
+ timer.start();
+ std::printf("FPS %f\n", (double)(frame_time > 1e-6f ? 1/frame_time : 0));
+ std::fflush(stdout);
+ }
+#endif
+}
+
+void app::draw_tile_under_cursor()
+{
+ if (!cursor.tile)
+ return;
+
+ const auto dpi = M->dpi_scale();
+ char buf[64];
+ const auto coord = *cursor.tile;
+ const auto chunk = coord.chunk();
+ const auto local = coord.local();
+ snformat(buf, "{}:{} - {}:{}"_cf, chunk.x, chunk.y, local.x, local.y);
+ const auto size = ImGui::CalcTextSize(buf);
+ const auto window_size = M->window_size();
+
+ ImDrawList& draw = *ImGui::GetForegroundDrawList();
+ draw.AddText(nullptr, ImGui::GetCurrentContext()->FontSize,
+ {window_size[0]*.5f - size.x/2, 3*dpi[1]}, (unsigned)-1, buf);
+}
+
+} // namespace floormat
diff --git a/editor/imgui.cpp b/editor/imgui.cpp
index d7df452d..6a700c33 100644
--- a/editor/imgui.cpp
+++ b/editor/imgui.cpp
@@ -1,14 +1,10 @@
#include "app.hpp"
#include "floormat/main.hpp"
#include "compat/format.hpp"
-#include "imgui-raii.hpp"
#include "src/world.hpp"
#include "src/anim-atlas.hpp"
-#include "floormat/main.hpp"
#include "main/clickable.hpp"
-#include <Corrade/Containers/Optional.h>
-#include <Magnum/Math/Color.h>
-#include <imgui.h>
+#include "imgui-raii.hpp"
namespace floormat {
@@ -37,16 +33,6 @@ float app::draw_main_menu()
ImGui::SetWindowFontScale(M->dpi_scale().min());
if (auto b = begin_menu("File"))
{
-#if 0
- ImGui::MenuItem("Open", "Ctrl+O");
- ImGui::MenuItem("Recent");
- ImGui::Separator();
- ImGui::MenuItem("Save", "Ctrl+S");
- ImGui::MenuItem("Save as...", "Ctrl+Shift+S");
- ImGui::Separator();
- ImGui::MenuItem("Close");
- ImGui::Separator();
-#endif
bool do_new = false, do_quickload = false, do_quit = false;
ImGui::MenuItem("New", nullptr, &do_new);
ImGui::Separator();
@@ -117,47 +103,6 @@ void app::draw_ui()
ImGui::EndFrame();
}
-void app::draw_fps()
-{
- const auto dpi = M->dpi_scale();
- const auto frame_time = M->smoothed_dt();
- char buf[16];
- const double hz = frame_time > 1e-6f ? (int)std::round(10./(double)frame_time + .05) * .1 : 9999;
- snformat(buf, "{:.1f} FPS"_cf, hz);
- const ImVec2 size = ImGui::CalcTextSize(buf);
- ImDrawList& draw = *ImGui::GetForegroundDrawList();
- draw.AddText(nullptr, ImGui::GetCurrentContext()->FontSize,
- {M->window_size()[0] - size.x - 3.5f*dpi[0], 3*dpi[1]}, ImGui::ColorConvertFloat4ToU32({0, 1, 0, 1}), buf);
-#if 0
- static auto timer = fm_begin( Timeline t; t.start(); return t; );
- if (timer.currentFrameDuration() >= 2)
- {
- timer.start();
- std::printf("FPS %f\n", (double)(frame_time > 1e-6f ? 1/frame_time : 0));
- std::fflush(stdout);
- }
-#endif
-}
-
-void app::draw_tile_under_cursor()
-{
- if (!cursor.tile)
- return;
-
- const auto dpi = M->dpi_scale();
- char buf[64];
- const auto coord = *cursor.tile;
- const auto chunk = coord.chunk();
- const auto local = coord.local();
- snformat(buf, "{}:{} - {}:{}"_cf, chunk.x, chunk.y, local.x, local.y);
- const auto size = ImGui::CalcTextSize(buf);
- const auto window_size = M->window_size();
-
- ImDrawList& draw = *ImGui::GetForegroundDrawList();
- draw.AddText(nullptr, ImGui::GetCurrentContext()->FontSize,
- {window_size[0]*.5f - size.x/2, 3*dpi[1]}, (unsigned)-1, buf);
-}
-
void app::draw_clickables()
{
ImDrawList& draw = *ImGui::GetForegroundDrawList();
@@ -172,52 +117,6 @@ void app::draw_clickables()
}
}
-void app::draw_editor_pane(float main_menu_height)
-{
- auto* ed = _editor.current_tile_editor();
- auto* sc = _editor.current_scenery_editor();
- fm_assert(!ed || !sc);
-
- const auto window_size = M->window_size();
- const auto dpi = M->dpi_scale();
-
- if (const bool active = M->is_text_input_active();
- ImGui::GetIO().WantTextInput != active)
- active ? M->start_text_input() : M->stop_text_input();
-
- [[maybe_unused]] const raii_wrapper vars[] = {
- push_style_var(ImGuiStyleVar_WindowPadding, {8*dpi[0], 8*dpi[1]}),
- push_style_var(ImGuiStyleVar_WindowBorderSize, 0),
- push_style_var(ImGuiStyleVar_FramePadding, {4*dpi[0], 4*dpi[1]}),
- push_style_color(ImGuiCol_WindowBg, {0, 0, 0, .5}),
- push_style_color(ImGuiCol_FrameBg, {0, 0, 0, 0}),
- };
-
- const auto& style = ImGui::GetStyle();
-
- if (main_menu_height > 0)
- {
- const auto b = push_id("editor");
-
- ImGui::SetNextWindowPos({0, main_menu_height+style.WindowPadding.y});
- ImGui::SetNextFrameWantCaptureKeyboard(false);
- ImGui::SetNextWindowSize({425 * dpi[0], window_size[1] - main_menu_height - style.WindowPadding.y});
- if (const auto flags = ImGuiWindowFlags_(ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoSavedSettings);
- auto b = begin_window({}, nullptr, flags))
- {
- const auto b2 = push_id("editor-pane");
- if (auto b3 = begin_list_box("##atlases", {-FLT_MIN, -1}))
- {
- if (ed)
- for (const auto& [k, v] : *ed)
- draw_editor_tile_pane_atlas(*ed, k, v);
- else if (sc)
- draw_editor_scenery_pane(*sc);
- }
- }
- }
-}
-
const StringView app::SCENERY_POPUP_NAME = "##scenery-popup"_s;
void app::do_open_popup()