This commit is contained in:
@ -8,7 +8,7 @@
|
||||
|
||||
namespace nostalgia::gfx {
|
||||
|
||||
RemovePageCommand::RemovePageCommand(Palette &pal, size_t idx) noexcept:
|
||||
RemovePageCommand::RemovePageCommand(Palette &pal, size_t const idx) noexcept:
|
||||
m_pal(pal),
|
||||
m_idx(idx) {}
|
||||
|
||||
|
@ -9,13 +9,13 @@ namespace nostalgia::gfx {
|
||||
|
||||
UpdateColorCommand::UpdateColorCommand(
|
||||
Palette &pal,
|
||||
size_t page,
|
||||
size_t idx,
|
||||
Color16 newColor):
|
||||
m_pal(pal),
|
||||
m_page(page),
|
||||
m_idx(idx),
|
||||
m_altColor(newColor) {
|
||||
size_t const page,
|
||||
size_t const idx,
|
||||
Color16 const newColor):
|
||||
m_pal{pal},
|
||||
m_page{page},
|
||||
m_idx{idx},
|
||||
m_altColor{newColor} {
|
||||
if (color(m_pal, m_page, m_idx) == newColor) {
|
||||
throw studio::NoChangesException();
|
||||
}
|
||||
|
@ -13,20 +13,19 @@ DeleteTilesCommand::DeleteTilesCommand(
|
||||
TileSheet::SubSheetIdx idx,
|
||||
std::size_t const tileIdx,
|
||||
std::size_t const tileCnt) noexcept:
|
||||
m_img(img),
|
||||
m_idx(std::move(idx)) {
|
||||
constexpr unsigned bytesPerTile = PixelsPerTile;
|
||||
m_deletePos = tileIdx * bytesPerTile;
|
||||
m_deleteSz = tileCnt * bytesPerTile;
|
||||
m_deletedPixels.resize(m_deleteSz);
|
||||
m_img{img},
|
||||
m_idx{std::move(idx)},
|
||||
m_deletePos{tileIdx * PixelsPerTile},
|
||||
m_deleteSz{tileCnt * PixelsPerTile},
|
||||
m_deletedPixels{[this] {
|
||||
ox::Vector<uint8_t> deletedPixels(m_deleteSz);
|
||||
// copy pixels to be erased
|
||||
{
|
||||
auto &s = getSubSheet(m_img, m_idx);
|
||||
auto dst = m_deletedPixels.begin();
|
||||
auto src = s.pixels.begin() + m_deletePos;
|
||||
auto const &s = getSubSheet(m_img, m_idx);
|
||||
auto const dst = deletedPixels.begin();
|
||||
auto const src = s.pixels.begin() + m_deletePos;
|
||||
ox::copy_n(src, m_deleteSz, dst);
|
||||
}
|
||||
}
|
||||
return deletedPixels;
|
||||
}()} {}
|
||||
|
||||
ox::Error DeleteTilesCommand::redo() noexcept {
|
||||
auto &s = getSubSheet(m_img, m_idx);
|
||||
|
@ -11,10 +11,10 @@ namespace nostalgia::gfx {
|
||||
class DeleteTilesCommand: public TileSheetCommand {
|
||||
private:
|
||||
TileSheet &m_img;
|
||||
TileSheet::SubSheetIdx m_idx;
|
||||
std::size_t m_deletePos = 0;
|
||||
std::size_t m_deleteSz = 0;
|
||||
ox::Vector<uint8_t> m_deletedPixels = {};
|
||||
TileSheet::SubSheetIdx const m_idx;
|
||||
std::size_t const m_deletePos = 0;
|
||||
std::size_t const m_deleteSz = 0;
|
||||
ox::Vector<uint8_t> const m_deletedPixels;
|
||||
|
||||
public:
|
||||
DeleteTilesCommand(
|
||||
|
@ -62,11 +62,11 @@ constexpr void iterateLine(ox::Point const &a, ox::Point const &b, auto const &f
|
||||
DrawCommand::DrawCommand(
|
||||
TileSheet &img,
|
||||
TileSheet::SubSheetIdx subSheetIdx,
|
||||
std::size_t idx,
|
||||
std::size_t const idx,
|
||||
int const palIdx) noexcept:
|
||||
m_img(img),
|
||||
m_subSheetIdx(std::move(subSheetIdx)),
|
||||
m_palIdx(palIdx) {
|
||||
m_img{img},
|
||||
m_subSheetIdx{std::move(subSheetIdx)},
|
||||
m_palIdx{palIdx} {
|
||||
auto &subsheet = getSubSheet(m_img, m_subSheetIdx);
|
||||
m_changes.emplace_back(static_cast<uint32_t>(idx), getPixel(subsheet, idx));
|
||||
}
|
||||
|
@ -12,19 +12,19 @@ InsertTilesCommand::InsertTilesCommand(
|
||||
std::size_t const tileIdx,
|
||||
std::size_t const tileCnt) noexcept:
|
||||
m_img{img},
|
||||
m_idx{std::move(idx)} {
|
||||
m_insertPos = tileIdx * PixelsPerTile;
|
||||
m_insertCnt = tileCnt * PixelsPerTile;
|
||||
m_deletedPixels.resize(m_insertCnt);
|
||||
m_idx{std::move(idx)},
|
||||
m_insertPos{tileIdx * PixelsPerTile},
|
||||
m_insertCnt{tileCnt * PixelsPerTile},
|
||||
m_insertedPixels{[this] {
|
||||
ox::Vector<uint8_t> insertedPixels(m_insertCnt);
|
||||
// copy pixels to be erased
|
||||
{
|
||||
auto &s = getSubSheet(m_img, m_idx);
|
||||
auto &p = s.pixels;
|
||||
auto const dst = m_deletedPixels.begin();
|
||||
auto const dst = insertedPixels.begin();
|
||||
auto const src = p.begin() + p.size() - m_insertCnt;
|
||||
ox::copy_n(src, m_insertCnt, dst);
|
||||
}
|
||||
}
|
||||
return insertedPixels;
|
||||
}()} {}
|
||||
|
||||
OX_ALLOW_UNSAFE_BUFFERS_BEGIN
|
||||
|
||||
@ -52,7 +52,7 @@ ox::Error InsertTilesCommand::undo() noexcept {
|
||||
auto const src = &p[srcIdx];
|
||||
ox::memmove(dst1, src, sz);
|
||||
}
|
||||
ox::memcpy(dst2, m_deletedPixels.data(), m_deletedPixels.size());
|
||||
ox::memcpy(dst2, m_insertedPixels.data(), m_insertedPixels.size());
|
||||
return {};
|
||||
}
|
||||
|
||||
|
@ -11,10 +11,10 @@ namespace nostalgia::gfx {
|
||||
class InsertTilesCommand: public TileSheetCommand {
|
||||
private:
|
||||
TileSheet &m_img;
|
||||
TileSheet::SubSheetIdx m_idx;
|
||||
std::size_t m_insertPos = 0;
|
||||
std::size_t m_insertCnt = 0;
|
||||
ox::Vector<uint8_t> m_deletedPixels = {};
|
||||
TileSheet::SubSheetIdx const m_idx;
|
||||
std::size_t const m_insertPos{};
|
||||
std::size_t const m_insertCnt{};
|
||||
ox::Vector<uint8_t> const m_insertedPixels;
|
||||
|
||||
public:
|
||||
InsertTilesCommand(
|
||||
|
@ -15,7 +15,6 @@ UpdateSubSheetCommand::UpdateSubSheetCommand(
|
||||
m_img{img},
|
||||
m_idx{std::move(idx)},
|
||||
m_sheet{getSubSheet(m_img, m_idx)} {
|
||||
m_sheet = getSubSheet(m_img, m_idx);
|
||||
m_sheet.name = std::move(name);
|
||||
OX_THROW_ERROR(resizeSubsheet(m_sheet, {cols, rows}));
|
||||
}
|
||||
|
@ -11,7 +11,7 @@ namespace nostalgia::gfx {
|
||||
class UpdateSubSheetCommand: public TileSheetCommand {
|
||||
private:
|
||||
TileSheet &m_img;
|
||||
TileSheet::SubSheetIdx m_idx;
|
||||
TileSheet::SubSheetIdx const m_idx;
|
||||
TileSheet::SubSheet m_sheet;
|
||||
|
||||
public:
|
||||
|
Reference in New Issue
Block a user