[Libreoffice-commits] core.git: Branch 'libreoffice-5-3' - vcl/source

Miklos Vajna vmiklos at collabora.co.uk
Wed Feb 1 17:38:20 UTC 2017


 vcl/source/gdi/pdfwriter_impl.cxx |   23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

New commits:
commit 27d641761cff82ed34987ac1f70b838f1028bc6e
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Wed Feb 1 10:52:19 2017 +0100

    tdf#105461 PDF export: handle text fill color
    
    Text portion level background in Writer text was working already, as
    Writer paints its background explicitly, and then uses no text fill
    color in the metafile (that is turned into a PDF later).
    
    However, text fill color is used for Writer shape text and also in
    Impress. The rectangle is not just the text itself, but also the ascent
    / descent region, this matches the desktop rendering result.
    
    (cherry picked from commit ee32c7d8083ae1449d6b379034be92995c142da9)
    
    Change-Id: I644007ade43a8b9e663890643b826ae12c427ea5
    Reviewed-on: https://gerrit.libreoffice.org/33794
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/vcl/source/gdi/pdfwriter_impl.cxx b/vcl/source/gdi/pdfwriter_impl.cxx
index 1697cfd..9e592a7 100644
--- a/vcl/source/gdi/pdfwriter_impl.cxx
+++ b/vcl/source/gdi/pdfwriter_impl.cxx
@@ -9424,6 +9424,29 @@ void PDFWriterImpl::drawLayout( SalLayout& rLayout, const OUString& rText, bool
         }
     }
 
+    if (m_aCurrentPDFState.m_aFont.GetFillColor() != Color(COL_TRANSPARENT))
+    {
+        // PDF doesn't have a text fill color, so draw a rectangle before
+        // drawing the actual text.
+        push(PushFlags::FILLCOLOR | PushFlags::LINECOLOR);
+        setFillColor(m_aCurrentPDFState.m_aFont.GetFillColor());
+        // Avoid border around the rectangle for Writer shape text.
+        setLineColor(Color(COL_TRANSPARENT));
+
+        // The rectangle is the bounding box of the text, but also includes
+        // ascent / descent to match the on-screen rendering.
+        Rectangle aRectangle;
+        // This is the top left of the text without ascent / descent.
+        aRectangle.SetPos(m_pReferenceDevice->PixelToLogic(rLayout.GetDrawPosition()));
+        aRectangle.setY(aRectangle.getY() - aRefDevFontMetric.GetAscent());
+        aRectangle.SetSize(m_pReferenceDevice->PixelToLogic(Size(rLayout.GetTextWidth(), 0)));
+        // This includes ascent / descent.
+        aRectangle.setHeight(aRefDevFontMetric.GetLineHeight());
+        drawRectangle(aRectangle);
+
+        pop();
+    }
+
     Point aAlignOffset;
     if ( eAlign == ALIGN_BOTTOM )
         aAlignOffset.Y() -= aRefDevFontMetric.GetDescent();


More information about the Libreoffice-commits mailing list