diff --git a/src/domain/UBGraphicsDelegateFrame.cpp b/src/domain/UBGraphicsDelegateFrame.cpp index 70fd85c3..0614bd37 100644 --- a/src/domain/UBGraphicsDelegateFrame.cpp +++ b/src/domain/UBGraphicsDelegateFrame.cpp @@ -210,6 +210,9 @@ void UBGraphicsDelegateFrame::mouseMoveEvent(QGraphicsSceneMouseEvent *event) { if (resizingBottomRight()) { + // ----------------------------------------------------- + // ! We want to keep the aspect ratio with this resize ! + // ----------------------------------------------------- qreal scaleX = (width + moveX) / width; qreal scaleY = (height + moveY) / height; qreal scaleFactor = (scaleX + scaleY) / 2; @@ -230,39 +233,56 @@ void UBGraphicsDelegateFrame::mouseMoveEvent(QGraphicsSceneMouseEvent *event) mScaleY = scaleY; } } - } - else if (resizingLeft()) + }else if (resizingLeft() || resizingRight()) { - qreal scaleX = (width - moveX) / width; - if (scaleX > 1 || (width * scaleX) > 2 * mFrameWidth) - { - mScaleX = scaleX; - mTranslateX = moveX; - } - } - else if (resizingRight()) - { - qreal scaleX = (width + moveX) / width; - if (scaleX > 1 || (width * scaleX) > 2 * mFrameWidth) - { - mScaleX = scaleX; - } - } - else if (resizingTop()) - { - qreal scaleY = (height - moveY) / height; - if (scaleY > 1 || (height * scaleY) > 2 * mFrameWidth) - { - mScaleY = scaleY; - mTranslateY = moveY; + if(width != 0){ + qreal scaleX = 0.0; + if(resizingLeft()){ + scaleX = (width - moveX) / width; + }else if(resizingRight()){ + scaleX = (width + moveX) / width; + } + if(mDelegate->isFlippable() && qAbs(scaleX) != 0){ + if((width * qAbs(scaleX)) < 2*mFrameWidth){ + bool negative = (scaleX < 0)?true:false; + if(negative){ + scaleX = -2*mFrameWidth/width; + }else{ + scaleX = 2*mFrameWidth/width; + } + } + mScaleX = scaleX; + }else if (scaleX > 1 || (width * scaleX) > 2 * mFrameWidth){ + mScaleX = scaleX; + if(resizingLeft()){ + mTranslateX = moveX; + } + } } - } - else if (resizingBottom()) - { - qreal scaleY = (height + moveY) / height; - if (scaleY > 1 || (height * scaleY) > 2 * mFrameWidth) - { - mScaleY = scaleY; + }else if(resizingTop() || resizingBottom()){ + if(height != 0){ + qreal scaleY = 0.0; + if(resizingTop()){ + scaleY = (height - moveY) / height; + }else if(resizingBottom()){ + scaleY = (height + moveY) / height; + } + + if(mDelegate->isFlippable() && qAbs(scaleY) != 0){ + if((height * qAbs(scaleY)) < 2*mFrameWidth){ + bool negative = (scaleY < 0)?true:false; + if(negative){ + scaleY = -2*mFrameWidth/width; + }else{ + scaleY = 2*mFrameWidth/width; + } + } + mScaleY = scaleY; + }else if (scaleY > 1 || (height * scaleY) > 2 * mFrameWidth) + { + mScaleY = scaleY; + mTranslateY = moveY; + } } } } diff --git a/src/domain/UBGraphicsItemDelegate.cpp b/src/domain/UBGraphicsItemDelegate.cpp index 86b93b68..edcc5426 100644 --- a/src/domain/UBGraphicsItemDelegate.cpp +++ b/src/domain/UBGraphicsItemDelegate.cpp @@ -64,6 +64,7 @@ UBGraphicsItemDelegate::UBGraphicsItemDelegate(QGraphicsItem* pDelegated, QObjec , mCanDuplicate(true) , mRespectRatio(respectRatio) , mMimeData(NULL) + , mFlippable(false) { // NOOP } @@ -459,4 +460,12 @@ void UBGraphicsItemDelegate::showMenu() mMenu->exec(cv->mapToGlobal(pinPos.bottomRight())); } +void UBGraphicsItemDelegate::setFlippable(bool flippable) +{ + mFlippable = flippable; +} +bool UBGraphicsItemDelegate::isFlippable() +{ + return mFlippable; +} diff --git a/src/domain/UBGraphicsItemDelegate.h b/src/domain/UBGraphicsItemDelegate.h index 9986db6b..30767179 100644 --- a/src/domain/UBGraphicsItemDelegate.h +++ b/src/domain/UBGraphicsItemDelegate.h @@ -130,6 +130,9 @@ class UBGraphicsItemDelegate : public QObject QMimeData* mimeData(){ return mMimeData; } void setMimeData(QMimeData* mimeData); + void setFlippable(bool flippable); + bool isFlippable(); + signals: void showOnDisplayChanged(bool shown); void lockChanged(bool locked); @@ -180,6 +183,9 @@ private: bool mCanDuplicate; bool mRespectRatio; QMimeData* mMimeData; + + /** A boolean saying that this object can be flippable (mirror effect) */ + bool mFlippable; }; diff --git a/src/domain/UBGraphicsPixmapItem.cpp b/src/domain/UBGraphicsPixmapItem.cpp index ceb4fd28..326aded2 100644 --- a/src/domain/UBGraphicsPixmapItem.cpp +++ b/src/domain/UBGraphicsPixmapItem.cpp @@ -30,6 +30,10 @@ UBGraphicsPixmapItem::UBGraphicsPixmapItem(QGraphicsItem* parent) { mDelegate = new UBGraphicsItemDelegate(this, 0, true, true); mDelegate->init(); + + // NOTE: Do not remove this code, I'm just doing a backup of my changes! thx.. + //mDelegate->setFlippable(true); + setData(UBGraphicsItemData::ItemLayerType, UBItemLayerType::Object); setTransformationMode(Qt::SmoothTransformation);