diff --git a/Telegram/SourceFiles/editor/editor.style b/Telegram/SourceFiles/editor/editor.style index ed7df6457..262ffa356 100644 --- a/Telegram/SourceFiles/editor/editor.style +++ b/Telegram/SourceFiles/editor/editor.style @@ -92,5 +92,3 @@ photoEditorCropPointSize: 10px; photoEditorCropMinSize: 20px; photoEditorItemHandleSize: 10px; -photoEditorItemMinSize: 32px; -photoEditorItemMaxSize: 512px; diff --git a/Telegram/SourceFiles/editor/editor_paint.cpp b/Telegram/SourceFiles/editor/editor_paint.cpp index 22c6ebd3b..d1fbf765b 100644 --- a/Telegram/SourceFiles/editor/editor_paint.cpp +++ b/Telegram/SourceFiles/editor/editor_paint.cpp @@ -299,6 +299,7 @@ ItemBase::Data Paint::itemBaseData() const { .y = y, .flipped = _transform.flipped, .rotation = -_transform.angle, + .imageSize = _imageSize, }; } diff --git a/Telegram/SourceFiles/editor/scene/scene_item_base.cpp b/Telegram/SourceFiles/editor/scene/scene_item_base.cpp index dc06a62da..c701362a0 100644 --- a/Telegram/SourceFiles/editor/scene/scene_item_base.cpp +++ b/Telegram/SourceFiles/editor/scene/scene_item_base.cpp @@ -26,6 +26,9 @@ const auto kDuplicateSequence = QKeySequence("ctrl+d"); const auto kFlipSequence = QKeySequence("ctrl+s"); const auto kDeleteSequence = QKeySequence("delete"); +constexpr auto kMinSizeRatio = 0.05; +constexpr auto kMaxSizeRatio = 1.00; + auto Normalized(float64 angle) { return angle + ((std::abs(angle) < 360) ? 0 : (-360 * (angle < 0 ? -1 : 1))); @@ -47,6 +50,7 @@ void NumberedItem::setNumber(int number) { ItemBase::ItemBase(Data data) : _lastZ(data.zPtr) +, _imageSize(data.imageSize) , _horizontalSize(data.size) , _zoom(std::move(data.zoomValue)) { setFlags(QGraphicsItem::ItemIsMovable @@ -67,14 +71,19 @@ ItemBase::ItemBase(Data data) _scaledHandleSize, _scaledHandleSize, _scaledHandleSize) * 0.5; + + const auto maxSide = std::max( + _imageSize.width(), + _imageSize.height()); _sizeLimits = { - .min = int(st::photoEditorItemMinSize / zoom), - .max = int(st::photoEditorItemMaxSize / zoom), + .min = int(maxSide * kMinSizeRatio), + .max = int(maxSide * kMaxSizeRatio), }; _horizontalSize = std::clamp( _horizontalSize, float64(_sizeLimits.min), float64(_sizeLimits.max)); + updateVerticalSize(); updatePens(QPen( QBrush(), @@ -242,6 +251,7 @@ void ItemBase::actionDuplicate() { .y = int(scenePos().y() + _verticalSize / 3), .flipped = flipped(), .rotation = int(rotation()), + .imageSize = _imageSize, }); if (hasFocus()) { newItem->setFocus(); @@ -308,8 +318,8 @@ void ItemBase::updateVerticalSize() { const auto verticalSize = _horizontalSize * _aspectRatio; _verticalSize = std::max( verticalSize, - float64(st::photoEditorItemMinSize)); - if (verticalSize < st::photoEditorItemMinSize) { + float64(_sizeLimits.min)); + if (verticalSize < _sizeLimits.min) { _horizontalSize = _verticalSize / _aspectRatio; } } diff --git a/Telegram/SourceFiles/editor/scene/scene_item_base.h b/Telegram/SourceFiles/editor/scene/scene_item_base.h index 76e351731..c7b4f11a1 100644 --- a/Telegram/SourceFiles/editor/scene/scene_item_base.h +++ b/Telegram/SourceFiles/editor/scene/scene_item_base.h @@ -44,6 +44,7 @@ public: int y = 0; bool flipped = false; int rotation = 0; + QSize imageSize; }; ItemBase(Data data); @@ -93,6 +94,7 @@ private: void handleActionKey(not_null e); const std::shared_ptr _lastZ; + const QSize _imageSize; struct { QPen select;