summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKatarina Behrens <Katarina.Behrens@cib.de>2018-04-06 17:19:02 +0200
committerKatarina Behrens <Katarina.Behrens@cib.de>2018-04-06 17:19:02 +0200
commitdfdc78dd2ca39bfa738ba9b4f9ee50682b1b379d (patch)
tree810469b35cc51ce27d7a41d6f310f42b59d01900
parent25c32884dfc537e328375aaad6261b72890ee778 (diff)
Html import: use loaded image width/height if width|height ="auto"
"auto" means viewing application decides what the size/dimension is going to be i.e. act as if no particular size was provided Change-Id: I4d9ef622d8252e049912850133295b3676a5f026
-rw-r--r--sw/CppunitTest_sw_htmlimport.mk2
-rw-r--r--sw/qa/extras/htmlimport/data/image-width-auto.html40
-rw-r--r--sw/qa/extras/htmlimport/htmlimport.cxx16
-rw-r--r--sw/source/filter/html/htmlgrin.cxx28
4 files changed, 80 insertions, 6 deletions
diff --git a/sw/CppunitTest_sw_htmlimport.mk b/sw/CppunitTest_sw_htmlimport.mk
index 410c6baa9d26..8b9f6f2970ad 100644
--- a/sw/CppunitTest_sw_htmlimport.mk
+++ b/sw/CppunitTest_sw_htmlimport.mk
@@ -19,9 +19,11 @@ $(eval $(call gb_CppunitTest_use_libraries,sw_htmlimport, \
comphelper \
cppu \
cppuhelper \
+ editeng \
i18nlangtag \
sal \
sfx \
+ svl \
svt \
sw \
test \
diff --git a/sw/qa/extras/htmlimport/data/image-width-auto.html b/sw/qa/extras/htmlimport/data/image-width-auto.html
new file mode 100644
index 000000000000..878be07cee04
--- /dev/null
+++ b/sw/qa/extras/htmlimport/data/image-width-auto.html
@@ -0,0 +1,40 @@
+<html><meta http-equiv="content-type" content="text/html; charset=utf-8"><head></head>
+<body>
+ <p><img id="pasted_img_43b9f3043ba35043b46c043bddb043bf" src="data:image/png;base64,
+ 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
+ SUVORK5CYII=
+" alt="" width="auto" height="auto"></p>
+</body></html>
diff --git a/sw/qa/extras/htmlimport/htmlimport.cxx b/sw/qa/extras/htmlimport/htmlimport.cxx
index 3f421814dec1..742dbb558f26 100644
--- a/sw/qa/extras/htmlimport/htmlimport.cxx
+++ b/sw/qa/extras/htmlimport/htmlimport.cxx
@@ -17,6 +17,10 @@
#include <docsh.hxx>
#include <editsh.hxx>
#include <ndgrf.hxx>
+#include <ndtxt.hxx>
+#include <txatbase.hxx>
+#include <fmtflcnt.hxx>
+#include <fmtfsize.hxx>
class HtmlImportTest : public SwModelTestBase
{
@@ -116,6 +120,18 @@ DECLARE_HTMLIMPORT_TEST(testTableBorder1px, "table_border_1px.html")
CPPUNIT_ASSERT_BORDER_EQUAL(table::BorderLine2(0x808080,9,9,9,3,26), getProperty<table::BorderLine2>(xCellB2,"RightBorder"));
}
+DECLARE_HTMLIMPORT_TEST(testImageWidthAuto, "image-width-auto.html")
+{
+ SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument *>(mxComponent.get());
+ CPPUNIT_ASSERT(pTextDoc);
+ SwTextAttr const*const pAttr(pTextDoc->GetDocShell()->GetDoc()->GetEditShell()->
+ GetCrsr()->GetNode().GetTextNode()->GetTextAttrForCharAt(0, RES_TXTATR_FLYCNT));
+ CPPUNIT_ASSERT(pAttr);
+ SwFrameFormat const*const pFmt(pAttr->GetFlyCnt().GetFrameFormat());
+ SwFormatFrmSize const& rSize = static_cast<const SwFormatFrmSize&>(pFmt->GetFormatAttr( RES_FRM_SIZE ));
+ CPPUNIT_ASSERT_EQUAL(Size(1835, 560), rSize.GetSize());
+}
+
CPPUNIT_PLUGIN_IMPLEMENT();
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/source/filter/html/htmlgrin.cxx b/sw/source/filter/html/htmlgrin.cxx
index ab51592c16d7..6ff807a9dc2f 100644
--- a/sw/source/filter/html/htmlgrin.cxx
+++ b/sw/source/filter/html/htmlgrin.cxx
@@ -320,6 +320,7 @@ void SwHTMLParser::InsertImage()
bool bIsMap = false;
bool bPrcWidth = false;
bool bPrcHeight = false;
+ OUString sWidthAsString, sHeightAsString;
SvxMacroItem aMacroItem(RES_FRMMACRO);
ScriptType eDfltScriptType;
@@ -359,18 +360,23 @@ void SwHTMLParser::InsertImage()
case HTML_O_WIDTH:
// erstmal nur als Pixelwerte merken!
nWidth = rOption.GetNumber();
- bPrcWidth = (rOption.GetString().indexOf('%') != -1);
+ sWidthAsString = rOption.GetString();
+ bPrcWidth = (sWidthAsString.indexOf('%') != -1);
if( bPrcWidth && nWidth>100 )
nWidth = 100;
- bWidthProvided = true;
+ // width|height = "auto" means viewing app decides the size
+ // i.e. proceed as if no particular size was provided
+ bWidthProvided = (sWidthAsString != "auto");
break;
case HTML_O_HEIGHT:
// erstmal nur als Pixelwerte merken!
nHeight = rOption.GetNumber();
- bPrcHeight = (rOption.GetString().indexOf('%') != -1);
+ sHeightAsString = rOption.GetString();
+ bPrcHeight = (sHeightAsString.indexOf('%') != -1);
if( bPrcHeight && nHeight>100 )
nHeight = 100;
- bHeightProvided = true;
+ // the same as above w/ HtmlOptionId::WIDTH
+ bHeightProvided = (sHeightAsString != "auto");
break;
case HTML_O_VSPACE:
nVSpace = rOption.GetNumber();
@@ -558,8 +564,18 @@ IMAGE_SETEVENT:
Size aTwipSz( bPrcWidth ? 0 : nWidth, bPrcHeight ? 0 : nHeight );
if( (aTwipSz.Width() || aTwipSz.Height()) && Application::GetDefaultDevice() )
{
- aTwipSz = Application::GetDefaultDevice()
- ->PixelToLogic( aTwipSz, MapMode( MAP_TWIP ) );
+ if (bWidthProvided || bHeightProvided || // attributes imply pixel!
+ aGraphic.GetPrefMapMode().GetMapUnit() == MAP_PIXEL)
+ {
+ aTwipSz = Application::GetDefaultDevice()
+ ->PixelToLogic( aTwipSz, MapMode(MAP_TWIP) );
+ }
+ else
+ { // some bitmaps may have a size in metric units (e.g. PNG); use that
+ assert(aGraphic.GetPrefMapMode().GetMapUnit() < MAP_PIXEL);
+ aTwipSz = OutputDevice::LogicToLogic(aGraphic.GetPrefSize(),
+ aGraphic.GetPrefMapMode(), MapMode(MAP_TWIP));
+ }
}
// CSS1-Groesse auf "normale" Groesse umrechnen