Compare commits

...

3 Commits

Author SHA1 Message Date
9ff614095f [nostalgia/gfx/studio/tilesheet] Fix Delete Tile functionality
All checks were successful
Build / build (push) Successful in 1m16s
2025-05-08 02:05:58 -05:00
0168c52183 [keel] Cleanup 2025-05-08 02:05:58 -05:00
253455efc4 [keel] Cleanup 2025-05-08 02:05:40 -05:00
3 changed files with 19 additions and 14 deletions

View File

@ -8,14 +8,14 @@
namespace nostalgia::gfx { namespace nostalgia::gfx {
gfx::DeleteTilesCommand::DeleteTilesCommand( DeleteTilesCommand::DeleteTilesCommand(
TileSheet &img, TileSheet &img,
TileSheet::SubSheetIdx idx, TileSheet::SubSheetIdx idx,
std::size_t tileIdx, std::size_t const tileIdx,
std::size_t tileCnt) noexcept: std::size_t const tileCnt) noexcept:
m_img(img), m_img(img),
m_idx(std::move(idx)) { m_idx(std::move(idx)) {
const unsigned bytesPerTile = m_img.bpp == 4 ? PixelsPerTile / 2 : PixelsPerTile; constexpr unsigned bytesPerTile = PixelsPerTile;
m_deletePos = tileIdx * bytesPerTile; m_deletePos = tileIdx * bytesPerTile;
m_deleteSz = tileCnt * bytesPerTile; m_deleteSz = tileCnt * bytesPerTile;
m_deletedPixels.resize(m_deleteSz); m_deletedPixels.resize(m_deleteSz);
@ -31,13 +31,17 @@ gfx::DeleteTilesCommand::DeleteTilesCommand(
ox::Error gfx::DeleteTilesCommand::redo() noexcept { ox::Error gfx::DeleteTilesCommand::redo() noexcept {
auto &s = getSubSheet(m_img, m_idx); auto &s = getSubSheet(m_img, m_idx);
auto &p = s.pixels; auto &p = s.pixels;
auto srcPos = m_deletePos + m_deleteSz; auto const srcPos = m_deletePos + m_deleteSz;
auto const src = &p[srcPos];
auto const dst1 = &p[m_deletePos]; auto const dst1 = &p[m_deletePos];
auto const dst2 = &p[(p.size() - m_deleteSz)]; auto const dst2 = &p[(p.size() - m_deleteSz)];
OX_ALLOW_UNSAFE_BUFFERS_BEGIN OX_ALLOW_UNSAFE_BUFFERS_BEGIN
if (srcPos < p.size()) {
auto const src = &p[srcPos];
ox::memmove(dst1, src, p.size() - srcPos); ox::memmove(dst1, src, p.size() - srcPos);
ox::memset(dst2, 0, m_deleteSz * sizeof(decltype(p[0]))); ox::memset(dst2, 0, m_deleteSz * sizeof(decltype(p[0])));
} else {
ox::memset(dst1, 0, p.size() - m_deletePos);
}
OX_ALLOW_UNSAFE_BUFFERS_END OX_ALLOW_UNSAFE_BUFFERS_END
return {}; return {};
} }
@ -46,11 +50,14 @@ ox::Error DeleteTilesCommand::undo() noexcept {
auto &s = getSubSheet(m_img, m_idx); auto &s = getSubSheet(m_img, m_idx);
auto &p = s.pixels; auto &p = s.pixels;
auto const src = &p[m_deletePos]; auto const src = &p[m_deletePos];
auto const dst1 = &p[m_deletePos + m_deleteSz];
auto const dst2 = src;
auto const sz = p.size() - m_deletePos - m_deleteSz; auto const sz = p.size() - m_deletePos - m_deleteSz;
auto const srcPos = m_deletePos + m_deleteSz;
OX_ALLOW_UNSAFE_BUFFERS_BEGIN OX_ALLOW_UNSAFE_BUFFERS_BEGIN
if (srcPos < p.size()) {
auto const dst1 = &p[m_deletePos + m_deleteSz];
ox::memmove(dst1, src, sz); ox::memmove(dst1, src, sz);
}
auto const dst2 = src;
ox::memcpy(dst2, m_deletedPixels.data(), m_deletedPixels.size()); ox::memcpy(dst2, m_deletedPixels.data(), m_deletedPixels.size());
OX_ALLOW_UNSAFE_BUFFERS_END OX_ALLOW_UNSAFE_BUFFERS_END
return {}; return {};

View File

@ -12,8 +12,6 @@
namespace keel { namespace keel {
class Context;
class Context { class Context {
public: public:
ox::UPtr<ox::FileSystem> rom; ox::UPtr<ox::FileSystem> rom;

View File

@ -182,7 +182,7 @@ ox::Result<ox::CStringView> uuidToPath(Context &ctx, ox::UUID const&uuid) noexce
#endif #endif
} }
ox::Error reloadAsset(keel::Context &ctx, ox::StringViewCR assetId) noexcept { ox::Error reloadAsset(Context &ctx, ox::StringViewCR assetId) noexcept {
if (beginsWith(assetId, "uuid://")) { if (beginsWith(assetId, "uuid://")) {
return ctx.assetManager.reloadAsset(substr(assetId, 7)); return ctx.assetManager.reloadAsset(substr(assetId, 7));
} else { } else {