From bf8f3e42f4e4860c365cb05b870f03147563c23a Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Wed, 7 Jul 2021 17:13:40 +0300 Subject: [PATCH] Simplified work with Editor::ItemBase::Data. --- .../editor/scene/scene_item_base.cpp | 46 ++++++++++++------- .../editor/scene/scene_item_base.h | 3 ++ 2 files changed, 33 insertions(+), 16 deletions(-) diff --git a/Telegram/SourceFiles/editor/scene/scene_item_base.cpp b/Telegram/SourceFiles/editor/scene/scene_item_base.cpp index 0ce01646f..eb6cf3da8 100644 --- a/Telegram/SourceFiles/editor/scene/scene_item_base.cpp +++ b/Telegram/SourceFiles/editor/scene/scene_item_base.cpp @@ -56,11 +56,7 @@ ItemBase::ItemBase(Data data) | QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsFocusable); setAcceptHoverEvents(true); - setPos(data.x, data.y); - setZValue((*_lastZ)++); - setFlip(data.flipped); - setRotation(data.rotation); - updateZoom(data.initialZoom); + applyData(data); } QRectF ItemBase::boundingRect() const { @@ -212,17 +208,10 @@ void ItemBase::actionDelete() { void ItemBase::actionDuplicate() { if (const auto s = static_cast(scene())) { - const auto zoom = st::photoEditorItemHandleSize / _scaledHandleSize; - const auto newItem = duplicate(Data{ - .initialZoom = zoom, - .zPtr = _lastZ, - .size = int(_horizontalSize), - .x = int(scenePos().x() + _horizontalSize / 3), - .y = int(scenePos().y() + _verticalSize / 3), - .flipped = flipped(), - .rotation = int(rotation()), - .imageSize = _imageSize, - }); + auto data = generateData(); + data.x += int(_horizontalSize / 3); + data.y += int(_verticalSize / 3); + const auto newItem = duplicate(std::move(data)); if (hasFocus()) { newItem->setFocus(); } @@ -369,4 +358,29 @@ void ItemBase::updatePens(QPen pen) { _pens.handleInactive.setStyle(Qt::SolidLine); } +ItemBase::Data ItemBase::generateData() const { + return { + .initialZoom = (st::photoEditorItemHandleSize / _scaledHandleSize), + .zPtr = _lastZ, + .size = int(_horizontalSize), + .x = int(scenePos().x()), + .y = int(scenePos().y()), + .flipped = flipped(), + .rotation = int(rotation()), + .imageSize = _imageSize, + }; +} + +void ItemBase::applyData(const Data &data) { + // _lastZ is const. + // _imageSize is const. + _horizontalSize = data.size; + setPos(data.x, data.y); + setZValue((*_lastZ)++); + setFlip(data.flipped); + setRotation(data.rotation); + updateZoom(data.initialZoom); + update(); +} + } // namespace Editor diff --git a/Telegram/SourceFiles/editor/scene/scene_item_base.h b/Telegram/SourceFiles/editor/scene/scene_item_base.h index 48f9760a5..f28d9c2be 100644 --- a/Telegram/SourceFiles/editor/scene/scene_item_base.h +++ b/Telegram/SourceFiles/editor/scene/scene_item_base.h @@ -97,6 +97,9 @@ private: void updatePens(QPen pen); void handleActionKey(not_null e); + Data generateData() const; + void applyData(const Data &data); + const std::shared_ptr _lastZ; const QSize _imageSize;