Merge commit '60789230be4092f2fbd2b2245949603d7d5513b8'
This commit is contained in:
@ -58,8 +58,8 @@ using Palette = PaletteV3;
|
||||
|
||||
|
||||
struct CompactPaletteV1 {
|
||||
static constexpr auto TypeName = "net.drinkingtea.nostalgia.core.Palette";
|
||||
static constexpr auto TypeVersion = 2;
|
||||
static constexpr auto TypeName = "net.drinkingtea.nostalgia.core.CompactPalette";
|
||||
static constexpr auto TypeVersion = 1;
|
||||
static constexpr auto Preloadable = true;
|
||||
ox::Vector<ox::Vector<Color16>> pages{};
|
||||
};
|
||||
|
@ -293,7 +293,7 @@ ox::Vector<uint8_t> pixels(TileSheet &ts) noexcept;
|
||||
|
||||
using TileSheetV4 = TileSheet;
|
||||
|
||||
struct CompactTileSheet {
|
||||
struct CompactTileSheetV1 {
|
||||
static constexpr auto TypeName = "net.drinkingtea.nostalgia.core.CompactTileSheet";
|
||||
static constexpr auto TypeVersion = 1;
|
||||
int8_t bpp = 0;
|
||||
@ -301,6 +301,8 @@ struct CompactTileSheet {
|
||||
ox::Vector<uint8_t> pixels = {};
|
||||
};
|
||||
|
||||
using CompactTileSheet = CompactTileSheetV1;
|
||||
|
||||
oxModelBegin(TileSheetV1)
|
||||
oxModelField(bpp)
|
||||
oxModelField(rows)
|
||||
@ -355,7 +357,7 @@ oxModelBegin(TileSheetV4)
|
||||
oxModelField(subsheet)
|
||||
oxModelEnd()
|
||||
|
||||
oxModelBegin(CompactTileSheet)
|
||||
oxModelBegin(CompactTileSheetV1)
|
||||
oxModelField(bpp)
|
||||
oxModelField(defaultPalette)
|
||||
oxModelField(pixels)
|
||||
|
@ -38,9 +38,10 @@ static class: public keel::Module {
|
||||
keel::generateTypeDesc<TileSheetV2>,
|
||||
keel::generateTypeDesc<TileSheetV3>,
|
||||
keel::generateTypeDesc<TileSheetV4>,
|
||||
keel::generateTypeDesc<CompactTileSheet>,
|
||||
keel::generateTypeDesc<CompactTileSheetV1>,
|
||||
keel::generateTypeDesc<PaletteV1>,
|
||||
keel::generateTypeDesc<PaletteV2>,
|
||||
keel::generateTypeDesc<CompactPaletteV1>,
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -154,7 +154,7 @@ void TileSheetEditorImGui::keyStateChanged(turbine::Key key, bool down) {
|
||||
m_subsheetEditor.close();
|
||||
m_exportMenu.close();
|
||||
}
|
||||
auto const popupOpen = m_subsheetEditor.isOpen() && m_exportMenu.isOpen();
|
||||
auto const popupOpen = m_subsheetEditor.isOpen() || m_exportMenu.isOpen();
|
||||
auto const pal = m_model.pal();
|
||||
if (!popupOpen) {
|
||||
auto const colorCnt = core::colorCnt(pal, m_model.palettePage());
|
||||
@ -200,6 +200,17 @@ void TileSheetEditorImGui::keyStateChanged(turbine::Key key, bool down) {
|
||||
}
|
||||
|
||||
void TileSheetEditorImGui::draw(studio::StudioContext&) noexcept {
|
||||
auto const popupOpen = m_subsheetEditor.isOpen() || m_exportMenu.isOpen();
|
||||
if (!popupOpen && m_tool == TileSheetTool::Select) {
|
||||
if (ImGui::IsKeyPressed(ImGuiKey_ModCtrl)) {
|
||||
if (ImGui::IsKeyPressed(ImGuiKey_A)) {
|
||||
auto const&img = m_model.activeSubSheet();
|
||||
m_model.setSelection({{}, {img.columns * TileWidth, img.rows * TileHeight}});
|
||||
} else if (ImGui::IsKeyPressed(ImGuiKey_G)) {
|
||||
m_model.clearSelection();
|
||||
}
|
||||
}
|
||||
}
|
||||
auto const paneSize = ImGui::GetContentRegionAvail();
|
||||
auto const tileSheetParentSize = ImVec2(paneSize.x - m_palViewWidth, paneSize.y);
|
||||
auto const fbSize = ox::Vec2(tileSheetParentSize.x - 16, tileSheetParentSize.y - 16);
|
||||
@ -209,10 +220,10 @@ void TileSheetEditorImGui::draw(studio::StudioContext&) noexcept {
|
||||
}
|
||||
ImGui::EndChild();
|
||||
ImGui::SameLine();
|
||||
ImGui::BeginChild("Controls", ImVec2(m_palViewWidth - 8, paneSize.y), true);
|
||||
ImGui::BeginChild("Controls", {m_palViewWidth - 8, paneSize.y}, true);
|
||||
{
|
||||
auto const controlsSize = ImGui::GetContentRegionAvail();
|
||||
ImGui::BeginChild("ToolBox", ImVec2(m_palViewWidth - 24, 30), true);
|
||||
ImGui::BeginChild("ToolBox", {m_palViewWidth - 24, 30}, true);
|
||||
{
|
||||
auto const btnSz = ImVec2(45, 14);
|
||||
if (ImGui::Selectable("Select", m_tool == TileSheetTool::Select, 0, btnSz)) {
|
||||
@ -232,15 +243,15 @@ void TileSheetEditorImGui::draw(studio::StudioContext&) noexcept {
|
||||
ImGui::EndChild();
|
||||
auto const ySize = controlsSize.y - 38;
|
||||
// draw palette/color picker
|
||||
ImGui::BeginChild("Palette", ImVec2(m_palViewWidth - 24, ySize / 2.f), true);
|
||||
ImGui::BeginChild("Palette", {m_palViewWidth - 24, ySize / 2.f}, true);
|
||||
{
|
||||
drawPaletteSelector();
|
||||
}
|
||||
ImGui::EndChild();
|
||||
ImGui::BeginChild("SubSheets", ImVec2(m_palViewWidth - 24, ySize / 2.f), true);
|
||||
ImGui::BeginChild("SubSheets", {m_palViewWidth - 24, ySize / 2.f}, true);
|
||||
{
|
||||
static constexpr auto btnHeight = ig::BtnSz.y;
|
||||
auto const btnSize = ImVec2(btnHeight, btnHeight);
|
||||
auto const btnSize = ImVec2{btnHeight, btnHeight};
|
||||
if (ig::PushButton("+", btnSize)) {
|
||||
auto insertOnIdx = m_model.activeSubSheetIdx();
|
||||
auto const&parent = m_model.activeSubSheet();
|
||||
|
@ -214,10 +214,14 @@ void TileSheetEditorModel::fill(ox::Point const&pt, int palIdx) noexcept {
|
||||
}
|
||||
}
|
||||
|
||||
void TileSheetEditorModel::setSelection(studio::Selection const&sel) noexcept {
|
||||
m_selection.emplace(sel);
|
||||
m_updated = true;
|
||||
}
|
||||
|
||||
void TileSheetEditorModel::select(ox::Point const&pt) noexcept {
|
||||
if (m_selTracker.updateCursorPoint(pt)) {
|
||||
m_selection.emplace(m_selTracker.selection());
|
||||
m_updated = true;
|
||||
setSelection(m_selTracker.selection());
|
||||
}
|
||||
}
|
||||
|
||||
@ -234,6 +238,7 @@ void TileSheetEditorModel::completeSelection() noexcept {
|
||||
|
||||
void TileSheetEditorModel::clearSelection() noexcept {
|
||||
m_updated = true;
|
||||
m_selTracker.reset();
|
||||
m_selection.reset();
|
||||
}
|
||||
|
||||
|
@ -103,6 +103,8 @@ class TileSheetEditorModel: public ox::SignalHandler {
|
||||
|
||||
void fill(ox::Point const&pt, int palIdx) noexcept;
|
||||
|
||||
void setSelection(studio::Selection const&sel) noexcept;
|
||||
|
||||
void select(ox::Point const&pt) noexcept;
|
||||
|
||||
void completeSelection() noexcept;
|
||||
|
@ -111,6 +111,10 @@ class SelectionTracker {
|
||||
allowStart);
|
||||
}
|
||||
|
||||
constexpr void reset() noexcept {
|
||||
m_selectionOngoing = {};
|
||||
}
|
||||
|
||||
constexpr void finishSelection() noexcept {
|
||||
m_selectionOngoing = {};
|
||||
}
|
||||
|
Reference in New Issue
Block a user