Compare commits
2 Commits
b4798fd2ab
...
00638bc812
Author | SHA1 | Date | |
---|---|---|---|
00638bc812 | |||
e002109829 |
@ -63,7 +63,7 @@ DrawCommand::DrawCommand(
|
|||||||
TileSheet &img,
|
TileSheet &img,
|
||||||
TileSheet::SubSheetIdx subSheetIdx,
|
TileSheet::SubSheetIdx subSheetIdx,
|
||||||
std::size_t idx,
|
std::size_t idx,
|
||||||
int palIdx) noexcept:
|
int const palIdx) noexcept:
|
||||||
m_img(img),
|
m_img(img),
|
||||||
m_subSheetIdx(std::move(subSheetIdx)),
|
m_subSheetIdx(std::move(subSheetIdx)),
|
||||||
m_palIdx(palIdx) {
|
m_palIdx(palIdx) {
|
||||||
@ -75,7 +75,7 @@ DrawCommand::DrawCommand(
|
|||||||
TileSheet &img,
|
TileSheet &img,
|
||||||
TileSheet::SubSheetIdx subSheetIdx,
|
TileSheet::SubSheetIdx subSheetIdx,
|
||||||
ox::SpanView<std::size_t> const&idxList,
|
ox::SpanView<std::size_t> const&idxList,
|
||||||
int palIdx) noexcept:
|
int const palIdx) noexcept:
|
||||||
m_img(img),
|
m_img(img),
|
||||||
m_subSheetIdx(std::move(subSheetIdx)),
|
m_subSheetIdx(std::move(subSheetIdx)),
|
||||||
m_palIdx(palIdx) {
|
m_palIdx(palIdx) {
|
||||||
@ -123,7 +123,9 @@ void DrawCommand::lineUpdate(ox::Point a, ox::Point b) noexcept {
|
|||||||
for (int32_t i{}; i < range; ++i) {
|
for (int32_t i{}; i < range; ++i) {
|
||||||
auto const idx = ptToIdx(x, y + i * mod, ss.columns * TileWidth);
|
auto const idx = ptToIdx(x, y + i * mod, ss.columns * TileWidth);
|
||||||
if (idx < ss.pixels.size()) {
|
if (idx < ss.pixels.size()) {
|
||||||
m_changes.emplace_back(static_cast<uint32_t>(idx), getPixel(ss, idx));
|
if (m_palIdx != getPixel(ss, idx)) {
|
||||||
|
m_changes.emplace_back(static_cast<uint32_t>(idx), getPixel(ss, idx));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -154,4 +156,8 @@ TileSheet::SubSheetIdx const&DrawCommand::subsheetIdx() const noexcept {
|
|||||||
return m_subSheetIdx;
|
return m_subSheetIdx;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DrawCommand::finish() noexcept {
|
||||||
|
setObsolete(m_changes.empty());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -52,6 +52,8 @@ class DrawCommand: public TileSheetCommand {
|
|||||||
[[nodiscard]]
|
[[nodiscard]]
|
||||||
TileSheet::SubSheetIdx const&subsheetIdx() const noexcept override;
|
TileSheet::SubSheetIdx const&subsheetIdx() const noexcept override;
|
||||||
|
|
||||||
|
void finish() noexcept;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -172,7 +172,7 @@ void TileSheetEditorModel::drawLineCommand(ox::Point const &pt, std::size_t cons
|
|||||||
if (m_ongoingDrawCommand) {
|
if (m_ongoingDrawCommand) {
|
||||||
m_ongoingDrawCommand->lineUpdate(m_lineStartPt, pt);
|
m_ongoingDrawCommand->lineUpdate(m_lineStartPt, pt);
|
||||||
m_updated = true;
|
m_updated = true;
|
||||||
} else if (getPixel(activeSubSheet, idx) != palIdx) {
|
} else {
|
||||||
std::ignore = pushCommand(ox::make<DrawCommand>(
|
std::ignore = pushCommand(ox::make<DrawCommand>(
|
||||||
m_img, m_activeSubsSheetIdx, idx, static_cast<int>(palIdx)));
|
m_img, m_activeSubsSheetIdx, idx, static_cast<int>(palIdx)));
|
||||||
m_lineStartPt = pt;
|
m_lineStartPt = pt;
|
||||||
@ -180,7 +180,10 @@ void TileSheetEditorModel::drawLineCommand(ox::Point const &pt, std::size_t cons
|
|||||||
}
|
}
|
||||||
|
|
||||||
void TileSheetEditorModel::endDrawCommand() noexcept {
|
void TileSheetEditorModel::endDrawCommand() noexcept {
|
||||||
m_ongoingDrawCommand = nullptr;
|
if (m_ongoingDrawCommand) {
|
||||||
|
m_ongoingDrawCommand->finish();
|
||||||
|
m_ongoingDrawCommand = nullptr;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void TileSheetEditorModel::addSubsheet(TileSheet::SubSheetIdx const&parentIdx) noexcept {
|
void TileSheetEditorModel::addSubsheet(TileSheet::SubSheetIdx const&parentIdx) noexcept {
|
||||||
|
@ -7,9 +7,7 @@
|
|||||||
namespace studio {
|
namespace studio {
|
||||||
|
|
||||||
ox::Error UndoStack::push(ox::UPtr<UndoCommand> &&cmd) noexcept {
|
ox::Error UndoStack::push(ox::UPtr<UndoCommand> &&cmd) noexcept {
|
||||||
for (auto const i = m_stackIdx; i < m_stack.size();) {
|
m_stack.resize(m_stackIdx);
|
||||||
std::ignore = m_stack.erase(i);
|
|
||||||
}
|
|
||||||
OX_RETURN_ERROR(cmd->redo());
|
OX_RETURN_ERROR(cmd->redo());
|
||||||
redoTriggered.emit(cmd.get());
|
redoTriggered.emit(cmd.get());
|
||||||
changeTriggered.emit(cmd.get());
|
changeTriggered.emit(cmd.get());
|
||||||
@ -25,22 +23,29 @@ ox::Error UndoStack::push(ox::UPtr<UndoCommand> &&cmd) noexcept {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ox::Error UndoStack::redo() noexcept {
|
ox::Error UndoStack::redo() noexcept {
|
||||||
if (m_stackIdx < m_stack.size()) {
|
while (m_stackIdx < m_stack.size()) {
|
||||||
auto &c = m_stack[m_stackIdx];
|
auto const &c = m_stack[m_stackIdx];
|
||||||
OX_RETURN_ERROR(c->redo());
|
|
||||||
++m_stackIdx;
|
++m_stackIdx;
|
||||||
redoTriggered.emit(c.get());
|
if (!c->isObsolete()) {
|
||||||
changeTriggered.emit(c.get());
|
OX_RETURN_ERROR(c->redo());
|
||||||
|
redoTriggered.emit(c.get());
|
||||||
|
changeTriggered.emit(c.get());
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
ox::Error UndoStack::undo() noexcept {
|
ox::Error UndoStack::undo() noexcept {
|
||||||
if (m_stackIdx) {
|
while (m_stackIdx) {
|
||||||
auto &c = m_stack[--m_stackIdx];
|
--m_stackIdx;
|
||||||
OX_RETURN_ERROR(c->undo());
|
auto const &c = m_stack[m_stackIdx];
|
||||||
undoTriggered.emit(c.get());
|
if (!c->isObsolete()) {
|
||||||
changeTriggered.emit(c.get());
|
OX_RETURN_ERROR(c->undo());
|
||||||
|
undoTriggered.emit(c.get());
|
||||||
|
changeTriggered.emit(c.get());
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user