From 2ff79816ee3f3dc8e7af78621adfaac5166e1d98 Mon Sep 17 00:00:00 2001 From: scawful Date: Thu, 18 Jul 2024 22:58:26 -0400 Subject: [PATCH] remove unused canvas update routines --- src/app/gui/canvas.cc | 65 ++++++++++++++++++++++++++++--------------- src/app/gui/canvas.h | 32 ++++++++++----------- 2 files changed, 56 insertions(+), 41 deletions(-) diff --git a/src/app/gui/canvas.cc b/src/app/gui/canvas.cc index f6ff967a..fadd6e8a 100644 --- a/src/app/gui/canvas.cc +++ b/src/app/gui/canvas.cc @@ -18,20 +18,6 @@ constexpr uint32_t kRectangleBorder = IM_COL32(255, 255, 255, 255); constexpr ImGuiButtonFlags kMouseFlags = ImGuiButtonFlags_MouseButtonLeft | ImGuiButtonFlags_MouseButtonRight; -void Canvas::Update(const gfx::Bitmap &bitmap, ImVec2 bg_size, int tile_size, - float scale, float grid_size) { - if (scale != 1.0f) { - bg_size.x *= scale / 2; - bg_size.y *= scale / 2; - } - DrawBackground(bg_size); - DrawContextMenu(); - DrawTileSelector(tile_size); - DrawBitmap(bitmap, 2, scale); - DrawGrid(grid_size); - DrawOverlay(); -} - void Canvas::UpdateColorPainter(gfx::Bitmap &bitmap, const ImVec4 &color, const std::function &event, int tile_size, float scale) { @@ -46,15 +32,6 @@ void Canvas::UpdateColorPainter(gfx::Bitmap &bitmap, const ImVec4 &color, DrawOverlay(); } -void Canvas::UpdateEvent(const std::function &event, ImVec2 bg_size, - int tile_size, float scale, float grid_size) { - DrawBackground(bg_size); - DrawContextMenu(); - event(); - DrawGrid(grid_size); - DrawOverlay(); -} - void Canvas::UpdateInfoGrid(ImVec2 bg_size, int tile_size, float scale, float grid_size) { enable_custom_labels_ = true; @@ -694,6 +671,48 @@ void Canvas::DrawOverlay() { draw_list_->PopClipRect(); } +void Canvas::DrawLayeredElements() { + // Based on ImGui demo, should be adapted to use for OAM + ImDrawList *draw_list = ImGui::GetWindowDrawList(); + { + ImGui::Text("Blue shape is drawn first: appears in back"); + ImGui::Text("Red shape is drawn after: appears in front"); + ImVec2 p0 = ImGui::GetCursorScreenPos(); + draw_list->AddRectFilled(ImVec2(p0.x, p0.y), ImVec2(p0.x + 50, p0.y + 50), + IM_COL32(0, 0, 255, 255)); // Blue + draw_list->AddRectFilled(ImVec2(p0.x + 25, p0.y + 25), + ImVec2(p0.x + 75, p0.y + 75), + IM_COL32(255, 0, 0, 255)); // Red + ImGui::Dummy(ImVec2(75, 75)); + } + ImGui::Separator(); + { + ImGui::Text("Blue shape is drawn first, into channel 1: appears in front"); + ImGui::Text("Red shape is drawn after, into channel 0: appears in back"); + ImVec2 p1 = ImGui::GetCursorScreenPos(); + + // Create 2 channels and draw a Blue shape THEN a Red shape. + // You can create any number of channels. Tables API use 1 channel per + // column in order to better batch draw calls. + draw_list->ChannelsSplit(2); + draw_list->ChannelsSetCurrent(1); + draw_list->AddRectFilled(ImVec2(p1.x, p1.y), ImVec2(p1.x + 50, p1.y + 50), + IM_COL32(0, 0, 255, 255)); // Blue + draw_list->ChannelsSetCurrent(0); + draw_list->AddRectFilled(ImVec2(p1.x + 25, p1.y + 25), + ImVec2(p1.x + 75, p1.y + 75), + IM_COL32(255, 0, 0, 255)); // Red + + // Flatten/reorder channels. Red shape is in channel 0 and it appears + // below the Blue shape in channel 1. This works by copying draw indices + // only (vertices are not copied). + draw_list->ChannelsMerge(); + ImGui::Dummy(ImVec2(75, 75)); + ImGui::Text( + "After reordering, contents of channel 0 appears below channel 1."); + } +} + } // namespace gui } // namespace app } // namespace yaze \ No newline at end of file diff --git a/src/app/gui/canvas.h b/src/app/gui/canvas.h index baa046c4..b33bf1ec 100644 --- a/src/app/gui/canvas.h +++ b/src/app/gui/canvas.h @@ -56,16 +56,10 @@ class Canvas { } } - void Update(const gfx::Bitmap& bitmap, ImVec2 bg_size, int tile_size, - float scale = 1.0f, float grid_size = 64.0f); - void UpdateColorPainter(gfx::Bitmap& bitmap, const ImVec4& color, const std::function& event, int tile_size, float scale = 1.0f); - void UpdateEvent(const std::function& event, ImVec2 bg_size, - int tile_size, float scale = 1.0f, float grid_size = 64.0f); - void UpdateInfoGrid(ImVec2 bg_size, int tile_size, float scale = 1.0f, float grid_size = 64.0f); @@ -116,6 +110,20 @@ class Canvas { void DrawGridLines(float grid_step); void DrawGrid(float grid_step = 64.0f, int tile_id_offset = 8); void DrawOverlay(); // last + + void DrawLayeredElements(); + + int GetTileIdFromMousePos() { + int x = mouse_pos_in_canvas_.x; + int y = mouse_pos_in_canvas_.y; + int num_columns = canvas_sz_.x / custom_step_; + int num_rows = canvas_sz_.y / custom_step_; + int tile_id = (x / custom_step_) + (y / custom_step_) * num_columns; + if (tile_id >= num_columns * num_rows) { + tile_id = -1; // Invalid tile ID + } + return tile_id; + } void SetCanvasSize(ImVec2 canvas_size) { canvas_sz_ = canvas_size; custom_canvas_size_ = true; @@ -158,18 +166,6 @@ class Canvas { return &labels_[i]; } - int GetTileIdFromMousePos() { - int x = mouse_pos_in_canvas_.x; - int y = mouse_pos_in_canvas_.y; - int num_columns = width() / custom_step_; - int num_rows = height() / custom_step_; - int tile_id = (x / custom_step_) + (y / custom_step_) * num_columns; - if (tile_id >= num_columns * num_rows) { - tile_id = -1; // Invalid tile ID - } - return tile_id; - } - auto set_current_labels(int i) { current_labels_ = i; } auto set_highlight_tile_id(int i) { highlight_tile_id = i; }