/* 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 class QGraphicsSceneMouseEvent; namespace Editor { class ItemCanvas : public QGraphicsItem { public: struct Content { QPixmap pixmap; QPointF position; }; ItemCanvas(); ~ItemCanvas(); void applyBrush(const QColor &color, float size); void clearPixmap(); void cancelDrawing(); QRectF boundingRect() const override; void paint( QPainter *p, const QStyleOptionGraphicsItem *option, QWidget *widget) override; void handleMousePressEvent(not_null event); void handleMouseReleaseEvent(not_null event); void handleMouseMoveEvent(not_null event); [[nodiscard]] rpl::producer grabContentRequests() const; protected: bool collidesWithItem( const QGraphicsItem *, Qt::ItemSelectionMode) const override; bool collidesWithPath( const QPainterPath &, Qt::ItemSelectionMode) const override; private: void computeContentRect(const QPointF &p); void drawLine(const QPointF ¤tPoint, const QPointF &lastPoint); bool _drawing = false; std::unique_ptr _hq; std::unique_ptr _p; QRectF _rectToUpdate; QRectF _contentRect; QMarginsF _brushMargins; QPointF _lastPoint; QPixmap _pixmap; struct { float size = 1.; QColor color; } _brushData; rpl::event_stream _grabContentRequests; }; } // namespace Editor