tdf#43671: Pass through emphasis mark setting with cairo canvas

Other canvas implementations passed it through, but cairo canvas was
not.

Change-Id: I9b4cc500998635568c095866f9099f83bf1c984e
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/153299
Tested-by: Jenkins
Reviewed-by: خالد حسني <khaled@libreoffice.org>
(cherry picked from commit 35803990c9b1881074460659acdac6b2799c99ee)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/153283
diff --git a/canvas/source/cairo/cairo_canvasfont.cxx b/canvas/source/cairo/cairo_canvasfont.cxx
index 16af118..82f300e 100644
--- a/canvas/source/cairo/cairo_canvasfont.cxx
+++ b/canvas/source/cairo/cairo_canvasfont.cxx
@@ -27,6 +27,8 @@
#include <utility>
#include <vcl/metric.hxx>

#include <canvas/canvastools.hxx>

#include "cairo_canvasfont.hxx"
#include "cairo_textlayout.hxx"

@@ -36,15 +38,18 @@ namespace cairocanvas
{

    CanvasFont::CanvasFont( const rendering::FontRequest&                   rFontRequest,
                            const uno::Sequence< beans::PropertyValue >&    /*rExtraFontProperties*/,
                            const uno::Sequence< beans::PropertyValue >&    rExtraFontProperties,
                            const geometry::Matrix2D&                       rFontMatrix,
                            SurfaceProviderRef                              rDevice ) :
        maFont( vcl::Font( rFontRequest.FontDescription.FamilyName,
                      rFontRequest.FontDescription.StyleName,
                      Size( 0, ::basegfx::fround(rFontRequest.CellSize) ) ) ),
        maFontRequest( rFontRequest ),
        mpRefDevice(std::move( rDevice ))
        mpRefDevice(std::move( rDevice )),
        mnEmphasisMark(0)
    {
        ::canvas::tools::extractExtraFontProperties(rExtraFontProperties, mnEmphasisMark);

        maFont->SetAlignment( ALIGN_BASELINE );
        maFont->SetCharSet( (rFontRequest.FontDescription.IsSymbolFont==css::util::TriState_YES) ? RTL_TEXTENCODING_SYMBOL : RTL_TEXTENCODING_UNICODE );
        maFont->SetVertical( rFontRequest.FontDescription.IsVertical==css::util::TriState_YES );
diff --git a/canvas/source/cairo/cairo_canvasfont.hxx b/canvas/source/cairo/cairo_canvasfont.hxx
index e510f42..d5e0150 100644
--- a/canvas/source/cairo/cairo_canvasfont.hxx
+++ b/canvas/source/cairo/cairo_canvasfont.hxx
@@ -70,10 +70,13 @@ namespace cairocanvas

        vcl::Font const & getVCLFont() const;

        sal_uInt32 getEmphasisMark() const { return mnEmphasisMark; }

    private:
        ::canvas::vcltools::VCLObject<vcl::Font> maFont;
        css::rendering::FontRequest              maFontRequest;
        SurfaceProviderRef                       mpRefDevice;
        sal_uInt32                               mnEmphasisMark;
    };

}
diff --git a/canvas/source/cairo/cairo_canvashelper_text.cxx b/canvas/source/cairo/cairo_canvashelper_text.cxx
index 6973607..c8498bd 100644
--- a/canvas/source/cairo/cairo_canvashelper_text.cxx
+++ b/canvas/source/cairo/cairo_canvashelper_text.cxx
@@ -190,6 +190,9 @@ namespace cairocanvas
        aVCLFont.SetColor( aColor );
        aVCLFont.SetFillColor( aColor );

        if (pFont->getEmphasisMark())
            aVCLFont.SetEmphasisMark(FontEmphasisMark(pFont->getEmphasisMark()));

        // no need to replicate this for mp2ndOutDev, we're modifying only aVCLFont here.
        if( !setupFontTransform( rOutDev, o_rOutPos, aVCLFont, viewState, renderState ) )
            return false;