23#include <osl/diagnose.h>
42 const auto [nNum, nDen] = o3tl::getConversionMulDiv(eUnit,
o3tl::Length::in);
52 case MapUnit::MapRelative:
54 case MapUnit::Map100thMM:
57 case MapUnit::Map10thMM:
66 case MapUnit::Map1000thInch:
69 case MapUnit::Map100thInch:
72 case MapUnit::Map10thInch:
75 case MapUnit::MapInch:
78 case MapUnit::MapPoint:
81 case MapUnit::MapTwip:
84 case MapUnit::MapPixel:
90 case MapUnit::MapSysFont:
91 case MapUnit::MapAppFont:
111 OSL_FAIL(
"unhandled MapUnit" );
120 if ( rMapMode.
GetMapUnit() != MapUnit::MapRelative )
129 assert(nXNumerator != 0 && nYNumerator != 0);
135 if (nXNumerator >= 0)
136 aX +=
BigInt(nXNumerator / 2);
138 aX -=
BigInt((nXNumerator + 1) / 2);
142 if (nXNumerator >= 0 )
143 aX -=
BigInt((nXNumerator - 1) / 2);
145 aX +=
BigInt(nXNumerator / 2);
147 aX /=
BigInt(nXNumerator);
153 if (nYNumerator >= 0)
154 aY +=
BigInt(nYNumerator / 2);
156 aY -=
BigInt((nYNumerator + 1) / 2);
160 if (nYNumerator >= 0)
161 aY -=
BigInt((nYNumerator - 1) / 2);
163 aY +=
BigInt(nYNumerator / 2);
165 aY /=
BigInt(nYNumerator);
208 assert(nMapDenom != 0);
211 assert(nMapNum >= 0);
214 || std::abs(
n) < std::numeric_limits<tools::Long>::max() / nMapNum / nDPI);
223 n64 = 2 * n64 / nMapDenom;
237 assert(nMapDenom != 0);
238 return static_cast<double>(
n) * nMapNum * nDPI / nMapDenom;
245 assert(nMapNum != 0);
247 return std::round(
n * nMapDenom / nMapNum / nDPI);
256 sal_Int64 nDenom = nDPI;
265 n64 = 2 * n64 / nDenom;
399 sal_uInt16 nPoints = rLogicPoly.
GetSize();
407 for (
i = 0;
i < nPoints;
i++ )
409 const Point& rPt = pPointAry[
i];
419 for (
i = 0;
i < nPoints;
i++ )
436 sal_uInt32 nPoints = rLogicPoly.
count();
444 for (sal_uInt32 i = 0;
i < nPoints; ++
i)
452 const bool bC1 = aPoly.isPrevControlPointUsed(i);
463 const bool bC2 = aPoly.isNextControlPointUsed(i);
474 aPoly.setB2DPoint(i, aPt);
477 aPoly.setPrevControlPoint(i, aC1);
480 aPoly.setNextControlPoint(i, aC2);
485 for (sal_uInt32 i = 0;
i < nPoints; ++
i)
490 const bool bC1 = aPoly.isPrevControlPointUsed(i);
498 const bool bC2 = aPoly.isNextControlPointUsed(i);
506 aPoly.setB2DPoint(i, aPt);
509 aPoly.setPrevControlPoint(i, aC1);
512 aPoly.setNextControlPoint(i, aC2);
522 return rLogicPolyPoly;
525 sal_uInt16 nPoly = aPolyPoly.
Count();
526 for( sal_uInt16
i = 0;
i < nPoly;
i++ )
540 if( aInfo.GetDotCount() && aInfo.GetDotLen() )
543 aInfo.SetDotCount( 0 );
545 if( aInfo.GetDashCount() && aInfo.GetDashLen() )
548 aInfo.SetDashCount( 0 );
552 if( ( !aInfo.GetDashCount() && !aInfo.GetDotCount() ) || !aInfo.GetDistance() )
641 bool bRelMap = (rNewMapMode.
GetMapUnit() == MapUnit::MapRelative);
656 bool bOldMap =
mbMap;
677 if ( !bOldMap && bRelMap )
756 if ( eOld > MapUnit::MapPixel )
758 SAL_WARN(
"vcl.gdi",
"Not implemented MapUnit" );
760 else if ( eNew > MapUnit::MapPixel )
762 SAL_WARN(
"vcl.gdi",
"Not implemented MapUnit" );
768 const auto& [mul,
div] = o3tl::getConversionMulDiv(eFrom, eTo);
776 if ( eOld == MapUnit::MapPixel )
781 else if ( eNew == MapUnit::MapPixel )
789 MapMode aNewMapMode( MapUnit::MapRelative,
Point( -aPt.X(), -aPt.Y() ), aXF, aYF );
819 mpOutDevData->mpViewTransform->set(0, 0, fScaleFactorX);
820 mpOutDevData->mpViewTransform->set(1, 1, fScaleFactorY);
864 const double fZeroPointX((
static_cast<double>(aMapRes.
mnMapOfsX) * fScaleFactorX) +
static_cast<double>(
mnOutOffOrigX));
865 const double fZeroPointY((
static_cast<double>(aMapRes.
mnMapOfsY) * fScaleFactorY) +
static_cast<double>(
mnOutOffOrigY));
867 aTransform.
set(0, 0, fScaleFactorX);
868 aTransform.
set(1, 1, fScaleFactorY);
869 aTransform.
set(0, 2, fZeroPointX);
870 aTransform.
set(1, 2, fZeroPointY);
889 return aTransformation;
944 sal_uInt16 nPoints = rLogicPoly.
GetSize();
950 for (
i = 0;
i < nPoints;
i++ )
952 const Point* pPt = &(pPointAry[
i]);
968 return rLogicPolyPoly;
971 sal_uInt16 nPoly = aPolyPoly.
Count();
972 for( sal_uInt16
i = 0;
i < nPoly;
i++ )
984 aTransformedPoly.
transform( rTransformationMatrix );
985 return aTransformedPoly;
1013 for(RectangleVector::const_reverse_iterator aRectIter(rRectangles.rbegin()); aRectIter != rRectangles.rend(); ++aRectIter)
1023 const MapMode& rMapMode )
const
1040 const MapMode& rMapMode )
const
1057 const MapMode& rMapMode )
const
1083 const MapMode& rMapMode )
const
1094 sal_uInt16 nPoints = rLogicPoly.
GetSize();
1100 for (
i = 0;
i < nPoints;
i++ )
1102 const Point* pPt = &(pPointAry[
i]);
1115 const MapMode& rMapMode )
const
1119 aTransformedPoly.
transform( rTransformationMatrix );
1120 return aTransformedPoly;
1139 assert(floor(rDevicePt.
getX() == rDevicePt.
getX()) && floor(rDevicePt.
getY() == rDevicePt.
getY()));
1189 sal_uInt16 nPoints = rDevicePoly.
GetSize();
1195 for (
i = 0;
i < nPoints;
i++ )
1197 const Point* pPt = &(pPointAry[
i]);
1213 return rDevicePolyPoly;
1216 sal_uInt16 nPoly = aPolyPoly.
Count();
1217 for( sal_uInt16
i = 0;
i < nPoly;
i++ )
1229 aTransformedPoly.
transform( rTransformationMatrix );
1230 return aTransformedPoly;
1238 return rDeviceRegion;
1258 for(RectangleVector::const_reverse_iterator aRectIter(rRectangles.rbegin()); aRectIter != rRectangles.rend(); ++aRectIter)
1268 const MapMode& rMapMode )
const
1286 const MapMode& rMapMode )
const
1304 const MapMode& rMapMode )
const
1331 const MapMode& rMapMode )
const
1343 sal_uInt16 nPoints = rDevicePoly.
GetSize();
1349 for (
i = 0;
i < nPoints;
i++ )
1351 const Point* pPt = &(pPointAry[
i]);
1364 const MapMode& rMapMode )
const
1368 aTransformedPoly.
transform( rTransformationMatrix );
1369 return aTransformedPoly;
1373 const MapMode& rMapMode )
const
1377 aTransformedPoly.
transform( rTransformationMatrix );
1378 return aTransformedPoly;
1381#define ENTER1( rSource, pMapModeSource, pMapModeDest ) \
1382 if ( !pMapModeSource ) \
1383 pMapModeSource = &maMapMode; \
1384 if ( !pMapModeDest ) \
1385 pMapModeDest = &maMapMode; \
1386 if ( *pMapModeSource == *pMapModeDest ) \
1389 ImplMapRes aMapResSource; \
1390 ImplMapRes aMapResDest; \
1392 if ( !mbMap || pMapModeSource != &maMapMode ) \
1394 if ( pMapModeSource->GetMapUnit() == MapUnit::MapRelative ) \
1395 aMapResSource = maMapRes; \
1396 ImplCalcMapResolution( *pMapModeSource, \
1397 mnDPIX, mnDPIY, aMapResSource ); \
1400 aMapResSource = maMapRes; \
1401 if ( !mbMap || pMapModeDest != &maMapMode ) \
1403 if ( pMapModeDest->GetMapUnit() == MapUnit::MapRelative ) \
1404 aMapResDest = maMapRes; \
1405 ImplCalcMapResolution( *pMapModeDest, \
1406 mnDPIX, mnDPIY, aMapResDest ); \
1409 aMapResDest = maMapRes
1413 DBG_ASSERT( eUnitSource != MapUnit::MapSysFont
1414 && eUnitSource != MapUnit::MapAppFont
1415 && eUnitSource != MapUnit::MapRelative,
1416 "Source MapUnit is not permitted" );
1418 && eUnitDest != MapUnit::MapAppFont
1419 && eUnitDest != MapUnit::MapRelative,
1420 "Destination MapUnit is not permitted" );
1429 if (eMapSrc > MapUnit::MapPixel)
1430 SAL_WARN(
"vcl.gdi",
"Invalid source map unit");
1431 else if (eMapDst > MapUnit::MapPixel)
1432 SAL_WARN(
"vcl.gdi",
"Invalid destination map unit");
1433 else if (eMapSrc != eMapDst)
1439 return std::make_pair(eSrc, eDst);
1442std::pair<ImplMapRes, ImplMapRes> ENTER4(
const MapMode& rMMSource,
const MapMode& rMMDest)
1444 std::pair<ImplMapRes, ImplMapRes>
result;
1458 if (
n1 == 0 ||
n2 == 0 ||
n3 == 0 ||
n4 == 0 ||
n5 == 0 )
1460 if (std::numeric_limits<tools::Long>::max() / std::abs(
n2) < std::abs(
n3))
1467 if (std::numeric_limits<tools::Long>::max() / std::abs(
n4) < std::abs(
n5))
1498 if (std::numeric_limits<tools::Long>::max() / std::abs(
n1) < std::abs(
n6))
1503 if (std::numeric_limits<tools::Long>::max() / std::abs(
n4) < std::abs(
n5))
1534 if (std::numeric_limits<tools::Long>::max() / std::abs(
n4) < std::abs(
n5))
1557 if ((n7 - std::numeric_limits<tools::Long>::min()) >= n8_2)
1560 else if ((std::numeric_limits<tools::Long>::max() - n7) >= n8_2)
1577 const auto& [
n2,
n3] = o3tl::getConversionMulDiv(eFrom, eTo);
1594 const MapMode* pMapModeSource,
1595 const MapMode* pMapModeDest )
const
1597 ENTER1( rPtSource, pMapModeSource, pMapModeDest );
1599 return Point(
fn5( rPtSource.X() + aMapResSource.mnMapOfsX,
1600 aMapResSource.mnMapScNumX, aMapResDest.mnMapScDenomX,
1601 aMapResSource.mnMapScDenomX, aMapResDest.mnMapScNumX ) -
1602 aMapResDest.mnMapOfsX,
1603 fn5( rPtSource.Y() + aMapResSource.mnMapOfsY,
1604 aMapResSource.mnMapScNumY, aMapResDest.mnMapScDenomY,
1605 aMapResSource.mnMapScDenomY, aMapResDest.mnMapScNumY ) -
1606 aMapResDest.mnMapOfsY );
1610 const MapMode* pMapModeSource,
1611 const MapMode* pMapModeDest )
const
1613 ENTER1( rSzSource, pMapModeSource, pMapModeDest );
1616 aMapResSource.mnMapScNumX, aMapResDest.mnMapScDenomX,
1617 aMapResSource.mnMapScDenomX, aMapResDest.mnMapScNumX ),
1619 aMapResSource.mnMapScNumY, aMapResDest.mnMapScDenomY,
1620 aMapResSource.mnMapScDenomY, aMapResDest.mnMapScNumY ) );
1624 const MapMode* pMapModeSource,
1625 const MapMode* pMapModeDest )
const
1627 ENTER1( rRectSource, pMapModeSource, pMapModeDest );
1630 aMapResSource.mnMapScNumX, aMapResDest.mnMapScDenomX,
1631 aMapResSource.mnMapScDenomX, aMapResDest.mnMapScNumX ) -
1632 aMapResDest.mnMapOfsX,
1633 fn5( rRectSource.
Top() + aMapResSource.mnMapOfsY,
1634 aMapResSource.mnMapScNumY, aMapResDest.mnMapScDenomY,
1635 aMapResSource.mnMapScDenomY, aMapResDest.mnMapScNumY ) -
1636 aMapResDest.mnMapOfsY,
1637 fn5( rRectSource.
Right() + aMapResSource.mnMapOfsX,
1638 aMapResSource.mnMapScNumX, aMapResDest.mnMapScDenomX,
1639 aMapResSource.mnMapScDenomX, aMapResDest.mnMapScNumX ) -
1640 aMapResDest.mnMapOfsX,
1641 fn5( rRectSource.
Bottom() + aMapResSource.mnMapOfsY,
1642 aMapResSource.mnMapScNumY, aMapResDest.mnMapScDenomY,
1643 aMapResSource.mnMapScDenomY, aMapResDest.mnMapScNumY ) -
1644 aMapResDest.mnMapOfsY );
1648 const MapMode& rMapModeSource,
1651 if ( rMapModeSource == rMapModeDest )
1660 const auto& [eFrom, eTo] = getCorrectedUnit(eUnitSource, eUnitDest);
1661 return Point(
fn3(rPtSource.X(), eFrom, eTo),
fn3(rPtSource.Y(), eFrom, eTo));
1665 const auto& [aMapResSource, aMapResDest] = ENTER4( rMapModeSource, rMapModeDest );
1667 return Point(
fn5( rPtSource.X() + aMapResSource.mnMapOfsX,
1668 aMapResSource.mnMapScNumX, aMapResDest.mnMapScDenomX,
1669 aMapResSource.mnMapScDenomX, aMapResDest.mnMapScNumX ) -
1670 aMapResDest.mnMapOfsX,
1671 fn5( rPtSource.Y() + aMapResSource.mnMapOfsY,
1672 aMapResSource.mnMapScNumY, aMapResDest.mnMapScDenomY,
1673 aMapResSource.mnMapScDenomY, aMapResDest.mnMapScNumY ) -
1674 aMapResDest.mnMapOfsY );
1679 const MapMode& rMapModeSource,
1682 if ( rMapModeSource == rMapModeDest )
1691 const auto& [eFrom, eTo] = getCorrectedUnit(eUnitSource, eUnitDest);
1696 const auto& [aMapResSource, aMapResDest] = ENTER4( rMapModeSource, rMapModeDest );
1699 aMapResSource.mnMapScNumX, aMapResDest.mnMapScDenomX,
1700 aMapResSource.mnMapScDenomX, aMapResDest.mnMapScNumX ),
1702 aMapResSource.mnMapScNumY, aMapResDest.mnMapScDenomY,
1703 aMapResSource.mnMapScDenomY, aMapResDest.mnMapScNumY ) );
1708 const MapMode& rMapModeSource,
1711 if(rMapModeSource == rMapModeDest)
1727 if(rMapModeSource == rMapModeDest)
1738 const auto& [eFrom, eTo] = getCorrectedUnit(eUnitSource, eUnitDest);
1740 ? std::numeric_limits<double>::quiet_NaN()
1742 aTransform.
set(0, 0, fScaleFactor);
1743 aTransform.
set(1, 1, fScaleFactor);
1747 const auto& [aMapResSource, aMapResDest] = ENTER4(rMapModeSource, rMapModeDest);
1749 const double fScaleFactorX((
double(aMapResSource.mnMapScNumX) *
double(aMapResDest.mnMapScDenomX)) / (
double(aMapResSource.mnMapScDenomX) *
double(aMapResDest.mnMapScNumX)));
1750 const double fScaleFactorY((
double(aMapResSource.mnMapScNumY) *
double(aMapResDest.mnMapScDenomY)) / (
double(aMapResSource.mnMapScDenomY) *
double(aMapResDest.mnMapScNumY)));
1751 const double fZeroPointX(
double(aMapResSource.mnMapOfsX) * fScaleFactorX -
double(aMapResDest.mnMapOfsX));
1752 const double fZeroPointY(
double(aMapResSource.mnMapOfsY) * fScaleFactorY -
double(aMapResDest.mnMapOfsY));
1754 aTransform.
set(0, 0, fScaleFactorX);
1755 aTransform.
set(1, 1, fScaleFactorY);
1756 aTransform.
set(0, 2, fZeroPointX);
1757 aTransform.
set(1, 2, fZeroPointY);
1764 const MapMode& rMapModeSource,
1767 if ( rMapModeSource == rMapModeDest )
1778 const auto& [eFrom, eTo] = getCorrectedUnit(eUnitSource, eUnitDest);
1781 auto top =
fn3(rRectSource.
Top(), eFrom, eTo);
1791 const auto& [aMapResSource, aMapResDest] = ENTER4( rMapModeSource, rMapModeDest );
1793 auto left =
fn5( rRectSource.
Left() + aMapResSource.mnMapOfsX,
1794 aMapResSource.mnMapScNumX, aMapResDest.mnMapScDenomX,
1795 aMapResSource.mnMapScDenomX, aMapResDest.mnMapScNumX ) -
1796 aMapResDest.mnMapOfsX;
1797 auto top =
fn5( rRectSource.
Top() + aMapResSource.mnMapOfsY,
1798 aMapResSource.mnMapScNumY, aMapResDest.mnMapScDenomY,
1799 aMapResSource.mnMapScDenomY, aMapResDest.mnMapScNumY ) -
1800 aMapResDest.mnMapOfsY;
1804 aMapResSource.mnMapScNumX, aMapResDest.mnMapScDenomX,
1805 aMapResSource.mnMapScDenomX, aMapResDest.mnMapScNumX ) -
1806 aMapResDest.mnMapOfsX;
1808 aMapResSource.mnMapScNumY, aMapResDest.mnMapScDenomY,
1809 aMapResSource.mnMapScDenomY, aMapResDest.mnMapScNumY ) -
1810 aMapResDest.mnMapOfsY;
1827 if ( eUnitSource == eUnitDest )
1831 const auto& [eFrom, eTo] = getCorrectedUnit(eUnitSource, eUnitDest);
1832 return fn3(nLongSource, eFrom, eTo);
1855#if VCL_FLOAT_DEVICE_PIXEL
constexpr o3tl::Length MapToO3tlLength(MapUnit eU, o3tl::Length ePixelValue=o3tl::Length::px)
sal_Int32 GetNumerator() const
static Fraction MakeFraction(tools::Long nN1, tools::Long nN2, tools::Long nD1, tools::Long nD2)
sal_Int32 GetDenominator() const
void SetOrigin(const Point &rOrigin)
void SetScaleY(const Fraction &rScaleY)
const Fraction & GetScaleX() const
MapUnit GetMapUnit() const
const Point & GetOrigin() const
const Fraction & GetScaleY() const
void SetScaleX(const Fraction &rScaleX)
SAL_DLLPRIVATE tools::Long ImplLogicYToDevicePixel(tools::Long nY) const
Convert a logical Y coordinate to a device pixel's Y coordinate.
void EnableMapMode(bool bEnable=true)
basegfx::B2DHomMatrix GetViewTransformation() const
tools::Long mnOutOffY
Output offset for device output in pixel (pseudo window offset within window system's frames)
SAL_DLLPRIVATE tools::Long ImplDevicePixelToLogicHeight(tools::Long nHeight) const
Convert device pixels to a height in logical units.
virtual void SetMetafileMapMode(const MapMode &rNewMapMode, bool bIsRecord)
SAL_DLLPRIVATE tools::Rectangle ImplLogicToDevicePixel(const tools::Rectangle &rLogicRect) const
Convert a logical rectangle to a rectangle in physical device pixel units.
basegfx::B2DHomMatrix GetInverseViewTransformation() const
SAL_DLLPRIVATE double ImplLogicHeightToDeviceSubPixel(tools::Long nHeight) const
tools::Long mnOutOffX
Output offset for device output in pixel (pseudo window offset within window system's frames)
tools::Long mnOutOffLogicX
Additional output offset in logical coordinates, applied in PixelToLogic (used by SetPixelOffset/GetP...
SAL_WARN_UNUSED_RESULT Point PixelToLogic(const Point &rDevicePt) const
std::unique_ptr< ImplOutDevData > mpOutDevData
SAL_DLLPRIVATE tools::Long ImplLogicHeightToDevicePixel(tools::Long nHeight) const
Convert a logical height to a height in units of device pixels.
SAL_WARN_UNUSED_RESULT Point LogicToLogic(const Point &rPtSource, const MapMode *pMapModeSource, const MapMode *pMapModeDest) const
virtual void ImplInitMapModeObjects()
SAL_DLLPRIVATE tools::Long ImplLogicWidthToDevicePixel(tools::Long nWidth) const
Convert a logical width to a width in units of device pixels.
void SetPixelOffset(const Size &rOffset)
Set an offset in pixel.
SAL_DLLPRIVATE double ImplLogicWidthToDeviceSubPixel(tools::Long nWidth) const
void SetRelativeMapMode(const MapMode &rNewMapMode)
SAL_DLLPRIVATE DeviceCoordinate LogicWidthToDeviceCoordinate(tools::Long nWidth) const
SAL_WARN_UNUSED_RESULT Point LogicToPixel(const Point &rLogicPt) const
SAL_DLLPRIVATE void ImplInvalidateViewTransform()
Invalidate the view transformation.
SAL_DLLPRIVATE tools::Long ImplDevicePixelToLogicWidth(tools::Long nWidth) const
Convert device pixels to a width in logical units.
SAL_DLLPRIVATE tools::Rectangle ImplDevicePixelToLogic(const tools::Rectangle &rPixelRect) const
Convert a rectangle in physical pixel units to a rectangle in physical pixel units and coords.
SAL_DLLPRIVATE DevicePoint ImplLogicToDeviceSubPixel(const Point &rLogicPt) const
tools::Long mnOutOffOrigX
Additional output pixel offset, applied in LogicToPixel (used by SetPixelOffset/GetPixelOffset)
VclPtr< VirtualDevice > mpAlphaVDev
tools::Long mnOutOffOrigY
Additional output pixel offset, applied in LogicToPixel (used by SetPixelOffset/GetPixelOffset)
SAL_DLLPRIVATE basegfx::B2DHomMatrix ImplGetDeviceTransformation() const
Get device transformation.
SAL_DLLPRIVATE Point SubPixelToLogic(const DevicePoint &rDevicePt) const
tools::Long mnOutOffLogicY
Additional output offset in logical coordinates, applied in PixelToLogic (used by SetPixelOffset/GetP...
SAL_DLLPRIVATE vcl::Region ImplPixelToDevicePixel(const vcl::Region &rRegion) const
Convert a region in pixel units to a region in device pixel units and coords.
SAL_DLLPRIVATE tools::Long ImplLogicXToDevicePixel(tools::Long nX) const
Convert a logical X coordinate to a device pixel's X coordinate.
A construction helper for ScopedVclPtr.
constexpr tools::Long Height() const
constexpr tools::Long Width() const
void set(sal_uInt16 nRow, sal_uInt16 nColumn, double fValue)
void translate(double fX, double fY)
void transform(const basegfx::B2DHomMatrix &rMatrix)
void transform(const basegfx::B2DHomMatrix &rMatrix)
void Move(tools::Long nHorzMove, tools::Long nVertMove)
const RegionBand * getRegionBand() const
const std::optional< basegfx::B2DPolyPolygon > & getB2DPolyPolygon() const
void Union(const tools::Rectangle &rRegion)
void GetRegionRectangles(RectangleVector &rTarget) const
const std::optional< tools::PolyPolygon > & getPolyPolygon() const
static SAL_DLLPRIVATE void ImplInitAppFontData(vcl::Window const *pWindow)
#define DBG_ASSERT(sCon, aError)
sal_Int32 DeviceCoordinate
basegfx::B2DPoint DevicePoint
#define SAL_WARN(area, stream)
#define ENTER1(rSource, pMapModeSource, pMapModeDest)
static tools::Long ImplSubPixelToLogic(double n, tools::Long nDPI, tools::Long nMapNum, tools::Long nMapDenom)
static tools::Long ImplLogicToPixel(tools::Long n, tools::Long nDPI, tools::Long nMapNum, tools::Long nMapDenom)
static void verifyUnitSourceDest(MapUnit eUnitSource, MapUnit eUnitDest)
static double ImplLogicToSubPixel(tools::Long n, tools::Long nDPI, tools::Long nMapNum, tools::Long nMapDenom)
static tools::Long fn3(const tools::Long n1, const o3tl::Length eFrom, const o3tl::Length eTo)
static tools::Long fn5(const tools::Long n1, const tools::Long n2, const tools::Long n3, const tools::Long n4, const tools::Long n5)
static tools::Long ImplPixelToLogic(tools::Long n, tools::Long nDPI, tools::Long nMapNum, tools::Long nMapDenom)
static void ImplCalcMapResolution(const MapMode &rMapMode, tools::Long nDPIX, tools::Long nDPIY, ImplMapRes &rMapRes)
static auto setMapRes(ImplMapRes &rMapRes, const o3tl::Length eUnit)
constexpr Point convert(const Point &rPoint, o3tl::Length eFrom, o3tl::Length eTo)
double div(const double &fNumerator, const double &fDenominator)
std::vector< tools::Rectangle > RectangleVector
tools::Long mnMapScDenomX
Scaling factor - denominator in X direction.
tools::Long mnMapScDenomY
Scaling factor - denominator in Y direction.
tools::Long mnMapScNumY
Scaling factor - numerator in Y direction.
tools::Long mnMapOfsY
Offset in Y direction.
tools::Long mnMapScNumX
Scaling factor - numerator in X direction.
tools::Long mnMapOfsX
Offset in X direction.
ImplSVFrameData maFrameData
VclPtr< vcl::Window > mpFirstFrame
ImplSVData * ImplGetSVData()