/* * 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 TileSheetEditorView: public ox::SignalHandler { private: TileSheetEditorModel m_model; TileSheetGrid m_pixelGridDrawer; TileSheetPixels m_pixelsDrawer; geo::Vec2 m_viewSize; float m_pixelSizeMod = 1; bool m_updated = false; geo::Vec2 m_scrollOffset; std::size_t m_palIdx = 0; public: TileSheetEditorView(Context *ctx, const ox::String &path); ~TileSheetEditorView() override = default; void draw() noexcept; void click(const geo::Vec2 &paneSize, const geo::Vec2 &clickPos) 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 TileSheet &img() const noexcept; [[nodiscard]] constexpr TileSheet &img() noexcept; [[nodiscard]] constexpr const Palette &pal() const noexcept; [[nodiscard]] constexpr auto *model() noexcept { return &m_model; } [[nodiscard]] constexpr auto *model() const noexcept { return &m_model; } constexpr auto setPalIdx(auto palIdx) noexcept { m_palIdx = palIdx; } [[nodiscard]] constexpr auto palIdx() const noexcept { return m_palIdx; } [[nodiscard]] bool updated() const noexcept; void ackUpdate() noexcept; private: void initView() noexcept; 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 ox::Error setActiveSubsheet(const TileSheet::SubSheetIdx &idx) noexcept; public: ox::Error colorSelected() noexcept; ox::Error setColorTable() noexcept; }; constexpr const TileSheet &TileSheetEditorView::img() const noexcept { return m_model.img(); } constexpr TileSheet &TileSheetEditorView::img() noexcept { return m_model.img(); } constexpr const Palette &TileSheetEditorView::pal() const noexcept { return m_model.pal(); } }