From 0c50fbf1b96f73602f989cda967a7e4183b44a78 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Sun, 4 Jul 2021 15:57:07 +0300 Subject: [PATCH] Moved Editor::ItemBase arguments to struct. --- Telegram/SourceFiles/editor/editor_paint.cpp | 35 +++++++++---------- Telegram/SourceFiles/editor/editor_paint.h | 4 ++- .../editor/scene/scene_item_base.cpp | 27 ++++++-------- .../editor/scene/scene_item_base.h | 22 ++++++------ .../editor/scene/scene_item_image.cpp | 26 +++----------- .../editor/scene/scene_item_image.h | 13 ++----- .../editor/scene/scene_item_sticker.cpp | 23 +++--------- .../editor/scene/scene_item_sticker.h | 15 ++------ 8 files changed, 53 insertions(+), 112 deletions(-) diff --git a/Telegram/SourceFiles/editor/editor_paint.cpp b/Telegram/SourceFiles/editor/editor_paint.cpp index a48f7fef6..d27902050 100644 --- a/Telegram/SourceFiles/editor/editor_paint.cpp +++ b/Telegram/SourceFiles/editor/editor_paint.cpp @@ -10,7 +10,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "boxes/confirm_box.h" #include "editor/controllers/controllers.h" #include "editor/scene/scene.h" -#include "editor/scene/scene_item_base.h" #include "editor/scene/scene_item_canvas.h" #include "editor/scene/scene_item_image.h" #include "editor/scene/scene_item_sticker.h" @@ -110,17 +109,9 @@ Paint::Paint( controllers->stickersPanelController->stickerChosen( ) | rpl::start_with_next([=](not_null document) { - const auto s = _scene->sceneRect().size(); - const auto size = std::min(s.width(), s.height()) / 2; - const auto x = s.width() / 2; - const auto y = s.height() / 2; const auto item = std::make_shared( document, - _transform.zoom.value(), - _lastZ, - size, - x, - y); + itemBaseData()); item->setFlip(_transform.flipped); item->setRotation(-_transform.angle); _scene->addItem(item); @@ -271,10 +262,6 @@ void Paint::handleMimeData(const QMimeData *data) { if (image.isNull()) { return; } - const auto s = _scene->sceneRect().size(); - const auto size = std::min(s.width(), s.height()) / 2; - const auto x = s.width() / 2; - const auto y = s.height() / 2; if (!Ui::ValidateThumbDimensions(image.width(), image.height())) { _controllers->showBox( Box(tr::lng_edit_media_invalid_file(tr::now))); @@ -283,11 +270,7 @@ void Paint::handleMimeData(const QMimeData *data) { const auto item = std::make_shared( Ui::PixmapFromImage(std::move(image)), - _transform.zoom.value(), - _lastZ, - size, - x, - y); + itemBaseData()); item->setFlip(_transform.flipped); item->setRotation(-_transform.angle); _scene->addItem(item); @@ -307,4 +290,18 @@ void Paint::handleMimeData(const QMimeData *data) { } } +ItemBase::Data Paint::itemBaseData() const { + const auto s = _scene->sceneRect().toRect().size(); + const auto size = std::min(s.width(), s.height()) / 2; + const auto x = s.width() / 2; + const auto y = s.height() / 2; + return ItemBase::Data{ + .zoomValue = _transform.zoom.value(), + .zPtr = _lastZ, + .size = size, + .x = x, + .y = y, + }; +} + } // namespace Editor diff --git a/Telegram/SourceFiles/editor/editor_paint.h b/Telegram/SourceFiles/editor/editor_paint.h index 0a825b5d5..b39267af0 100644 --- a/Telegram/SourceFiles/editor/editor_paint.h +++ b/Telegram/SourceFiles/editor/editor_paint.h @@ -10,6 +10,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/rp_widget.h" #include "editor/photo_editor_common.h" +#include "editor/scene/scene_item_base.h" class QGraphicsItem; class QGraphicsView; @@ -17,7 +18,6 @@ class QGraphicsView; namespace Editor { struct Controllers; -class ItemBase; class Scene; // Paint control. @@ -45,6 +45,8 @@ private: bool undid = false; }; + ItemBase::Data itemBaseData() const; + bool hasUndo() const; bool hasRedo() const; void clearRedoList(); diff --git a/Telegram/SourceFiles/editor/scene/scene_item_base.cpp b/Telegram/SourceFiles/editor/scene/scene_item_base.cpp index e94b88c5e..8dcea5a5f 100644 --- a/Telegram/SourceFiles/editor/scene/scene_item_base.cpp +++ b/Telegram/SourceFiles/editor/scene/scene_item_base.cpp @@ -45,20 +45,15 @@ void NumberedItem::setNumber(int number) { _number = number; } -ItemBase::ItemBase( - rpl::producer zoomValue, - std::shared_ptr zPtr, - int size, - int x, - int y) -: _lastZ(zPtr) -, _horizontalSize(size) -, _zoom(std::move(zoomValue)) { +ItemBase::ItemBase(Data data) +: _lastZ(data.zPtr) +, _horizontalSize(data.size) +, _zoom(std::move(data.zoomValue)) { setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsFocusable); setAcceptHoverEvents(true); - setPos(x, y); + setPos(data.x, data.y); setZValue((*_lastZ)++); const auto &handleSize = st::photoEditorItemHandleSize; @@ -237,12 +232,12 @@ void ItemBase::actionDelete() { void ItemBase::actionDuplicate() { if (const auto s = static_cast(scene())) { - const auto newItem = duplicate( - _zoom.value(), - _lastZ, - _horizontalSize, - scenePos().x() + _horizontalSize / 3, - scenePos().y() + _verticalSize / 3); + const auto newItem = duplicate(Data{ + .zoomValue = _zoom.value(), + .zPtr = _lastZ, + .size = int(_horizontalSize), + .x = int(scenePos().x() + _horizontalSize / 3), + .y = int(scenePos().y() + _verticalSize / 3) }); newItem->setFlip(flipped()); newItem->setRotation(rotation()); if (hasFocus()) { diff --git a/Telegram/SourceFiles/editor/scene/scene_item_base.h b/Telegram/SourceFiles/editor/scene/scene_item_base.h index e36b9368f..c38d7f9f7 100644 --- a/Telegram/SourceFiles/editor/scene/scene_item_base.h +++ b/Telegram/SourceFiles/editor/scene/scene_item_base.h @@ -36,12 +36,15 @@ private: class ItemBase : public NumberedItem { public: - ItemBase( - rpl::producer zoomValue, - std::shared_ptr zPtr, - int size, - int x, - int y); + struct Data { + rpl::producer zoomValue; + std::shared_ptr zPtr; + int size = 0; + int x = 0; + int y = 0; + }; + + ItemBase(Data data); QRectF boundingRect() const override; void paint( QPainter *p, @@ -77,12 +80,7 @@ protected: void setAspectRatio(float64 aspectRatio); virtual void performFlip(); - virtual std::shared_ptr duplicate( - rpl::producer zoomValue, - std::shared_ptr zPtr, - int size, - int x, - int y) const = 0; + virtual std::shared_ptr duplicate(Data data) const = 0; private: HandleType handleType(const QPointF &pos) const; QRectF rightHandleRect() const; diff --git a/Telegram/SourceFiles/editor/scene/scene_item_image.cpp b/Telegram/SourceFiles/editor/scene/scene_item_image.cpp index 48ed66a1a..b932b11ad 100644 --- a/Telegram/SourceFiles/editor/scene/scene_item_image.cpp +++ b/Telegram/SourceFiles/editor/scene/scene_item_image.cpp @@ -8,18 +8,11 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "editor/scene/scene_item_image.h" namespace Editor { -namespace { - -} // namespace ItemImage::ItemImage( const QPixmap &&pixmap, - rpl::producer zoomValue, - std::shared_ptr zPtr, - int size, - int x, - int y) -: ItemBase(std::move(zoomValue), std::move(zPtr), size, x, y) + ItemBase::Data data) +: ItemBase(std::move(data)) , _pixmap(std::move(pixmap)) { setAspectRatio(_pixmap.isNull() ? 1.0 @@ -39,20 +32,9 @@ void ItemImage::performFlip() { update(); } -std::shared_ptr ItemImage::duplicate( - rpl::producer zoomValue, - std::shared_ptr zPtr, - int size, - int x, - int y) const { +std::shared_ptr ItemImage::duplicate(ItemBase::Data data) const { auto pixmap = _pixmap; - return std::make_shared( - std::move(pixmap), - std::move(zoomValue), - std::move(zPtr), - size, - x, - y); + return std::make_shared(std::move(pixmap), std::move(data)); } } // namespace Editor diff --git a/Telegram/SourceFiles/editor/scene/scene_item_image.h b/Telegram/SourceFiles/editor/scene/scene_item_image.h index b47b7ecaa..1754ac279 100644 --- a/Telegram/SourceFiles/editor/scene/scene_item_image.h +++ b/Telegram/SourceFiles/editor/scene/scene_item_image.h @@ -15,23 +15,14 @@ class ItemImage : public ItemBase { public: ItemImage( const QPixmap &&pixmap, - rpl::producer zoomValue, - std::shared_ptr zPtr, - int size, - int x, - int y); + ItemBase::Data data); void paint( QPainter *p, const QStyleOptionGraphicsItem *option, QWidget *widget) override; protected: void performFlip() override; - std::shared_ptr duplicate( - rpl::producer zoomValue, - std::shared_ptr zPtr, - int size, - int x, - int y) const override; + std::shared_ptr duplicate(ItemBase::Data data) const override; private: QPixmap _pixmap; diff --git a/Telegram/SourceFiles/editor/scene/scene_item_sticker.cpp b/Telegram/SourceFiles/editor/scene/scene_item_sticker.cpp index b758b6bf9..58136b6c4 100644 --- a/Telegram/SourceFiles/editor/scene/scene_item_sticker.cpp +++ b/Telegram/SourceFiles/editor/scene/scene_item_sticker.cpp @@ -24,12 +24,8 @@ namespace { ItemSticker::ItemSticker( not_null document, - rpl::producer zoomValue, - std::shared_ptr zPtr, - int size, - int x, - int y) -: ItemBase(std::move(zoomValue), std::move(zPtr), size, x, y) + ItemBase::Data data) +: ItemBase(std::move(data)) , _document(document) , _mediaView(_document->createMediaView()) { const auto stickerData = document->sticker(); @@ -112,19 +108,8 @@ void ItemSticker::performFlip() { update(); } -std::shared_ptr ItemSticker::duplicate( - rpl::producer zoomValue, - std::shared_ptr zPtr, - int size, - int x, - int y) const { - return std::make_shared( - _document, - std::move(zoomValue), - std::move(zPtr), - size, - x, - y); +std::shared_ptr ItemSticker::duplicate(ItemBase::Data data) const { + return std::make_shared(_document, std::move(data)); } } // namespace Editor diff --git a/Telegram/SourceFiles/editor/scene/scene_item_sticker.h b/Telegram/SourceFiles/editor/scene/scene_item_sticker.h index ff6cc5a1f..ac3d2f8f2 100644 --- a/Telegram/SourceFiles/editor/scene/scene_item_sticker.h +++ b/Telegram/SourceFiles/editor/scene/scene_item_sticker.h @@ -25,11 +25,7 @@ public: ItemSticker( not_null document, - rpl::producer zoomValue, - std::shared_ptr zPtr, - int size, - int x, - int y); + ItemBase::Data data); void paint( QPainter *p, const QStyleOptionGraphicsItem *option, @@ -38,15 +34,10 @@ public: int type() const override; protected: void performFlip() override; - std::shared_ptr duplicate( - rpl::producer zoomValue, - std::shared_ptr zPtr, - int size, - int x, - int y) const override; + std::shared_ptr duplicate(ItemBase::Data data) const override; private: const not_null _document; - const std::shared_ptr _mediaView; + const std::shared_ptr<::Data::DocumentMedia> _mediaView; void updatePixmap(QPixmap &&pixmap);