diff options
-rw-r--r-- | include/svx/svdoashp.hxx | 3 | ||||
-rw-r--r-- | svx/source/svdraw/svdoashp.cxx | 17 |
2 files changed, 18 insertions, 2 deletions
diff --git a/include/svx/svdoashp.hxx b/include/svx/svdoashp.hxx index ea222ed578de..85f5e9dc68ca 100644 --- a/include/svx/svdoashp.hxx +++ b/include/svx/svdoashp.hxx @@ -57,11 +57,12 @@ enum class CustomShapeHandleModes RESIZE_ABSOLUTE_Y = 8, MOVE_SHAPE = 16, ORTHO4 = 32, + RESIZE_ABSOLUTE_NEGX = 64 }; namespace o3tl { - template<> struct typed_flags<CustomShapeHandleModes> : is_typed_flags<CustomShapeHandleModes, 63> {}; + template<> struct typed_flags<CustomShapeHandleModes> : is_typed_flags<CustomShapeHandleModes, 127> {}; } struct SdrCustomShapeInteraction diff --git a/svx/source/svdraw/svdoashp.cxx b/svx/source/svdraw/svdoashp.cxx index 532337571d05..4f01a19d8411 100644 --- a/svx/source/svdraw/svdoashp.cxx +++ b/svx/source/svdraw/svdoashp.cxx @@ -617,6 +617,11 @@ std::vector< SdrCustomShapeInteraction > SdrObjCustomShape::GetInteractionHandle } break; + case mso_sptChevron : + case mso_sptHomePlate : + nMode |= CustomShapeHandleModes::RESIZE_ABSOLUTE_NEGX; + break; + case mso_sptWedgeRectCallout : case mso_sptWedgeRRectCallout : case mso_sptCloudCallout : @@ -1523,6 +1528,11 @@ void SdrObjCustomShape::NbcResize( const Point& rRef, const Fraction& rxFact, co sal_Int32 nX = ( aIter->aPosition.X - aOld.Left() ) + maRect.Left(); aIter->xInteraction->setControllerPosition( css::awt::Point( nX, aIter->xInteraction->getPosition().Y ) ); } + else if ( aIter->nMode & CustomShapeHandleModes::RESIZE_ABSOLUTE_NEGX ) + { + sal_Int32 nX = maRect.Right() - (aOld.Right() - aIter->aPosition.X); + aIter->xInteraction->setControllerPosition( css::awt::Point( nX, aIter->xInteraction->getPosition().Y ) ); + } if ( aIter->nMode & CustomShapeHandleModes::RESIZE_ABSOLUTE_Y ) { sal_Int32 nY = ( aIter->aPosition.Y - aOld.Top() ) + maRect.Top(); @@ -1535,6 +1545,7 @@ void SdrObjCustomShape::NbcResize( const Point& rRef, const Fraction& rxFact, co } InvalidateRenderGeometry(); } + void SdrObjCustomShape::NbcRotate( const Point& rRef, long nAngle, double sn, double cs ) { bool bMirroredX = IsMirroredX(); @@ -1933,8 +1944,12 @@ void SdrObjCustomShape::DragResizeCustomShape( const tools::Rectangle& rNewRect { if ( aIter->nMode & CustomShapeHandleModes::RESIZE_FIXED ) aIter->xInteraction->setControllerPosition( aIter->aPosition ); - if ( aIter->nMode & CustomShapeHandleModes::RESIZE_ABSOLUTE_X ) + if ( aIter->nMode & CustomShapeHandleModes::RESIZE_ABSOLUTE_X || + aIter->nMode & CustomShapeHandleModes::RESIZE_ABSOLUTE_NEGX ) { + if (aIter->nMode & CustomShapeHandleModes::RESIZE_ABSOLUTE_NEGX) + bOldMirroredX = !bOldMirroredX; + sal_Int32 nX; if ( bOldMirroredX ) { |