/* * Copyright 2016 - 2022 Gary Talent (gary@drinkingtea.net). All rights reserved. */ #pragma once #include #include #include #include #include #include "tilesheeteditormodel.hpp" #include "tilesheetpixelgrid.hpp" #include "tilesheetpixels.hpp" namespace nostalgia::core { enum class TileSheetTool: int { Select, Draw, Fill, }; [[nodiscard]] constexpr auto toString(TileSheetTool t) noexcept { switch (t) { case TileSheetTool::Select: return "Select"; case TileSheetTool::Draw: return "Draw"; case TileSheetTool::Fill: return "Fill"; } return ""; } class TileSheetEditor { private: TileSheetEditorModel m_model; TileSheetGrid m_pixelGridDrawer; TileSheetPixels m_pixelsDrawer; float m_pixelSizeMod = 1; bool m_updated = false; geo::Vec2 m_scrollOffset; public: TileSheetEditor(Context *ctx, const ox::String &path); ~TileSheetEditor() = default; void cut(); void copy(); void paste(); void draw() noexcept; void click(const geo::Vec2 &paneSize, const geo::Vec2 &clickPos, size_t palIdx) noexcept; void releaseMouseButton() noexcept; void scrollV(const geo::Vec2 &paneSz, float wheel, bool zoomMod) noexcept; void scrollH(const geo::Vec2 &paneSz, float wheel) noexcept; void resizeView(const geo::Vec2 &sz) noexcept; [[nodiscard]] constexpr const NostalgiaGraphic &img() const noexcept; [[nodiscard]] constexpr const NostalgiaPalette &pal() const noexcept; [[nodiscard]] bool updated() const noexcept; void ackUpdate() noexcept; protected: void saveItem(); private: void setPalette(); void saveState(); void restoreState(); [[nodiscard]] ox::String paletteName(const ox::String &palettePath) const; [[nodiscard]] ox::String palettePath(const ox::String &palettePath) const; // slots public: ox::Error colorSelected() noexcept; ox::Error setColorTable() noexcept; }; constexpr const NostalgiaGraphic &TileSheetEditor::img() const noexcept { return m_model.img(); } constexpr const NostalgiaPalette &TileSheetEditor::pal() const noexcept { return m_model.pal(); } }