[Libreoffice-commits] core.git: include/svx svx/source sw/inc sw/qa sw/source

Miklos Vajna (via logerrit) logerrit at kemper.freedesktop.org
Wed Jun 16 10:22:31 UTC 2021


 include/svx/svdxcgv.hxx                 |    2 +-
 svx/source/svdraw/svdxcgv.cxx           |    4 ++--
 sw/inc/frmfmt.hxx                       |    6 +++---
 sw/qa/extras/htmlexport/htmlexport.cxx  |   17 ++++++++---------
 sw/source/core/layout/paintfrm.cxx      |    8 ++++----
 sw/source/filter/html/htmlflywriter.cxx |    2 +-
 6 files changed, 19 insertions(+), 20 deletions(-)

New commits:
commit 3c46fd3d727e4885fedef7c9f3fcd6f4c9a9ebb9
Author:     Miklos Vajna <vmiklos at collabora.com>
AuthorDate: Wed Jun 16 10:11:47 2021 +0200
Commit:     Miklos Vajna <vmiklos at collabora.com>
CommitDate: Wed Jun 16 12:21:46 2021 +0200

    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 at collabora.com>
    Tested-by: Jenkins

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)
     {


More information about the Libreoffice-commits mailing list