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 <vmik...@collabora.com>
AuthorDate: Wed Jun 16 10:11:47 2021 +0200
Commit:     Miklos Vajna <vmik...@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 <vmik...@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)
     {
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to