diff --git a/Telegram/SourceFiles/editor/editor_paint.cpp b/Telegram/SourceFiles/editor/editor_paint.cpp index d842d506f..efe8e35b3 100644 --- a/Telegram/SourceFiles/editor/editor_paint.cpp +++ b/Telegram/SourceFiles/editor/editor_paint.cpp @@ -138,6 +138,12 @@ Paint::Paint( clearRedoList(); updateUndoState(); }, lifetime()); + + _scene->removesItem( + ) | rpl::start_with_next([=] { + updateUndoState(); + }, lifetime()); + } void Paint::applyTransform(QRect geometry, int angle, bool flipped) { diff --git a/Telegram/SourceFiles/editor/scene/scene.cpp b/Telegram/SourceFiles/editor/scene/scene.cpp index d99ccfd93..3d568a20b 100644 --- a/Telegram/SourceFiles/editor/scene/scene.cpp +++ b/Telegram/SourceFiles/editor/scene/scene.cpp @@ -67,6 +67,7 @@ void Scene::removeItem(not_null item) { void Scene::removeItem(const ItemPtr &item) { _items.erase(ranges::remove(_items, item), end(_items)); + _removesItem.fire({}); } void Scene::mousePressEvent(QGraphicsSceneMouseEvent *event) { @@ -101,6 +102,10 @@ rpl::producer<> Scene::addsItem() const { return _addsItem.events(); } +rpl::producer<> Scene::removesItem() const { + return _removesItem.events(); +} + std::vector Scene::items( Qt::SortOrder order) const { auto copyItems = _items; diff --git a/Telegram/SourceFiles/editor/scene/scene.h b/Telegram/SourceFiles/editor/scene/scene.h index 0b3994fe9..f51a21d79 100644 --- a/Telegram/SourceFiles/editor/scene/scene.h +++ b/Telegram/SourceFiles/editor/scene/scene.h @@ -36,6 +36,7 @@ public: void removeItem(not_null item); void removeItem(const ItemPtr &item); [[nodiscard]] rpl::producer<> addsItem() const; + [[nodiscard]] rpl::producer<> removesItem() const; [[nodiscard]] std::vector attachedStickers() const; @@ -52,7 +53,7 @@ private: float64 _lastLineZ = 0.; int _itemNumber = 0; - rpl::event_stream<> _addsItem; + rpl::event_stream<> _addsItem, _removesItem; rpl::lifetime _lifetime; };