diff --git a/src/nostalgia/modules/core/src/studio/paletteeditor-imgui.cpp b/src/nostalgia/modules/core/src/studio/paletteeditor-imgui.cpp index f151f571..4b9b7413 100644 --- a/src/nostalgia/modules/core/src/studio/paletteeditor-imgui.cpp +++ b/src/nostalgia/modules/core/src/studio/paletteeditor-imgui.cpp @@ -42,107 +42,105 @@ const ox::String &PaletteEditorImGui::itemDisplayName() const noexcept { void PaletteEditorImGui::draw(turbine::Context*) noexcept { static constexpr auto flags = ImGuiTableFlags_RowBg; const auto paneSize = ImGui::GetContentRegionAvail(); - ImGui::BeginChild("PaletteEditor"); + ImGui::BeginChild("Colors", ImVec2(paneSize.x - 208, paneSize.y), true); { - ImGui::BeginChild("Colors", ImVec2(paneSize.x - 200, paneSize.y), false); + const auto colorsSz = ImGui::GetContentRegionAvail(); + static constexpr auto toolbarHeight = 40; { - const auto colorsSz = ImGui::GetContentRegionAvail(); - static constexpr auto toolbarHeight = 40; - ImGui::BeginChild("Toolbar", ImVec2(colorsSz.x, toolbarHeight), true); + const auto sz = ImVec2(70, 24); + if (ImGui::Button("Add", sz)) { + const auto colorSz = static_cast(m_pal.colors.size()); + constexpr Color16 c = 0; + undoStack()->push(ox::make(&m_pal, c, colorSz)); + } + ImGui::SameLine(); + ImGui::BeginDisabled(m_selectedRow >= m_pal.colors.size()); { - const auto sz = ImVec2(70, 24); - if (ImGui::Button("Add", sz)) { - const auto colorSz = static_cast(m_pal.colors.size()); - constexpr Color16 c = 0; - undoStack()->push(ox::make(&m_pal, c, colorSz)); + if (ImGui::Button("Remove", sz)) { + undoStack()->push( + ox::make( + &m_pal, + m_pal.colors[static_cast(m_selectedRow)], + static_cast(m_selectedRow))); + m_selectedRow = ox::min(m_pal.colors.size() - 1, m_selectedRow); } ImGui::SameLine(); - ImGui::BeginDisabled(m_selectedRow >= m_pal.colors.size()); + ImGui::BeginDisabled(m_selectedRow <= 0); { - if (ImGui::Button("Remove", sz)) { - undoStack()->push(ox::make(&m_pal, m_pal.colors[static_cast(m_selectedRow)], static_cast(m_selectedRow))); - m_selectedRow = ox::min(m_pal.colors.size() - 1, m_selectedRow); + if (ImGui::Button("Move Up", sz)) { + undoStack()->push(ox::make(&m_pal, m_selectedRow, -1)); + --m_selectedRow; } - ImGui::SameLine(); - ImGui::BeginDisabled(m_selectedRow <= 0); - { - if (ImGui::Button("Move Up", sz)) { - undoStack()->push(ox::make(&m_pal, m_selectedRow, -1)); - --m_selectedRow; - } + } + ImGui::EndDisabled(); + ImGui::SameLine(); + ImGui::BeginDisabled(m_selectedRow >= m_pal.colors.size() - 1); + { + if (ImGui::Button("Move Down", sz)) { + undoStack()->push(ox::make(&m_pal, m_selectedRow, 1)); + ++m_selectedRow; } - ImGui::EndDisabled(); - ImGui::SameLine(); - ImGui::BeginDisabled(m_selectedRow >= m_pal.colors.size() - 1); - { - if (ImGui::Button("Move Down", sz)) { - undoStack()->push(ox::make(&m_pal, m_selectedRow, 1)); - ++m_selectedRow; - } - } - ImGui::EndDisabled(); } ImGui::EndDisabled(); } - ImGui::EndChild(); - ImGui::BeginTable("Colors", 5, flags, ImVec2(colorsSz.x, colorsSz.y - (toolbarHeight + 5))); - { - ImGui::TableSetupColumn("Idx", ImGuiTableColumnFlags_WidthFixed, 25); - ImGui::TableSetupColumn("Red", ImGuiTableColumnFlags_WidthFixed, 50); - ImGui::TableSetupColumn("Green", ImGuiTableColumnFlags_WidthFixed, 50); - ImGui::TableSetupColumn("Blue", ImGuiTableColumnFlags_WidthFixed, 50); - ImGui::TableSetupColumn("Color Preview", ImGuiTableColumnFlags_NoHide); - ImGui::TableHeadersRow(); - for (auto i = 0u; const auto c : m_pal.colors) { - ImGui::PushID(static_cast(i)); - ImGui::TableNextRow(); - // Color No. - ImGui::TableNextColumn(); - ImGui::Text("%d", i); - // Red - ImGui::TableNextColumn(); - ImGui::Text("%d", red16(c)); - // Green - ImGui::TableNextColumn(); - ImGui::Text("%d", green16(c)); - // Blue - ImGui::TableNextColumn(); - ImGui::Text("%d", blue16(c)); - // ColorPreview - ImGui::TableNextColumn(); - const auto ic = ImGui::GetColorU32(ImVec4(redf(c), greenf(c), bluef(c), 1)); - ImGui::TableSetBgColor(ImGuiTableBgTarget_CellBg, ic); - if (ImGui::Selectable("##ColorRow", i == m_selectedRow, ImGuiSelectableFlags_SpanAllColumns)) { - m_selectedRow = i; - } - ImGui::PopID(); - ++i; - } - } - ImGui::EndTable(); + ImGui::EndDisabled(); } - ImGui::EndChild(); - if (m_selectedRow < m_pal.colors.size()) { - ImGui::SameLine(); - ImGui::BeginChild("ColorEditor", ImVec2(200, paneSize.y), true); - { - const auto c = m_pal.colors[m_selectedRow]; - int r = red16(c); - int g = green16(c); - int b = blue16(c); - int a = alpha16(c); - ImGui::InputInt("Red", &r, 1, 5); - ImGui::InputInt("Green", &g, 1, 5); - ImGui::InputInt("Blue", &b, 1, 5); - const auto newColor = color16(r, g, b, a); - if (c != newColor) { - undoStack()->push(ox::make(&m_pal, static_cast(m_selectedRow), c, newColor)); + ImGui::BeginTable("Colors", 5, flags, ImVec2(colorsSz.x, colorsSz.y - (toolbarHeight + 5))); + { + ImGui::TableSetupColumn("Idx", ImGuiTableColumnFlags_WidthFixed, 25); + ImGui::TableSetupColumn("Red", ImGuiTableColumnFlags_WidthFixed, 50); + ImGui::TableSetupColumn("Green", ImGuiTableColumnFlags_WidthFixed, 50); + ImGui::TableSetupColumn("Blue", ImGuiTableColumnFlags_WidthFixed, 50); + ImGui::TableSetupColumn("Color Preview", ImGuiTableColumnFlags_NoHide); + ImGui::TableHeadersRow(); + for (auto i = 0u; const auto c : m_pal.colors) { + ImGui::PushID(static_cast(i)); + ImGui::TableNextRow(); + // Color No. + ImGui::TableNextColumn(); + ImGui::Text("%d", i); + // Red + ImGui::TableNextColumn(); + ImGui::Text("%d", red16(c)); + // Green + ImGui::TableNextColumn(); + ImGui::Text("%d", green16(c)); + // Blue + ImGui::TableNextColumn(); + ImGui::Text("%d", blue16(c)); + // ColorPreview + ImGui::TableNextColumn(); + const auto ic = ImGui::GetColorU32(ImVec4(redf(c), greenf(c), bluef(c), 1)); + ImGui::TableSetBgColor(ImGuiTableBgTarget_CellBg, ic); + if (ImGui::Selectable("##ColorRow", i == m_selectedRow, ImGuiSelectableFlags_SpanAllColumns)) { + m_selectedRow = i; } + ImGui::PopID(); + ++i; } - ImGui::EndChild(); } + ImGui::EndTable(); } ImGui::EndChild(); + if (m_selectedRow < m_pal.colors.size()) { + ImGui::SameLine(); + ImGui::BeginChild("ColorEditor", ImVec2(200, paneSize.y), true); + { + const auto c = m_pal.colors[m_selectedRow]; + int r = red16(c); + int g = green16(c); + int b = blue16(c); + int a = alpha16(c); + ImGui::InputInt("Red", &r, 1, 5); + ImGui::InputInt("Green", &g, 1, 5); + ImGui::InputInt("Blue", &b, 1, 5); + const auto newColor = color16(r, g, b, a); + if (c != newColor) { + undoStack()->push(ox::make(&m_pal, static_cast(m_selectedRow), c, newColor)); + } + } + ImGui::EndChild(); + } } ox::Error PaletteEditorImGui::saveItem() noexcept {