From aef2148ed06065712169892c484a0cd6db0b54fd Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Thu, 8 Jul 2021 00:57:40 +0300 Subject: [PATCH] Moved hasUndo and hasRedo from Editor::Paint to Editor::Scene. --- Telegram/SourceFiles/editor/editor_paint.cpp | 18 ++++-------------- Telegram/SourceFiles/editor/editor_paint.h | 2 -- Telegram/SourceFiles/editor/scene/scene.cpp | 8 ++++++++ Telegram/SourceFiles/editor/scene/scene.h | 3 +++ 4 files changed, 15 insertions(+), 16 deletions(-) diff --git a/Telegram/SourceFiles/editor/editor_paint.cpp b/Telegram/SourceFiles/editor/editor_paint.cpp index f8f5d38cbf..a1bdaccf49 100644 --- a/Telegram/SourceFiles/editor/editor_paint.cpp +++ b/Telegram/SourceFiles/editor/editor_paint.cpp @@ -81,8 +81,8 @@ Paint::Paint( (*it)->setVisible(!isUndo); } - _hasUndo = hasUndo(); - _hasRedo = hasRedo(); + _hasUndo = _scene->hasUndo(); + _hasRedo = _scene->hasRedo(); }, lifetime()); controllers->undoController->setCanPerformChanges(rpl::merge( @@ -217,16 +217,6 @@ void Paint::keepResult() { }) | ranges::to_vector; } -bool Paint::hasUndo() const { - return ranges::any_of(_scene->items(), &QGraphicsItem::isVisible); -} - -bool Paint::hasRedo() const { - return ranges::any_of( - _scene->items(), - [=](const ItemPtr &i) { return isItemHidden(i); }); -} - void Paint::clearRedoList() { const auto items = _scene->items(Qt::AscendingOrder); auto &&filtered = ranges::views::all( @@ -252,8 +242,8 @@ bool Paint::isItemToRemove(const ItemPtr &item) const { } void Paint::updateUndoState() { - _hasUndo = hasUndo(); - _hasRedo = hasRedo(); + _hasUndo = _scene->hasUndo(); + _hasRedo = _scene->hasRedo(); } void Paint::applyBrush(const Brush &brush) { diff --git a/Telegram/SourceFiles/editor/editor_paint.h b/Telegram/SourceFiles/editor/editor_paint.h index a255f4e41b..80b3b2b87c 100644 --- a/Telegram/SourceFiles/editor/editor_paint.h +++ b/Telegram/SourceFiles/editor/editor_paint.h @@ -49,8 +49,6 @@ private: ItemBase::Data itemBaseData() const; - bool hasUndo() const; - bool hasRedo() const; void clearRedoList(); bool isItemToRemove(const std::shared_ptr &item) const; diff --git a/Telegram/SourceFiles/editor/scene/scene.cpp b/Telegram/SourceFiles/editor/scene/scene.cpp index df9d4020fb..53803fb104 100644 --- a/Telegram/SourceFiles/editor/scene/scene.cpp +++ b/Telegram/SourceFiles/editor/scene/scene.cpp @@ -163,6 +163,14 @@ void Scene::restoreItemsState(SaveState state) { } } +bool Scene::hasUndo() const { + return ranges::any_of(_items, &NumberedItem::isNormalStatus); +} + +bool Scene::hasRedo() const { + return ranges::any_of(_items, &NumberedItem::isUndidStatus); +} + Scene::~Scene() { // Prevent destroying by scene of all items. QGraphicsScene::removeItem(_canvas.get()); diff --git a/Telegram/SourceFiles/editor/scene/scene.h b/Telegram/SourceFiles/editor/scene/scene.h index 810bb99cb1..930866861a 100644 --- a/Telegram/SourceFiles/editor/scene/scene.h +++ b/Telegram/SourceFiles/editor/scene/scene.h @@ -49,6 +49,9 @@ public: void saveItemsState(SaveState state); void restoreItemsState(SaveState state); + + [[nodiscard]] bool hasUndo() const; + [[nodiscard]] bool hasRedo() const; protected: void mousePressEvent(QGraphicsSceneMouseEvent *event) override; void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override;