tdf#151262 drop subpixel->logic pos asserts
which have served their bootstrapping purpose
Change-Id: I04b832fde21e4932ed191d972737bee97510f53a
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/140903
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
diff --git a/include/vcl/outdev.hxx b/include/vcl/outdev.hxx
index 928f49c..b1b47d60 100644
--- a/include/vcl/outdev.hxx
+++ b/include/vcl/outdev.hxx
@@ -1709,7 +1709,7 @@ public:
SAL_DLLPRIVATE tools::Long ImplLogicHeightToDevicePixel( tools::Long nHeight ) const;
SAL_DLLPRIVATE double ImplLogicHeightToDeviceSubPixel(tools::Long nHeight) const;
SAL_DLLPRIVATE Point SubPixelToLogic(const DevicePoint& rDevicePt, bool bCheck) const;
SAL_DLLPRIVATE Point SubPixelToLogic(const DevicePoint& rDevicePt) const;
/** Convert device pixels to a width in logical units.
diff --git a/include/vcl/vcllayout.hxx b/include/vcl/vcllayout.hxx
index 0791832..b76c789 100644
--- a/include/vcl/vcllayout.hxx
+++ b/include/vcl/vcllayout.hxx
@@ -108,8 +108,6 @@ public:
virtual SalLayoutGlyphs GetGlyphs() const;
virtual bool IsMultiSalLayout() const;
protected:
// used by layout engines
SalLayout();
diff --git a/vcl/inc/pdf/pdfwriter_impl.hxx b/vcl/inc/pdf/pdfwriter_impl.hxx
index 9f099f5..f415475 100644
--- a/vcl/inc/pdf/pdfwriter_impl.hxx
+++ b/vcl/inc/pdf/pdfwriter_impl.hxx
@@ -855,9 +855,9 @@ i12626
/* emits a text object according to the passed layout */
/* TODO: remove rText as soon as SalLayout will change so that rText is not necessary anymore */
void drawVerticalGlyphs( const std::vector<PDFGlyph>& rGlyphs, OStringBuffer& rLine, const Point& rAlignOffset, const Matrix3& rRotScale, double fAngle, double fXScale, double fSkew, sal_Int32 nFontHeight, bool bCheck );
void drawHorizontalGlyphs( const std::vector<PDFGlyph>& rGlyphs, OStringBuffer& rLine, const Point& rAlignOffset, bool bFirst, double fAngle, double fXScale, double fSkew, sal_Int32 nFontHeight, sal_Int32 nPixelFontHeight, bool bCheck );
void drawLayout( SalLayout& rLayout, const OUString& rText, bool bTextLines, bool bCheckSubPixelToLogic );
void drawVerticalGlyphs( const std::vector<PDFGlyph>& rGlyphs, OStringBuffer& rLine, const Point& rAlignOffset, const Matrix3& rRotScale, double fAngle, double fXScale, double fSkew, sal_Int32 nFontHeight );
void drawHorizontalGlyphs( const std::vector<PDFGlyph>& rGlyphs, OStringBuffer& rLine, const Point& rAlignOffset, bool bFirst, double fAngle, double fXScale, double fSkew, sal_Int32 nFontHeight, sal_Int32 nPixelFontHeight );
void drawLayout( SalLayout& rLayout, const OUString& rText, bool bTextLines );
void drawRelief( SalLayout& rLayout, const OUString& rText, bool bTextLines );
void drawShadow( SalLayout& rLayout, const OUString& rText, bool bTextLines );
diff --git a/vcl/inc/sallayout.hxx b/vcl/inc/sallayout.hxx
index 2569ff2..54b486b 100644
--- a/vcl/inc/sallayout.hxx
+++ b/vcl/inc/sallayout.hxx
@@ -85,8 +85,6 @@ public:
vcl::text::ImplLayoutArgs& rMultiArgs,
const double* pMultiDXArray);
virtual bool IsMultiSalLayout() const override;
virtual ~MultiSalLayout() override;
private:
diff --git a/vcl/source/gdi/pdfwriter_impl.cxx b/vcl/source/gdi/pdfwriter_impl.cxx
index 2082056..cf5ee9d 100644
--- a/vcl/source/gdi/pdfwriter_impl.cxx
+++ b/vcl/source/gdi/pdfwriter_impl.cxx
@@ -6226,7 +6226,7 @@ void PDFWriterImpl::drawRelief( SalLayout& rLayout, const OUString& rText, bool
rLayout.DrawOffset() += Point( nOff, nOff );
updateGraphicsState();
drawLayout( rLayout, rText, bTextLines, false );
drawLayout( rLayout, rText, bTextLines );
rLayout.DrawOffset() -= Point( nOff, nOff );
setTextLineColor( aTextLineColor );
@@ -6234,7 +6234,7 @@ void PDFWriterImpl::drawRelief( SalLayout& rLayout, const OUString& rText, bool
aSetFont.SetColor( aTextColor );
setFont( aSetFont );
updateGraphicsState();
drawLayout( rLayout, rText, bTextLines, true );
drawLayout( rLayout, rText, bTextLines );
// clean up the mess
pop();
@@ -6262,7 +6262,7 @@ void PDFWriterImpl::drawShadow( SalLayout& rLayout, const OUString& rText, bool
if( rFont.IsOutline() )
nOff++;
rLayout.DrawBase() += DevicePoint(nOff, nOff);
drawLayout( rLayout, rText, bTextLines, false );
drawLayout( rLayout, rText, bTextLines );
rLayout.DrawBase() -= DevicePoint(nOff, nOff);
setFont( aSaveFont );
@@ -6279,11 +6279,10 @@ void PDFWriterImpl::drawVerticalGlyphs(
double fAngle,
double fXScale,
double fSkew,
sal_Int32 nFontHeight,
bool bCheck )
sal_Int32 nFontHeight)
{
double nXOffset = 0;
Point aCurPos(SubPixelToLogic(rGlyphs[0].m_aPos, bCheck && fAngle == 0.0));
Point aCurPos(SubPixelToLogic(rGlyphs[0].m_aPos));
aCurPos += rAlignOffset;
for( size_t i = 0; i < rGlyphs.size(); i++ )
{
@@ -6303,7 +6302,7 @@ void PDFWriterImpl::drawVerticalGlyphs(
fSkewA = -fSkewB;
fSkewB = 0.0;
}
aDeltaPos += SubPixelToLogic(DevicePoint(nXOffset / fXScale, 0), false) - SubPixelToLogic(DevicePoint(), bCheck);
aDeltaPos += SubPixelToLogic(DevicePoint(nXOffset / fXScale, 0)) - SubPixelToLogic(DevicePoint());
if( i < rGlyphs.size()-1 )
// #i120627# the text on the Y axis is reversed when export ppt file to PDF format
{
@@ -6347,9 +6346,7 @@ void PDFWriterImpl::drawHorizontalGlyphs(
double fXScale,
double fSkew,
sal_Int32 nFontHeight,
sal_Int32 nPixelFontHeight,
bool bCheck
)
sal_Int32 nPixelFontHeight)
{
// horizontal (= normal) case
@@ -6374,7 +6371,7 @@ void PDFWriterImpl::drawHorizontalGlyphs(
for( size_t nRun = 0; nRun < aRunEnds.size(); nRun++ )
{
// setup text matrix back transformed to current coordinate system
Point aCurPos(SubPixelToLogic(rGlyphs[nBeginRun].m_aPos, bCheck && fAngle == 0.0));
Point aCurPos(SubPixelToLogic(rGlyphs[nBeginRun].m_aPos));
aCurPos += rAlignOffset;
// the first run can be set with "Td" operator
// subsequent use of that operator would move
@@ -6445,7 +6442,7 @@ void PDFWriterImpl::drawHorizontalGlyphs(
}
}
void PDFWriterImpl::drawLayout( SalLayout& rLayout, const OUString& rText, bool bTextLines, bool bCheckSubPixelToLogic )
void PDFWriterImpl::drawLayout( SalLayout& rLayout, const OUString& rText, bool bTextLines )
{
// relief takes precedence over shadow (see outdev3.cxx)
if( m_aCurrentPDFState.m_aFont.GetRelief() != FontRelief::NONE )
@@ -6677,7 +6674,7 @@ void PDFWriterImpl::drawLayout( SalLayout& rLayout, const OUString& rText, bool
// ascent / descent to match the on-screen rendering.
// This is the top left of the text without ascent / descent.
DevicePoint aDrawPosition(rLayout.GetDrawPosition());
tools::Rectangle aRectangle(SubPixelToLogic(aDrawPosition, bCheckSubPixelToLogic),
tools::Rectangle aRectangle(SubPixelToLogic(aDrawPosition),
Size(ImplDevicePixelToLogicWidth(rLayout.GetTextWidth()), 0));
aRectangle.AdjustTop(-aRefDevFontMetric.GetAscent());
// This includes ascent / descent.
@@ -6688,7 +6685,7 @@ void PDFWriterImpl::drawLayout( SalLayout& rLayout, const OUString& rText, bool
{
// Adapt rectangle for rotated text.
tools::Polygon aPolygon(aRectangle);
aPolygon.Rotate(SubPixelToLogic(aDrawPosition, bCheckSubPixelToLogic), pFontInstance->mnOrientation);
aPolygon.Rotate(SubPixelToLogic(aDrawPosition), pFontInstance->mnOrientation);
drawPolygon(aPolygon);
}
else
@@ -6744,9 +6741,9 @@ void PDFWriterImpl::drawLayout( SalLayout& rLayout, const OUString& rText, bool
}
if (bVertical)
drawVerticalGlyphs(aRun, aLine, aAlignOffset, aRotScale, fAngle, fXScale, fSkew, nFontHeight, !rLayout.IsMultiSalLayout());
drawVerticalGlyphs(aRun, aLine, aAlignOffset, aRotScale, fAngle, fXScale, fSkew, nFontHeight);
else
drawHorizontalGlyphs(aRun, aLine, aAlignOffset, nStart == 0, fAngle, fXScale, fSkew, nFontHeight, nPixelFontHeight, !rLayout.IsMultiSalLayout());
drawHorizontalGlyphs(aRun, aLine, aAlignOffset, nStart == 0, fAngle, fXScale, fSkew, nFontHeight, nPixelFontHeight);
if (nCharPos >= 0 && nCharCount)
aLine.append( "EMC\n" );
@@ -6791,7 +6788,7 @@ void PDFWriterImpl::drawLayout( SalLayout& rLayout, const OUString& rText, bool
}
else if( nWidth > 0 )
{
drawTextLine( SubPixelToLogic(aStartPt, bCheckSubPixelToLogic),
drawTextLine( SubPixelToLogic(aStartPt),
ImplDevicePixelToLogicWidth( nWidth ),
eStrikeout, eUnderline, eOverline, bUnderlineAbove );
nWidth = 0;
@@ -6800,7 +6797,7 @@ void PDFWriterImpl::drawLayout( SalLayout& rLayout, const OUString& rText, bool
if( nWidth > 0 )
{
drawTextLine( SubPixelToLogic(aStartPt, bCheckSubPixelToLogic),
drawTextLine( SubPixelToLogic(aStartPt),
ImplDevicePixelToLogicWidth( nWidth ),
eStrikeout, eUnderline, eOverline, bUnderlineAbove );
}
@@ -6809,7 +6806,7 @@ void PDFWriterImpl::drawLayout( SalLayout& rLayout, const OUString& rText, bool
{
DevicePoint aStartPt = rLayout.GetDrawPosition();
int nWidth = rLayout.GetTextWidth() / rLayout.GetUnitsPerPixel();
drawTextLine( SubPixelToLogic(aStartPt, bCheckSubPixelToLogic),
drawTextLine( SubPixelToLogic(aStartPt),
ImplDevicePixelToLogicWidth( nWidth ),
eStrikeout, eUnderline, eOverline, bUnderlineAbove );
}
@@ -6875,7 +6872,7 @@ void PDFWriterImpl::drawLayout( SalLayout& rLayout, const OUString& rText, bool
DevicePoint aMarkDevPos(aPos);
aMarkDevPos += aAdjOffset;
Point aMarkPos = SubPixelToLogic(aMarkDevPos, bCheckSubPixelToLogic);
Point aMarkPos = SubPixelToLogic(aMarkDevPos);
drawEmphasisMark( aMarkPos.X(), aMarkPos.Y(),
aEmphasisMark.GetShape(), aEmphasisMark.IsShapePolyLine(),
aEmphasisMark.GetRect1(), aEmphasisMark.GetRect2() );
@@ -6940,7 +6937,7 @@ void PDFWriterImpl::drawText( const Point& rPos, const OUString& rText, sal_Int3
0, {}, {}, SalLayoutFlags::NONE, nullptr, layoutGlyphs );
if( pLayout )
{
drawLayout( *pLayout, rText, bTextLines, true );
drawLayout( *pLayout, rText, bTextLines );
}
}
@@ -6958,7 +6955,7 @@ void PDFWriterImpl::drawTextArray( const Point& rPos, const OUString& rText, o3t
SalLayoutFlags::NONE, nullptr, layoutGlyphs );
if( pLayout )
{
drawLayout( *pLayout, rText, true, true );
drawLayout( *pLayout, rText, true );
}
}
@@ -6976,7 +6973,7 @@ void PDFWriterImpl::drawStretchText( const Point& rPos, sal_uLong nWidth, const
{}, {}, SalLayoutFlags::NONE, nullptr, layoutGlyphs );
if( pLayout )
{
drawLayout( *pLayout, rText, true, true );
drawLayout( *pLayout, rText, true );
}
}
diff --git a/vcl/source/gdi/sallayout.cxx b/vcl/source/gdi/sallayout.cxx
index ea33fd1..b960d510 100644
--- a/vcl/source/gdi/sallayout.cxx
+++ b/vcl/source/gdi/sallayout.cxx
@@ -265,11 +265,6 @@ SalLayoutGlyphs SalLayout::GetGlyphs() const
return SalLayoutGlyphs(); // invalid
}
bool SalLayout::IsMultiSalLayout() const
{
return false;
}
DeviceCoordinate GenericSalLayout::FillDXArray( std::vector<DeviceCoordinate>* pCharWidths, const OUString& rStr ) const
{
if (pCharWidths)
@@ -1217,9 +1212,4 @@ SalLayoutGlyphs MultiSalLayout::GetGlyphs() const
return glyphs;
}
bool MultiSalLayout::IsMultiSalLayout() const
{
return true;
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/source/outdev/map.cxx b/vcl/source/outdev/map.cxx
index a48e5a3..2c3801b 100644
--- a/vcl/source/outdev/map.cxx
+++ b/vcl/source/outdev/map.cxx
@@ -275,20 +275,16 @@ static double ImplLogicToSubPixel(tools::Long n, tools::Long nDPI, tools::Long n
{
assert(nDPI > 0);
assert(nMapDenom != 0);
double nRet = static_cast<double>(n) * nMapNum * nDPI / nMapDenom;
return nRet;
return static_cast<double>(n) * nMapNum * nDPI / nMapDenom;
}
static tools::Long ImplSubPixelToLogic(bool bCheck, double n, tools::Long nDPI, tools::Long nMapNum,
static tools::Long ImplSubPixelToLogic(double n, tools::Long nDPI, tools::Long nMapNum,
tools::Long nMapDenom)
{
assert(nDPI > 0);
assert(nMapNum != 0);
double nRes = n * nMapDenom / nMapNum / nDPI;
tools::Long nRet(std::round(nRes));
assert(!bCheck || rtl_math_approxValue(n) == rtl_math_approxValue(static_cast<double>(nRet) * nMapNum * nDPI / nMapDenom)); (void)bCheck;
return nRet;
return std::round(n * nMapDenom / nMapNum / nDPI);
}
static tools::Long ImplPixelToLogic(tools::Long n, tools::Long nDPI, tools::Long nMapNum,
@@ -1178,7 +1174,7 @@ Point OutputDevice::PixelToLogic( const Point& rDevicePt ) const
maMapRes.mnMapScNumY, maMapRes.mnMapScDenomY ) - maMapRes.mnMapOfsY - mnOutOffLogicY );
}
Point OutputDevice::SubPixelToLogic(const DevicePoint& rDevicePt, bool bCheck) const
Point OutputDevice::SubPixelToLogic(const DevicePoint& rDevicePt) const
{
if (!mbMap)
{
@@ -1186,9 +1182,9 @@ Point OutputDevice::SubPixelToLogic(const DevicePoint& rDevicePt, bool bCheck) c
return Point(rDevicePt.getX(), rDevicePt.getY());
}
return Point(ImplSubPixelToLogic(bCheck, rDevicePt.getX(), mnDPIX,
return Point(ImplSubPixelToLogic(rDevicePt.getX(), mnDPIX,
maMapRes.mnMapScNumX, maMapRes.mnMapScDenomX) - maMapRes.mnMapOfsX - mnOutOffLogicX,
ImplSubPixelToLogic(bCheck, rDevicePt.getY(), mnDPIY,
ImplSubPixelToLogic(rDevicePt.getY(), mnDPIY,
maMapRes.mnMapScNumY, maMapRes.mnMapScDenomY) - maMapRes.mnMapOfsY - mnOutOffLogicY);
}