diff --git a/vcl/coretext/ctlayout.cxx b/vcl/coretext/ctlayout.cxx index 18df73e..ab55f76 100644 --- a/vcl/coretext/ctlayout.cxx +++ b/vcl/coretext/ctlayout.cxx @@ -432,6 +432,15 @@ void CTLayout::GetCaretPositions( int nMaxIndex, sal_Int32* pCaretXArray ) const bool CTLayout::GetBoundRect( SalGraphics& rGraphics, Rectangle& rVCLRect ) const { AquaSalGraphics& rAquaGraphics = static_cast(rGraphics); + + CGContextSaveGState( rAquaGraphics.mrContext ); + + if( mpTextStyle->mfFontRotation != 0.0 ) + { + const CGFloat fRadians = mpTextStyle->mfFontRotation; + CGContextRotateCTM( rAquaGraphics.mrContext, +fRadians ); + } + CGRect aMacRect = CTLineGetImageBounds( mpCTLine, rAquaGraphics.mrContext ); CGPoint aMacPos = CGContextGetTextPosition( rAquaGraphics.mrContext ); aMacRect.origin.x -= aMacPos.x; @@ -439,6 +448,8 @@ bool CTLayout::GetBoundRect( SalGraphics& rGraphics, Rectangle& rVCLRect ) const const Point aPos = GetDrawPosition( Point(mnBaseAdv, 0) ); + CGContextRestoreGState( rAquaGraphics.mrContext ); + // CoreText top-bottom are vertically flipped from a VCL aspect rVCLRect.Left() = aPos.X() + mfFontScale * aMacRect.origin.x; rVCLRect.Right() = aPos.X() + mfFontScale * (aMacRect.origin.x + aMacRect.size.width);