summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.com>2021-06-16 10:11:47 +0200
committerMiklos Vajna <vmiklos@collabora.com>2021-06-16 12:21:46 +0200
commit3c46fd3d727e4885fedef7c9f3fcd6f4c9a9ebb9 (patch)
treecf46806a7126b0ce74d49137c0e3a559f6364034
parente838c1b9e9031de742deeff763c06b1d39f399ef (diff)
sw HTML export: allow larger bitmaps for shapes than the vcl default
VCL default would be 500k pixels, i.e. a 2" x 1" shape at 600 dpi would be already truncated from 1200 pixels width to 1000 pixels. That's a bit too extreme, use a larger limit in the sw HTML export. Change-Id: I52b85d77cd27410d53c700a89190c99348de5e19 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/117287 Reviewed-by: Miklos Vajna <vmiklos@collabora.com> Tested-by: Jenkins
-rw-r--r--include/svx/svdxcgv.hxx2
-rw-r--r--svx/source/svdraw/svdxcgv.cxx4
-rw-r--r--sw/inc/frmfmt.hxx6
-rw-r--r--sw/qa/extras/htmlexport/htmlexport.cxx17
-rw-r--r--sw/source/core/layout/paintfrm.cxx8
-rw-r--r--sw/source/filter/html/htmlflywriter.cxx2
6 files changed, 19 insertions, 20 deletions
diff --git a/include/svx/svdxcgv.hxx b/include/svx/svdxcgv.hxx
index 0afaa7c6ad6f..8ed2adbb126d 100644
--- a/include/svx/svdxcgv.hxx
+++ b/include/svx/svdxcgv.hxx
@@ -58,7 +58,7 @@ public:
// Draw all marked objects onto a bitmap, with the display's color depth
// and resolution
- BitmapEx GetMarkedObjBitmapEx(bool bNoVDevIfOneBmpMarked = false, const std::optional<Size>& rTargetDPI = std::nullopt) const;
+ BitmapEx GetMarkedObjBitmapEx(bool bNoVDevIfOneBmpMarked = false, const sal_uInt32 nMaximumQuadraticPixels = 500000, const std::optional<Size>& rTargetDPI = std::nullopt) const;
// Copy all marked objects to a new model, consisting of exactly one page,
// with the flag PageNotValid set. This means, that only the page's objects
diff --git a/svx/source/svdraw/svdxcgv.cxx b/svx/source/svdraw/svdxcgv.cxx
index af4e41734db8..8881336bdcf9 100644
--- a/svx/source/svdraw/svdxcgv.cxx
+++ b/svx/source/svdraw/svdxcgv.cxx
@@ -425,7 +425,7 @@ void SdrExchangeView::ImpPasteObject(SdrObject* pObj, SdrObjList& rLst, const Po
}
}
-BitmapEx SdrExchangeView::GetMarkedObjBitmapEx(bool bNoVDevIfOneBmpMarked, const std::optional<Size>& rTargetDPI) const
+BitmapEx SdrExchangeView::GetMarkedObjBitmapEx(bool bNoVDevIfOneBmpMarked, const sal_uInt32 nMaximumQuadraticPixels, const std::optional<Size>& rTargetDPI) const
{
BitmapEx aBmp;
@@ -502,7 +502,7 @@ BitmapEx SdrExchangeView::GetMarkedObjBitmapEx(bool bNoVDevIfOneBmpMarked, const
aBmp = convertPrimitive2DSequenceToBitmapEx(
xPrimitives,
aRange,
- /*nMaximumQuadraticPixels=*/ 500000,
+ nMaximumQuadraticPixels,
eRangeUnit,
rTargetDPI);
}
diff --git a/sw/inc/frmfmt.hxx b/sw/inc/frmfmt.hxx
index 36333d4e8525..316db344a2b8 100644
--- a/sw/inc/frmfmt.hxx
+++ b/sw/inc/frmfmt.hxx
@@ -116,7 +116,7 @@ public:
/// Creates the views.
virtual void MakeFrames();
- virtual Graphic MakeGraphic( ImageMap* pMap = nullptr, const std::optional<Size>& rTargetDPI = std::nullopt );
+ virtual Graphic MakeGraphic( ImageMap* pMap = nullptr, const sal_uInt32 nMaximumQuadraticPixels = 500000, const std::optional<Size>& rTargetDPI = std::nullopt );
/** @return the IMapObject defined at format (Fly)
in the ImageMap at position Point.
@@ -212,7 +212,7 @@ public:
SwAnchoredObject* GetAnchoredObj() const;
- virtual Graphic MakeGraphic( ImageMap* pMap = nullptr, const std::optional<Size>& rTargetDPI = std::nullopt ) override;
+ virtual Graphic MakeGraphic( ImageMap* pMap = nullptr, const sal_uInt32 nMaximumQuadraticPixels = 500000, const std::optional<Size>& rTargetDPI = std::nullopt ) override;
virtual bool GetInfo( SfxPoolItem& rInfo ) const override;
@@ -388,7 +388,7 @@ public:
Reset delete marks. */
virtual void MakeFrames() override;
- virtual Graphic MakeGraphic( ImageMap* pMap = nullptr, const std::optional<Size>& rTargetDPI = std::nullopt ) override;
+ virtual Graphic MakeGraphic( ImageMap* pMap = nullptr, const sal_uInt32 nMaximumQuadraticPixels = 500000, const std::optional<Size>& rTargetDPI = std::nullopt ) override;
virtual SwFrameFormat::tLayoutDir GetLayoutDir() const override;
virtual void SetLayoutDir( const SwFrameFormat::tLayoutDir _eLayoutDir ) override;
diff --git a/sw/qa/extras/htmlexport/htmlexport.cxx b/sw/qa/extras/htmlexport/htmlexport.cxx
index 044a6ad29e72..180a2cccc599 100644
--- a/sw/qa/extras/htmlexport/htmlexport.cxx
+++ b/sw/qa/extras/htmlexport/htmlexport.cxx
@@ -1762,12 +1762,10 @@ CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, testReqifEmbedShapeAsPNGCustomDPI)
uno::Reference<css::lang::XMultiServiceFactory> xFactory(mxComponent, uno::UNO_QUERY);
uno::Reference<drawing::XShape> xShape(
xFactory->createInstance("com.sun.star.drawing.RectangleShape"), uno::UNO_QUERY);
- xShape->setSize(awt::Size(7145, 5240));
+ xShape->setSize(awt::Size(5080, 2540));
uno::Reference<drawing::XDrawPageSupplier> xDrawPageSupplier(mxComponent, uno::UNO_QUERY);
xDrawPageSupplier->getDrawPage()->add(xShape);
- Size aSystemDPI(
- Application::GetDefaultDevice()->LogicToPixel(Size(1, 1), MapMode(MapUnit::MapInch)));
- sal_Int32 nDPI = aSystemDPI.getWidth() * 2;
+ sal_Int32 nDPI = 600;
// When exporting to XHTML:
uno::Reference<frame::XStorable> xStorable(mxComponent, uno::UNO_QUERY);
@@ -1786,17 +1784,18 @@ CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, testReqifEmbedShapeAsPNGCustomDPI)
assertXPath(pXmlDoc, "//reqif-xhtml:p/reqif-xhtml:object", "type", "image/png");
// Then check the pixel size of the shape:
- Size aPixelSize(Application::GetDefaultDevice()->LogicToPixel(Size(7145, 5240),
+ Size aPixelSize(Application::GetDefaultDevice()->LogicToPixel(Size(5080, 2540),
MapMode(MapUnit::Map100thMM)));
- tools::Long nPNGWidth = aPixelSize.getWidth() * 2;
+ tools::Long nPNGWidth = 1200;
OUString aPngUrl = GetPngPath();
SvFileStream aFileStream(aPngUrl, StreamMode::READ);
GraphicDescriptor aDescriptor(aFileStream, nullptr);
aDescriptor.Detect(/*bExtendedInfo=*/true);
// Without the accompanying fix in place, this test would have failed with:
- // - Expected: 540
- // - Actual : 270
- // i.e. setting a double DPI didn't result in larger pixel width of the PNG.
+ // - Expected: 1200
+ // - Actual : 1000
+ // i.e. first setting a double DPI didn't result in larger pixel width of the PNG, then it was
+ // limited to 1000 pixels (because the pixel limit was 500k).
CPPUNIT_ASSERT_EQUAL(nPNGWidth, aDescriptor.GetSizePixel().getWidth());
// Then make sure the shape's logic size (in CSS pixels) don't change:
diff --git a/sw/source/core/layout/paintfrm.cxx b/sw/source/core/layout/paintfrm.cxx
index aec591d05c3c..487cd5d2c8f6 100644
--- a/sw/source/core/layout/paintfrm.cxx
+++ b/sw/source/core/layout/paintfrm.cxx
@@ -7441,12 +7441,12 @@ void SetOutDevAndWin( SwViewShell *pSh, OutputDevice *pO,
pSh->mpOpt->SetZoom( nZoom );
}
-Graphic SwFrameFormat::MakeGraphic( ImageMap*, const std::optional<Size>& /*rTargetDPI*/ )
+Graphic SwFrameFormat::MakeGraphic( ImageMap*, const sal_uInt32 /*nMaximumQuadraticPixels*/, const std::optional<Size>& /*rTargetDPI*/ )
{
return Graphic();
}
-Graphic SwFlyFrameFormat::MakeGraphic( ImageMap* pMap, const std::optional<Size>& /*rTargetDPI*/ )
+Graphic SwFlyFrameFormat::MakeGraphic( ImageMap* pMap, const sal_uInt32 /*nMaximumQuadraticPixels*/, const std::optional<Size>& /*rTargetDPI*/ )
{
Graphic aRet;
//search any Fly!
@@ -7553,7 +7553,7 @@ Graphic SwFlyFrameFormat::MakeGraphic( ImageMap* pMap, const std::optional<Size>
return aRet;
}
-Graphic SwDrawFrameFormat::MakeGraphic( ImageMap*, const std::optional<Size>& rTargetDPI )
+Graphic SwDrawFrameFormat::MakeGraphic( ImageMap*, const sal_uInt32 nMaximumQuadraticPixels, const std::optional<Size>& rTargetDPI )
{
Graphic aRet;
SwDrawModel* pMod = getIDocumentDrawModelAccess().GetDrawModel();
@@ -7563,7 +7563,7 @@ Graphic SwDrawFrameFormat::MakeGraphic( ImageMap*, const std::optional<Size>& rT
SdrView aView( *pMod );
SdrPageView *pPgView = aView.ShowSdrPage(aView.GetModel()->GetPage(0));
aView.MarkObj( pObj, pPgView );
- aRet = aView.GetMarkedObjBitmapEx(/*bNoVDevIfOneBmpMarked=*/false, rTargetDPI);
+ aRet = aView.GetMarkedObjBitmapEx(/*bNoVDevIfOneBmpMarked=*/false, nMaximumQuadraticPixels, rTargetDPI);
aView.HideSdrPage();
}
return aRet;
diff --git a/sw/source/filter/html/htmlflywriter.cxx b/sw/source/filter/html/htmlflywriter.cxx
index 5dc8d69360c8..472f406c28c6 100644
--- a/sw/source/filter/html/htmlflywriter.cxx
+++ b/sw/source/filter/html/htmlflywriter.cxx
@@ -1809,7 +1809,7 @@ static Writer & OutHTML_FrameFormatAsImage( Writer& rWrt, const SwFrameFormat& r
{
aDPI.emplace(*rHTMLWrt.m_nShapeDPI, *rHTMLWrt.m_nShapeDPI);
}
- Graphic aGraphic( const_cast<SwFrameFormat &>(rFrameFormat).MakeGraphic( &aIMap, aDPI ) );
+ Graphic aGraphic( const_cast<SwFrameFormat &>(rFrameFormat).MakeGraphic( &aIMap, /*nMaximumQuadraticPixels=*/2100000, aDPI ) );
if (rHTMLWrt.mbReqIF)
{