fdo#56402: SVG in About Dialog.
diff --git a/cui/source/dialogs/about.cxx b/cui/source/dialogs/about.cxx
index ddc3b46..cc62e89 100644
--- a/cui/source/dialogs/about.cxx
+++ b/cui/source/dialogs/about.cxx
@@ -207,22 +207,19 @@ void AboutDialog::LayoutControls()
    Size aLogoSize( aIdealTextWidth, aIdealTextWidth / 20 );
    Point aLogoPos( 0, 0 );

#ifdef FIXME_REMOVE_WHEN_RE_BASE_COMPLETE
    vcl::RenderGraphicRasterizer aRasterizerLogo = Application::LoadBrandSVG("flat_logo");
    if ( !aRasterizerLogo.GetRenderGraphic().IsEmpty() &&
         aRasterizerLogo.GetDefaultSizePixel().Width() > 0 && aRasterizerLogo.GetDefaultSizePixel().Height() > 0 )
    if( Application::LoadBrandSVG("flat_logo", aLogoBitmap) &&
        !aLogoBitmap.IsEmpty() )
    {
        const float aLogoWidthHeightRatio = (float)aRasterizerLogo.GetDefaultSizePixel().Width() / (float)aRasterizerLogo.GetDefaultSizePixel().Height();
        const float aLogoWidthHeightRatio = (float)aLogoBitmap.GetSizePixel().Width() / (float)aLogoBitmap.GetSizePixel().Height();
        aLogoSize.Width() = aDialogSize.Width() ;
        aLogoSize.Height() = aLogoSize.Width() / aLogoWidthHeightRatio ;
        aLogoBitmap.Scale(aLogoSize);

        aLogoBitmap = aRasterizerLogo.Rasterize( aLogoSize );
        aLogoImage.SetImage( Image( aLogoBitmap ) );
        aLogoImage.SetPosSizePixel( aLogoPos, aLogoSize );
        aLogoImage.Show();
    }
    else
#endif
    {
        aLogoPos.X() = aDialogBorder;
        aLogoPos.Y() = aDialogBorder;
@@ -277,27 +274,21 @@ void AboutDialog::LayoutControls()


    // Layout background image
#ifdef FIXME_REMOVE_WHEN_RE_BASE_COMPLETE
    if ( !(Application::GetSettings().GetStyleSettings().GetHighContrastMode()) )   {
        vcl::RenderGraphicRasterizer aRasterizerBackground = Application::LoadBrandSVG("shell/about");
    if ( !(Application::GetSettings().GetStyleSettings().GetHighContrastMode()) &&
          Application::LoadBrandSVG("shell/about", aBackgroundBitmap) &&
          !aBackgroundBitmap.IsEmpty() )
    {
        const float aBackgroundWidthHeightRatio = (float)aBackgroundBitmap.GetSizePixel().Width() /
            (float)aBackgroundBitmap.GetSizePixel().Height();
        Size aBackgroundSize (aDialogSize.Width(), aDialogSize.Width() / aBackgroundWidthHeightRatio );

        if ( !aRasterizerBackground.GetRenderGraphic().IsEmpty() &&
            aRasterizerBackground.GetDefaultSizePixel().Width() > 0 && aRasterizerBackground.GetDefaultSizePixel().Height() > 0 )
        if ( aBackgroundSize.Height() < aDialogSize.Height())
        {
            const float aBackgroundWidthHeightRatio = (float)aRasterizerBackground.GetDefaultSizePixel().Width() /
                                       (float)aRasterizerBackground.GetDefaultSizePixel().Height();
            Size aBackgroundSize (aDialogSize.Width(), aDialogSize.Width() / aBackgroundWidthHeightRatio );

            if ( aBackgroundSize.Height() < aDialogSize.Height())
            {
                aBackgroundSize.Width() = aDialogSize.Height() * aBackgroundWidthHeightRatio ;
                aBackgroundSize.Height() = aDialogSize.Height();
            }

            aBackgroundBitmap = aRasterizerBackground.Rasterize( aBackgroundSize );
            aBackgroundSize.Width() = aDialogSize.Height() * aBackgroundWidthHeightRatio ;
            aBackgroundSize.Height() = aDialogSize.Height();
        }
        aBackgroundBitmap.Scale(aBackgroundSize);
    }
#endif

    SetOutputSizePixel( aDialogSize );

diff --git a/vcl/inc/vcl/svapp.hxx b/vcl/inc/vcl/svapp.hxx
index 0a1aa56..48b87d15 100644
--- a/vcl/inc/vcl/svapp.hxx
+++ b/vcl/inc/vcl/svapp.hxx
@@ -267,6 +267,7 @@ public:
    static void                 SetAppName( const String& rUniqueName );
    static String               GetAppName();
    static bool                 LoadBrandBitmap (const char* pName, BitmapEx &rBitmap);
    static bool                 LoadBrandSVG( const char *pName, BitmapEx &rBitmap );

    // default name of the application for message dialogs and printing
    static void                 SetDisplayName( const UniString& rDisplayName );
diff --git a/vcl/inc/vcl/svgdata.hxx b/vcl/inc/vcl/svgdata.hxx
index 488092c..dc4c9e5 100644
--- a/vcl/inc/vcl/svgdata.hxx
+++ b/vcl/inc/vcl/svgdata.hxx
@@ -57,6 +57,7 @@ private:

public:
    SvgData(const SvgDataArray& rSvgDataArray, sal_uInt32 nSvgDataArrayLength, const rtl::OUString& rPath);
    SvgData(const rtl::OUString& rPath);

    /// data read
    const SvgDataArray& getSvgDataArray() const { return maSvgDataArray; }
diff --git a/vcl/source/app/brand.cxx b/vcl/source/app/brand.cxx
index 33b8bdd..03e999a 100644
--- a/vcl/source/app/brand.cxx
+++ b/vcl/source/app/brand.cxx
@@ -24,6 +24,7 @@
#include <tools/stream.hxx>
#include <vcl/pngread.hxx>
#include <vcl/svapp.hxx>
#include <vcl/svgdata.hxx>

namespace {
    static bool loadPng(const char *pPath, const rtl::OUString &rName, BitmapEx &rBitmap)
@@ -40,27 +41,6 @@ namespace {
        else
            return false;
    }

#ifdef FIXME_REMOVE_WHEN_RE_BASE_COMPLETE
    static vcl::RenderGraphicRasterizer loadSvg(const char *pPath, const rtl::OUString &rName)
    {
        rtl::OUString uri = rtl::OUString::createFromAscii( pPath ) + rName;
        rtl::Bootstrap::expandMacros( uri );
        INetURLObject aObj( uri );
        SvFileStream aStrm( aObj.PathToFileName(), STREAM_STD_READ );

        vcl::RenderGraphic aRenderGraphic;
        vcl::RenderGraphic aRasterizer ( aRenderGraphic );

        if ( !aStrm.GetError() ) {
            vcl::SVGReader aSVGReader( aStrm );
            aRenderGraphic = aSVGReader.GetRenderGraphic();
            vcl::RenderGraphic aNewRasterizer ( aRenderGraphic );
            aRasterizer = aNewRasterizer;
        }
        return aRasterizer;
    }
#endif
}

bool Application::LoadBrandBitmap (const char* pName, BitmapEx &rBitmap)
@@ -86,8 +66,7 @@ bool Application::LoadBrandBitmap (const char* pName, BitmapEx &rBitmap)
             loadPng ("$BRAND_BASE_DIR/program", aName, rBitmap) );
}

#ifdef FIXME_REMOVE_WHEN_RE_BASE_COMPLETE
vcl::RenderGraphicRasterizer Application::LoadBrandSVG (const char* pName)
bool Application::LoadBrandSVG (const char *pName, BitmapEx &rBitmap)
{
    rtl::OUString aBaseName = ( rtl::OUString("/") +
                                rtl::OUString::createFromAscii( pName ) );
@@ -101,20 +80,13 @@ vcl::RenderGraphicRasterizer Application::LoadBrandSVG (const char* pName)
    rtl::OUString aLocaleName = ( aBaseName + rtl::OUString("-") +
                                  aLanguageTag.getBcp47() +
                                  aSvg );

    vcl::RenderGraphicRasterizer aRasterizer = loadSvg ("$BRAND_BASE_DIR/program/edition", aLocaleName);
    if (!aRasterizer.GetRenderGraphic().IsEmpty())
        return aRasterizer;
    aRasterizer = loadSvg ("$BRAND_BASE_DIR/program", aLocaleName);
    if (!aRasterizer.GetRenderGraphic().IsEmpty())
        return aRasterizer;
    aRasterizer = loadSvg ("$BRAND_BASE_DIR/program/edition", aName);
    if (!aRasterizer.GetRenderGraphic().IsEmpty())
        return aRasterizer;

    aRasterizer = loadSvg ("$BRAND_BASE_DIR/program", aName);
    return aRasterizer;
    //rtl::OUString uri = rtl::OUString::createFromAscii( "$BRAND_BASE_DIR/program/edition" ) + aLocaleName;
    rtl::OUString uri = rtl::OUString::createFromAscii( "$BRAND_BASE_DIR/program" ) + aBaseName+aSvg;
    rtl::Bootstrap::expandMacros( uri );
    INetURLObject aObj( uri );
    SvgData aSvgData(aObj.PathToFileName());
    rBitmap = aSvgData.getReplacement();
    return true;
}
#endif

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/source/gdi/svgdata.cxx b/vcl/source/gdi/svgdata.cxx
index 9efce08..f98abcd 100644
--- a/vcl/source/gdi/svgdata.cxx
+++ b/vcl/source/gdi/svgdata.cxx
@@ -17,6 +17,7 @@
 *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
 */

#include <tools/stream.hxx>
#include <vcl/svgdata.hxx>
#include <comphelper/processfactory.hxx>
#include <com/sun/star/lang/XMultiServiceFactory.hpp>
@@ -164,6 +165,34 @@ SvgData::SvgData(const SvgDataArray& rSvgDataArray, sal_uInt32 nSvgDataArrayLeng
}

//////////////////////////////////////////////////////////////////////////////
SvgData::SvgData(const OUString& rPath):
    maSvgDataArray(NULL),
    mnSvgDataArrayLength(0),
    maPath(rPath),
    maRange(),
    maSequence(),
    maReplacement()
{
    SvFileStream rIStm(rPath, STREAM_STD_READ);
    if(rIStm.GetError())
        return;
    const sal_uInt32 nStmPos(rIStm.Tell());
    const sal_uInt32 nStmLen(rIStm.Seek(STREAM_SEEK_TO_END) - nStmPos);
    if(nStmLen)
    {
        SvgDataArray aNewData(new sal_uInt8[nStmLen]);
        rIStm.Seek(nStmPos);
        rIStm.Read(aNewData.get(), nStmLen);

        if(!rIStm.GetError())
        {
            maSvgDataArray = aNewData;
            mnSvgDataArrayLength = nStmLen;
        }
    }
}

//////////////////////////////////////////////////////////////////////////////

const basegfx::B2DRange& SvgData::getRange() const
{