[Libreoffice-commits] core.git: Branch 'distro/collabora/cp-6.0' - 71 commits - include/basegfx include/vcl offapi/com Repository.mk svgio/CppunitTest_svgio_read.mk svgio/inc svgio/Library_svgio.mk svgio/Module_svgio.mk svgio/qa svgio/source vcl/CppunitTest_vcl_widget_definition_reader_test.mk vcl/headless vcl/inc vcl/Library_vcl.mk vcl/Module_vcl.mk vcl/Package_theme_definitions.mk vcl/qa vcl/quartz vcl/source vcl/uiconfig vcl/unx

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Mon Mar 11 12:55:28 UTC 2019


 Repository.mk                                               |    1 
 include/basegfx/DrawCommands.hxx                            |   99 +
 include/vcl/alpha.hxx                                       |   14 
 offapi/com/sun/star/graphic/XSvgParser.idl                  |   14 
 svgio/CppunitTest_svgio_read.mk                             |   67 
 svgio/Library_svgio.mk                                      |    1 
 svgio/Module_svgio.mk                                       |    1 
 svgio/inc/svgnode.hxx                                       |   12 
 svgio/inc/svgvisitor.hxx                                    |   41 
 svgio/qa/cppunit/SvgRead.cxx                                |  144 +
 svgio/qa/cppunit/data/path.svg                              |    3 
 svgio/source/svgreader/svgnode.cxx                          |    4 
 svgio/source/svgreader/svgvisitor.cxx                       |  130 +
 svgio/source/svguno/xsvgparser.cxx                          |  116 +
 vcl/CppunitTest_vcl_widget_definition_reader_test.mk        |   52 
 vcl/Library_vcl.mk                                          |    3 
 vcl/Module_vcl.mk                                           |    6 
 vcl/Package_theme_definitions.mk                            |   54 
 vcl/headless/svpgdi.cxx                                     |    9 
 vcl/inc/FileDefinitionWidgetDraw.hxx                        |   57 
 vcl/inc/salgdi.hxx                                          |   21 
 vcl/inc/widgetdraw/WidgetDefinition.hxx                     |  280 +++
 vcl/inc/widgetdraw/WidgetDefinitionReader.hxx               |   45 
 vcl/qa/cppunit/widgetdraw/WidgetDefinitionReaderTest.cxx    |   97 +
 vcl/qa/cppunit/widgetdraw/data/definition1.xml              |   82 +
 vcl/quartz/salgdi.cxx                                       |    4 
 vcl/source/gdi/FileDefinitionWidgetDraw.cxx                 |  926 ++++++++++++
 vcl/source/gdi/WidgetDefinition.cxx                         |  194 ++
 vcl/source/gdi/WidgetDefinitionReader.cxx                   |  473 ++++++
 vcl/source/gdi/salgdilayout.cxx                             |   61 
 vcl/source/outdev/nativecontrols.cxx                        |    2 
 vcl/uiconfig/theme_definitions/arrow-down.svgx              |    5 
 vcl/uiconfig/theme_definitions/arrow-up.svgx                |    5 
 vcl/uiconfig/theme_definitions/combobox-disabled.svgx       |    4 
 vcl/uiconfig/theme_definitions/combobox.svgx                |    4 
 vcl/uiconfig/theme_definitions/common-rect-disabled.svgx    |    3 
 vcl/uiconfig/theme_definitions/common-rect.svgx             |    3 
 vcl/uiconfig/theme_definitions/definition.xml               |  466 ++++++
 vcl/uiconfig/theme_definitions/pushbutton-default.svgx      |    3 
 vcl/uiconfig/theme_definitions/pushbutton-disabled.svgx     |    3 
 vcl/uiconfig/theme_definitions/pushbutton-rollover.svgx     |    3 
 vcl/uiconfig/theme_definitions/scrollbar-horizontal.svgx    |    4 
 vcl/uiconfig/theme_definitions/scrollbar-vertical.svgx      |    4 
 vcl/uiconfig/theme_definitions/slider-button.svgx           |    3 
 vcl/uiconfig/theme_definitions/spinbox-left-disabled.svgx   |    4 
 vcl/uiconfig/theme_definitions/spinbox-left-pressed.svgx    |    4 
 vcl/uiconfig/theme_definitions/spinbox-left-rollover.svgx   |    4 
 vcl/uiconfig/theme_definitions/spinbox-left.svgx            |    4 
 vcl/uiconfig/theme_definitions/spinbox-right-disabled.svgx  |    7 
 vcl/uiconfig/theme_definitions/spinbox-right-pressed.svgx   |    5 
 vcl/uiconfig/theme_definitions/spinbox-right-rollover.svgx  |    5 
 vcl/uiconfig/theme_definitions/spinbox-right.svgx           |    5 
 vcl/uiconfig/theme_definitions/switch-off-disabled.svgx     |  182 ++
 vcl/uiconfig/theme_definitions/switch-off-pressed.svgx      |  159 ++
 vcl/uiconfig/theme_definitions/switch-off.svgx              |  182 ++
 vcl/uiconfig/theme_definitions/switch-on-disabled.svgx      |  144 +
 vcl/uiconfig/theme_definitions/switch-on-pressed.svgx       |  146 +
 vcl/uiconfig/theme_definitions/switch-on.svgx               |  144 +
 vcl/uiconfig/theme_definitions/tabitem-first-selected.svgx  |    3 
 vcl/uiconfig/theme_definitions/tabitem-first.svgx           |    3 
 vcl/uiconfig/theme_definitions/tabitem-last-selected.svgx   |    3 
 vcl/uiconfig/theme_definitions/tabitem-last.svgx            |    3 
 vcl/uiconfig/theme_definitions/tabitem-middle-selected.svgx |    3 
 vcl/uiconfig/theme_definitions/tabitem-middle.svgx          |    3 
 vcl/uiconfig/theme_definitions/tick-off-disabled.svgx       |   93 +
 vcl/uiconfig/theme_definitions/tick-off-pressed.svgx        |  126 +
 vcl/uiconfig/theme_definitions/tick-off.svgx                |  113 +
 vcl/uiconfig/theme_definitions/tick-on-disabled.svgx        |  125 +
 vcl/uiconfig/theme_definitions/tick-on-pressed.svgx         |  116 +
 vcl/uiconfig/theme_definitions/tick-on.svgx                 |  116 +
 vcl/unx/gtk/salnativewidgets-gtk.cxx                        |    2 
 71 files changed, 5166 insertions(+), 61 deletions(-)

New commits:
commit 8a74c84622dc8258d8741e29378ce5a919ad1330
Author:     Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
AuthorDate: Mon Mar 11 12:11:28 2019 +0100
Commit:     Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
CommitDate: Mon Mar 11 12:13:00 2019 +0100

    fix build failures (diff between mastwr and cp-6.0)
    
    Change-Id: Ieb9be180b3a9f8fb33c7a1089a8ef35e66b082ec

diff --git a/svgio/source/svguno/xsvgparser.cxx b/svgio/source/svguno/xsvgparser.cxx
index 22c8d24481ba..015ac547945d 100644
--- a/svgio/source/svguno/xsvgparser.cxx
+++ b/svgio/source/svguno/xsvgparser.cxx
@@ -192,7 +192,7 @@ namespace svgio
             parseSvgXML(xSvgStream, xSvgDocHdl);
 
             // decompose to primitives
-            for (std::unique_ptr<SvgNode> const & pCandidate : pSvgDocHdl->getSvgDocument().getSvgNodeVector())
+            for (SvgNode* const & pCandidate : pSvgDocHdl->getSvgDocument().getSvgNodeVector())
             {
                 if (Display_none != pCandidate->getDisplay())
                 {
diff --git a/vcl/source/gdi/FileDefinitionWidgetDraw.cxx b/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
index e321734e9a6e..0799c68d8775 100644
--- a/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
+++ b/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
@@ -23,6 +23,9 @@
 #include <vcl/bitmapex.hxx>
 #include <vcl/BitmapTools.hxx>
 
+#include <outdata.hxx>
+#include <impbmp.hxx>
+
 #include <vcl/pngwrite.hxx>
 
 #include <comphelper/seqstream.hxx>
@@ -188,19 +191,17 @@ void drawFromDrawCommands(gfx::DrawRoot const& rDrawRoot, SalGraphics& rGraphics
                 if (rRectangle.mpFillColor)
                 {
                     rGraphics.SetLineColor();
-                    rGraphics.SetFillColor(Color(*rRectangle.mpFillColor));
-                    rGraphics.DrawPolyPolygon(basegfx::B2DHomMatrix(),
-                                              basegfx::B2DPolyPolygon(aB2DPolygon), 0.0f, nullptr);
+                    rGraphics.SetFillColor(ImplColorToSal(Color(*rRectangle.mpFillColor)));
+                    rGraphics.DrawPolyPolygon(basegfx::B2DPolyPolygon(aB2DPolygon), 0.0f, nullptr);
                 }
                 if (rRectangle.mpStrokeColor)
                 {
-                    rGraphics.SetLineColor(Color(*rRectangle.mpStrokeColor));
+                    rGraphics.SetLineColor(ImplColorToSal(Color(*rRectangle.mpStrokeColor)));
                     rGraphics.SetFillColor();
                     rGraphics.DrawPolyLine(
-                        basegfx::B2DHomMatrix(), aB2DPolygon, 0.0f,
+                        aB2DPolygon, 0.0f,
                         basegfx::B2DVector(rRectangle.mnStrokeWidth, rRectangle.mnStrokeWidth),
-                        basegfx::B2DLineJoin::Round, css::drawing::LineCap_ROUND, 0.0f, false,
-                        nullptr);
+                        basegfx::B2DLineJoin::Round, css::drawing::LineCap_ROUND, 0.0f, nullptr);
                 }
             }
             break;
@@ -235,19 +236,19 @@ void drawFromDrawCommands(gfx::DrawRoot const& rDrawRoot, SalGraphics& rGraphics
                 if (rPath.mpFillColor)
                 {
                     rGraphics.SetLineColor();
-                    rGraphics.SetFillColor(Color(*rPath.mpFillColor));
-                    rGraphics.DrawPolyPolygon(basegfx::B2DHomMatrix(), aPolyPolygon, 0.0f, nullptr);
+                    rGraphics.SetFillColor(ImplColorToSal(Color(*rPath.mpFillColor)));
+                    rGraphics.DrawPolyPolygon(aPolyPolygon, 0.0f, nullptr);
                 }
                 if (rPath.mpStrokeColor)
                 {
-                    rGraphics.SetLineColor(Color(*rPath.mpStrokeColor));
+                    rGraphics.SetLineColor(ImplColorToSal(Color(*rPath.mpStrokeColor)));
                     rGraphics.SetFillColor();
                     for (auto const& rPolygon : aPolyPolygon)
                     {
                         rGraphics.DrawPolyLine(
-                            basegfx::B2DHomMatrix(), rPolygon, 0.0f,
+                            rPolygon, 0.0f,
                             basegfx::B2DVector(rPath.mnStrokeWidth, rPath.mnStrokeWidth),
-                            basegfx::B2DLineJoin::Round, css::drawing::LineCap_ROUND, 0.0f, false,
+                            basegfx::B2DLineJoin::Round, css::drawing::LineCap_ROUND, 0.0f,
                             nullptr);
                     }
                 }
@@ -281,16 +282,15 @@ void munchDrawCommands(std::vector<std::shared_ptr<DrawCommand>> const& rDrawCom
                     rRectDrawCommand.mnRy / rRect.getHeight() * 2.0);
 
                 rGraphics.SetLineColor();
-                rGraphics.SetFillColor(rRectDrawCommand.maFillColor);
-                rGraphics.DrawPolyPolygon(basegfx::B2DHomMatrix(),
-                                          basegfx::B2DPolyPolygon(aB2DPolygon), 0.0f, nullptr);
-                rGraphics.SetLineColor(rRectDrawCommand.maStrokeColor);
+                rGraphics.SetFillColor(ImplColorToSal(rRectDrawCommand.maFillColor));
+                rGraphics.DrawPolyPolygon(basegfx::B2DPolyPolygon(aB2DPolygon), 0.0f, nullptr);
+                rGraphics.SetLineColor(ImplColorToSal(rRectDrawCommand.maStrokeColor));
                 rGraphics.SetFillColor();
-                rGraphics.DrawPolyLine(basegfx::B2DHomMatrix(), aB2DPolygon, 0.0f,
+                rGraphics.DrawPolyLine(aB2DPolygon, 0.0f,
                                        basegfx::B2DVector(rRectDrawCommand.mnStrokeWidth,
                                                           rRectDrawCommand.mnStrokeWidth),
                                        basegfx::B2DLineJoin::Round, css::drawing::LineCap_ROUND,
-                                       0.0f, false, nullptr);
+                                       0.0f, nullptr);
             }
             break;
             case DrawCommandType::CIRCLE:
@@ -306,10 +306,9 @@ void munchDrawCommands(std::vector<std::shared_ptr<DrawCommand>> const& rDrawCom
                 basegfx::B2DPolygon aB2DPolygon = basegfx::utils::createPolygonFromEllipse(
                     rRect.getCenter(), rRect.getWidth() / 2.0, rRect.getHeight() / 2.0);
 
-                rGraphics.SetLineColor(rCircleDrawCommand.maStrokeColor);
-                rGraphics.SetFillColor(rCircleDrawCommand.maFillColor);
-                rGraphics.DrawPolyPolygon(basegfx::B2DHomMatrix(),
-                                          basegfx::B2DPolyPolygon(aB2DPolygon), 0.0f, nullptr);
+                rGraphics.SetLineColor(ImplColorToSal(rCircleDrawCommand.maStrokeColor));
+                rGraphics.SetFillColor(ImplColorToSal(rCircleDrawCommand.maFillColor));
+                rGraphics.DrawPolyPolygon(basegfx::B2DPolyPolygon(aB2DPolygon), 0.0f, nullptr);
             }
             break;
             case DrawCommandType::LINE:
@@ -320,7 +319,7 @@ void munchDrawCommands(std::vector<std::shared_ptr<DrawCommand>> const& rDrawCom
                 Size aRectSize(nWidth - 1, nHeight - 1);
 
                 rGraphics.SetFillColor();
-                rGraphics.SetLineColor(rLineDrawCommand.maStrokeColor);
+                rGraphics.SetLineColor(ImplColorToSal(rLineDrawCommand.maStrokeColor));
 
                 basegfx::B2DPolygon aB2DPolygon{
                     { aRectPoint.X() + (aRectSize.Width() * rLineDrawCommand.mfX1),
@@ -329,11 +328,11 @@ void munchDrawCommands(std::vector<std::shared_ptr<DrawCommand>> const& rDrawCom
                       aRectPoint.Y() + (aRectSize.Height() * rLineDrawCommand.mfY2) },
                 };
 
-                rGraphics.DrawPolyLine(basegfx::B2DHomMatrix(), aB2DPolygon, 0.0f,
+                rGraphics.DrawPolyLine(aB2DPolygon, 0.0f,
                                        basegfx::B2DVector(rLineDrawCommand.mnStrokeWidth,
                                                           rLineDrawCommand.mnStrokeWidth),
                                        basegfx::B2DLineJoin::Round, css::drawing::LineCap_ROUND,
-                                       0.0f, false, nullptr);
+                                       0.0f, nullptr);
             }
             break;
             case DrawCommandType::IMAGE:
@@ -352,12 +351,12 @@ void munchDrawCommands(std::vector<std::shared_ptr<DrawCommand>> const& rDrawCom
                                nImageHeight / nScaleFactor);
                 if (!!aBitmap)
                 {
-                    const std::shared_ptr<SalBitmap> pSalBitmap
-                        = aBitmap.GetBitmap().ImplGetSalBitmap();
+                    SalBitmap* pSalBitmap
+                        = aBitmap.GetBitmap().ImplGetImpBitmap()->ImplGetSalBitmap();
                     if (aBitmap.IsAlpha())
                     {
-                        const std::shared_ptr<SalBitmap> pSalBitmapAlpha
-                            = aBitmap.GetAlpha().ImplGetSalBitmap();
+                        SalBitmap* pSalBitmapAlpha
+                            = aBitmap.GetAlpha().ImplGetImpBitmap()->ImplGetSalBitmap();
                         rGraphics.DrawBitmap(aTR, *pSalBitmap, *pSalBitmapAlpha, nullptr);
                     }
                     else
commit 7dddcceeeb2a47e528223d3728d6b916ba5a801a
Author:     Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
AuthorDate: Sun Mar 10 22:27:54 2019 +0100
Commit:     Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
CommitDate: Mon Mar 11 12:13:00 2019 +0100

    widget theme: slight window borders, use font 10 instead of 12
    
    Change-Id: I6b0ba769817894b99c3f757d23948783a66fce12
    Reviewed-on: https://gerrit.libreoffice.org/69023
    Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>
    Tested-by: Tomaž Vajngerl <quikee at gmail.com>
    (cherry picked from commit 2513e6864fee07da9ec8ea5489ada82de0991b15)

diff --git a/vcl/source/gdi/FileDefinitionWidgetDraw.cxx b/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
index 59f0947e7eea..e321734e9a6e 100644
--- a/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
+++ b/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
@@ -830,7 +830,6 @@ bool FileDefinitionWidgetDraw::getNativeControlRegion(
                 return true;
             }
             break;
-
         default:
             break;
     }
@@ -895,7 +894,7 @@ bool FileDefinitionWidgetDraw::updateSettings(AllSettings& rSettings)
     aStyleSet.SetToolTextColor(pDefinitionStyle->maToolTextColor);
     aStyleSet.SetFontColor(pDefinitionStyle->maFontColor);
 
-    vcl::Font aFont(FAMILY_SWISS, Size(0, 12));
+    vcl::Font aFont(FAMILY_SWISS, Size(0, 10));
     aFont.SetCharSet(osl_getThreadTextEncoding());
     aFont.SetWeight(WEIGHT_NORMAL);
     aFont.SetFamilyName("Liberation Sans");
diff --git a/vcl/uiconfig/theme_definitions/definition.xml b/vcl/uiconfig/theme_definitions/definition.xml
index a4394de98ec5..e91953109554 100644
--- a/vcl/uiconfig/theme_definitions/definition.xml
+++ b/vcl/uiconfig/theme_definitions/definition.xml
@@ -361,7 +361,7 @@
     <tabbody>
         <part value="Entire">
             <state>
-                <rect stroke="#FFFFFF" fill="#FFFFFF" stroke-width="1" rx="1" ry="1"/>
+                <rect stroke="#f4f5f5" fill="#FFFFFF" stroke-width="1" rx="1" ry="1"/>
             </state>
         </part>
     </tabbody>
@@ -369,12 +369,12 @@
     <windowbackground>
         <part value="BackgroundWindow">
             <state>
-                <rect stroke="#FFFFFF" fill="#FFFFFF" stroke-width="1" rx="1" ry="1"/>
+                <rect stroke="#f4f5f5" fill="#FFFFFF" stroke-width="1" rx="1" ry="1"/>
             </state>
         </part>
         <part value="BackgroundDialog">
             <state>
-                <rect stroke="#FFFFFF" fill="#FFFFFF" stroke-width="1" rx="1" ry="1"/>
+                <rect stroke="#f4f5f5" fill="#FFFFFF" stroke-width="1" rx="1" ry="1"/>
             </state>
         </part>
     </windowbackground>
commit b30f2bb81032485b233b72af7b9736165e0b8e54
Author:     Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
AuthorDate: Sun Mar 10 22:26:42 2019 +0100
Commit:     Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
CommitDate: Mon Mar 11 12:13:00 2019 +0100

    widget theme: support disabled pushbutton
    
    Change-Id: I8c6e019f5d1f12c85334f3440e09ef755ed6863d
    Reviewed-on: https://gerrit.libreoffice.org/69022
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>
    (cherry picked from commit 5d535ffbe34b09a75f8e41fc46be1ed0eb1fbdfa)

diff --git a/vcl/Package_theme_definitions.mk b/vcl/Package_theme_definitions.mk
index 143152d7327a..a30ca8179850 100644
--- a/vcl/Package_theme_definitions.mk
+++ b/vcl/Package_theme_definitions.mk
@@ -35,6 +35,7 @@ $(eval $(call gb_Package_add_files,vcl_theme_definitions,$(LIBO_SHARE_FOLDER)/th
 	common-rect-disabled.svgx \
 	pushbutton-default.svgx \
 	pushbutton-rollover.svgx \
+	pushbutton-disabled.svgx \
 	tabitem-first.svgx \
 	tabitem-middle.svgx \
 	tabitem-last.svgx \
diff --git a/vcl/uiconfig/theme_definitions/definition.xml b/vcl/uiconfig/theme_definitions/definition.xml
index 4789b9a844ed..a4394de98ec5 100644
--- a/vcl/uiconfig/theme_definitions/definition.xml
+++ b/vcl/uiconfig/theme_definitions/definition.xml
@@ -67,12 +67,15 @@
 
     <pushbutton>
         <part value="Entire">
-            <state>
+            <state enabled="true">
                 <external source="pushbutton-default.svgx" />
             </state>
             <state enabled="true" rollover="true">
                 <external source="pushbutton-rollover.svgx" />
             </state>
+            <state enabled="false">
+                <external source="pushbutton-disabled.svgx" />
+            </state>
         </part>
     </pushbutton>
 
diff --git a/vcl/uiconfig/theme_definitions/pushbutton-disabled.svgx b/vcl/uiconfig/theme_definitions/pushbutton-disabled.svgx
new file mode 100644
index 000000000000..e4c1f63599d7
--- /dev/null
+++ b/vcl/uiconfig/theme_definitions/pushbutton-disabled.svgx
@@ -0,0 +1,3 @@
+<svg version="1.1" viewBox="0 0 44 26" xmlns="http://www.w3.org/2000/svg">
+ <rect x=".5" y=".5" width="43" height="25" rx="2" ry="2" fill="#fff" stroke="#8e8e93"/>
+</svg>
commit 4ca6f4bf5598e75682a9894e672b0b79aaa4d121
Author:     Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
AuthorDate: Sun Mar 10 21:54:04 2019 +0100
Commit:     Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
CommitDate: Mon Mar 11 12:13:00 2019 +0100

    widget theme: add support for menubar, menupopup and tooltip
    
    But they are not used - for now.
    
    Change-Id: I93a74f5a9e52791fd08afbb5502427a0684d60cf
    Reviewed-on: https://gerrit.libreoffice.org/69021
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>
    (cherry picked from commit 7e5fe834e722d51b5e82ecddfe549ec21c7a225e)

diff --git a/vcl/source/gdi/FileDefinitionWidgetDraw.cxx b/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
index 5c0920bca4d6..59f0947e7eea 100644
--- a/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
+++ b/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
@@ -121,12 +121,13 @@ bool FileDefinitionWidgetDraw::isNativeControlSupported(ControlType eType, Contr
             return true;
         case ControlType::Menubar:
         case ControlType::MenuPopup:
-            return false;
+            return true;
         case ControlType::Progress:
             return true;
         case ControlType::IntroProgress:
-        case ControlType::Tooltip:
             return false;
+        case ControlType::Tooltip:
+            return true;
         case ControlType::WindowBackground:
         case ControlType::Frame:
         case ControlType::ListNode:
@@ -581,17 +582,23 @@ bool FileDefinitionWidgetDraw::drawNativeControl(ControlType eType, ControlPart
         }
         break;
         case ControlType::Menubar:
-            break;
         case ControlType::MenuPopup:
-            break;
+        {
+            bOK = resolveDefinition(eType, ePart, eState, rValue, nX, nY, nWidth, nHeight);
+        }
+        break;
         case ControlType::Progress:
         {
             bOK = resolveDefinition(eType, ePart, eState, rValue, nX, nY, nWidth, nHeight);
         }
         break;
         case ControlType::IntroProgress:
-        case ControlType::Tooltip:
             break;
+        case ControlType::Tooltip:
+        {
+            bOK = resolveDefinition(eType, ePart, eState, rValue, nX, nY, nWidth, nHeight);
+        }
+        break;
         case ControlType::WindowBackground:
         case ControlType::Frame:
         {
diff --git a/vcl/source/gdi/WidgetDefinitionReader.cxx b/vcl/source/gdi/WidgetDefinitionReader.cxx
index f52757d37629..c183cb717e9c 100644
--- a/vcl/source/gdi/WidgetDefinitionReader.cxx
+++ b/vcl/source/gdi/WidgetDefinitionReader.cxx
@@ -139,28 +139,32 @@ ControlPart xmlStringToControlPart(OString const& sPart)
 
 bool getControlTypeForXmlString(OString const& rString, ControlType& reType)
 {
-    static std::unordered_map<OString, ControlType> aPartMap
-        = { { "pushbutton", ControlType::Pushbutton },
-            { "radiobutton", ControlType::Radiobutton },
-            { "checkbox", ControlType::Checkbox },
-            { "combobox", ControlType::Combobox },
-            { "editbox", ControlType::Editbox },
-            { "listbox", ControlType::Listbox },
-            { "scrollbar", ControlType::Scrollbar },
-            { "spinbox", ControlType::Spinbox },
-            { "slider", ControlType::Slider },
-            { "fixedline", ControlType::Fixedline },
-            { "progress", ControlType::Progress },
-            { "tabitem", ControlType::TabItem },
-            { "tabheader", ControlType::TabHeader },
-            { "tabpane", ControlType::TabPane },
-            { "tabbody", ControlType::TabBody },
-            { "frame", ControlType::Frame },
-            { "windowbackground", ControlType::WindowBackground },
-            { "toolbar", ControlType::Toolbar },
-            { "listnode", ControlType::ListNode },
-            { "listnet", ControlType::ListNet },
-            { "listheader", ControlType::ListHeader } };
+    static std::unordered_map<OString, ControlType> aPartMap = {
+        { "pushbutton", ControlType::Pushbutton },
+        { "radiobutton", ControlType::Radiobutton },
+        { "checkbox", ControlType::Checkbox },
+        { "combobox", ControlType::Combobox },
+        { "editbox", ControlType::Editbox },
+        { "listbox", ControlType::Listbox },
+        { "scrollbar", ControlType::Scrollbar },
+        { "spinbox", ControlType::Spinbox },
+        { "slider", ControlType::Slider },
+        { "fixedline", ControlType::Fixedline },
+        { "progress", ControlType::Progress },
+        { "tabitem", ControlType::TabItem },
+        { "tabheader", ControlType::TabHeader },
+        { "tabpane", ControlType::TabPane },
+        { "tabbody", ControlType::TabBody },
+        { "frame", ControlType::Frame },
+        { "windowbackground", ControlType::WindowBackground },
+        { "toolbar", ControlType::Toolbar },
+        { "listnode", ControlType::ListNode },
+        { "listnet", ControlType::ListNet },
+        { "listheader", ControlType::ListHeader },
+        { "menubar", ControlType::Menubar },
+        { "menupopup", ControlType::MenuPopup },
+        { "tooltip", ControlType::Tooltip },
+    };
 
     auto const& rIterator = aPartMap.find(rString);
     if (rIterator != aPartMap.end())
diff --git a/vcl/uiconfig/theme_definitions/definition.xml b/vcl/uiconfig/theme_definitions/definition.xml
index 46346286756c..4789b9a844ed 100644
--- a/vcl/uiconfig/theme_definitions/definition.xml
+++ b/vcl/uiconfig/theme_definitions/definition.xml
@@ -452,4 +452,12 @@
         </part>
     </listheader>
 
+    <menubar>
+    </menubar>
+
+    <menupopup>
+    </menupopup>
+
+    <tooltip>
+    </tooltip>
 </widgets>
commit 1e1fc114c861eb61825a314196d94f4e03441dec
Author:     Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
AuthorDate: Sun Mar 10 21:30:28 2019 +0100
Commit:     Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
CommitDate: Mon Mar 11 12:13:00 2019 +0100

    widget theme: change color for window background and frame
    
    Change-Id: I37f1524db71eea2912ffb65fdd7a00605e6b1d4d
    Reviewed-on: https://gerrit.libreoffice.org/69017
    Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>
    Tested-by: Tomaž Vajngerl <quikee at gmail.com>
    (cherry picked from commit e089b75ba2758183e6eb389d4070560c8989c4e4)

diff --git a/vcl/uiconfig/theme_definitions/definition.xml b/vcl/uiconfig/theme_definitions/definition.xml
index 23a19de392d5..46346286756c 100644
--- a/vcl/uiconfig/theme_definitions/definition.xml
+++ b/vcl/uiconfig/theme_definitions/definition.xml
@@ -366,25 +366,20 @@
     <windowbackground>
         <part value="BackgroundWindow">
             <state>
-                <rect stroke="#FF0000" fill="#FF0000" stroke-width="1" rx="1" ry="1"/>
+                <rect stroke="#FFFFFF" fill="#FFFFFF" stroke-width="1" rx="1" ry="1"/>
             </state>
         </part>
         <part value="BackgroundDialog">
             <state>
-                <rect stroke="#0000FF" fill="#FFFFFF" stroke-width="1" rx="1" ry="1"/>
+                <rect stroke="#FFFFFF" fill="#FFFFFF" stroke-width="1" rx="1" ry="1"/>
             </state>
         </part>
     </windowbackground>
 
     <frame>
-        <part value="Entire">
-            <state>
-                <rect stroke="#00FF00" fill="#00FF00" stroke-width="1" rx="1" ry="1"/>
-            </state>
-        </part>
         <part value="Border">
             <state>
-                <rect stroke="#00FF00" fill="#00FF00" stroke-width="1" rx="1" ry="1"/>
+                <rect stroke="#FFFFFF" fill="#FFFFFF" stroke-width="1" rx="1" ry="1"/>
             </state>
         </part>
     </frame>
commit 1b965b2855426b6b1ff07d8e3b35b13fb23e11b1
Author:     Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
AuthorDate: Sun Mar 10 21:29:25 2019 +0100
Commit:     Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
CommitDate: Mon Mar 11 12:13:00 2019 +0100

    widget theme: take into account scaling factor for images
    
    Change-Id: I65bd71dfd113fae33aee7c2b60b945e065314f80
    Reviewed-on: https://gerrit.libreoffice.org/69016
    Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>
    Tested-by: Tomaž Vajngerl <quikee at gmail.com>
    (cherry picked from commit cbfe46bf79ac89f7cd1916eeaaf5f10164038535)

diff --git a/vcl/source/gdi/FileDefinitionWidgetDraw.cxx b/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
index b51d98b2c073..5c0920bca4d6 100644
--- a/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
+++ b/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
@@ -27,6 +27,7 @@
 
 #include <comphelper/seqstream.hxx>
 #include <comphelper/processfactory.hxx>
+#include <comphelper/lok.hxx>
 
 #include <com/sun/star/graphic/SvgTools.hpp>
 #include <basegfx/DrawCommands.hxx>
@@ -336,13 +337,18 @@ void munchDrawCommands(std::vector<std::shared_ptr<DrawCommand>> const& rDrawCom
             break;
             case DrawCommandType::IMAGE:
             {
+                double nScaleFactor = 1.0;
+                if (comphelper::LibreOfficeKit::isActive())
+                    nScaleFactor = comphelper::LibreOfficeKit::getDPIScale();
+
                 auto const& rDrawCommand = static_cast<ImageDrawCommand const&>(*pDrawCommand);
                 SvFileStream aFileStream(rDrawCommand.msSource, StreamMode::READ);
                 BitmapEx aBitmap;
-                vcl::bitmap::loadFromSvg(aFileStream, "", aBitmap, 1.0);
+                vcl::bitmap::loadFromSvg(aFileStream, "", aBitmap, nScaleFactor);
                 long nImageWidth = aBitmap.GetSizePixel().Width();
                 long nImageHeight = aBitmap.GetSizePixel().Height();
-                SalTwoRect aTR(0, 0, nImageWidth, nImageHeight, nX, nY, nImageWidth, nImageHeight);
+                SalTwoRect aTR(0, 0, nImageWidth, nImageHeight, nX, nY, nImageWidth / nScaleFactor,
+                               nImageHeight / nScaleFactor);
                 if (!!aBitmap)
                 {
                     const std::shared_ptr<SalBitmap> pSalBitmap
commit 65ed11775250c2c72444b46eca369f21d82164b3
Author:     Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
AuthorDate: Sun Mar 10 21:23:06 2019 +0100
Commit:     Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
CommitDate: Mon Mar 11 12:13:00 2019 +0100

    widget theme: draw slider button from svg, left and right track
    
    Change-Id: Iaba4a67845699d795c719d0259e93bb6c72df470
    Reviewed-on: https://gerrit.libreoffice.org/69015
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>
    (cherry picked from commit 100ea3038b033b6b168860e203e893ae8f67b9c1)

diff --git a/vcl/Package_theme_definitions.mk b/vcl/Package_theme_definitions.mk
index d9cc421fe794..143152d7327a 100644
--- a/vcl/Package_theme_definitions.mk
+++ b/vcl/Package_theme_definitions.mk
@@ -47,6 +47,7 @@ $(eval $(call gb_Package_add_files,vcl_theme_definitions,$(LIBO_SHARE_FOLDER)/th
 	combobox-disabled.svgx \
 	arrow-up.svgx \
 	arrow-down.svgx \
+	slider-button.svgx \
 ))
 
 # vim: set noet sw=4 ts=4:
diff --git a/vcl/source/gdi/FileDefinitionWidgetDraw.cxx b/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
index b557021f4601..b51d98b2c073 100644
--- a/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
+++ b/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
@@ -529,17 +529,35 @@ bool FileDefinitionWidgetDraw::drawNativeControl(ControlType eType, ControlPart
         break;
         case ControlType::Slider:
         {
-            bOK = resolveDefinition(eType, ePart, eState, rValue, nX, nY, nWidth, nHeight);
+            const SliderValue* pSliderValue = static_cast<const SliderValue*>(&rValue);
+            long nThumbX = pSliderValue->maThumbRect.Left();
+            long nThumbY = pSliderValue->maThumbRect.Top();
+            long nThumbWidth = pSliderValue->maThumbRect.GetWidth() - 1;
+            long nThumbHeight = pSliderValue->maThumbRect.GetHeight() - 1;
 
-            if (bOK)
+            if (ePart == ControlPart::TrackHorzArea)
+            {
+                long nCenterX = nThumbX + nThumbWidth / 2;
+
+                bOK = resolveDefinition(eType, ControlPart::TrackHorzLeft, eState, rValue, nX, nY,
+                                        nCenterX - nX, nHeight);
+                if (bOK)
+                    bOK = resolveDefinition(eType, ControlPart::TrackHorzRight, eState, rValue,
+                                            nCenterX, nY, nX + nWidth - nCenterX, nHeight);
+            }
+            else if (ePart == ControlPart::TrackVertArea)
             {
-                const SliderValue* pSliderValue = static_cast<const SliderValue*>(&rValue);
+                long nCenterY = nThumbY + nThumbHeight / 2;
 
-                long nThumbX = pSliderValue->maThumbRect.Left();
-                long nThumbY = pSliderValue->maThumbRect.Top();
-                long nThumbWidth = pSliderValue->maThumbRect.GetWidth() - 1;
-                long nThumbHeight = pSliderValue->maThumbRect.GetHeight() - 1;
+                bOK = resolveDefinition(eType, ControlPart::TrackVertUpper, eState, rValue, nX, nY,
+                                        nWidth, nCenterY - nY);
+                if (bOK)
+                    bOK = resolveDefinition(eType, ControlPart::TrackVertLower, eState, rValue, nY,
+                                            nCenterY, nWidth, nY + nHeight - nCenterY);
+            }
 
+            if (bOK)
+            {
                 bOK = resolveDefinition(eType, ControlPart::Button,
                                         eState | pSliderValue->mnThumbState, rValue, nThumbX,
                                         nThumbY, nThumbWidth, nThumbHeight);
@@ -791,6 +809,14 @@ bool FileDefinitionWidgetDraw::getNativeControlRegion(
             }
         }
         break;
+        case ControlType::Slider:
+            if (ePart == ControlPart::ThumbHorz || ePart == ControlPart::ThumbVert)
+            {
+                rNativeContentRegion = tools::Rectangle(aLocation, Size(28, 28));
+                rNativeBoundingRegion = rNativeContentRegion;
+                return true;
+            }
+            break;
 
         default:
             break;
diff --git a/vcl/uiconfig/theme_definitions/definition.xml b/vcl/uiconfig/theme_definitions/definition.xml
index bdb1e700715b..23a19de392d5 100644
--- a/vcl/uiconfig/theme_definitions/definition.xml
+++ b/vcl/uiconfig/theme_definitions/definition.xml
@@ -270,17 +270,27 @@
     <slider>
         <part value="Button">
             <state>
-                <circ stroke="#AAAAAA" fill="#FFFFFF" stroke-width="1" rx="7" ry="7"/>
+                <image source="slider-button.svgx" />
             </state>
         </part>
-        <part value="TrackHorzArea">
+        <part value="TrackHorzLeft">
+            <state>
+                <line stroke="#007AFF" stroke-width="6" x1="0.0" y1="0.5" x2="1.0" y2="0.5"/>
+            </state>
+        </part>
+        <part value="TrackHorzRight">
             <state>
-                <line stroke="#007AFF" fill="#007AFF" stroke-width="10" x1="0.0" y1="0.5" x2="1.0" y2="0.5"/>
+                <line stroke="#8e8e93" stroke-width="6" x1="0.0" y1="0.5" x2="1.0" y2="0.5"/>
             </state>
         </part>
-        <part value="TrackVertArea">
+        <part value="TrackVertUpper">
+            <state>
+                <line stroke="#007AFF" stroke-width="6" x1="0.5" y1="0.0" x2="0.5" y2="1.0"/>
+            </state>
+        </part>
+        <part value="TrackVertLower">
             <state>
-                <line stroke="#007AFF" fill="#007AFF" stroke-width="10" x1="0.5" y1="0.0" x2="0.5" y2="1.0"/>
+                <line stroke="#8e8e93" stroke-width="6" x1="0.5" y1="0.0" x2="0.5" y2="1.0"/>
             </state>
         </part>
     </slider>
diff --git a/vcl/uiconfig/theme_definitions/slider-button.svgx b/vcl/uiconfig/theme_definitions/slider-button.svgx
new file mode 100644
index 000000000000..66772c7521e6
--- /dev/null
+++ b/vcl/uiconfig/theme_definitions/slider-button.svgx
@@ -0,0 +1,3 @@
+<svg version="1.1" viewBox="0 0 28 28" xmlns="http://www.w3.org/2000/svg">
+ <rect x="2" y="2" width="24" height="24" rx="12" ry="12" fill="#fff" stroke="#8e8e93" stroke-width=".92308"/>
+</svg>
commit 424fc5ef1f6ff38b2400d0a1a3080d15fc77799c
Author:     Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
AuthorDate: Sun Mar 10 19:55:42 2019 +0100
Commit:     Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
CommitDate: Mon Mar 11 12:13:00 2019 +0100

    widget theme: draw listheader button and arrow
    
    Also adds support for signaling if arrow points up or down, which
    is signaled through extra attribute.
    
    Change-Id: I5a87cdb31e18150495df521bf925c7b983e2313a
    Reviewed-on: https://gerrit.libreoffice.org/69013
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>
    (cherry picked from commit 8ff3e9a418a6f154d3ecb2df669fbd70361ae0c0)

diff --git a/vcl/Package_theme_definitions.mk b/vcl/Package_theme_definitions.mk
index 0ca04e765039..d9cc421fe794 100644
--- a/vcl/Package_theme_definitions.mk
+++ b/vcl/Package_theme_definitions.mk
@@ -45,6 +45,8 @@ $(eval $(call gb_Package_add_files,vcl_theme_definitions,$(LIBO_SHARE_FOLDER)/th
 	scrollbar-vertical.svgx \
 	combobox.svgx \
 	combobox-disabled.svgx \
+	arrow-up.svgx \
+	arrow-down.svgx \
 ))
 
 # vim: set noet sw=4 ts=4:
diff --git a/vcl/inc/widgetdraw/WidgetDefinition.hxx b/vcl/inc/widgetdraw/WidgetDefinition.hxx
index 7e1505c8daae..77baf0922cd8 100644
--- a/vcl/inc/widgetdraw/WidgetDefinition.hxx
+++ b/vcl/inc/widgetdraw/WidgetDefinition.hxx
@@ -202,8 +202,10 @@ public:
     sal_Int32 mnMarginHeight;
     OString msOrientation;
 
-    std::vector<std::shared_ptr<WidgetDefinitionState>>
-    getStates(ControlType eType, ControlState eState, ImplControlValue const& rValue);
+    std::vector<std::shared_ptr<WidgetDefinitionState>> getStates(ControlType eType,
+                                                                  ControlPart ePart,
+                                                                  ControlState eState,
+                                                                  ImplControlValue const& rValue);
 
     std::vector<std::shared_ptr<WidgetDefinitionState>> maStates;
 };
diff --git a/vcl/qa/cppunit/widgetdraw/WidgetDefinitionReaderTest.cxx b/vcl/qa/cppunit/widgetdraw/WidgetDefinitionReaderTest.cxx
index c56379cc70c7..75dc559067fc 100644
--- a/vcl/qa/cppunit/widgetdraw/WidgetDefinitionReaderTest.cxx
+++ b/vcl/qa/cppunit/widgetdraw/WidgetDefinitionReaderTest.cxx
@@ -57,7 +57,8 @@ void WidgetDefinitionReaderTest::testRead()
             = ControlState::DEFAULT | ControlState::ENABLED | ControlState::ROLLOVER;
         std::vector<std::shared_ptr<vcl::WidgetDefinitionState>> aStates
             = aDefinition.getDefinition(ControlType::Pushbutton, ControlPart::Entire)
-                  ->getStates(ControlType::Pushbutton, eState, ImplControlValue());
+                  ->getStates(ControlType::Pushbutton, ControlPart::Entire, eState,
+                              ImplControlValue());
 
         CPPUNIT_ASSERT_EQUAL(size_t(2), aStates.size());
 
@@ -71,7 +72,7 @@ void WidgetDefinitionReaderTest::testRead()
     {
         std::vector<std::shared_ptr<vcl::WidgetDefinitionState>> aStates
             = aDefinition.getDefinition(ControlType::Radiobutton, ControlPart::Entire)
-                  ->getStates(ControlType::Radiobutton, ControlState::NONE,
+                  ->getStates(ControlType::Radiobutton, ControlPart::Entire, ControlState::NONE,
                               ImplControlValue(ButtonValue::On));
         CPPUNIT_ASSERT_EQUAL(size_t(1), aStates.size());
         CPPUNIT_ASSERT_EQUAL(size_t(2), aStates[0]->mpDrawCommands.size());
@@ -80,7 +81,7 @@ void WidgetDefinitionReaderTest::testRead()
     {
         std::vector<std::shared_ptr<vcl::WidgetDefinitionState>> aStates
             = aDefinition.getDefinition(ControlType::Radiobutton, ControlPart::Entire)
-                  ->getStates(ControlType::Radiobutton, ControlState::NONE,
+                  ->getStates(ControlType::Radiobutton, ControlPart::Entire, ControlState::NONE,
                               ImplControlValue(ButtonValue::Off));
         CPPUNIT_ASSERT_EQUAL(size_t(1), aStates.size());
         CPPUNIT_ASSERT_EQUAL(size_t(1), aStates[0]->mpDrawCommands.size());
diff --git a/vcl/source/gdi/FileDefinitionWidgetDraw.cxx b/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
index 9085753dbf25..b557021f4601 100644
--- a/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
+++ b/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
@@ -402,7 +402,7 @@ bool FileDefinitionWidgetDraw::resolveDefinition(ControlType eType, ControlPart
     auto const& pPart = m_pWidgetDefinition->getDefinition(eType, ePart);
     if (pPart)
     {
-        auto const& aStates = pPart->getStates(eType, eState, rValue);
+        auto const& aStates = pPart->getStates(eType, ePart, eState, rValue);
         if (!aStates.empty())
         {
             // use last defined state
diff --git a/vcl/source/gdi/WidgetDefinition.cxx b/vcl/source/gdi/WidgetDefinition.cxx
index 5d316298da37..668fe74bf403 100644
--- a/vcl/source/gdi/WidgetDefinition.cxx
+++ b/vcl/source/gdi/WidgetDefinition.cxx
@@ -26,7 +26,7 @@ std::shared_ptr<WidgetDefinitionPart> WidgetDefinition::getDefinition(ControlTyp
 }
 
 std::vector<std::shared_ptr<WidgetDefinitionState>>
-WidgetDefinitionPart::getStates(ControlType eType, ControlState eState,
+WidgetDefinitionPart::getStates(ControlType eType, ControlPart ePart, ControlState eState,
                                 ImplControlValue const& rValue)
 {
     std::vector<std::shared_ptr<WidgetDefinitionState>> aStatesToAdd;
@@ -69,26 +69,43 @@ WidgetDefinitionPart::getStates(ControlType eType, ControlState eState,
             bAdd = false;
         }
 
-        if (eType == ControlType::TabItem)
-        {
-            OString sExtra;
-
-            auto const& rTabItemValue = static_cast<TabitemValue const&>(rValue);
-
-            if (rTabItemValue.isLeftAligned() && rTabItemValue.isRightAligned()
-                && rTabItemValue.isFirst() && rTabItemValue.isLast())
-                sExtra = "first_last";
-            else if (rTabItemValue.isLeftAligned() || rTabItemValue.isFirst())
-                sExtra = "first";
-            else if (rTabItemValue.isRightAligned() || rTabItemValue.isLast())
-                sExtra = "last";
-            else
-                sExtra = "middle";
+        OString sExtra = "any";
 
-            if (state->msExtra != "any" && state->msExtra != sExtra)
+        switch (eType)
+        {
+            case ControlType::TabItem:
+            {
+                auto const& rTabItemValue = static_cast<TabitemValue const&>(rValue);
+
+                if (rTabItemValue.isLeftAligned() && rTabItemValue.isRightAligned()
+                    && rTabItemValue.isFirst() && rTabItemValue.isLast())
+                    sExtra = "first_last";
+                else if (rTabItemValue.isLeftAligned() || rTabItemValue.isFirst())
+                    sExtra = "first";
+                else if (rTabItemValue.isRightAligned() || rTabItemValue.isLast())
+                    sExtra = "last";
+                else
+                    sExtra = "middle";
+            }
+            break;
+            case ControlType::ListHeader:
             {
-                bAdd = false;
+                if (ePart == ControlPart::Arrow)
+                {
+                    if (rValue.getNumericVal() == 1)
+                        sExtra = "down";
+                    else
+                        sExtra = "up";
+                }
             }
+            break;
+            default:
+                break;
+        }
+
+        if (state->msExtra != "any" && state->msExtra != sExtra)
+        {
+            bAdd = false;
         }
 
         if (bAdd)
diff --git a/vcl/uiconfig/theme_definitions/arrow-down.svgx b/vcl/uiconfig/theme_definitions/arrow-down.svgx
new file mode 100644
index 000000000000..032df3df64b9
--- /dev/null
+++ b/vcl/uiconfig/theme_definitions/arrow-down.svgx
@@ -0,0 +1,5 @@
+<svg version="1.1" viewBox="0 0 11 20" xmlns="http://www.w3.org/2000/svg">
+ <g transform="translate(245.46 49.566)">
+  <path d="m-242.75-44.074h5.5903l-2.7951 8z" fill="#007aff" stroke="#007aff"/>
+ </g>
+</svg>
diff --git a/vcl/uiconfig/theme_definitions/arrow-up.svgx b/vcl/uiconfig/theme_definitions/arrow-up.svgx
new file mode 100644
index 000000000000..524906f31018
--- /dev/null
+++ b/vcl/uiconfig/theme_definitions/arrow-up.svgx
@@ -0,0 +1,5 @@
+<svg version="1.1" viewBox="0 0 11 20" xmlns="http://www.w3.org/2000/svg">
+ <g transform="translate(245.46 49.566)">
+  <path d="m-242.75-35.066h5.5903l-2.7951-7.9855z" fill="#007aff" stroke="#007aff"/>
+ </g>
+</svg>
diff --git a/vcl/uiconfig/theme_definitions/definition.xml b/vcl/uiconfig/theme_definitions/definition.xml
index 848f0e600d89..bdb1e700715b 100644
--- a/vcl/uiconfig/theme_definitions/definition.xml
+++ b/vcl/uiconfig/theme_definitions/definition.xml
@@ -432,6 +432,19 @@
     </listnet>
 
     <listheader>
+         <part value="Button">
+            <state>
+                <rect stroke="#8e8e93" fill="#f4f5f5" stroke-width="1" rx="1" ry="1"/>
+            </state>
+        </part>
+        <part value="Arrow">
+            <state extra="up">
+                <image source="arrow-up.svgx"/>
+            </state>
+            <state extra="down">
+                <image source="arrow-down.svgx"/>
+            </state>
+        </part>
     </listheader>
 
 </widgets>
commit a946badc191eda0500159ee023427548e2472c4b
Author:     Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
AuthorDate: Sun Mar 10 17:26:29 2019 +0100
Commit:     Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
CommitDate: Mon Mar 11 12:13:00 2019 +0100

    widget theme: support "height" for editbox and set to "32"
    
    Change-Id: Iff48c83b6f1b28bc7fbf7646c399a844a3155970
    Reviewed-on: https://gerrit.libreoffice.org/69012
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>
    (cherry picked from commit 3ae8b9301fa817968f3115639bc8a5f2170d179e)

diff --git a/vcl/source/gdi/FileDefinitionWidgetDraw.cxx b/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
index 4fb2fd315f8d..9085753dbf25 100644
--- a/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
+++ b/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
@@ -728,10 +728,13 @@ bool FileDefinitionWidgetDraw::getNativeControlRegion(
         case ControlType::EditboxNoBorder:
         case ControlType::MultilineEditbox:
         {
-            //auto const& pPart = m_aWidgetDefinition.getDefinition(eType, ControlPart::Entire);
+            sal_Int32 nHeight = rBoundingControlRegion.GetHeight();
 
-            Size aSize(rBoundingControlRegion.GetWidth(),
-                       std::max(rBoundingControlRegion.GetHeight(), 32L));
+            auto const& pPart = m_pWidgetDefinition->getDefinition(eType, ControlPart::Entire);
+            if (pPart)
+                nHeight = std::max(nHeight, pPart->mnHeight);
+
+            Size aSize(rBoundingControlRegion.GetWidth(), nHeight);
             rNativeContentRegion = tools::Rectangle(aLocation, aSize);
             rNativeBoundingRegion = rNativeContentRegion;
             rNativeBoundingRegion.expand(2);
diff --git a/vcl/uiconfig/theme_definitions/definition.xml b/vcl/uiconfig/theme_definitions/definition.xml
index 027b78e5fd6e..848f0e600d89 100644
--- a/vcl/uiconfig/theme_definitions/definition.xml
+++ b/vcl/uiconfig/theme_definitions/definition.xml
@@ -147,7 +147,7 @@
     </combobox>
 
     <editbox>
-        <part value="Entire">
+        <part value="Entire" height="32">
             <state enabled="true">
                 <external source="common-rect.svgx" />
             </state>
commit 9dd81227b13033c174f1b63ab6a9857dde13158a
Author:     Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
AuthorDate: Sun Mar 10 17:24:00 2019 +0100
Commit:     Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
CommitDate: Mon Mar 11 12:12:59 2019 +0100

    widget theme: toolbar drawing definition - separator, buttons
    
    Change-Id: Ic8574c0f0c3c51526254c34d820977a0fbb520a0
    Reviewed-on: https://gerrit.libreoffice.org/69011
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>
    (cherry picked from commit cdabde598e9569b9427b70d616e50f22daa1bb61)

diff --git a/vcl/uiconfig/theme_definitions/definition.xml b/vcl/uiconfig/theme_definitions/definition.xml
index 0a6f696320b5..027b78e5fd6e 100644
--- a/vcl/uiconfig/theme_definitions/definition.xml
+++ b/vcl/uiconfig/theme_definitions/definition.xml
@@ -191,12 +191,10 @@
 
     <spinbox>
         <part value="Entire">
-            <state>
-            </state>
+            <state/> <!-- Intentional empty - don't draw anything -->
         </part>
         <part value="SubEdit">
-            <state>
-            </state>
+            <state/> <!-- Intentional empty - don't draw anything -->
         </part>
         <part value="ButtonDown" width="44" height="26">
             <state enabled="true">
@@ -395,32 +393,34 @@
         </part>
 
         <part value="ThumbHorz">
-            <state>
-                <rect stroke="#00FFFF" fill="#00FFFF" stroke-width="1" rx="1" ry="1"/>
-            </state>
+            <state/> <!-- Intentional empty - don't draw anything -->
         </part>
 
         <part value="ThumbVert">
-            <state>
-                <rect stroke="#00FFFF" fill="#00FFFF" stroke-width="1" rx="1" ry="1"/>
-            </state>
+            <state/> <!-- Intentional empty - don't draw anything -->
         </part>
 
         <part value="SeparatorVert">
             <state>
-                <rect stroke="#00FFFF" fill="#00FFFF" stroke-width="1" rx="1" ry="1"/>
+                <line stroke="#007AFF" fill="#007AFF" stroke-width="2" x1="0.5" y1="0.0" x2="0.5" y2="1.0"/>
             </state>
         </part>
 
         <part value="SeparatorHorz">
             <state>
-                <rect stroke="#00FFFF" fill="#00FFFF" stroke-width="1" rx="1" ry="1"/>
+                <line stroke="#007AFF" fill="#007AFF" stroke-width="2" x1="0.0" y1="0.5" x2="1.0" y2="0.5"/>
             </state>
         </part>
 
         <part value="Button">
-             <state>
-                <rect stroke="#00FFFF" fill="#00FFFF" stroke-width="1" rx="1" ry="1"/>
+            <state enabled="true" button-value="true">
+                <rect stroke="#c0c0c0" fill="#c0c0c0" stroke-width="1" rx="4" ry="4"/>
+            </state>
+            <state enabled="true" button-value="false">
+                <rect stroke="#f4f5f5" fill="#f4f5f5" stroke-width="1" rx="4" ry="4"/>
+            </state>
+            <state enabled="false">
+                <rect stroke="#007AFF" fill="#00FF00" stroke-width="1" rx="4" ry="4"/>
             </state>
         </part>
     </toolbar>
commit 922fb093b602f4569c316e8d6300432110198313
Author:     Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
AuthorDate: Sat Mar 9 14:57:28 2019 +0100
Commit:     Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
CommitDate: Mon Mar 11 12:12:59 2019 +0100

    widget theme: adjust draw positions of editbox, combobox, listbox
    
    Change-Id: Id14b5530c994e10bb9f45f036b43025c73c7ac83
    Reviewed-on: https://gerrit.libreoffice.org/68977
    Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>
    Tested-by: Tomaž Vajngerl <quikee at gmail.com>
    (cherry picked from commit a66e0f83cb488e024319f67add61b08528a39596)

diff --git a/vcl/source/gdi/FileDefinitionWidgetDraw.cxx b/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
index 17b7c2c833db..4fb2fd315f8d 100644
--- a/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
+++ b/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
@@ -734,6 +734,7 @@ bool FileDefinitionWidgetDraw::getNativeControlRegion(
                        std::max(rBoundingControlRegion.GetHeight(), 32L));
             rNativeContentRegion = tools::Rectangle(aLocation, aSize);
             rNativeBoundingRegion = rNativeContentRegion;
+            rNativeBoundingRegion.expand(2);
             return true;
         }
         break;
@@ -764,7 +765,7 @@ bool FileDefinitionWidgetDraw::getNativeControlRegion(
             {
                 Point aPoint(aLocation.X() + rBoundingControlRegion.GetWidth()
                                  - aComboButtonSize.Width(),
-                             aLocation.Y());
+                             aLocation.Y() + 1);
                 rNativeContentRegion = tools::Rectangle(aPoint, aComboButtonSize);
                 rNativeBoundingRegion = rNativeContentRegion;
                 return true;
@@ -773,8 +774,7 @@ bool FileDefinitionWidgetDraw::getNativeControlRegion(
             {
                 Size aSize(rBoundingControlRegion.GetWidth() - aComboButtonSize.Width(),
                            aComboButtonSize.Height());
-                rNativeContentRegion = tools::Rectangle(aLocation, aSize);
-                rNativeContentRegion.expand(1);
+                rNativeContentRegion = tools::Rectangle(aLocation + Point(1, 1), aSize);
                 rNativeBoundingRegion = rNativeContentRegion;
                 return true;
             }
commit 73112b3817beaab1517c5b92fbfa452e08c486e9
Author:     Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
AuthorDate: Sat Mar 9 14:50:57 2019 +0100
Commit:     Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
CommitDate: Mon Mar 11 12:12:59 2019 +0100

    only read and parse widget definition once from the file
    
    Change-Id: I71c095e5e5dd21650663e6fb717bcb22958a597f
    Reviewed-on: https://gerrit.libreoffice.org/68976
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>
    (cherry picked from commit e9393e392e95ec8fcab77662790482aa0adf0f78)

diff --git a/vcl/inc/FileDefinitionWidgetDraw.hxx b/vcl/inc/FileDefinitionWidgetDraw.hxx
index dc3ee7f8967c..24b9e0ab8a26 100644
--- a/vcl/inc/FileDefinitionWidgetDraw.hxx
+++ b/vcl/inc/FileDefinitionWidgetDraw.hxx
@@ -22,7 +22,7 @@ class FileDefinitionWidgetDraw : public vcl::WidgetDrawInterface
 {
 private:
     SalGraphics& m_rGraphics;
-    WidgetDefinition m_aWidgetDefinition;
+    std::shared_ptr<WidgetDefinition> m_pWidgetDefinition;
 
     bool resolveDefinition(ControlType eType, ControlPart ePart, ControlState eState,
                            const ImplControlValue& rValue, long nX, long nY, long nWidth,
diff --git a/vcl/source/gdi/FileDefinitionWidgetDraw.cxx b/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
index bc2636491829..17b7c2c833db 100644
--- a/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
+++ b/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
@@ -44,14 +44,28 @@ OUString lcl_getThemeDefinitionPath()
     return sPath;
 }
 
+std::shared_ptr<WidgetDefinition> setWidgetDefinition(OUString const& rDefinitionFile,
+                                                      OUString const& rDefinitionResourcesPath)
+{
+    static std::shared_ptr<WidgetDefinition> spDefinition;
+    if (!spDefinition)
+    {
+        spDefinition = std::make_shared<WidgetDefinition>();
+        WidgetDefinitionReader aReader(rDefinitionFile, rDefinitionResourcesPath);
+        aReader.read(*spDefinition);
+    }
+    return spDefinition;
+}
+
 } // end anonymous namespace
 
 FileDefinitionWidgetDraw::FileDefinitionWidgetDraw(SalGraphics& rGraphics)
     : m_rGraphics(rGraphics)
 {
     OUString sDefinitionBasePath = lcl_getThemeDefinitionPath();
-    WidgetDefinitionReader aReader(sDefinitionBasePath + "definition.xml", sDefinitionBasePath);
-    aReader.read(m_aWidgetDefinition);
+
+    m_pWidgetDefinition
+        = setWidgetDefinition(sDefinitionBasePath + "definition.xml", sDefinitionBasePath);
 
     ImplSVData* pSVData = ImplGetSVData();
     pSVData->maNWFData.mbNoFocusRects = true;
@@ -385,7 +399,7 @@ bool FileDefinitionWidgetDraw::resolveDefinition(ControlType eType, ControlPart
                                                  long nWidth, long nHeight)
 {
     bool bOK = false;
-    auto const& pPart = m_aWidgetDefinition.getDefinition(eType, ePart);
+    auto const& pPart = m_pWidgetDefinition->getDefinition(eType, ePart);
     if (pPart)
     {
         auto const& aStates = pPart->getStates(eType, eState, rValue);
@@ -588,13 +602,13 @@ bool FileDefinitionWidgetDraw::getNativeControlRegion(
         case ControlType::Spinbox:
         {
             auto const& pButtonUpPart
-                = m_aWidgetDefinition.getDefinition(eType, ControlPart::ButtonUp);
+                = m_pWidgetDefinition->getDefinition(eType, ControlPart::ButtonUp);
             if (!pButtonUpPart)
                 return false;
             Size aButtonSizeUp(pButtonUpPart->mnWidth, pButtonUpPart->mnHeight);
 
             auto const& pButtonDownPart
-                = m_aWidgetDefinition.getDefinition(eType, ControlPart::ButtonDown);
+                = m_pWidgetDefinition->getDefinition(eType, ControlPart::ButtonDown);
             if (!pButtonDownPart)
                 return false;
             Size aButtonSizeDown(pButtonDownPart->mnWidth, pButtonDownPart->mnHeight);
@@ -679,7 +693,7 @@ bool FileDefinitionWidgetDraw::getNativeControlRegion(
         break;
         case ControlType::Checkbox:
         {
-            auto const& pPart = m_aWidgetDefinition.getDefinition(eType, ControlPart::Entire);
+            auto const& pPart = m_pWidgetDefinition->getDefinition(eType, ControlPart::Entire);
             if (!pPart)
                 return false;
 
@@ -689,7 +703,7 @@ bool FileDefinitionWidgetDraw::getNativeControlRegion(
         }
         case ControlType::Radiobutton:
         {
-            auto const& pPart = m_aWidgetDefinition.getDefinition(eType, ControlPart::Entire);
+            auto const& pPart = m_pWidgetDefinition->getDefinition(eType, ControlPart::Entire);
             if (!pPart)
                 return false;
 
@@ -699,7 +713,7 @@ bool FileDefinitionWidgetDraw::getNativeControlRegion(
         }
         case ControlType::TabItem:
         {
-            auto const& pPart = m_aWidgetDefinition.getDefinition(eType, ControlPart::Entire);
+            auto const& pPart = m_pWidgetDefinition->getDefinition(eType, ControlPart::Entire);
             if (!pPart)
                 return false;
 
@@ -743,7 +757,7 @@ bool FileDefinitionWidgetDraw::getNativeControlRegion(
         case ControlType::Combobox:
         case ControlType::Listbox:
         {
-            auto const& pPart = m_aWidgetDefinition.getDefinition(eType, ControlPart::ButtonDown);
+            auto const& pPart = m_pWidgetDefinition->getDefinition(eType, ControlPart::ButtonDown);
             Size aComboButtonSize(pPart->mnWidth, pPart->mnHeight);
 
             if (ePart == ControlPart::ButtonDown)
@@ -786,7 +800,7 @@ bool FileDefinitionWidgetDraw::updateSettings(AllSettings& rSettings)
 {
     StyleSettings aStyleSet = rSettings.GetStyleSettings();
 
-    auto pDefinitionStyle = m_aWidgetDefinition.mpStyle;
+    auto pDefinitionStyle = m_pWidgetDefinition->mpStyle;
 
     aStyleSet.SetFaceColor(pDefinitionStyle->maFaceColor);
     aStyleSet.SetCheckedColor(pDefinitionStyle->maCheckedColor);
commit 9bfd89b077fd885fd074bb47f3dd19392793e026
Author:     Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
AuthorDate: Sat Mar 9 13:49:40 2019 +0100
Commit:     Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
CommitDate: Mon Mar 11 12:12:59 2019 +0100

    Separate style colors from WidgetDefinition into its own class
    
    Change-Id: I11cd695da81bae7b49b2319b89e5c560ba64f04e
    Reviewed-on: https://gerrit.libreoffice.org/68975
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>
    (cherry picked from commit 4e25914b165d7ed64b3026af758fb857676aacd5)

diff --git a/vcl/inc/widgetdraw/WidgetDefinition.hxx b/vcl/inc/widgetdraw/WidgetDefinition.hxx
index c183edd9e315..7e1505c8daae 100644
--- a/vcl/inc/widgetdraw/WidgetDefinition.hxx
+++ b/vcl/inc/widgetdraw/WidgetDefinition.hxx
@@ -208,7 +208,7 @@ public:
     std::vector<std::shared_ptr<WidgetDefinitionState>> maStates;
 };
 
-class VCL_DLLPUBLIC WidgetDefinition
+class VCL_DLLPUBLIC WidgetDefinitionStyle
 {
 public:
     Color maFaceColor;
@@ -261,7 +261,12 @@ public:
     Color maVisitedLinkColor;
     Color maToolTextColor;
     Color maFontColor;
+};
 
+class VCL_DLLPUBLIC WidgetDefinition
+{
+public:
+    std::shared_ptr<WidgetDefinitionStyle> mpStyle;
     std::unordered_map<ControlTypeAndPart, std::shared_ptr<WidgetDefinitionPart>> maDefinitions;
     std::shared_ptr<WidgetDefinitionPart> getDefinition(ControlType eType, ControlPart ePart);
 };
diff --git a/vcl/qa/cppunit/widgetdraw/WidgetDefinitionReaderTest.cxx b/vcl/qa/cppunit/widgetdraw/WidgetDefinitionReaderTest.cxx
index 20b3270267dd..c56379cc70c7 100644
--- a/vcl/qa/cppunit/widgetdraw/WidgetDefinitionReaderTest.cxx
+++ b/vcl/qa/cppunit/widgetdraw/WidgetDefinitionReaderTest.cxx
@@ -39,20 +39,17 @@ void WidgetDefinitionReaderTest::testRead()
 {
     vcl::WidgetDefinition aDefinition;
 
-    CPPUNIT_ASSERT_EQUAL(OUString("000000"), aDefinition.maFaceColor.AsRGBHexString());
-    CPPUNIT_ASSERT_EQUAL(OUString("000000"), aDefinition.maCheckedColor.AsRGBHexString());
-    CPPUNIT_ASSERT_EQUAL(OUString("000000"), aDefinition.maLightColor.AsRGBHexString());
-
     vcl::WidgetDefinitionReader aReader(getFullUrl("definition1.xml"), getFullUrl(""));
     aReader.read(aDefinition);
 
-    CPPUNIT_ASSERT_EQUAL(OUString("123456"), aDefinition.maFaceColor.AsRGBHexString());
-    CPPUNIT_ASSERT_EQUAL(OUString("234567"), aDefinition.maCheckedColor.AsRGBHexString());
-    CPPUNIT_ASSERT_EQUAL(OUString("345678"), aDefinition.maLightColor.AsRGBHexString());
+    CPPUNIT_ASSERT_EQUAL(OUString("123456"), aDefinition.mpStyle->maFaceColor.AsRGBHexString());
+    CPPUNIT_ASSERT_EQUAL(OUString("234567"), aDefinition.mpStyle->maCheckedColor.AsRGBHexString());
+    CPPUNIT_ASSERT_EQUAL(OUString("345678"), aDefinition.mpStyle->maLightColor.AsRGBHexString());
 
-    CPPUNIT_ASSERT_EQUAL(OUString("ffffff"), aDefinition.maVisitedLinkColor.AsRGBHexString());
-    CPPUNIT_ASSERT_EQUAL(OUString("ffffff"), aDefinition.maToolTextColor.AsRGBHexString());
-    CPPUNIT_ASSERT_EQUAL(OUString("ffffff"), aDefinition.maFontColor.AsRGBHexString());
+    CPPUNIT_ASSERT_EQUAL(OUString("ffffff"),
+                         aDefinition.mpStyle->maVisitedLinkColor.AsRGBHexString());
+    CPPUNIT_ASSERT_EQUAL(OUString("ffffff"), aDefinition.mpStyle->maToolTextColor.AsRGBHexString());
+    CPPUNIT_ASSERT_EQUAL(OUString("ffffff"), aDefinition.mpStyle->maFontColor.AsRGBHexString());
 
     // Pushbutton
     {
diff --git a/vcl/source/gdi/FileDefinitionWidgetDraw.cxx b/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
index abd55fb0bca0..bc2636491829 100644
--- a/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
+++ b/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
@@ -786,56 +786,58 @@ bool FileDefinitionWidgetDraw::updateSettings(AllSettings& rSettings)
 {
     StyleSettings aStyleSet = rSettings.GetStyleSettings();
 
-    aStyleSet.SetFaceColor(m_aWidgetDefinition.maFaceColor);
-    aStyleSet.SetCheckedColor(m_aWidgetDefinition.maCheckedColor);
-    aStyleSet.SetLightColor(m_aWidgetDefinition.maLightColor);
-    aStyleSet.SetLightBorderColor(m_aWidgetDefinition.maLightBorderColor);
-    aStyleSet.SetShadowColor(m_aWidgetDefinition.maShadowColor);
-    aStyleSet.SetDarkShadowColor(m_aWidgetDefinition.maDarkShadowColor);
-    aStyleSet.SetButtonTextColor(m_aWidgetDefinition.maButtonTextColor);
-    aStyleSet.SetButtonRolloverTextColor(m_aWidgetDefinition.maButtonRolloverTextColor);
-    aStyleSet.SetRadioCheckTextColor(m_aWidgetDefinition.maRadioCheckTextColor);
-    aStyleSet.SetGroupTextColor(m_aWidgetDefinition.maGroupTextColor);
-    aStyleSet.SetLabelTextColor(m_aWidgetDefinition.maLabelTextColor);
-    aStyleSet.SetWindowColor(m_aWidgetDefinition.maWindowColor);
-    aStyleSet.SetWindowTextColor(m_aWidgetDefinition.maWindowTextColor);
-    aStyleSet.SetDialogColor(m_aWidgetDefinition.maDialogColor);
-    aStyleSet.SetDialogTextColor(m_aWidgetDefinition.maDialogTextColor);
-    aStyleSet.SetWorkspaceColor(m_aWidgetDefinition.maWorkspaceColor);
-    aStyleSet.SetMonoColor(m_aWidgetDefinition.maMonoColor);
-    aStyleSet.SetFieldColor(m_aWidgetDefinition.maFieldColor);
-    aStyleSet.SetFieldTextColor(m_aWidgetDefinition.maFieldTextColor);
-    aStyleSet.SetFieldRolloverTextColor(m_aWidgetDefinition.maFieldRolloverTextColor);
-    aStyleSet.SetActiveColor(m_aWidgetDefinition.maActiveColor);
-    aStyleSet.SetActiveTextColor(m_aWidgetDefinition.maActiveTextColor);
-    aStyleSet.SetActiveBorderColor(m_aWidgetDefinition.maActiveBorderColor);
-    aStyleSet.SetDeactiveColor(m_aWidgetDefinition.maDeactiveColor);
-    aStyleSet.SetDeactiveTextColor(m_aWidgetDefinition.maDeactiveTextColor);
-    aStyleSet.SetDeactiveBorderColor(m_aWidgetDefinition.maDeactiveBorderColor);
-    aStyleSet.SetMenuColor(m_aWidgetDefinition.maMenuColor);
-    aStyleSet.SetMenuBarColor(m_aWidgetDefinition.maMenuBarColor);
-    aStyleSet.SetMenuBarRolloverColor(m_aWidgetDefinition.maMenuBarRolloverColor);
-    aStyleSet.SetMenuBorderColor(m_aWidgetDefinition.maMenuBorderColor);
-    aStyleSet.SetMenuTextColor(m_aWidgetDefinition.maMenuTextColor);
-    aStyleSet.SetMenuBarTextColor(m_aWidgetDefinition.maMenuBarTextColor);
-    aStyleSet.SetMenuBarRolloverTextColor(m_aWidgetDefinition.maMenuBarRolloverTextColor);
-    aStyleSet.SetMenuBarHighlightTextColor(m_aWidgetDefinition.maMenuBarHighlightTextColor);
-    aStyleSet.SetMenuHighlightColor(m_aWidgetDefinition.maMenuHighlightColor);
-    aStyleSet.SetMenuHighlightTextColor(m_aWidgetDefinition.maMenuHighlightTextColor);
-    aStyleSet.SetHighlightColor(m_aWidgetDefinition.maHighlightColor);
-    aStyleSet.SetHighlightTextColor(m_aWidgetDefinition.maHighlightTextColor);
-    aStyleSet.SetActiveTabColor(m_aWidgetDefinition.maActiveTabColor);
-    aStyleSet.SetInactiveTabColor(m_aWidgetDefinition.maInactiveTabColor);
-    aStyleSet.SetTabTextColor(m_aWidgetDefinition.maTabTextColor);
-    aStyleSet.SetTabRolloverTextColor(m_aWidgetDefinition.maTabRolloverTextColor);
-    aStyleSet.SetTabHighlightTextColor(m_aWidgetDefinition.maTabHighlightTextColor);
-    aStyleSet.SetDisableColor(m_aWidgetDefinition.maDisableColor);
-    aStyleSet.SetHelpColor(m_aWidgetDefinition.maHelpColor);
-    aStyleSet.SetHelpTextColor(m_aWidgetDefinition.maHelpTextColor);
-    aStyleSet.SetLinkColor(m_aWidgetDefinition.maLinkColor);
-    aStyleSet.SetVisitedLinkColor(m_aWidgetDefinition.maVisitedLinkColor);
-    aStyleSet.SetToolTextColor(m_aWidgetDefinition.maToolTextColor);
-    aStyleSet.SetFontColor(m_aWidgetDefinition.maFontColor);
+    auto pDefinitionStyle = m_aWidgetDefinition.mpStyle;
+
+    aStyleSet.SetFaceColor(pDefinitionStyle->maFaceColor);
+    aStyleSet.SetCheckedColor(pDefinitionStyle->maCheckedColor);
+    aStyleSet.SetLightColor(pDefinitionStyle->maLightColor);
+    aStyleSet.SetLightBorderColor(pDefinitionStyle->maLightBorderColor);
+    aStyleSet.SetShadowColor(pDefinitionStyle->maShadowColor);
+    aStyleSet.SetDarkShadowColor(pDefinitionStyle->maDarkShadowColor);
+    aStyleSet.SetButtonTextColor(pDefinitionStyle->maButtonTextColor);
+    aStyleSet.SetButtonRolloverTextColor(pDefinitionStyle->maButtonRolloverTextColor);
+    aStyleSet.SetRadioCheckTextColor(pDefinitionStyle->maRadioCheckTextColor);
+    aStyleSet.SetGroupTextColor(pDefinitionStyle->maGroupTextColor);
+    aStyleSet.SetLabelTextColor(pDefinitionStyle->maLabelTextColor);
+    aStyleSet.SetWindowColor(pDefinitionStyle->maWindowColor);
+    aStyleSet.SetWindowTextColor(pDefinitionStyle->maWindowTextColor);
+    aStyleSet.SetDialogColor(pDefinitionStyle->maDialogColor);
+    aStyleSet.SetDialogTextColor(pDefinitionStyle->maDialogTextColor);
+    aStyleSet.SetWorkspaceColor(pDefinitionStyle->maWorkspaceColor);
+    aStyleSet.SetMonoColor(pDefinitionStyle->maMonoColor);
+    aStyleSet.SetFieldColor(pDefinitionStyle->maFieldColor);
+    aStyleSet.SetFieldTextColor(pDefinitionStyle->maFieldTextColor);
+    aStyleSet.SetFieldRolloverTextColor(pDefinitionStyle->maFieldRolloverTextColor);
+    aStyleSet.SetActiveColor(pDefinitionStyle->maActiveColor);
+    aStyleSet.SetActiveTextColor(pDefinitionStyle->maActiveTextColor);
+    aStyleSet.SetActiveBorderColor(pDefinitionStyle->maActiveBorderColor);
+    aStyleSet.SetDeactiveColor(pDefinitionStyle->maDeactiveColor);
+    aStyleSet.SetDeactiveTextColor(pDefinitionStyle->maDeactiveTextColor);
+    aStyleSet.SetDeactiveBorderColor(pDefinitionStyle->maDeactiveBorderColor);
+    aStyleSet.SetMenuColor(pDefinitionStyle->maMenuColor);
+    aStyleSet.SetMenuBarColor(pDefinitionStyle->maMenuBarColor);
+    aStyleSet.SetMenuBarRolloverColor(pDefinitionStyle->maMenuBarRolloverColor);
+    aStyleSet.SetMenuBorderColor(pDefinitionStyle->maMenuBorderColor);
+    aStyleSet.SetMenuTextColor(pDefinitionStyle->maMenuTextColor);
+    aStyleSet.SetMenuBarTextColor(pDefinitionStyle->maMenuBarTextColor);
+    aStyleSet.SetMenuBarRolloverTextColor(pDefinitionStyle->maMenuBarRolloverTextColor);
+    aStyleSet.SetMenuBarHighlightTextColor(pDefinitionStyle->maMenuBarHighlightTextColor);
+    aStyleSet.SetMenuHighlightColor(pDefinitionStyle->maMenuHighlightColor);
+    aStyleSet.SetMenuHighlightTextColor(pDefinitionStyle->maMenuHighlightTextColor);
+    aStyleSet.SetHighlightColor(pDefinitionStyle->maHighlightColor);
+    aStyleSet.SetHighlightTextColor(pDefinitionStyle->maHighlightTextColor);
+    aStyleSet.SetActiveTabColor(pDefinitionStyle->maActiveTabColor);
+    aStyleSet.SetInactiveTabColor(pDefinitionStyle->maInactiveTabColor);
+    aStyleSet.SetTabTextColor(pDefinitionStyle->maTabTextColor);
+    aStyleSet.SetTabRolloverTextColor(pDefinitionStyle->maTabRolloverTextColor);
+    aStyleSet.SetTabHighlightTextColor(pDefinitionStyle->maTabHighlightTextColor);
+    aStyleSet.SetDisableColor(pDefinitionStyle->maDisableColor);
+    aStyleSet.SetHelpColor(pDefinitionStyle->maHelpColor);
+    aStyleSet.SetHelpTextColor(pDefinitionStyle->maHelpTextColor);
+    aStyleSet.SetLinkColor(pDefinitionStyle->maLinkColor);
+    aStyleSet.SetVisitedLinkColor(pDefinitionStyle->maVisitedLinkColor);
+    aStyleSet.SetToolTextColor(pDefinitionStyle->maToolTextColor);
+    aStyleSet.SetFontColor(pDefinitionStyle->maFontColor);
 
     vcl::Font aFont(FAMILY_SWISS, Size(0, 12));
     aFont.SetCharSet(osl_getThreadTextEncoding());
diff --git a/vcl/source/gdi/WidgetDefinitionReader.cxx b/vcl/source/gdi/WidgetDefinitionReader.cxx
index 467e4dbfe2b3..f52757d37629 100644
--- a/vcl/source/gdi/WidgetDefinitionReader.cxx
+++ b/vcl/source/gdi/WidgetDefinitionReader.cxx
@@ -370,60 +370,63 @@ bool WidgetDefinitionReader::read(WidgetDefinition& rWidgetDefinition)
     if (!lcl_fileExists(m_rDefinitionFile))
         return false;
 
-    SvFileStream aFileStream(m_rDefinitionFile, StreamMode::READ);
+    auto pStyle = std::make_shared<WidgetDefinitionStyle>();
 
     std::unordered_map<OString, Color*> aStyleColorMap = {
-        { "faceColor", &rWidgetDefinition.maFaceColor },
-        { "checkedColor", &rWidgetDefinition.maCheckedColor },
-        { "lightColor", &rWidgetDefinition.maLightColor },
-        { "lightBorderColor", &rWidgetDefinition.maLightBorderColor },
-        { "shadowColor", &rWidgetDefinition.maShadowColor },
-        { "darkShadowColor", &rWidgetDefinition.maDarkShadowColor },
-        { "buttonTextColor", &rWidgetDefinition.maButtonTextColor },
-        { "buttonRolloverTextColor", &rWidgetDefinition.maButtonRolloverTextColor },
-        { "radioCheckTextColor", &rWidgetDefinition.maRadioCheckTextColor },
-        { "groupTextColor", &rWidgetDefinition.maGroupTextColor },
-        { "labelTextColor", &rWidgetDefinition.maLabelTextColor },
-        { "windowColor", &rWidgetDefinition.maWindowColor },
-        { "windowTextColor", &rWidgetDefinition.maWindowTextColor },
-        { "dialogColor", &rWidgetDefinition.maDialogColor },
-        { "dialogTextColor", &rWidgetDefinition.maDialogTextColor },
-        { "workspaceColor", &rWidgetDefinition.maWorkspaceColor },
-        { "monoColor", &rWidgetDefinition.maMonoColor },
-        { "fieldColor", &rWidgetDefinition.maFieldColor },
-        { "fieldTextColor", &rWidgetDefinition.maFieldTextColor },
-        { "fieldRolloverTextColor", &rWidgetDefinition.maFieldRolloverTextColor },
-        { "activeColor", &rWidgetDefinition.maActiveColor },
-        { "activeTextColor", &rWidgetDefinition.maActiveTextColor },
-        { "activeBorderColor", &rWidgetDefinition.maActiveBorderColor },
-        { "deactiveColor", &rWidgetDefinition.maDeactiveColor },
-        { "deactiveTextColor", &rWidgetDefinition.maDeactiveTextColor },
-        { "deactiveBorderColor", &rWidgetDefinition.maDeactiveBorderColor },
-        { "menuColor", &rWidgetDefinition.maMenuColor },
-        { "menuBarColor", &rWidgetDefinition.maMenuBarColor },
-        { "menuBarRolloverColor", &rWidgetDefinition.maMenuBarRolloverColor },
-        { "menuBorderColor", &rWidgetDefinition.maMenuBorderColor },
-        { "menuTextColor", &rWidgetDefinition.maMenuTextColor },
-        { "menuBarTextColor", &rWidgetDefinition.maMenuBarTextColor },
-        { "menuBarRolloverTextColor", &rWidgetDefinition.maMenuBarRolloverTextColor },
-        { "menuBarHighlightTextColor", &rWidgetDefinition.maMenuBarHighlightTextColor },
-        { "menuHighlightColor", &rWidgetDefinition.maMenuHighlightColor },
-        { "menuHighlightTextColor", &rWidgetDefinition.maMenuHighlightTextColor },
-        { "highlightColor", &rWidgetDefinition.maHighlightColor },
-        { "highlightTextColor", &rWidgetDefinition.maHighlightTextColor },
-        { "activeTabColor", &rWidgetDefinition.maActiveTabColor },
-        { "inactiveTabColor", &rWidgetDefinition.maInactiveTabColor },
-        { "tabTextColor", &rWidgetDefinition.maTabTextColor },
-        { "tabRolloverTextColor", &rWidgetDefinition.maTabRolloverTextColor },
-        { "tabHighlightTextColor", &rWidgetDefinition.maTabHighlightTextColor },
-        { "disableColor", &rWidgetDefinition.maDisableColor },
-        { "helpColor", &rWidgetDefinition.maHelpColor },
-        { "helpTextColor", &rWidgetDefinition.maHelpTextColor },
-        { "linkColor", &rWidgetDefinition.maLinkColor },
-        { "visitedLinkColor", &rWidgetDefinition.maVisitedLinkColor },
-        { "toolTextColor", &rWidgetDefinition.maToolTextColor },
-        { "fontColor", &rWidgetDefinition.maFontColor },
+        { "faceColor", &pStyle->maFaceColor },
+        { "checkedColor", &pStyle->maCheckedColor },
+        { "lightColor", &pStyle->maLightColor },
+        { "lightBorderColor", &pStyle->maLightBorderColor },
+        { "shadowColor", &pStyle->maShadowColor },
+        { "darkShadowColor", &pStyle->maDarkShadowColor },
+        { "buttonTextColor", &pStyle->maButtonTextColor },
+        { "buttonRolloverTextColor", &pStyle->maButtonRolloverTextColor },
+        { "radioCheckTextColor", &pStyle->maRadioCheckTextColor },
+        { "groupTextColor", &pStyle->maGroupTextColor },
+        { "labelTextColor", &pStyle->maLabelTextColor },
+        { "windowColor", &pStyle->maWindowColor },
+        { "windowTextColor", &pStyle->maWindowTextColor },
+        { "dialogColor", &pStyle->maDialogColor },
+        { "dialogTextColor", &pStyle->maDialogTextColor },
+        { "workspaceColor", &pStyle->maWorkspaceColor },
+        { "monoColor", &pStyle->maMonoColor },
+        { "fieldColor", &pStyle->maFieldColor },
+        { "fieldTextColor", &pStyle->maFieldTextColor },
+        { "fieldRolloverTextColor", &pStyle->maFieldRolloverTextColor },
+        { "activeColor", &pStyle->maActiveColor },
+        { "activeTextColor", &pStyle->maActiveTextColor },
+        { "activeBorderColor", &pStyle->maActiveBorderColor },
+        { "deactiveColor", &pStyle->maDeactiveColor },
+        { "deactiveTextColor", &pStyle->maDeactiveTextColor },
+        { "deactiveBorderColor", &pStyle->maDeactiveBorderColor },
+        { "menuColor", &pStyle->maMenuColor },
+        { "menuBarColor", &pStyle->maMenuBarColor },
+        { "menuBarRolloverColor", &pStyle->maMenuBarRolloverColor },
+        { "menuBorderColor", &pStyle->maMenuBorderColor },
+        { "menuTextColor", &pStyle->maMenuTextColor },
+        { "menuBarTextColor", &pStyle->maMenuBarTextColor },
+        { "menuBarRolloverTextColor", &pStyle->maMenuBarRolloverTextColor },
+        { "menuBarHighlightTextColor", &pStyle->maMenuBarHighlightTextColor },
+        { "menuHighlightColor", &pStyle->maMenuHighlightColor },
+        { "menuHighlightTextColor", &pStyle->maMenuHighlightTextColor },
+        { "highlightColor", &pStyle->maHighlightColor },
+        { "highlightTextColor", &pStyle->maHighlightTextColor },
+        { "activeTabColor", &pStyle->maActiveTabColor },
+        { "inactiveTabColor", &pStyle->maInactiveTabColor },
+        { "tabTextColor", &pStyle->maTabTextColor },
+        { "tabRolloverTextColor", &pStyle->maTabRolloverTextColor },
+        { "tabHighlightTextColor", &pStyle->maTabHighlightTextColor },
+        { "disableColor", &pStyle->maDisableColor },
+        { "helpColor", &pStyle->maHelpColor },
+        { "helpTextColor", &pStyle->maHelpTextColor },
+        { "linkColor", &pStyle->maLinkColor },
+        { "visitedLinkColor", &pStyle->maVisitedLinkColor },
+        { "toolTextColor", &pStyle->maToolTextColor },
+        { "fontColor", &pStyle->maFontColor },
     };
+    rWidgetDefinition.mpStyle = pStyle;
+
+    SvFileStream aFileStream(m_rDefinitionFile, StreamMode::READ);
 
     tools::XmlWalker aWalker;
     if (!aWalker.open(&aFileStream))
commit 4156d3b9330d0fd9260593b0dca707b3c8b69273
Author:     Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
AuthorDate: Fri Mar 8 19:00:18 2019 +0100
Commit:     Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
CommitDate: Mon Mar 11 12:12:59 2019 +0100

    Fix multiline tabs drawing of first / last tab
    
    Use is{Left,Right}Aligned instead of is{First,Last}. In multi-line
    tabs, not only first/last item needs to be drawn differently, but
    also some middle, which is now the first in the new line now.
    
    Change-Id: I81ddde192eca794f16df98d629f47991c59732c7
    Reviewed-on: https://gerrit.libreoffice.org/68945
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>
    (cherry picked from commit 86d9b85fb05d3d32fba4642e1231595341612d15)

diff --git a/vcl/source/gdi/WidgetDefinition.cxx b/vcl/source/gdi/WidgetDefinition.cxx
index 25eba80ecb13..5d316298da37 100644
--- a/vcl/source/gdi/WidgetDefinition.cxx
+++ b/vcl/source/gdi/WidgetDefinition.cxx
@@ -75,11 +75,12 @@ WidgetDefinitionPart::getStates(ControlType eType, ControlState eState,
 
             auto const& rTabItemValue = static_cast<TabitemValue const&>(rValue);
 
-            if (rTabItemValue.isFirst() && rTabItemValue.isLast())
+            if (rTabItemValue.isLeftAligned() && rTabItemValue.isRightAligned()
+                && rTabItemValue.isFirst() && rTabItemValue.isLast())
                 sExtra = "first_last";
-            else if (rTabItemValue.isFirst())
+            else if (rTabItemValue.isLeftAligned() || rTabItemValue.isFirst())
                 sExtra = "first";
-            else if (rTabItemValue.isLast())
+            else if (rTabItemValue.isRightAligned() || rTabItemValue.isLast())
                 sExtra = "last";
             else
                 sExtra = "middle";
commit a1750a87bc2d9a908af3cedc15dd78b32212de8c
Author:     Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
AuthorDate: Fri Mar 8 19:44:26 2019 +0100
Commit:     Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
CommitDate: Mon Mar 11 12:12:59 2019 +0100

    Fix crash in widget drawing of a SVG as image
    
    Change-Id: Iaa7e01b49b9c2dcdfa98e4e8bc431dba82fe6bb4
    Reviewed-on: https://gerrit.libreoffice.org/68942
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>
    (cherry picked from commit 8de89e1c39b211cb4c39e47c992b03ed33003658)

diff --git a/vcl/source/gdi/FileDefinitionWidgetDraw.cxx b/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
index 606417ac1ca5..abd55fb0bca0 100644
--- a/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
+++ b/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
@@ -329,8 +329,21 @@ void munchDrawCommands(std::vector<std::shared_ptr<DrawCommand>> const& rDrawCom
                 long nImageWidth = aBitmap.GetSizePixel().Width();
                 long nImageHeight = aBitmap.GetSizePixel().Height();
                 SalTwoRect aTR(0, 0, nImageWidth, nImageHeight, nX, nY, nImageWidth, nImageHeight);
-                rGraphics.DrawBitmap(aTR, *aBitmap.GetBitmap().ImplGetSalBitmap().get(),
-                                     *aBitmap.GetAlpha().ImplGetSalBitmap().get(), nullptr);
+                if (!!aBitmap)
+                {
+                    const std::shared_ptr<SalBitmap> pSalBitmap
+                        = aBitmap.GetBitmap().ImplGetSalBitmap();
+                    if (aBitmap.IsAlpha())
+                    {
+                        const std::shared_ptr<SalBitmap> pSalBitmapAlpha
+                            = aBitmap.GetAlpha().ImplGetSalBitmap();
+                        rGraphics.DrawBitmap(aTR, *pSalBitmap, *pSalBitmapAlpha, nullptr);
+                    }
+                    else
+                    {
+                        rGraphics.DrawBitmap(aTR, *pSalBitmap, nullptr);
+                    }
+                }
             }
             break;
             case DrawCommandType::EXTERNAL:
commit b3783c28b1c2ec26a54e31b43da3cb6a7494eedc
Author:     Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
AuthorDate: Fri Mar 8 08:49:10 2019 +0100
Commit:     Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
CommitDate: Mon Mar 11 12:12:59 2019 +0100

    make it possible to use FileDefinitionWidgetDraw in more backends
    
    Reviewed-on: https://gerrit.libreoffice.org/68898
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>
    (cherry picked from commit a2bf2ca1e3d398db0caa07fce4d135e6dc8b2f27)
    
    Change-Id: I8871eb49e11d8c72c469230967c3c979091a0f9b

diff --git a/vcl/headless/svpgdi.cxx b/vcl/headless/svpgdi.cxx
index 75dd5995c28b..11c6fc1d9589 100644
--- a/vcl/headless/svpgdi.cxx
+++ b/vcl/headless/svpgdi.cxx
@@ -562,12 +562,11 @@ SvpSalGraphics::SvpSalGraphics()
     , m_ePaintMode(PaintMode::Over)
     , m_aTextRenderImpl(*this)
 {
-    bool bFileDefinitionsWidgetDraw = !!getenv("VCL_DRAW_WIDGETS_FROM_FILE");
-
-    if (bFileDefinitionsWidgetDraw)
-        m_pWidgetDraw.reset(new vcl::FileDefinitionWidgetDraw(*this));
-    else if (comphelper::LibreOfficeKit::isActive())
-        m_pWidgetDraw.reset(new vcl::CustomWidgetDraw(*this));
+    if (!initWidgetDrawBackends())
+    {
+        if (comphelper::LibreOfficeKit::isActive())
+            m_pWidgetDraw.reset(new vcl::CustomWidgetDraw(*this));
+    }
 }
 
 SvpSalGraphics::~SvpSalGraphics()
diff --git a/vcl/inc/salgdi.hxx b/vcl/inc/salgdi.hxx
index 557447da2e38..48f18635f778 100644
--- a/vcl/inc/salgdi.hxx
+++ b/vcl/inc/salgdi.hxx
@@ -343,8 +343,7 @@ public:
      * @param [in] ePart The part of the widget.
      * @return true if the platform supports native drawing of the widget type defined by part.
      */
-    virtual bool                IsNativeControlSupported(
-                                    ControlType eType, ControlPart ePart );
+    bool IsSupported(ControlType eType, ControlPart ePart);
 
 
     /**
@@ -438,6 +437,11 @@ public:
 
 #endif // ENABLE_CAIRO_CANVAS
 
+private:
+    bool callGetNativeControlRegion(ControlType nType, ControlPart nPart, const tools::Rectangle& rControlRegion, ControlState nState, const ImplControlValue& aValue, tools::Rectangle &rNativeBoundingRegion, tools::Rectangle &rNativeContentRegion);
+    bool callDrawNativeControl(ControlType nType, ControlPart nPart, const tools::Rectangle& rControlRegion, ControlState nState, const ImplControlValue& aValue, const OUString& rCaption);
+    bool callHitTestNativeControl(ControlType eType, ControlPart nPart, const tools::Rectangle& rControlRegion, const Point& aPos, bool& rIsInside);
+
 protected:
     virtual bool                setClipRegion( const vcl::Region& ) = 0;
 
@@ -526,6 +530,15 @@ protected:
                                     sal_uLong nSize ) = 0;
 
     /**
+     * Query the platform layer for native control support.
+     *
+     * @param [in] eType The widget type.
+     * @param [in] ePart The part of the widget.
+     * @return true if the platform supports native drawing of the widget type defined by part.
+     */
+    virtual bool IsNativeControlSupported(ControlType eType, ControlPart ePart);
+
+    /**
      * Query if a position is inside the native widget part.
      *
      * Mainly used for scrollbars.
@@ -590,6 +603,7 @@ protected:
                                     tools::Rectangle &rNativeBoundingRegion,
                                     tools::Rectangle &rNativeContentRegion );
 
+
     /** Blend the bitmap with the current buffer */
     virtual bool                blendBitmap(
                                     const SalTwoRect&,
@@ -649,6 +663,9 @@ protected:
     /// flags which hold the SetAntialiasing() value from OutputDevice
     bool                        m_bAntiAliasB2DDraw : 1;
 
+    // native controls
+    bool initWidgetDrawBackends(bool bForce = false);
+
     bool hasWidgetDraw()
     {
         return bool(m_pWidgetDraw);
diff --git a/vcl/quartz/salgdi.cxx b/vcl/quartz/salgdi.cxx
index e78bb16e3f4b..d7aa4d279370 100644
--- a/vcl/quartz/salgdi.cxx
+++ b/vcl/quartz/salgdi.cxx
@@ -29,6 +29,7 @@
 #include <osl/process.h>
 #include <rtl/bootstrap.h>
 #include <rtl/strbuf.hxx>
+#include <comphelper/lok.hxx>
 
 #include <vcl/metric.hxx>
 #include <vcl/fontcharmap.hxx>
@@ -227,6 +228,9 @@ AquaSalGraphics::AquaSalGraphics()
         mpTextStyle[i] = nullptr;
         mpFontData[i] = nullptr;
     }
+
+    if (comphelper::LibreOfficeKit::isActive())
+        initWidgetDrawBackends(true);
 }
 
 AquaSalGraphics::~AquaSalGraphics()
diff --git a/vcl/source/gdi/salgdilayout.cxx b/vcl/source/gdi/salgdilayout.cxx
index 18b05f19da37..8b87e9872072 100644
--- a/vcl/source/gdi/salgdilayout.cxx
+++ b/vcl/source/gdi/salgdilayout.cxx
@@ -30,6 +30,7 @@
 #include <salgdi.hxx>
 #include <salframe.hxx>
 #include <basegfx/numeric/ftools.hxx> //for F_PI180
+#include <FileDefinitionWidgetDraw.hxx>
 
 // The only common SalFrame method
 
@@ -57,6 +58,18 @@ SalGraphics::SalGraphics()
         m_nLayout = SalLayoutFlags::BiDiRtl;
 }
 
+bool SalGraphics::initWidgetDrawBackends(bool bForce)
+{
+    bool bFileDefinitionsWidgetDraw = !!getenv("VCL_DRAW_WIDGETS_FROM_FILE");
+
+    if (bFileDefinitionsWidgetDraw || bForce)
+    {
+        m_pWidgetDraw.reset(new vcl::FileDefinitionWidgetDraw(*this));
+        return true;
+    }
+    return false;
+}
+
 SalGraphics::~SalGraphics()
 {
 }
@@ -640,6 +653,22 @@ bool SalGraphics::DrawEPS( long nX, long nY, long nWidth, long nHeight, void* pP
     return drawEPS( nX, nY, nWidth, nHeight,  pPtr, nSize );
 }
 
+bool SalGraphics::IsSupported(ControlType eType, ControlPart ePart)
+{
+    if (m_pWidgetDraw)
+        return m_pWidgetDraw->isNativeControlSupported(eType, ePart);
+    else
+        return IsNativeControlSupported(eType, ePart);
+}
+
+bool SalGraphics::callHitTestNativeControl(ControlType eType, ControlPart nPart, const tools::Rectangle& rControlRegion, const Point& aPos, bool& rIsInside)
+{
+    if (m_pWidgetDraw)
+        return m_pWidgetDraw->hitTestNativeControl(eType, nPart, rControlRegion, aPos, rIsInside);
+    else
+        return hitTestNativeControl(eType, nPart, rControlRegion, aPos, rIsInside);
+}
+
 bool SalGraphics::HitTestNativeScrollbar( ControlPart nPart, const tools::Rectangle& rControlRegion,
                                                 const Point& aPos, bool& rIsInside, const OutputDevice *pOutDev )
 {
@@ -649,10 +678,10 @@ bool SalGraphics::HitTestNativeScrollbar( ControlPart nPart, const tools::Rectan
         tools::Rectangle rgn( rControlRegion );
         mirror( pt.X(), pOutDev );
         mirror( rgn, pOutDev );
-        return hitTestNativeControl( ControlType::Scrollbar, nPart, rgn, pt, rIsInside );
+        return callHitTestNativeControl( ControlType::Scrollbar, nPart, rgn, pt, rIsInside );
     }
     else
-        return hitTestNativeControl( ControlType::Scrollbar, nPart, rControlRegion, aPos, rIsInside );
+        return callHitTestNativeControl( ControlType::Scrollbar, nPart, rControlRegion, aPos, rIsInside );
 }
 
 void SalGraphics::mirror( ImplControlValue& rVal, const OutputDevice* pOutDev ) const
@@ -691,9 +720,17 @@ void SalGraphics::mirror( ImplControlValue& rVal, const OutputDevice* pOutDev )
     }
 }
 
+bool SalGraphics::callDrawNativeControl(ControlType nType, ControlPart nPart, const tools::Rectangle& rControlRegion, ControlState nState, const ImplControlValue& aValue, const OUString& rCaption)
+{
+    if (m_pWidgetDraw)
+        return m_pWidgetDraw->drawNativeControl(nType, nPart, rControlRegion, nState, aValue, rCaption);
+    else
+        return drawNativeControl(nType, nPart, rControlRegion, nState, aValue, rCaption);
+}
+
 bool SalGraphics::DrawNativeControl( ControlType nType, ControlPart nPart, const tools::Rectangle& rControlRegion,
                                                 ControlState nState, const ImplControlValue& aValue,
-                                                const OUString& aCaption, const OutputDevice *pOutDev )
+                                                const OUString& aCaption, const OutputDevice *pOutDev)
 {
     if( (m_nLayout & SalLayoutFlags::BiDiRtl) || (pOutDev && pOutDev->IsRTLEnabled()) )
     {
@@ -703,11 +740,19 @@ bool SalGraphics::DrawNativeControl( ControlType nType, ControlPart nPart, const
             mirror(rgn, pOutDev);
         std::unique_ptr< ImplControlValue > mirrorValue( aValue.clone());
         mirror( *mirrorValue, pOutDev );
-        bool bRet = drawNativeControl( nType, nPart, rgn, nState, *mirrorValue, aCaption );
+        bool bRet = callDrawNativeControl(nType, nPart, rgn, nState, *mirrorValue, aCaption);
         return bRet;
     }
     else
-        return drawNativeControl( nType, nPart, rControlRegion, nState, aValue, aCaption );
+        return callDrawNativeControl(nType, nPart, rControlRegion, nState, aValue, aCaption);
+}
+
+bool SalGraphics::callGetNativeControlRegion(ControlType nType, ControlPart nPart, const tools::Rectangle& rControlRegion, ControlState nState, const ImplControlValue& aValue, tools::Rectangle &rNativeBoundingRegion, tools::Rectangle &rNativeContentRegion)
+{
+    if (m_pWidgetDraw)
+        return m_pWidgetDraw->getNativeControlRegion(nType, nPart, rControlRegion, nState, aValue, OUString(), rNativeBoundingRegion, rNativeContentRegion);
+    else
+        return getNativeControlRegion(nType, nPart, rControlRegion, nState, aValue, OUString(), rNativeBoundingRegion, rNativeContentRegion);
 }
 
 bool SalGraphics::GetNativeControlRegion( ControlType nType, ControlPart nPart, const tools::Rectangle& rControlRegion, ControlState nState,
@@ -720,8 +765,7 @@ bool SalGraphics::GetNativeControlRegion( ControlType nType, ControlPart nPart,
         mirror( rgn, pOutDev );
         std::unique_ptr< ImplControlValue > mirrorValue( aValue.clone());
         mirror( *mirrorValue, pOutDev );
-        if( getNativeControlRegion( nType, nPart, rgn, nState, *mirrorValue, OUString(),
-                                                rNativeBoundingRegion, rNativeContentRegion ) )
+        if (callGetNativeControlRegion(nType, nPart, rgn, nState, *mirrorValue, rNativeBoundingRegion, rNativeContentRegion))
         {
             mirror( rNativeBoundingRegion, pOutDev, true );
             mirror( rNativeContentRegion, pOutDev, true );
@@ -730,8 +774,7 @@ bool SalGraphics::GetNativeControlRegion( ControlType nType, ControlPart nPart,
         return false;
     }
     else
-        return getNativeControlRegion( nType, nPart, rControlRegion, nState, aValue, OUString(),
-                                                rNativeBoundingRegion, rNativeContentRegion );
+        return callGetNativeControlRegion(nType, nPart, rControlRegion, nState, aValue, rNativeBoundingRegion, rNativeContentRegion);
 }
 
 bool SalGraphics::BlendBitmap( const SalTwoRect& rPosAry,
diff --git a/vcl/source/outdev/nativecontrols.cxx b/vcl/source/outdev/nativecontrols.cxx
index 81acddfe2f12..234259f0d6f2 100644
--- a/vcl/source/outdev/nativecontrols.cxx
+++ b/vcl/source/outdev/nativecontrols.cxx
@@ -163,7 +163,7 @@ bool OutputDevice::IsNativeControlSupported( ControlType nType, ControlPart nPar
         if ( !AcquireGraphics() )
             return false;
 
-    return mpGraphics->IsNativeControlSupported(nType, nPart);
+    return mpGraphics->IsSupported(nType, nPart);
 }
 
 bool OutputDevice::HitTestNativeScrollbar(
diff --git a/vcl/unx/gtk/salnativewidgets-gtk.cxx b/vcl/unx/gtk/salnativewidgets-gtk.cxx
index 313af6cc0518..7592ecee34ba 100644
--- a/vcl/unx/gtk/salnativewidgets-gtk.cxx
+++ b/vcl/unx/gtk/salnativewidgets-gtk.cxx
@@ -70,6 +70,8 @@ GtkSalGraphics::GtkSalGraphics( GtkSalFrame *pFrame, GtkWidget *pWindow,
       m_aClipRegion(true)
 {
     Init( pFrame, GDK_WINDOW_XID( widget_get_window( pWindow ) ), nXScreen );
+
+    initWidgetDrawBackends();
 }
 
 GtkSalGraphics::~GtkSalGraphics()
commit b6eeacd7da8f83ae8825809cc634c86be494e84e
Author:     Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
AuthorDate: Thu Mar 7 14:20:31 2019 +0100
Commit:     Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
CommitDate: Mon Mar 11 12:12:59 2019 +0100

    don't need "spinbox-entire" svg anymore
    
    Change-Id: I8385acf7ecd46b7c8b990abb688bd2ddddcb6bc5
    Reviewed-on: https://gerrit.libreoffice.org/68867
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>
    (cherry picked from commit c8919fcbcb2d112b79c60d8b2c404da5606f82bd)

diff --git a/vcl/Package_theme_definitions.mk b/vcl/Package_theme_definitions.mk
index 9c75aa34ba7b..0ca04e765039 100644
--- a/vcl/Package_theme_definitions.mk
+++ b/vcl/Package_theme_definitions.mk
@@ -31,7 +31,6 @@ $(eval $(call gb_Package_add_files,vcl_theme_definitions,$(LIBO_SHARE_FOLDER)/th
 	spinbox-right-pressed.svgx \
 	spinbox-right-rollover.svgx \
 	spinbox-right-disabled.svgx \
-	spinbox-entire.svgx \
 	common-rect.svgx \
 	common-rect-disabled.svgx \
 	pushbutton-default.svgx \
diff --git a/vcl/uiconfig/theme_definitions/spinbox-entire.svgx b/vcl/uiconfig/theme_definitions/spinbox-entire.svgx
deleted file mode 100644
index 24a3b12c2d58..000000000000
--- a/vcl/uiconfig/theme_definitions/spinbox-entire.svgx
+++ /dev/null
@@ -1,3 +0,0 @@
-<svg version="1.1" viewBox="0 0 44 26" xmlns="http://www.w3.org/2000/svg">
- <rect x=".5" y=".5" width="43" height="25" rx="2" ry="2" fill="#fff" stroke="#007aff"/>
-</svg>
commit ecf3e40777f4f1aa61ab272fba8fb58c93610c6d
Author:     Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
AuthorDate: Thu Mar 7 14:16:34 2019 +0100
Commit:     Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
CommitDate: Mon Mar 11 12:12:59 2019 +0100

    widget theme - update editbox, draw from svg
    
    Change-Id: I0dfdaaf74c9b31ecd9b1de511b48dacf2e90f59f
    Reviewed-on: https://gerrit.libreoffice.org/68866
    Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>
    Tested-by: Tomaž Vajngerl <quikee at gmail.com>
    (cherry picked from commit 27b43f1dc45d7f3bec99ccbdc96e334c7f967fbc)

diff --git a/vcl/source/gdi/FileDefinitionWidgetDraw.cxx b/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
index 54aa111431d9..606417ac1ca5 100644
--- a/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
+++ b/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
@@ -701,8 +701,12 @@ bool FileDefinitionWidgetDraw::getNativeControlRegion(
         case ControlType::EditboxNoBorder:
         case ControlType::MultilineEditbox:
         {
-            rNativeBoundingRegion = rBoundingControlRegion;
-            rNativeContentRegion = rBoundingControlRegion;
+            //auto const& pPart = m_aWidgetDefinition.getDefinition(eType, ControlPart::Entire);
+
+            Size aSize(rBoundingControlRegion.GetWidth(),
+                       std::max(rBoundingControlRegion.GetHeight(), 32L));
+            rNativeContentRegion = tools::Rectangle(aLocation, aSize);
+            rNativeBoundingRegion = rNativeContentRegion;
             return true;
         }
         break;
diff --git a/vcl/uiconfig/theme_definitions/definition.xml b/vcl/uiconfig/theme_definitions/definition.xml
index 8c9b1af285d9..0a6f696320b5 100644
--- a/vcl/uiconfig/theme_definitions/definition.xml
+++ b/vcl/uiconfig/theme_definitions/definition.xml
@@ -148,9 +148,11 @@
 
     <editbox>
         <part value="Entire">
-            <state>
-                <rect stroke="#FFFFFF" fill="#FFFFFF" stroke-width="1" rx="1" ry="1" />
-                <line stroke="#C7C7C7" stroke-width="2" x1="0.0" y1="0.9" x2="1.0" y2="0.9"/>
+            <state enabled="true">
+                <external source="common-rect.svgx" />
+            </state>
+            <state enabled="false">
+                <external source="common-rect-disabled.svgx" />
             </state>
         </part>
     </editbox>
commit fffd40985797d80b4c46591a1f9888cf7aa12da4
Author:     Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
AuthorDate: Thu Mar 7 14:10:24 2019 +0100
Commit:     Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
CommitDate: Mon Mar 11 12:12:58 2019 +0100

    widget theme - update combobox/listbox, draw from svg
    
    Change-Id: Ie5e28883d70ad61340c58bcacd8c2ffb2ced1536
    Reviewed-on: https://gerrit.libreoffice.org/68865
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>
    (cherry picked from commit ce4c486456673e475cb0ae932bc706a7130d21f5)

diff --git a/vcl/Package_theme_definitions.mk b/vcl/Package_theme_definitions.mk
index b51f60555165..9c75aa34ba7b 100644
--- a/vcl/Package_theme_definitions.mk
+++ b/vcl/Package_theme_definitions.mk
@@ -32,6 +32,8 @@ $(eval $(call gb_Package_add_files,vcl_theme_definitions,$(LIBO_SHARE_FOLDER)/th
 	spinbox-right-rollover.svgx \
 	spinbox-right-disabled.svgx \
 	spinbox-entire.svgx \
+	common-rect.svgx \
+	common-rect-disabled.svgx \
 	pushbutton-default.svgx \
 	pushbutton-rollover.svgx \
 	tabitem-first.svgx \
@@ -42,6 +44,8 @@ $(eval $(call gb_Package_add_files,vcl_theme_definitions,$(LIBO_SHARE_FOLDER)/th
 	tabitem-last-selected.svgx \
 	scrollbar-horizontal.svgx \
 	scrollbar-vertical.svgx \
+	combobox.svgx \
+	combobox-disabled.svgx \
 ))
 
 # vim: set noet sw=4 ts=4:
diff --git a/vcl/source/gdi/FileDefinitionWidgetDraw.cxx b/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
index 0067fed75954..54aa111431d9 100644
--- a/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
+++ b/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
@@ -723,6 +723,40 @@ bool FileDefinitionWidgetDraw::getNativeControlRegion(
             }
         }
         break;
+        case ControlType::Combobox:
+        case ControlType::Listbox:
+        {
+            auto const& pPart = m_aWidgetDefinition.getDefinition(eType, ControlPart::ButtonDown);
+            Size aComboButtonSize(pPart->mnWidth, pPart->mnHeight);
+
+            if (ePart == ControlPart::ButtonDown)
+            {
+                Point aPoint(aLocation.X() + rBoundingControlRegion.GetWidth()
+                                 - aComboButtonSize.Width(),
+                             aLocation.Y());
+                rNativeContentRegion = tools::Rectangle(aPoint, aComboButtonSize);
+                rNativeBoundingRegion = rNativeContentRegion;
+                return true;
+            }
+            else if (ePart == ControlPart::SubEdit)
+            {
+                Size aSize(rBoundingControlRegion.GetWidth() - aComboButtonSize.Width(),
+                           aComboButtonSize.Height());
+                rNativeContentRegion = tools::Rectangle(aLocation, aSize);
+                rNativeContentRegion.expand(1);
+                rNativeBoundingRegion = rNativeContentRegion;
+                return true;
+            }
+            else if (ePart == ControlPart::Entire)
+            {
+                Size aSize(rBoundingControlRegion.GetWidth(), aComboButtonSize.Height());
+                rNativeContentRegion = tools::Rectangle(aLocation, aSize);
+                rNativeBoundingRegion = rNativeContentRegion;
+                rNativeBoundingRegion.expand(1);
+                return true;
+            }
+        }
+        break;
 
         default:
             break;
diff --git a/vcl/uiconfig/theme_definitions/combobox-disabled.svgx b/vcl/uiconfig/theme_definitions/combobox-disabled.svgx
new file mode 100644
index 000000000000..ccb892d77f90
--- /dev/null
+++ b/vcl/uiconfig/theme_definitions/combobox-disabled.svgx
@@ -0,0 +1,4 @@
+<svg version="1.1" viewBox="0 0 35 36" xmlns="http://www.w3.org/2000/svg">
+ <path d="m6.8098e-4 -4e-7v1.2272l-6.8092e-4 33.546v1.2272h33.75c0.68524 0 1.2499-0.55442 1.2499-1.2272v-33.546c0-0.67283-0.56468-1.2272-1.2499-1.2272z" fill="#8e8e93"/>
+ <path d="m17.5 19.091-4.6667-5.0907-1.3333 1.4546 6 6.5454 6-6.5454-1.3333-1.4546z" fill="#f5f5f5"/>
+</svg>
diff --git a/vcl/uiconfig/theme_definitions/combobox.svgx b/vcl/uiconfig/theme_definitions/combobox.svgx
new file mode 100644
index 000000000000..b4a1627f3882
--- /dev/null
+++ b/vcl/uiconfig/theme_definitions/combobox.svgx
@@ -0,0 +1,4 @@
+<svg version="1.1" viewBox="0 0 35 36" xmlns="http://www.w3.org/2000/svg">
+ <path d="m6.8098e-4 -4e-7v1.2272l-6.8092e-4 33.546v1.2272h33.75c0.68524 0 1.2499-0.55442 1.2499-1.2272v-33.546c0-0.67283-0.56468-1.2272-1.2499-1.2272z" fill="#0273f8"/>
+ <path d="m17.5 19.091-4.6667-5.0907-1.3333 1.4546 6 6.5454 6-6.5454-1.3333-1.4546z" fill="#f5f5f5"/>
+</svg>
diff --git a/vcl/uiconfig/theme_definitions/common-rect-disabled.svgx b/vcl/uiconfig/theme_definitions/common-rect-disabled.svgx
new file mode 100644
index 000000000000..e4c1f63599d7
--- /dev/null
+++ b/vcl/uiconfig/theme_definitions/common-rect-disabled.svgx
@@ -0,0 +1,3 @@
+<svg version="1.1" viewBox="0 0 44 26" xmlns="http://www.w3.org/2000/svg">
+ <rect x=".5" y=".5" width="43" height="25" rx="2" ry="2" fill="#fff" stroke="#8e8e93"/>
+</svg>
diff --git a/vcl/uiconfig/theme_definitions/common-rect.svgx b/vcl/uiconfig/theme_definitions/common-rect.svgx
new file mode 100644
index 000000000000..24a3b12c2d58
--- /dev/null
+++ b/vcl/uiconfig/theme_definitions/common-rect.svgx
@@ -0,0 +1,3 @@
+<svg version="1.1" viewBox="0 0 44 26" xmlns="http://www.w3.org/2000/svg">
+ <rect x=".5" y=".5" width="43" height="25" rx="2" ry="2" fill="#fff" stroke="#007aff"/>
+</svg>
diff --git a/vcl/uiconfig/theme_definitions/definition.xml b/vcl/uiconfig/theme_definitions/definition.xml
index 99df7524b8d2..8c9b1af285d9 100644
--- a/vcl/uiconfig/theme_definitions/definition.xml
+++ b/vcl/uiconfig/theme_definitions/definition.xml
@@ -124,24 +124,24 @@
 
     <combobox>
         <part value="Entire">
-            <state>
-                <external source="spinbox-entire.svgx" />
+            <state enabled="true">
+                <external source="common-rect.svgx" />
+            </state>
+            <state enabled="false">
+                <external source="common-rect-disabled.svgx" />
             </state>
         </part>
         <part value="SubEdit">
             <state>
             </state>
         </part>
-        <part value="ButtonUp">
-            <state>
-                <line stroke="#C7C7C7" stroke-width="4" x1="0.2" y1="0.6" x2="0.5" y2="0.4"/>
-                <line stroke="#C7C7C7" stroke-width="4" x1="0.5" y1="0.4" x2="0.8" y2="0.6"/>
+
+        <part value="ButtonDown" width="35" height="36">
+            <state enabled="true">
+                <image source="combobox.svgx" />
             </state>
-        </part>
-        <part value="ButtonDown">
-            <state>
-                <line stroke="#C7C7C7" stroke-width="4" x1="0.2" y1="0.4" x2="0.5" y2="0.6"/>
-                <line stroke="#C7C7C7" stroke-width="4" x1="0.5" y1="0.6" x2="0.8" y2="0.4"/>
+            <state enabled="false">
+                <image source="combobox-disabled.svgx" />
             </state>
         </part>
     </combobox>
@@ -157,8 +157,11 @@
 
     <listbox>
         <part value="Entire">
-            <state>
-                <rect stroke="#007AFF" fill="#FFFFFF" stroke-width="1" rx="1" ry="1" />
+            <state enabled="true">
+                <external source="common-rect.svgx" />
+            </state>
+            <state enabled="false">
+                <external source="common-rect-disabled.svgx" />
             </state>
         </part>
         <part value="ListboxWindow">
@@ -166,21 +169,20 @@
                 <rect stroke="#007AFF" fill="#FFFFFF" stroke-width="1" rx="1" ry="1" />
             </state>
         </part>
-        <part value="Focus">
+        <part value="SubEdit">
             <state>
-                <rect stroke="#007AFF" fill="#FFFFFF" stroke-width="1" rx="1" ry="1" />
             </state>
         </part>
-        <part value="ButtonUp">
-            <state>
-                <line stroke="#007AFF" stroke-width="4" x1="0.2" y1="0.6" x2="0.5" y2="0.4"/>
-                <line stroke="#007AFF" stroke-width="4" x1="0.5" y1="0.4" x2="0.8" y2="0.6"/>
+        <part value="ButtonDown" width="35" height="36">
+            <state enabled="true">
+                <image source="combo.svgx" />
+            </state>
+            <state enabled="false">
+                <image source="combo-disabled.svgx" />
             </state>
         </part>
-        <part value="ButtonDown">
+        <part value="Focus">
             <state>
-                <line stroke="#007AFF" stroke-width="4" x1="0.2" y1="0.4" x2="0.5" y2="0.6"/>
-                <line stroke="#007AFF" stroke-width="4" x1="0.5" y1="0.6" x2="0.8" y2="0.4"/>
             </state>
         </part>
     </listbox>

... etc. - the rest is truncated


More information about the Libreoffice-commits mailing list