From c81138d9be0b880651cc5ce46b731a72e77efdef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fauconnier?= Date: Fri, 11 Sep 2020 12:58:12 +0200 Subject: [PATCH] detect scene modifications (object translations for exemple) even if object controls are not visible --- src/domain/UBGraphicsItemDelegate.cpp | 58 +++++++++++++++------------ src/domain/UBGraphicsScene.cpp | 2 + 2 files changed, 34 insertions(+), 26 deletions(-) diff --git a/src/domain/UBGraphicsItemDelegate.cpp b/src/domain/UBGraphicsItemDelegate.cpp index f920b05c..bb19e2ca 100644 --- a/src/domain/UBGraphicsItemDelegate.cpp +++ b/src/domain/UBGraphicsItemDelegate.cpp @@ -274,37 +274,43 @@ UBGraphicsItemDelegate::~UBGraphicsItemDelegate() QVariant UBGraphicsItemDelegate::itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value) { UBGraphicsScene *ubScene = castUBGraphicsScene(); - switch (static_cast(change)) { - - case QGraphicsItem::ItemSelectedHasChanged : { - if (ubScene) { - if (value.toBool()) { //selected(true) - ubScene->setSelectedZLevel(delegated()); - } else { - ubScene->setOwnZlevel(delegated()); - freeControls(); + switch (static_cast(change)) + { + case QGraphicsItem::ItemSelectedHasChanged : + { + if (ubScene) { + if (value.toBool()) { //selected(true) + ubScene->setSelectedZLevel(delegated()); + } else { + ubScene->setOwnZlevel(delegated()); + freeControls(); + } } + break; } - - } break; - case QGraphicsItem::ItemVisibleHasChanged : - { - bool shownOnDisplay = mDelegated->data(UBGraphicsItemData::ItemLayerType).toInt() != UBItemLayerType::Control; - showHide(shownOnDisplay); - break; - } - case QGraphicsItem::ItemPositionHasChanged : - case QGraphicsItem::ItemTransformHasChanged : - case QGraphicsItem::ItemZValueHasChanged : - if (!controlsExist()) { + case QGraphicsItem::ItemVisibleHasChanged : + { + bool shownOnDisplay = mDelegated->data(UBGraphicsItemData::ItemLayerType).toInt() != UBItemLayerType::Control; + showHide(shownOnDisplay); break; } - mAntiScaleRatio = 1 / (UBApplication::boardController->systemScaleFactor() * UBApplication::boardController->currentZoom()); - positionHandles(); - if (ubScene) { - ubScene->setModified(true); + case QGraphicsItem::ItemPositionHasChanged : + case QGraphicsItem::ItemTransformHasChanged : + case QGraphicsItem::ItemZValueHasChanged : + { + if (ubScene) + { + ubScene->setModified(true); + } + + if (controlsExist()) + { + mAntiScaleRatio = 1 / (UBApplication::boardController->systemScaleFactor() * UBApplication::boardController->currentZoom()); + positionHandles(); + break; + } + break; } - break; } return value; diff --git a/src/domain/UBGraphicsScene.cpp b/src/domain/UBGraphicsScene.cpp index 13be73d7..f07e31ec 100644 --- a/src/domain/UBGraphicsScene.cpp +++ b/src/domain/UBGraphicsScene.cpp @@ -1295,7 +1295,9 @@ void UBGraphicsScene::updateSelectionFrame() { if (!mSelectionFrame) { mSelectionFrame = new UBSelectionFrame(); + bool sceneWasModified = isModified(); addItem(mSelectionFrame); + setModified(sceneWasModified); } QList selItems = selectedItems();