vcl/win/gdi/gdiimpl.cxx | 58 ++++++++++++++++++++++++------------------------ 1 file changed, 30 insertions(+), 28 deletions(-)
New commits: commit 5bc0cbc77f0a8be6b241e644bdac56989a0974a4 Author: Dmitriy Shilin <ds...@fastmail.com> AuthorDate: Fri Dec 14 08:13:53 2018 +0300 Commit: Mike Kaganski <mike.kagan...@collabora.com> CommitDate: Mon Dec 17 19:32:04 2018 +0100 vcl/win/gdi: merge ImplRenderPath into drawPolyLineBezier Change-Id: I6e0a5d81bc155c8ad3603c4451a557f8412245bd Reviewed-on: https://gerrit.libreoffice.org/65139 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com> diff --git a/vcl/win/gdi/gdiimpl.cxx b/vcl/win/gdi/gdiimpl.cxx index 1f161619589a..eecd9f350164 100644 --- a/vcl/win/gdi/gdiimpl.cxx +++ b/vcl/win/gdi/gdiimpl.cxx @@ -65,33 +65,6 @@ namespace { -// #100127# draw an array of points which might also contain bezier control points -void ImplRenderPath( HDC hdc, sal_uLong nPoints, const SalPoint* pPtAry, const PolyFlags* pFlgAry ) -{ - if( nPoints ) - { - // TODO: profile whether the following options are faster: - // a) look ahead and draw consecutive bezier or line segments by PolyBezierTo/PolyLineTo resp. - // b) convert our flag array to window's and use PolyDraw - - MoveToEx( hdc, pPtAry->mnX, pPtAry->mnY, nullptr ); - ++pPtAry; ++pFlgAry; - - for( sal_uLong i=1; i<nPoints; ++i, ++pPtAry, ++pFlgAry ) - { - if( *pFlgAry != PolyFlags::Control ) - { - LineTo( hdc, pPtAry->mnX, pPtAry->mnY ); - } - else if( nPoints - i > 2 ) - { - PolyBezierTo( hdc, reinterpret_cast<const POINT*>(pPtAry), 3 ); - i += 2; pPtAry += 2; pFlgAry += 2; - } - } - } -} - // #100127# Fill point and flag memory from array of points which // might also contain bezier control points for the PolyDraw() GDI method // Make sure pWinPointAry and pWinFlagAry are big enough @@ -1763,7 +1736,36 @@ bool WinSalGraphicsImpl::drawPolyLineBezier( sal_uInt32 nPoints, const SalPoint* { static_assert( sizeof( POINT ) == sizeof( SalPoint ), "must be the same size" ); - ImplRenderPath( mrParent.getHDC(), nPoints, pPtAry, pFlgAry ); + // #100127# draw an array of points which might also contain bezier control points + if (!nPoints) + return true; + + const HDC hdc = mrParent.getHDC(); + + // TODO: profile whether the following options are faster: + // a) look ahead and draw consecutive bezier or line segments by PolyBezierTo/PolyLineTo resp. + // b) convert our flag array to window's and use PolyDraw + MoveToEx(hdc, pPtAry->mnX, pPtAry->mnY, nullptr); + ++pPtAry; + ++pFlgAry; + + for(sal_uInt32 i = 1; i < nPoints; ++i) + { + if(*pFlgAry != PolyFlags::Control) + { + LineTo(hdc, pPtAry->mnX, pPtAry->mnY); + } + else if(nPoints - i > 2) + { + PolyBezierTo(hdc, reinterpret_cast<const POINT*>(pPtAry), 3); + i += 2; + pPtAry += 2; + pFlgAry += 2; + } + + ++pPtAry; + ++pFlgAry; + } return true; } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits