diff options
-rw-r--r-- | sw/qa/extras/htmlexport/htmlexport.cxx | 34 | ||||
-rw-r--r-- | sw/source/filter/html/htmlflywriter.cxx | 50 |
2 files changed, 78 insertions, 6 deletions
diff --git a/sw/qa/extras/htmlexport/htmlexport.cxx b/sw/qa/extras/htmlexport/htmlexport.cxx index 639b744b05da..a85715f6bebc 100644 --- a/sw/qa/extras/htmlexport/htmlexport.cxx +++ b/sw/qa/extras/htmlexport/htmlexport.cxx @@ -2290,6 +2290,40 @@ CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, testTableBackground) assertXPathNoAttribute(pXmlDoc, "//reqif-xhtml:table[2]/reqif-xhtml:tr[1]", "bgcolor"); } +CPPUNIT_TEST_FIXTURE(HtmlExportTest, testImageKeepRatio) +{ + // Given a document with an image: width is relative, height is "keep ratio": + createSwDoc(); + uno::Reference<lang::XMultiServiceFactory> xFactory(mxComponent, uno::UNO_QUERY); + uno::Reference<beans::XPropertySet> xTextGraphic( + xFactory->createInstance("com.sun.star.text.TextGraphicObject"), uno::UNO_QUERY); + xTextGraphic->setPropertyValue("AnchorType", + uno::Any(text::TextContentAnchorType_AS_CHARACTER)); + xTextGraphic->setPropertyValue("RelativeWidth", uno::Any(static_cast<sal_Int16>(42))); + xTextGraphic->setPropertyValue("IsSyncHeightToWidth", uno::Any(true)); + uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference<text::XText> xBodyText = xTextDocument->getText(); + uno::Reference<text::XTextCursor> xCursor(xBodyText->createTextCursor()); + uno::Reference<text::XTextContent> xTextContent(xTextGraphic, uno::UNO_QUERY); + xBodyText->insertTextContent(xCursor, xTextContent, false); + + // When exporting to HTML: + uno::Reference<frame::XStorable> xStorable(mxComponent, uno::UNO_QUERY); + uno::Sequence<beans::PropertyValue> aStoreProperties = { + comphelper::makePropertyValue("FilterName", OUString("HTML (StarWriter)")), + }; + xStorable->storeToURL(maTempFile.GetURL(), aStoreProperties); + + // Then make sure that the width is not a fixed size, that would break on resizing the browser + // window: + htmlDocUniquePtr pDoc = parseHtml(maTempFile); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: auto + // - Actual : 2 + // i.e. a static (CSS pixel) height was written. + assertXPath(pDoc, "/html/body/p/img", "height", "auto"); +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/filter/html/htmlflywriter.cxx b/sw/source/filter/html/htmlflywriter.cxx index 2ad597aea80d..940b7c9d9a86 100644 --- a/sw/source/filter/html/htmlflywriter.cxx +++ b/sw/source/filter/html/htmlflywriter.cxx @@ -975,22 +975,60 @@ void SwHTMLWriter::writeFrameFormatOptions(HtmlWriter& aHtml, const SwFrameForma ((nPercentWidth && nPercentWidth!=255) || aPixelSz.Width()) ) { OString sWidth; - if (nPercentWidth && nPercentWidth != 255) - sWidth = OString::number(static_cast<sal_Int32>(nPercentWidth)) + "%"; + if (nPercentWidth) + { + if (nPercentWidth == 255) + { + if (nPercentHeight) + { + sWidth = "auto"; + } + else + { + sWidth = OString::number(static_cast<sal_Int32>(aPixelSz.Width())); + } + } + else + { + sWidth = OString::number(static_cast<sal_Int32>(nPercentWidth)) + "%"; + } + } else sWidth = OString::number(static_cast<sal_Int32>(aPixelSz.Width())); - aHtml.attribute(OOO_STRING_SVTOOLS_HTML_O_width, sWidth); + if (!mbXHTML || sWidth != "auto") + { + aHtml.attribute(OOO_STRING_SVTOOLS_HTML_O_width, sWidth); + } } if( (nFrameOptions & HtmlFrmOpts::Height) && ((nPercentHeight && nPercentHeight!=255) || aPixelSz.Height()) ) { OString sHeight; - if (nPercentHeight && nPercentHeight != 255) - sHeight = OString::number(static_cast<sal_Int32>(nPercentHeight)) + "%"; + if (nPercentHeight) + { + if (nPercentHeight == 255) + { + if (nPercentWidth) + { + sHeight = "auto"; + } + else + { + sHeight = OString::number(static_cast<sal_Int32>(aPixelSz.Height())); + } + } + else + { + sHeight = OString::number(static_cast<sal_Int32>(nPercentHeight)) + "%"; + } + } else sHeight = OString::number(static_cast<sal_Int32>(aPixelSz.Height())); - aHtml.attribute(OOO_STRING_SVTOOLS_HTML_O_height, sHeight); + if (!mbXHTML || sHeight != "auto") + { + aHtml.attribute(OOO_STRING_SVTOOLS_HTML_O_height, sHeight); + } } } |