/* This file is part of Telegram Desktop, the official desktop application for the Telegram messaging service. For license and copyright information please follow this link: https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #pragma once #include "ui/rp_widget.h" #include "editor/photo_editor_common.h" class QGraphicsItemGroup; class QGraphicsView; namespace Editor { class UndoController; // Paint control. class Paint final : public Ui::RpWidget { public: Paint( not_null parent, PhotoModifications &modifications, const QSize &imageSize, std::shared_ptr undoController); [[nodiscard]] std::shared_ptr saveScene() const; void applyTransform(QRect geometry, int angle, bool flipped); void applyBrush(const Brush &brush); void cancel(); void keepResult(); void updateUndoState(); private: struct SavedItem { QGraphicsItem *item; bool undid = false; }; void initDrawing(); bool hasUndo() const; bool hasRedo() const; void clearRedoList(); bool isItemToRemove(not_null item) const; bool isItemHidden(not_null item) const; std::vector groups( Qt::SortOrder order = Qt::DescendingOrder) const; const std::shared_ptr _scene; const base::unique_qptr _view; const QSize _imageSize; std::vector _previousItems; QList _itemsToRemove; struct { QPointF lastPoint; float size = 1.; QColor color; QGraphicsItemGroup *group; } _brushData; rpl::variable _hasUndo = true; rpl::variable _hasRedo = true; }; } // namespace Editor