[Libreoffice-commits] core.git: 5 commits - include/svx include/vcl svx/source svx/uiconfig sw/inc sw/source vcl/source

Tomaž Vajngerl tomaz.vajngerl at collabora.co.uk
Sat May 23 02:56:19 PDT 2015


 include/svx/compressgraphicdialog.hxx       |    3 
 include/vcl/dockingarea.hxx                 |    1 
 include/vcl/fixed.hxx                       |   13 +
 include/vcl/lstbox.hxx                      |    1 
 include/vcl/slider.hxx                      |   10 +
 svx/source/dialog/compressgraphicdialog.cxx |    8 
 svx/uiconfig/ui/compressgraphicdialog.ui    |   97 ++++++----
 sw/inc/crsrsh.hxx                           |    2 
 sw/inc/viewsh.hxx                           |    6 
 sw/source/core/crsr/crsrsh.cxx              |    4 
 sw/source/core/view/pagepreviewlayout.cxx   |    6 
 sw/source/core/view/viewsh.cxx              |   21 +-
 sw/source/core/view/vprint.cxx              |    2 
 sw/source/uibase/docvw/edtwin2.cxx          |    4 
 vcl/source/control/ctrl.cxx                 |   23 --
 vcl/source/control/fixed.cxx                |  249 +++++++++++++---------------
 vcl/source/control/lstbox.cxx               |    6 
 vcl/source/control/slider.cxx               |   43 ++++
 vcl/source/window/dockingarea.cxx           |   86 ++++-----
 vcl/source/window/paint.cxx                 |   11 -
 20 files changed, 333 insertions(+), 263 deletions(-)

New commits:
commit a39a4c750171e77266391c419fcc0acc67028571
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
Date:   Sat May 23 18:53:12 2015 +0900

    use sliders in CompressGraphicDialog
    
    Change-Id: I272d0f9d56a601b78cbc3e67ff1f87db964d5ccd

diff --git a/include/svx/compressgraphicdialog.hxx b/include/svx/compressgraphicdialog.hxx
index cf0c2ac..d933405 100644
--- a/include/svx/compressgraphicdialog.hxx
+++ b/include/svx/compressgraphicdialog.hxx
@@ -25,6 +25,7 @@
 #include <vcl/graph.hxx>
 #include <vcl/lstbox.hxx>
 #include <vcl/field.hxx>
+#include <vcl/slider.hxx>
 #include <sfx2/bindings.hxx>
 #include <svx/svxdllapi.h>
 
@@ -46,7 +47,9 @@ private:
     VclPtr<RadioButton>     m_pLosslessRB;
     VclPtr<RadioButton>     m_pJpegCompRB;
     VclPtr<NumericField>    m_pCompressionMF;
+    VclPtr<Slider>          m_pCompressionSlider;
     VclPtr<NumericField>    m_pQualityMF;
+    VclPtr<Slider>          m_pQualitySlider;
     VclPtr<PushButton>      m_pBtnCalculate;
     VclPtr<ListBox>         m_pInterpolationCombo;
 
diff --git a/svx/source/dialog/compressgraphicdialog.cxx b/svx/source/dialog/compressgraphicdialog.cxx
index 48f763a..43656af 100644
--- a/svx/source/dialog/compressgraphicdialog.cxx
+++ b/svx/source/dialog/compressgraphicdialog.cxx
@@ -97,8 +97,10 @@ void CompressGraphicsDialog::Initialize()
     get(m_pFixedText6,          "label-new-capacity");
     get(m_pJpegCompRB,          "radio-jpeg");
     get(m_pCompressionMF,       "spin-compression");
+    get(m_pCompressionSlider,   "scale-compression");
     get(m_pLosslessRB,          "radio-lossless");
     get(m_pQualityMF,           "spin-quality");
+    get(m_pQualitySlider,       "scale-quality");
     get(m_pReduceResolutionCB,  "checkbox-reduce-resolution");
     get(m_pMFNewWidth,          "spin-new-width");
     get(m_pMFNewHeight,         "spin-new-height");
@@ -119,6 +121,9 @@ void CompressGraphicsDialog::Initialize()
 
     m_pReduceResolutionCB->SetToggleHdl( LINK( this, CompressGraphicsDialog, ToggleReduceResolutionRB ) );
 
+    m_pQualitySlider->SetLinkedField(m_pQualityMF);
+    m_pCompressionSlider->SetLinkedField(m_pCompressionMF);
+
     m_pJpegCompRB->Check();
     m_pReduceResolutionCB->Check();
 
@@ -318,8 +323,9 @@ IMPL_LINK_NOARG( CompressGraphicsDialog, ToggleCompressionRB )
 {
     bool choice = m_pLosslessRB->IsChecked();
     m_pCompressionMF->Enable(choice);
+    m_pCompressionSlider->Enable(choice);
     m_pQualityMF->Enable(!choice);
-
+    m_pQualitySlider->Enable(!choice);
     return 0L;
 }
 
diff --git a/svx/uiconfig/ui/compressgraphicdialog.ui b/svx/uiconfig/ui/compressgraphicdialog.ui
index 32962b7..fc97332 100644
--- a/svx/uiconfig/ui/compressgraphicdialog.ui
+++ b/svx/uiconfig/ui/compressgraphicdialog.ui
@@ -179,7 +179,6 @@
                             <property name="visible">True</property>
                             <property name="can_focus">False</property>
                             <property name="margin_left">12</property>
-                            <property name="hexpand">True</property>
                             <property name="xalign">1</property>
                             <property name="label" translatable="yes">Width:</property>
                             <property name="use_underline">True</property>
@@ -208,7 +207,6 @@
                             <property name="visible">True</property>
                             <property name="can_focus">False</property>
                             <property name="margin_left">12</property>
-                            <property name="hexpand">True</property>
                             <property name="xalign">1</property>
                             <property name="label" translatable="yes">Height:</property>
                             <property name="use_underline">True</property>
@@ -241,7 +239,6 @@
                             <property name="visible">True</property>
                             <property name="can_focus">False</property>
                             <property name="margin_left">12</property>
-                            <property name="hexpand">True</property>
                             <property name="xalign">1</property>
                             <property name="label" translatable="yes">Resolution:</property>
                             <property name="use_underline">True</property>
@@ -296,11 +293,9 @@
                             <property name="visible">True</property>
                             <property name="can_focus">False</property>
                             <property name="margin_left">12</property>
-                            <property name="hexpand">True</property>
                             <property name="xalign">1</property>
                             <property name="label" translatable="yes">Quality:</property>
                             <property name="use_underline">True</property>
-                            <property name="mnemonic_widget">spin-quality</property>
                             <property name="width_chars">15</property>
                           </object>
                           <packing>
@@ -313,11 +308,9 @@
                             <property name="visible">True</property>
                             <property name="can_focus">False</property>
                             <property name="margin_left">12</property>
-                            <property name="hexpand">True</property>
                             <property name="xalign">1</property>
                             <property name="label" translatable="yes">Compression:</property>
                             <property name="use_underline">True</property>
-                            <property name="mnemonic_widget">spin-compression</property>
                             <property name="width_chars">15</property>
                           </object>
                           <packing>
@@ -326,37 +319,10 @@
                           </packing>
                         </child>
                         <child>
-                          <object class="GtkSpinButton" id="spin-quality">
-                            <property name="visible">True</property>
-                            <property name="can_focus">True</property>
-                            <property name="invisible_char">•</property>
-                            <property name="adjustment">quality-adjustment</property>
-                            <property name="numeric">True</property>
-                          </object>
-                          <packing>
-                            <property name="left_attach">1</property>
-                            <property name="top_attach">1</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkSpinButton" id="spin-compression">
-                            <property name="visible">True</property>
-                            <property name="can_focus">True</property>
-                            <property name="invisible_char">•</property>
-                            <property name="adjustment">compression-adjustment</property>
-                            <property name="numeric">True</property>
-                          </object>
-                          <packing>
-                            <property name="left_attach">1</property>
-                            <property name="top_attach">3</property>
-                          </packing>
-                        </child>
-                        <child>
                           <object class="GtkLabel" id="label12">
                             <property name="visible">True</property>
                             <property name="can_focus">False</property>
                             <property name="margin_left">12</property>
-                            <property name="hexpand">True</property>
                             <property name="xalign">1</property>
                             <property name="label" translatable="yes">Interpolation:</property>
                             <property name="use_underline">True</property>
@@ -416,10 +382,65 @@
                           </packing>
                         </child>
                         <child>
-                          <placeholder/>
+                          <object class="GtkSpinButton" id="spin-compression">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="invisible_char">•</property>
+                            <property name="adjustment">compression-adjustment</property>
+                            <property name="numeric">True</property>
+                          </object>
+                          <packing>
+                            <property name="left_attach">1</property>
+                            <property name="top_attach">3</property>
+                          </packing>
                         </child>
                         <child>
-                          <placeholder/>
+                          <object class="GtkSpinButton" id="spin-quality">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="invisible_char">•</property>
+                            <property name="adjustment">quality-adjustment</property>
+                            <property name="numeric">True</property>
+                          </object>
+                          <packing>
+                            <property name="left_attach">1</property>
+                            <property name="top_attach">1</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkScale" id="scale-quality">
+                            <property name="width_request">100</property>
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="hexpand">True</property>
+                            <property name="adjustment">quality-adjustment</property>
+                            <property name="fill_level">99</property>
+                            <property name="round_digits">0</property>
+                            <property name="digits">0</property>
+                            <property name="draw_value">False</property>
+                            <property name="value_pos">right</property>
+                          </object>
+                          <packing>
+                            <property name="left_attach">2</property>
+                            <property name="top_attach">1</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkScale" id="scale-compression">
+                            <property name="width_request">200</property>
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="adjustment">compression-adjustment</property>
+                            <property name="fill_level">9</property>
+                            <property name="round_digits">0</property>
+                            <property name="digits">0</property>
+                            <property name="draw_value">False</property>
+                            <property name="value_pos">right</property>
+                          </object>
+                          <packing>
+                            <property name="left_attach">2</property>
+                            <property name="top_attach">3</property>
+                          </packing>
                         </child>
                         <child>
                           <placeholder/>
@@ -440,7 +461,7 @@
                 </child>
               </object>
               <packing>
-                <property name="expand">False</property>
+                <property name="expand">True</property>
                 <property name="fill">True</property>
                 <property name="position">0</property>
               </packing>
@@ -628,7 +649,7 @@
                 </child>
               </object>
               <packing>
-                <property name="expand">False</property>
+                <property name="expand">True</property>
                 <property name="fill">True</property>
                 <property name="position">1</property>
               </packing>
commit ef934abf7d222035e4261474c322de603bd001da
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
Date:   Sat May 23 18:50:55 2015 +0900

    support linking a Slider with a NumericField
    
    Change-Id: I5cfd28d278cc21884eb9bf1b0e5a619c871f6bd2

diff --git a/include/vcl/slider.hxx b/include/vcl/slider.hxx
index a3d3fdbe..9a96f3a 100644
--- a/include/vcl/slider.hxx
+++ b/include/vcl/slider.hxx
@@ -23,6 +23,7 @@
 #include <vcl/dllapi.h>
 #include <vcl/ctrl.hxx>
 #include <vcl/scrbar.hxx>
+#include <vcl/field.hxx>
 
 class VCL_DLLPUBLIC Slider : public Control
 {
@@ -51,9 +52,14 @@ private:
     ScrollType      meScrollType;
     bool            mbCalcSize;
     bool            mbFullDrag;
+
+    NumericField*   mpLinkedField;
+
     Link<>          maSlideHdl;
     Link<>          maEndSlideHdl;
 
+    DECL_LINK(LinkedFieldModifyHdl, NumericField*);
+
     using Control::ImplInitSettings;
     using Window::ImplInit;
     SAL_DLLPRIVATE void ImplInit( vcl::Window* pParent, WinBits nStyle );
@@ -70,6 +76,8 @@ private:
     SAL_DLLPRIVATE void ImplDoMouseAction( const Point& rPos, bool bCallAction = true );
     SAL_DLLPRIVATE long ImplDoSlide( long nNewPos );
     SAL_DLLPRIVATE long ImplDoSlideAction( ScrollType eScrollType );
+    SAL_DLLPRIVATE void ImplSetFieldLink(const Link<>& rLink);
+    SAL_DLLPRIVATE void ImplUpdateLinkedField();
 
 public:
                     Slider( vcl::Window* pParent, WinBits nStyle = WB_HORZ );
@@ -108,6 +116,8 @@ public:
 
     Size            CalcWindowSizePixel();
 
+    void            SetLinkedField(NumericField* pField);
+
     void            SetSlideHdl( const Link<>& rLink ) { maSlideHdl = rLink; }
     const Link<>&   GetSlideHdl() const { return maSlideHdl;    }
     void            SetEndSlideHdl( const Link<>& rLink ) { maEndSlideHdl = rLink; }
diff --git a/vcl/source/control/slider.cxx b/vcl/source/control/slider.cxx
index fb566e8..4aa94ad 100644
--- a/vcl/source/control/slider.cxx
+++ b/vcl/source/control/slider.cxx
@@ -68,6 +68,8 @@ void Slider::ImplInit( vcl::Window* pParent, WinBits nStyle )
     mbCalcSize          = true;
     mbFullDrag          = true;
 
+    mpLinkedField       = nullptr;
+
     Control::ImplInit( pParent, nStyle, NULL );
 
     ImplInitSettings();
@@ -75,7 +77,7 @@ void Slider::ImplInit( vcl::Window* pParent, WinBits nStyle )
 }
 
 Slider::Slider( vcl::Window* pParent, WinBits nStyle ) :
-    Control( WINDOW_SLIDER )
+    Control(WINDOW_SLIDER)
 {
     ImplInit( pParent, nStyle );
 }
@@ -211,6 +213,34 @@ void Slider::ImplUpdateRects( bool bUpdate )
     }
 }
 
+void Slider::ImplSetFieldLink(const Link<>& rLink)
+{
+    if (mpLinkedField != nullptr)
+    {
+        mpLinkedField->SetModifyHdl(rLink);
+        mpLinkedField->SetUpHdl(rLink);
+        mpLinkedField->SetDownHdl(rLink);
+        mpLinkedField->SetFirstHdl(rLink);
+        mpLinkedField->SetLastHdl(rLink);
+        mpLinkedField->SetLoseFocusHdl(rLink);
+    }
+}
+
+void Slider::ImplUpdateLinkedField()
+{
+    if (mpLinkedField)
+        mpLinkedField->SetValue(mnThumbPos);
+}
+
+IMPL_LINK(Slider, LinkedFieldModifyHdl, NumericField*, pField)
+{
+    if (pField)
+    {
+        SetThumbPos(pField->GetValue());
+    }
+    return 0;
+}
+
 long Slider::ImplCalcThumbPos( long nPixPos )
 {
     // calculate position
@@ -762,6 +792,7 @@ void Slider::Tracking( const TrackingEvent& rTEvt )
                 {
                     ImplUpdateRects();
                     Update();
+                    ImplUpdateLinkedField();
                     if ( mbFullDrag && (nOldPos != mnThumbPos) )
                     {
                         mnDelta = mnThumbPos-nOldPos;
@@ -839,6 +870,13 @@ void Slider::Resize()
     Invalidate();
 }
 
+void Slider::SetLinkedField(NumericField* pField)
+{
+    ImplSetFieldLink(Link<>());
+    mpLinkedField = pField;
+    ImplSetFieldLink(LINK(this, Slider, LinkedFieldModifyHdl));
+}
+
 void Slider::RequestHelp( const HelpEvent& rHEvt )
 {
     Control::RequestHelp( rHEvt );
@@ -947,7 +985,7 @@ void Slider::SetRange( const Range& rRange )
             mnThumbPos = mnMaxRange;
         if ( mnThumbPos < mnMinRange )
             mnThumbPos = mnMinRange;
-
+        ImplUpdateLinkedField();
         StateChanged( StateChangedType::Data );
     }
 }
@@ -962,6 +1000,7 @@ void Slider::SetThumbPos( long nNewThumbPos )
     if ( mnThumbPos != nNewThumbPos )
     {
         mnThumbPos = nNewThumbPos;
+        ImplUpdateLinkedField();
         StateChanged( StateChangedType::Data );
     }
 }
commit 60ef5920d3ad89e0839f26488481ded8157ebbe9
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
Date:   Sat May 23 18:49:16 2015 +0900

    pass RenderContext into writer painting
    
    Change-Id: Ib2d986d05dc7db1b65ed29ea295807d6f20cea4a

diff --git a/sw/inc/crsrsh.hxx b/sw/inc/crsrsh.hxx
index 2fdcac8..073a8df 100644
--- a/sw/inc/crsrsh.hxx
+++ b/sw/inc/crsrsh.hxx
@@ -408,7 +408,7 @@ public:
     /*
      * virtual paint method to make selection visible again after Paint
      */
-    void Paint( const Rectangle & rRect ) SAL_OVERRIDE;
+    void Paint(vcl::RenderContext& rRenderContext, const Rectangle & rRect) SAL_OVERRIDE;
 
     // Areas
     inline void SetMark();
diff --git a/sw/inc/viewsh.hxx b/sw/inc/viewsh.hxx
index b63eaef..4d34d5a 100644
--- a/sw/inc/viewsh.hxx
+++ b/sw/inc/viewsh.hxx
@@ -174,10 +174,10 @@ class SW_DLLPUBLIC SwViewShell : public sw::Ring<SwViewShell>
 
     SAL_DLLPRIVATE void Reformat();          // Invalidates complete Layout (ApplyViewOption).
 
-    SAL_DLLPRIVATE void PaintDesktop( const SwRect & );  // Collect values for painting of desktop
+    SAL_DLLPRIVATE void PaintDesktop(vcl::RenderContext& rRenderContext, const SwRect&);  // Collect values for painting of desktop
                                                         // and calling.
     // PaintDesktop split. This pars is also used by PreviewPage.
-    SAL_DLLPRIVATE void _PaintDesktop( const SwRegionRects &rRegion );
+    SAL_DLLPRIVATE void _PaintDesktop(vcl::RenderContext& rRenderContext, const SwRegionRects &rRegion);
 
     SAL_DLLPRIVATE bool CheckInvalidForPaint( const SwRect & );  // Direct Paint or rather
                                                                     // trigger an action.
@@ -246,7 +246,7 @@ public:
     void DLPostPaint2(bool bPaintFormLayer);
     const MapMode& getPrePostMapMode() const { return maPrePostMapMode; }
 
-    virtual void Paint(const Rectangle &rRect);
+    virtual void Paint(vcl::RenderContext& rRenderContext, const Rectangle &rRect);
 
     /** Paint tile.
 
diff --git a/sw/source/core/crsr/crsrsh.cxx b/sw/source/core/crsr/crsrsh.cxx
index 98dc7fd..428aa40 100644
--- a/sw/source/core/crsr/crsrsh.cxx
+++ b/sw/source/core/crsr/crsrsh.cxx
@@ -1237,7 +1237,7 @@ bool SwCrsrShell::GoPrevCrsr()
     return true;
 }
 
-void SwCrsrShell::Paint( const Rectangle &rRect)
+void SwCrsrShell::Paint(vcl::RenderContext& rRenderContext, const Rectangle &rRect)
 {
     comphelper::FlagRestorationGuard g(mbSelectAll, StartsWithTable() && ExtendedSelectedAll(/*bFootnotes =*/ false));
     SET_CURR_SHELL( this );
@@ -1254,7 +1254,7 @@ void SwCrsrShell::Paint( const Rectangle &rRect)
     }
 
     // re-paint area
-    SwViewShell::Paint( rRect );
+    SwViewShell::Paint(rRenderContext, rRect);
 
     if( m_bHasFocus && !m_bBasicHideCrsr )
     {
diff --git a/sw/source/core/view/pagepreviewlayout.cxx b/sw/source/core/view/pagepreviewlayout.cxx
index bb154c6..02c2af9 100644
--- a/sw/source/core/view/pagepreviewlayout.cxx
+++ b/sw/source/core/view/pagepreviewlayout.cxx
@@ -1015,7 +1015,7 @@ bool SwPagePreviewLayout::Paint(vcl::RenderContext& rRenderContext, const Rectan
     }
     mbInPaint = true;
 
-    OutputDevice* pOutputDev = &rRenderContext; //mrParentViewShell.GetOut();
+    OutputDevice* pOutputDev = &rRenderContext;
 
     // prepare paint
     if ( maPreviewPages.size() > 0 )
@@ -1040,7 +1040,7 @@ bool SwPagePreviewLayout::Paint(vcl::RenderContext& rRenderContext, const Rectan
             }
         }
         // paint preview background rectangles
-        mrParentViewShell._PaintDesktop( aPreviewBackgrdRegion );
+        mrParentViewShell._PaintDesktop(rRenderContext, aPreviewBackgrdRegion);
     }
 
     // prepare data for paint of pages
@@ -1095,7 +1095,7 @@ bool SwPagePreviewLayout::Paint(vcl::RenderContext& rRenderContext, const Rectan
                 mrParentViewShell.maVisArea = aPageRect;
                 aPxPaintRect.Intersection( aPxOutRect );
                 Rectangle aPaintRect = pOutputDev->PixelToLogic( aPxPaintRect );
-                mrParentViewShell.Paint( aPaintRect );
+                mrParentViewShell.Paint(rRenderContext, aPaintRect);
                 // --> OD 2007-08-15 #i80691#
                 // paint page border and shadow
                 {
diff --git a/sw/source/core/view/viewsh.cxx b/sw/source/core/view/viewsh.cxx
index 37762b4..1873a3e 100644
--- a/sw/source/core/view/viewsh.cxx
+++ b/sw/source/core/view/viewsh.cxx
@@ -377,7 +377,7 @@ void SwViewShell::ImplEndAction( const bool bIdleEnd )
 
                             mpOut = pVout.get();
                             if ( bPaintsFromSystem )
-                                PaintDesktop( aRect );
+                                PaintDesktop(*mpOut, aRect);
                             pCurrentLayout->Paint( aRect );
                             pOld->DrawOutDev( aRect.Pos(), aRect.SSize(),
                                               aRect.Pos(), aRect.SSize(), *pVout );
@@ -398,7 +398,7 @@ void SwViewShell::ImplEndAction( const bool bIdleEnd )
                         DLPrePaint2(vcl::Region(aRect.SVRect()));
 
                         if ( bPaintsFromSystem )
-                            PaintDesktop( aRect );
+                            PaintDesktop(*GetOut(), aRect);
                         if (!isTiledRendering())
                             pCurrentLayout->Paint( aRect );
                         else
@@ -484,7 +484,7 @@ void SwViewShell::ImplUnlockPaint( bool bVirDev )
 
                 OutputDevice *pOld = mpOut;
                 mpOut = pVout.get();
-                Paint( VisArea().SVRect() );
+                Paint(*mpOut, VisArea().SVRect());
                 mpOut = pOld;
                 mpOut->DrawOutDev( VisArea().Pos(), aSize,
                                   VisArea().Pos(), aSize, *pVout );
@@ -1263,7 +1263,7 @@ bool SwViewShell::SmoothScroll( long lXDiff, long lYDiff, const Rectangle *pRect
                 mpWin = pOldWin;
 
                 // SW paint stuff
-                PaintDesktop( aRect );
+                PaintDesktop(*GetOut(), aRect);
                 SwViewShell::mbLstAct = true;
                 GetLayout()->Paint( aRect );
                 SwViewShell::mbLstAct = false;
@@ -1404,7 +1404,7 @@ bool SwViewShell::SmoothScroll( long lXDiff, long lYDiff, const Rectangle *pRect
     return false;
 }
 
-void SwViewShell::PaintDesktop( const SwRect &rRect )
+void SwViewShell::PaintDesktop(vcl::RenderContext& rRenderContext, const SwRect &rRect)
 {
     if ( !GetWin() && !GetOut()->GetConnectMetaFile() )
         return;                     //for the printer we don't do anything here.
@@ -1488,11 +1488,11 @@ void SwViewShell::PaintDesktop( const SwRect &rRect )
         }
     }
     if ( !aRegion.empty() )
-        _PaintDesktop( aRegion );
+        _PaintDesktop(rRenderContext, aRegion);
 }
 
 // PaintDesktop is split in two, this part is also used by PreviewPage
-void SwViewShell::_PaintDesktop( const SwRegionRects &rRegion )
+void SwViewShell::_PaintDesktop(vcl::RenderContext& /*rRenderContext*/, const SwRegionRects &rRegion)
 {
     // OD 2004-04-23 #116347#
     GetOut()->Push( PushFlags::FILLCOLOR|PushFlags::LINECOLOR );
@@ -1644,8 +1644,9 @@ bool SwViewShell::CheckInvalidForPaint( const SwRect &rRect )
     return bRet;
 }
 
-void SwViewShell::Paint(const Rectangle &rRect)
+void SwViewShell::Paint(vcl::RenderContext& rRenderContext, const Rectangle &rRect)
 {
+    mpOut = &rRenderContext;
     if ( mnLockPaint )
     {
         if ( Imp()->bSmoothUpdate )
@@ -1716,7 +1717,7 @@ void SwViewShell::Paint(const Rectangle &rRect)
                     DLPrePaint2(aRepaintRegion);
 
                     // <--
-                    PaintDesktop( aRect );
+                    PaintDesktop(rRenderContext, aRect);
 
                     //When useful, process or destroy the old InvalidRect.
                     if ( aRect.IsInside( maInvalidRect ) )
@@ -1826,7 +1827,7 @@ void SwViewShell::PaintTile(VirtualDevice &rDevice, int contextWidth, int contex
     CheckInvalidForPaint(aOutRect);
 
     // draw - works in logic coordinates
-    Paint(aOutRect);
+    Paint(rDevice, aOutRect);
 
     // Remove this device in DrawLayer
     if (Imp()->GetDrawView())
diff --git a/sw/source/core/view/vprint.cxx b/sw/source/core/view/vprint.cxx
index 5ea6e10..b674f92 100644
--- a/sw/source/core/view/vprint.cxx
+++ b/sw/source/core/view/vprint.cxx
@@ -141,7 +141,7 @@ void SwPaintQueue::Repaint()
                 }
             }
             else
-                pSh->Paint( pPt->aRect.SVRect() );
+                pSh->Paint(*pSh->GetOut(), pPt->aRect.SVRect());
             pPt = pPt->pNext;
         } while ( pPt );
 
diff --git a/sw/source/uibase/docvw/edtwin2.cxx b/sw/source/uibase/docvw/edtwin2.cxx
index 47ef3ef..fc38db6 100644
--- a/sw/source/uibase/docvw/edtwin2.cxx
+++ b/sw/source/uibase/docvw/edtwin2.cxx
@@ -441,7 +441,7 @@ void SwEditWin::PrePaint(vcl::RenderContext& /*rRenderContext*/)
     }
 }
 
-void  SwEditWin::Paint(vcl::RenderContext& /*rRenderContext*/, const Rectangle& rRect)
+void SwEditWin::Paint(vcl::RenderContext& rRenderContext, const Rectangle& rRect)
 {
     SwWrtShell* pWrtShell = GetView().GetWrtShellPtr();
     if(!pWrtShell)
@@ -467,7 +467,7 @@ void  SwEditWin::Paint(vcl::RenderContext& /*rRenderContext*/, const Rectangle&
               GetView().GetVisArea().GetHeight() <= 0 )
         Invalidate( rRect );
     else
-        pWrtShell->Paint( rRect );
+        pWrtShell->Paint(rRenderContext, rRect);
 
     if( bPaintShadowCrsr )
         m_pShadCrsr->Paint();
commit 95ccc26ba71259be29fde8ba6b6f52ffbe5bd3c7
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
Date:   Fri May 22 18:07:45 2015 +0900

    call ApplySettings sooner when painting
    
    Change-Id: I2ddd6a6b4ccfccc55f394d8a6851843ef2479fe3

diff --git a/vcl/source/window/paint.cxx b/vcl/source/window/paint.cxx
index af64a31..e220a37 100644
--- a/vcl/source/window/paint.cxx
+++ b/vcl/source/window/paint.cxx
@@ -228,7 +228,6 @@ void PaintHelper::DoPaint(const vcl::Region* pRegion)
             m_pBuffer->mnOutOffY = m_pWindow->GetOutOffYPixel() - m_pBuffer->mnOutOffY;
 
             m_pWindow->PushPaintHelper(this, *m_pWindow);
-            m_pWindow->ApplySettings(*m_pBuffer.get());
             m_pWindow->Paint(*m_pBuffer.get(), m_aPaintRect);
 
             // restore the mnOutOffX/Y value
@@ -239,7 +238,6 @@ void PaintHelper::DoPaint(const vcl::Region* pRegion)
         {
             // direct painting
             m_pWindow->PushPaintHelper(this, *m_pWindow);
-            m_pWindow->ApplySettings(*m_pWindow);
             m_pWindow->Paint(*m_pWindow, m_aPaintRect);
         }
 
@@ -507,6 +505,11 @@ namespace vcl {
 
 void Window::ImplCallPaint(const VclPtr<VirtualDevice>& rBuffer, const vcl::Region* pRegion, sal_uInt16 nPaintFlags)
 {
+    if (rBuffer)
+        ApplySettings(*rBuffer.get());
+    else
+        ApplySettings(*this);
+
     // call PrePaint. PrePaint may add to the invalidate region as well as
     // other parameters used below.
     PrePaint(*this);
@@ -697,7 +700,6 @@ void Window::ImplInvalidateParentFrameRegion( vcl::Region& rRegion )
 
 void Window::ImplInvalidate( const vcl::Region* pRegion, sal_uInt16 nFlags )
 {
-
     // reset background storage
     if ( mpWindowImpl->mpFrameData->mpFirstBackWin )
         ImplInvalidateAllOverlapBackgrounds();
@@ -1133,7 +1135,6 @@ vcl::Region Window::GetPaintRegion() const
 
 void Window::Invalidate( sal_uInt16 nFlags )
 {
-
     if ( !IsDeviceOutputNecessary() || !mnOutWidth || !mnOutHeight )
         return;
 
@@ -1143,7 +1144,6 @@ void Window::Invalidate( sal_uInt16 nFlags )
 
 void Window::Invalidate( const Rectangle& rRect, sal_uInt16 nFlags )
 {
-
     if ( !IsDeviceOutputNecessary() || !mnOutWidth || !mnOutHeight )
         return;
 
@@ -1160,7 +1160,6 @@ void Window::Invalidate( const Rectangle& rRect, sal_uInt16 nFlags )
 
 void Window::Invalidate( const vcl::Region& rRegion, sal_uInt16 nFlags )
 {
-
     if ( !IsDeviceOutputNecessary() || !mnOutWidth || !mnOutHeight )
         return;
 
commit 4f5fe008a3d5f0b5ddfa656299306cff9d57d802
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
Date:   Fri May 22 17:51:44 2015 +0900

    use ApplySettings instead of ImplInitSettings is called
    
    Change-Id: I30cbfe1906d5d59db93a354ca1d1862c4b5e631a

diff --git a/include/vcl/dockingarea.hxx b/include/vcl/dockingarea.hxx
index 58fcfd7..a0ce2d6 100644
--- a/include/vcl/dockingarea.hxx
+++ b/include/vcl/dockingarea.hxx
@@ -43,6 +43,7 @@ public:
     WindowAlign     GetAlign() const;
     bool            IsHorizontal() const;
 
+    virtual void    ApplySettings(vcl::RenderContext& rRenderContext) SAL_OVERRIDE;
     virtual void    Paint( vcl::RenderContext& rRenderContext, const Rectangle& rRect ) SAL_OVERRIDE;
     virtual void    Resize() SAL_OVERRIDE;
     virtual void    DataChanged( const DataChangedEvent& rDCEvt ) SAL_OVERRIDE;
diff --git a/include/vcl/fixed.hxx b/include/vcl/fixed.hxx
index 15e838b..fc455d8 100644
--- a/include/vcl/fixed.hxx
+++ b/include/vcl/fixed.hxx
@@ -44,7 +44,6 @@ private:
     using Window::ImplInit;
     SAL_DLLPRIVATE void    ImplInit( vcl::Window* pParent, WinBits nStyle );
     SAL_DLLPRIVATE WinBits ImplInitStyle( WinBits nStyle );
-    SAL_DLLPRIVATE void    ImplInitSettings( bool bFont, bool bForeground, bool bBackground );
     SAL_DLLPRIVATE void    ImplDraw( OutputDevice* pDev, sal_uLong nDrawFlags,
                               const Point& rPos, const Size& rSize, bool bFillLayout = false ) const;
 public:
@@ -64,6 +63,8 @@ public:
     virtual         ~FixedText();
     virtual void    dispose() SAL_OVERRIDE;
 
+    virtual void    ApplySettings(vcl::RenderContext& rRenderContext) SAL_OVERRIDE;
+
     virtual void    Paint( vcl::RenderContext& rRenderContext, const Rectangle& rRect ) SAL_OVERRIDE;
     virtual void    Draw( OutputDevice* pDev, const Point& rPos, const Size& rSize, sal_uLong nFlags ) SAL_OVERRIDE;
     virtual void    Resize() SAL_OVERRIDE;
@@ -89,6 +90,7 @@ public:
     explicit SelectableFixedText( vcl::Window* pParent, WinBits nStyle = 0 );
 
     virtual void    LoseFocus() SAL_OVERRIDE;
+    virtual void    ApplySettings(vcl::RenderContext&) SAL_OVERRIDE;
 };
 
 
@@ -102,7 +104,6 @@ private:
     using Window::ImplInit;
     SAL_DLLPRIVATE void    ImplInit( vcl::Window* pParent, WinBits nStyle );
     SAL_DLLPRIVATE WinBits ImplInitStyle( WinBits nStyle );
-    SAL_DLLPRIVATE void    ImplInitSettings( bool bFont, bool bForeground, bool bBackground );
     SAL_DLLPRIVATE void    ImplDraw(vcl::RenderContext& rRenderContext, bool bLayout = false);
 
 protected:
@@ -116,6 +117,8 @@ public:
     explicit        FixedLine( vcl::Window* pParent, WinBits nStyle = WB_HORZ );
     explicit        FixedLine( vcl::Window* pParent, const ResId& );
 
+    virtual void    ApplySettings(vcl::RenderContext&) SAL_OVERRIDE;
+
     virtual void    Paint( vcl::RenderContext& rRenderContext, const Rectangle& rRect ) SAL_OVERRIDE;
     virtual void    Draw( OutputDevice* pDev, const Point& rPos, const Size& rSize, sal_uLong nFlags ) SAL_OVERRIDE;
     virtual void    Resize() SAL_OVERRIDE;
@@ -135,13 +138,14 @@ private:
     using Window::ImplInit;
     SAL_DLLPRIVATE void    ImplInit( vcl::Window* pParent, WinBits nStyle );
     SAL_DLLPRIVATE WinBits ImplInitStyle( WinBits nStyle );
-    SAL_DLLPRIVATE void    ImplInitSettings();
     SAL_DLLPRIVATE void    ImplDraw( OutputDevice* pDev, sal_uLong nDrawFlags,
                               const Point& rPos, const Size& rSize );
 
 public:
     explicit        FixedBitmap( vcl::Window* pParent, WinBits nStyle = 0 );
 
+    virtual void    ApplySettings(vcl::RenderContext&) SAL_OVERRIDE;
+
     virtual void    Paint( vcl::RenderContext& rRenderContext, const Rectangle& rRect ) SAL_OVERRIDE;
     virtual void    Draw( OutputDevice* pDev, const Point& rPos, const Size& rSize, sal_uLong nFlags ) SAL_OVERRIDE;
     virtual void    Resize() SAL_OVERRIDE;
@@ -168,7 +172,6 @@ private:
     using Window::ImplInit;
     SAL_DLLPRIVATE void    ImplInit( vcl::Window* pParent, WinBits nStyle );
     SAL_DLLPRIVATE WinBits ImplInitStyle( WinBits nStyle );
-    SAL_DLLPRIVATE void    ImplInitSettings();
 
 protected:
     SAL_DLLPRIVATE void    ImplDraw( OutputDevice* pDev, sal_uLong nDrawFlags,
@@ -179,6 +182,8 @@ public:
     explicit        FixedImage( vcl::Window* pParent, WinBits nStyle = 0 );
     explicit        FixedImage( vcl::Window* pParent, const ResId& );
 
+    virtual void    ApplySettings(vcl::RenderContext&) SAL_OVERRIDE;
+
     virtual void    Paint( vcl::RenderContext& rRenderContext, const Rectangle& rRect ) SAL_OVERRIDE;
     virtual void    Draw( OutputDevice* pDev, const Point& rPos, const Size& rSize, sal_uLong nFlags ) SAL_OVERRIDE;
     virtual void    Resize() SAL_OVERRIDE;
diff --git a/include/vcl/lstbox.hxx b/include/vcl/lstbox.hxx
index d93167e..8a5efc5 100644
--- a/include/vcl/lstbox.hxx
+++ b/include/vcl/lstbox.hxx
@@ -85,6 +85,7 @@ public:
     virtual             ~ListBox();
     virtual void        dispose() SAL_OVERRIDE;
 
+    virtual void        ApplySettings(vcl::RenderContext& rRenderContext) SAL_OVERRIDE;
     virtual void        Draw( OutputDevice* pDev, const Point& rPos, const Size& rSize, sal_uLong nFlags ) SAL_OVERRIDE;
     virtual void        Resize() SAL_OVERRIDE;
     virtual bool        PreNotify( NotifyEvent& rNEvt ) SAL_OVERRIDE;
diff --git a/vcl/source/control/ctrl.cxx b/vcl/source/control/ctrl.cxx
index 065ed0f..ed59e5d 100644
--- a/vcl/source/control/ctrl.cxx
+++ b/vcl/source/control/ctrl.cxx
@@ -425,28 +425,9 @@ void Control::ApplySettings(vcl::RenderContext& rRenderContext)
     rRenderContext.SetTextFillColor();
 }
 
-void Control::ImplInitSettings( const bool _bFont, const bool _bForeground )
+void Control::ImplInitSettings(const bool, const bool)
 {
-    const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings();
-
-    if (_bFont)
-    {
-        Font aFont(GetCanonicalFont(rStyleSettings));
-        if (IsControlFont())
-            aFont.Merge(GetControlFont());
-        SetZoomedPointFont(*this, aFont);
-    }
-
-    if (_bForeground || _bFont)
-    {
-        Color aColor;
-        if (IsControlForeground())
-            aColor = GetControlForeground();
-        else
-            aColor = GetCanonicalTextColor(rStyleSettings);
-        SetTextColor(aColor);
-        SetTextFillColor();
-    }
+    ApplySettings(*this);
 }
 
 void Control::DrawControlText( OutputDevice& _rTargetDevice, Rectangle& _io_rRect, const OUString& _rStr,
diff --git a/vcl/source/control/fixed.cxx b/vcl/source/control/fixed.cxx
index 4588596..55b8b0c 100644
--- a/vcl/source/control/fixed.cxx
+++ b/vcl/source/control/fixed.cxx
@@ -84,7 +84,7 @@ void FixedText::ImplInit( vcl::Window* pParent, WinBits nStyle )
 {
     nStyle = ImplInitStyle( nStyle );
     Control::ImplInit( pParent, nStyle, NULL );
-    ImplInitSettings( true, true, true );
+    ApplySettings(*this);
 }
 
 WinBits FixedText::ImplInitStyle( WinBits nStyle )
@@ -104,35 +104,6 @@ const Color& FixedText::GetCanonicalTextColor( const StyleSettings& _rStyle ) co
     return ( GetStyle() & WB_INFO ) ? _rStyle.GetInfoTextColor() : _rStyle.GetLabelTextColor();
 }
 
-void FixedText::ImplInitSettings( bool bFont,
-                                  bool bForeground, bool bBackground )
-{
-    Control::ImplInitSettings( bFont, bForeground );
-
-    if ( bBackground )
-    {
-        vcl::Window* pParent = GetParent();
-        if ( pParent->IsChildTransparentModeEnabled() && !IsControlBackground() )
-        {
-            EnableChildTransparentMode( true );
-            SetParentClipMode( PARENTCLIPMODE_NOCLIP );
-            SetPaintTransparent( true );
-            SetBackground();
-        }
-        else
-        {
-            EnableChildTransparentMode( false );
-            SetParentClipMode( 0 );
-            SetPaintTransparent( false );
-
-            if ( IsControlBackground() )
-                SetBackground( GetControlBackground() );
-            else
-                SetBackground( pParent->GetBackground() );
-        }
-    }
-}
-
 FixedText::FixedText( vcl::Window* pParent, WinBits nStyle )
     : Control(WINDOW_FIXEDTEXT)
     , m_nMaxWidthChars(-1)
@@ -232,6 +203,31 @@ void FixedText::ImplDraw(OutputDevice* pDev, sal_uLong nDrawFlags,
         bFillLayout ? &mpControlData->mpLayoutData->m_aDisplayText : NULL);
 }
 
+void FixedText::ApplySettings(vcl::RenderContext& rRenderContext)
+{
+    Control::ApplySettings(rRenderContext);
+
+    vcl::Window* pParent = GetParent();
+    if (pParent->IsChildTransparentModeEnabled() && !IsControlBackground())
+    {
+        EnableChildTransparentMode(true);
+        SetParentClipMode(PARENTCLIPMODE_NOCLIP);
+        SetPaintTransparent(true);
+        rRenderContext.SetBackground();
+    }
+    else
+    {
+        EnableChildTransparentMode(false);
+        SetParentClipMode(0);
+        SetPaintTransparent(false);
+
+        if (IsControlBackground())
+            rRenderContext.SetBackground(GetControlBackground());
+        else
+            rRenderContext.SetBackground(pParent->GetBackground());
+    }
+}
+
 void FixedText::Paint( vcl::RenderContext& rRenderContext, const Rectangle& )
 {
     ImplDraw(&rRenderContext, 0, Point(), GetOutputSizePixel());
@@ -240,7 +236,7 @@ void FixedText::Paint( vcl::RenderContext& rRenderContext, const Rectangle& )
 void FixedText::Draw( OutputDevice* pDev, const Point& rPos, const Size& rSize,
                       sal_uLong nFlags )
 {
-    ImplInitSettings( true, true, true );
+    ApplySettings(*pDev);
 
     Point       aPos  = pDev->LogicToPixel( rPos );
     Size        aSize = pDev->LogicToPixel( rSize );
@@ -298,24 +294,24 @@ void FixedText::StateChanged( StateChangedType nType )
         if ( (GetPrevStyle() & FIXEDTEXT_VIEW_STYLE) !=
              (GetStyle() & FIXEDTEXT_VIEW_STYLE) )
         {
-            ImplInitSettings( true, false, false );
+            ApplySettings(*this);
             Invalidate();
         }
     }
     else if ( (nType == StateChangedType::Zoom)  ||
               (nType == StateChangedType::ControlFont) )
     {
-        ImplInitSettings( true, false, false );
+        ApplySettings(*this);
         Invalidate();
     }
     else if ( nType == StateChangedType::ControlForeground )
     {
-        ImplInitSettings( false, true, false );
+        ApplySettings(*this);
         Invalidate();
     }
     else if ( nType == StateChangedType::ControlBackground )
     {
-        ImplInitSettings( false, false, true );
+        ApplySettings(*this);
         Invalidate();
     }
 }
@@ -329,7 +325,7 @@ void FixedText::DataChanged( const DataChangedEvent& rDCEvt )
          ((rDCEvt.GetType() == DataChangedEventType::SETTINGS) &&
           (rDCEvt.GetFlags() & AllSettingsFlags::STYLE)) )
     {
-        ImplInitSettings( true, true, true );
+        ApplySettings(*this);
         Invalidate();
     }
 }
@@ -390,7 +386,7 @@ Size FixedText::GetOptimalSize() const
 void FixedText::FillLayoutData() const
 {
     mpControlData->mpLayoutData = new vcl::ControlLayoutData();
-    ImplDraw( const_cast<FixedText*>(this), 0, Point(), GetOutputSizePixel(), true );
+    const_cast<FixedText*>(this)->Invalidate();
 }
 
 void FixedText::setMaxWidthChars(sal_Int32 nWidth)
@@ -476,9 +472,13 @@ SelectableFixedText::SelectableFixedText(vcl::Window* pParent, WinBits nStyle)
     // read-only
     SetReadOnly();
     // make it transparent
+    SetPaintTransparent(true);
     SetControlBackground();
-    SetBackground();
-    SetPaintTransparent( true );
+}
+
+void SelectableFixedText::ApplySettings(vcl::RenderContext& rRenderContext)
+{
+    rRenderContext.SetBackground();
 }
 
 void SelectableFixedText::LoseFocus()
@@ -492,7 +492,7 @@ void FixedLine::ImplInit( vcl::Window* pParent, WinBits nStyle )
 {
     nStyle = ImplInitStyle( nStyle );
     Control::ImplInit( pParent, nStyle, NULL );
-    ImplInitSettings( true, true, true );
+    ApplySettings(*this);
 }
 
 WinBits FixedLine::ImplInitStyle( WinBits nStyle )
@@ -512,35 +512,6 @@ const Color& FixedLine::GetCanonicalTextColor( const StyleSettings& _rStyle ) co
     return _rStyle.GetGroupTextColor();
 }
 
-void FixedLine::ImplInitSettings( bool bFont,
-                                  bool bForeground, bool bBackground )
-{
-    Control::ImplInitSettings( bFont, bForeground );
-
-    if ( bBackground )
-    {
-        vcl::Window* pParent = GetParent();
-        if ( pParent->IsChildTransparentModeEnabled() && !IsControlBackground() )
-        {
-            EnableChildTransparentMode( true );
-            SetParentClipMode( PARENTCLIPMODE_NOCLIP );
-            SetPaintTransparent( true );
-            SetBackground();
-        }
-        else
-        {
-            EnableChildTransparentMode( false );
-            SetParentClipMode( 0 );
-            SetPaintTransparent( false );
-
-            if ( IsControlBackground() )
-                SetBackground( GetControlBackground() );
-            else
-                SetBackground( pParent->GetBackground() );
-        }
-    }
-}
-
 void FixedLine::ImplDraw(vcl::RenderContext& rRenderContext, bool bLayout)
 {
     Size aOutSize = rRenderContext.GetOutputSizePixel();
@@ -633,12 +604,37 @@ FixedLine::FixedLine( vcl::Window* pParent, const ResId& rResId ) :
         Show();
 }
 
-void  FixedLine::FillLayoutData() const
+void FixedLine::FillLayoutData() const
 {
     mpControlData->mpLayoutData = new vcl::ControlLayoutData();
     const_cast<FixedLine*>(this)->Invalidate();
 }
 
+void FixedLine::ApplySettings(vcl::RenderContext& rRenderContext)
+{
+    Control::ApplySettings(rRenderContext);
+
+    vcl::Window* pParent = GetParent();
+    if (pParent->IsChildTransparentModeEnabled() && !IsControlBackground())
+    {
+        EnableChildTransparentMode(true);
+        SetParentClipMode(PARENTCLIPMODE_NOCLIP);
+        SetPaintTransparent(true);
+        rRenderContext.SetBackground();
+    }
+    else
+    {
+        EnableChildTransparentMode(false);
+        SetParentClipMode(0);
+        SetPaintTransparent(false);
+
+        if (IsControlBackground())
+            rRenderContext.SetBackground(GetControlBackground());
+        else
+            rRenderContext.SetBackground(pParent->GetBackground());
+    }
+}
+
 void FixedLine::Paint(vcl::RenderContext& rRenderContext, const Rectangle&)
 {
     ImplDraw(rRenderContext);
@@ -676,17 +672,17 @@ void FixedLine::StateChanged( StateChangedType nType )
               (nType == StateChangedType::Style) ||
               (nType == StateChangedType::ControlFont) )
     {
-        ImplInitSettings( true, false, false );
+        ApplySettings(*this);
         Invalidate();
     }
     else if ( nType == StateChangedType::ControlForeground )
     {
-        ImplInitSettings( false, true, false );
+        ApplySettings(*this);
         Invalidate();
     }
     else if ( nType == StateChangedType::ControlBackground )
     {
-        ImplInitSettings( false, false, true );
+        ApplySettings(*this);
         Invalidate();
     }
 }
@@ -700,7 +696,7 @@ void FixedLine::DataChanged( const DataChangedEvent& rDCEvt )
          ((rDCEvt.GetType() == DataChangedEventType::SETTINGS) &&
           (rDCEvt.GetFlags() & AllSettingsFlags::STYLE)) )
     {
-        ImplInitSettings( true, true, true );
+        ApplySettings(*this);
         Invalidate();
     }
 }
@@ -714,7 +710,7 @@ void FixedBitmap::ImplInit( vcl::Window* pParent, WinBits nStyle )
 {
     nStyle = ImplInitStyle( nStyle );
     Control::ImplInit( pParent, nStyle, NULL );
-    ImplInitSettings();
+    ApplySettings(*this);
 }
 
 WinBits FixedBitmap::ImplInitStyle( WinBits nStyle )
@@ -724,29 +720,6 @@ WinBits FixedBitmap::ImplInitStyle( WinBits nStyle )
     return nStyle;
 }
 
-void FixedBitmap::ImplInitSettings()
-{
-    vcl::Window* pParent = GetParent();
-    if ( pParent->IsChildTransparentModeEnabled() && !IsControlBackground() )
-    {
-        EnableChildTransparentMode( true );
-        SetParentClipMode( PARENTCLIPMODE_NOCLIP );
-        SetPaintTransparent( true );
-        SetBackground();
-    }
-    else
-    {
-        EnableChildTransparentMode( false );
-        SetParentClipMode( 0 );
-        SetPaintTransparent( false );
-
-        if ( IsControlBackground() )
-            SetBackground( GetControlBackground() );
-        else
-            SetBackground( pParent->GetBackground() );
-    }
-}
-
 FixedBitmap::FixedBitmap( vcl::Window* pParent, WinBits nStyle ) :
     Control( WINDOW_FIXEDBITMAP )
 {
@@ -771,6 +744,29 @@ void FixedBitmap::ImplDraw( OutputDevice* pDev, sal_uLong /* nDrawFlags */,
     }
 }
 
+void FixedBitmap::ApplySettings(vcl::RenderContext& rRenderContext)
+{
+    vcl::Window* pParent = GetParent();
+    if (pParent->IsChildTransparentModeEnabled() && !IsControlBackground())
+    {
+        EnableChildTransparentMode(true);
+        SetParentClipMode(PARENTCLIPMODE_NOCLIP);
+        SetPaintTransparent(true);
+        rRenderContext.SetBackground();
+    }
+    else
+    {
+        EnableChildTransparentMode(false);
+        SetParentClipMode(0);
+        SetPaintTransparent(false);
+
+        if (IsControlBackground())
+            rRenderContext.SetBackground(GetControlBackground());
+        else
+            rRenderContext.SetBackground(pParent->GetBackground());
+    }
+}
+
 void FixedBitmap::Paint(vcl::RenderContext& rRenderContext, const Rectangle&)
 {
     ImplDraw(&rRenderContext, 0, Point(), GetOutputSizePixel());
@@ -823,7 +819,7 @@ void FixedBitmap::StateChanged( StateChangedType nType )
     }
     else if ( nType == StateChangedType::ControlBackground )
     {
-        ImplInitSettings();
+        ApplySettings(*this);
         Invalidate();
     }
 }
@@ -835,7 +831,7 @@ void FixedBitmap::DataChanged( const DataChangedEvent& rDCEvt )
     if ( (rDCEvt.GetType() == DataChangedEventType::SETTINGS) &&
          (rDCEvt.GetFlags() & AllSettingsFlags::STYLE) )
     {
-        ImplInitSettings();
+        ApplySettings(*this);
         Invalidate();
     }
 }
@@ -852,7 +848,7 @@ void FixedImage::ImplInit( vcl::Window* pParent, WinBits nStyle )
     nStyle = ImplInitStyle( nStyle );
     mbInUserDraw = false;
     Control::ImplInit( pParent, nStyle, NULL );
-    ImplInitSettings();
+    ApplySettings(*this);
 }
 
 WinBits FixedImage::ImplInitStyle( WinBits nStyle )
@@ -862,29 +858,6 @@ WinBits FixedImage::ImplInitStyle( WinBits nStyle )
     return nStyle;
 }
 
-void FixedImage::ImplInitSettings()
-{
-    vcl::Window* pParent = GetParent();
-    if ( pParent && pParent->IsChildTransparentModeEnabled() && !IsControlBackground() )
-    {
-        EnableChildTransparentMode( true );
-        SetParentClipMode( PARENTCLIPMODE_NOCLIP );
-        SetPaintTransparent( true );
-        SetBackground();
-    }
-    else
-    {
-        EnableChildTransparentMode( false );
-        SetParentClipMode( 0 );
-        SetPaintTransparent( false );
-
-        if ( IsControlBackground() )
-            SetBackground( GetControlBackground() );
-        else if ( pParent )
-            SetBackground( pParent->GetBackground() );
-    }
-}
-
 void FixedImage::ImplLoadRes( const ResId& rResId )
 {
     Control::ImplLoadRes( rResId );
@@ -941,6 +914,30 @@ void FixedImage::ImplDraw( OutputDevice* pDev, sal_uLong nDrawFlags,
     }
 }
 
+void FixedImage::ApplySettings(vcl::RenderContext& rRenderContext)
+{
+    vcl::Window* pParent = GetParent();
+    if (pParent && pParent->IsChildTransparentModeEnabled() && !IsControlBackground())
+    {
+        EnableChildTransparentMode(true);
+        SetParentClipMode(PARENTCLIPMODE_NOCLIP);
+        SetPaintTransparent(true);
+        rRenderContext.SetBackground();
+    }
+    else
+    {
+        EnableChildTransparentMode(false);
+        SetParentClipMode(0);
+        SetPaintTransparent(false);
+
+        if (IsControlBackground())
+            rRenderContext.SetBackground(GetControlBackground());
+        else if (pParent)
+            rRenderContext.SetBackground(pParent->GetBackground());
+    }
+}
+
+
 void FixedImage::Paint(vcl::RenderContext& rRenderContext, const Rectangle&)
 {
     ImplDraw(&rRenderContext, 0, Point(), GetOutputSizePixel());
@@ -998,7 +995,7 @@ void FixedImage::StateChanged( StateChangedType nType )
     }
     else if ( nType == StateChangedType::ControlBackground )
     {
-        ImplInitSettings();
+        ApplySettings(*this);
         Invalidate();
     }
 }
@@ -1010,7 +1007,7 @@ void FixedImage::DataChanged( const DataChangedEvent& rDCEvt )
     if ( (rDCEvt.GetType() == DataChangedEventType::SETTINGS) &&
          (rDCEvt.GetFlags() & AllSettingsFlags::STYLE) )
     {
-        ImplInitSettings();
+        ApplySettings(*this);
         Invalidate();
     }
 }
diff --git a/vcl/source/control/lstbox.cxx b/vcl/source/control/lstbox.cxx
index 4fbc24e..60683d3 100644
--- a/vcl/source/control/lstbox.cxx
+++ b/vcl/source/control/lstbox.cxx
@@ -105,7 +105,6 @@ void ListBox::ImplInit( vcl::Window* pParent, WinBits nStyle )
         nStyle |= WB_BORDER;
 
     Control::ImplInit( pParent, nStyle, NULL );
-    SetBackground();
 
     ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::dnd::XDropTargetListener> xDrop = new DNDEventDispatcher(this);
 
@@ -369,6 +368,11 @@ void ListBox::ToggleDropDown()
     }
 }
 
+void ListBox::ApplySettings(vcl::RenderContext& rRenderContext)
+{
+    rRenderContext.SetBackground();
+}
+
 void ListBox::Draw( OutputDevice* pDev, const Point& rPos, const Size& rSize, sal_uLong nFlags )
 {
     mpImplLB->GetMainWindow()->ImplInitSettings( true, true, true );
diff --git a/vcl/source/window/dockingarea.cxx b/vcl/source/window/dockingarea.cxx
index 793ae09..25519f9 100644
--- a/vcl/source/window/dockingarea.cxx
+++ b/vcl/source/window/dockingarea.cxx
@@ -44,50 +44,12 @@ DockingAreaWindow::ImplData::~ImplData()
 {
 }
 
-static void ImplInitBackground( DockingAreaWindow* pThis )
-{
-    const StyleSettings rSetting = Application::GetSettings().GetStyleSettings();
-    const BitmapEx& rPersonaBitmap = pThis->GetAlign() == WINDOWALIGN_TOP ? rSetting.GetPersonaHeader() :rSetting.GetPersonaFooter();
-    if ( !rPersonaBitmap.IsEmpty() &&( pThis->GetAlign() == WINDOWALIGN_TOP|| pThis->GetAlign()==WINDOWALIGN_BOTTOM ) )
-    {
-        Wallpaper aWallpaper( rPersonaBitmap );
-        if(pThis->GetAlign()==WINDOWALIGN_TOP )
-            aWallpaper.SetStyle( WALLPAPER_TOPRIGHT );
-        else
-            aWallpaper.SetStyle( WALLPAPER_BOTTOMRIGHT );
-        aWallpaper.SetColor( rSetting.GetWorkspaceColor() );
-
-        // we need to shift the bitmap vertically so that it spans over the
-        // menubar conveniently
-        long nMenubarHeight = 0;
-        SystemWindow *pSysWin = pThis->GetSystemWindow();
-        if ( pSysWin && pSysWin->GetMenuBar() )
-        {
-            vcl::Window *pMenubarWin = pSysWin->GetMenuBar()->GetWindow();
-            if ( pMenubarWin )
-                nMenubarHeight = pMenubarWin->GetOutputHeightPixel();
-        }
-        aWallpaper.SetRect( Rectangle( Point( 0, -nMenubarHeight ), Size( pThis->GetOutputWidthPixel(), pThis->GetOutputHeightPixel() + nMenubarHeight ) ) );
-
-        pThis->SetBackground( aWallpaper );
-    }
-    else if( !pThis->IsNativeControlSupported( CTRL_TOOLBAR, PART_ENTIRE_CONTROL ) )
-    {
-        Wallpaper aWallpaper;
-        aWallpaper.SetStyle( WALLPAPER_APPLICATIONGRADIENT );
-        pThis->SetBackground( aWallpaper );
-    }
-    else
-        pThis->SetBackground( Wallpaper( pThis->GetSettings().GetStyleSettings().GetFaceColor() ) );
-}
-
 DockingAreaWindow::DockingAreaWindow( vcl::Window* pParent ) :
     Window( WINDOW_DOCKINGAREA )
 {
     ImplInit( pParent, WB_CLIPCHILDREN|WB_3DLOOK, NULL );
 
     mpImplData = new ImplData;
-    ImplInitBackground( this );
 }
 
 DockingAreaWindow::~DockingAreaWindow()
@@ -107,7 +69,6 @@ void DockingAreaWindow::DataChanged( const DataChangedEvent& rDCEvt )
 
     if ( (rDCEvt.GetType() == DataChangedEventType::SETTINGS) && (rDCEvt.GetFlags() & AllSettingsFlags::STYLE) )
     {
-        ImplInitBackground( this );
         Invalidate();
     }
 }
@@ -149,7 +110,6 @@ void DockingAreaWindow::SetAlign( WindowAlign eNewAlign )
     if( eNewAlign != mpImplData->meAlign )
     {
         mpImplData->meAlign = eNewAlign;
-        ImplInitBackground( this );
         Invalidate();
     }
 }
@@ -159,13 +119,56 @@ WindowAlign DockingAreaWindow::GetAlign() const
     return mpImplData->meAlign;
 }
 
+void DockingAreaWindow::ApplySettings(vcl::RenderContext& rRenderContext)
+{
+    const StyleSettings rSetting = rRenderContext.GetSettings().GetStyleSettings();
+    const BitmapEx& rPersonaBitmap = (GetAlign() == WINDOWALIGN_TOP) ? rSetting.GetPersonaHeader() : rSetting.GetPersonaFooter();
+
+    if (!rPersonaBitmap.IsEmpty() && (GetAlign() == WINDOWALIGN_TOP || GetAlign()==WINDOWALIGN_BOTTOM))
+    {
+        Wallpaper aWallpaper(rPersonaBitmap);
+        if (GetAlign() == WINDOWALIGN_TOP)
+            aWallpaper.SetStyle(WALLPAPER_TOPRIGHT);
+        else
+            aWallpaper.SetStyle(WALLPAPER_BOTTOMRIGHT);
+        aWallpaper.SetColor(rSetting.GetWorkspaceColor());
+
+        // we need to shift the bitmap vertically so that it spans over the
+        // menubar conveniently
+        long nMenubarHeight = 0;
+        SystemWindow* pSysWin = GetSystemWindow();
+        if (pSysWin && pSysWin->GetMenuBar())
+        {
+            vcl::Window* pMenubarWin = pSysWin->GetMenuBar()->GetWindow();
+            if (pMenubarWin)
+                nMenubarHeight = pMenubarWin->GetOutputHeightPixel();
+        }
+        aWallpaper.SetRect(Rectangle(Point(0, -nMenubarHeight),
+                           Size(rRenderContext.GetOutputWidthPixel(),
+                                rRenderContext.GetOutputHeightPixel() + nMenubarHeight)));
+
+        rRenderContext.SetBackground(aWallpaper);
+    }
+    else if (rRenderContext.IsNativeControlSupported(CTRL_TOOLBAR, PART_ENTIRE_CONTROL))
+    {
+        Wallpaper aWallpaper;
+        aWallpaper.SetStyle(WALLPAPER_APPLICATIONGRADIENT);
+        rRenderContext.SetBackground(aWallpaper);
+    }
+    else
+        rRenderContext.SetBackground(Wallpaper(rSetting.GetFaceColor()));
+
+}
+
 void DockingAreaWindow::Paint(vcl::RenderContext& rRenderContext, const Rectangle&)
 {
+
+    const StyleSettings rSetting = rRenderContext.GetSettings().GetStyleSettings();
+
     EnableNativeWidget(true); // only required because the toolkit currently switches this flag off
     if (rRenderContext.IsNativeControlSupported(CTRL_TOOLBAR, PART_ENTIRE_CONTROL))
     {
         ToolbarValue aControlValue;
-        const StyleSettings rSetting = rRenderContext.GetSettings().GetStyleSettings();
 
         if (GetAlign() == WINDOWALIGN_TOP && ImplGetSVData()->maNWFData.mbMenuBarDockingAreaCommonBG)
         {
@@ -256,7 +259,6 @@ void DockingAreaWindow::Paint(vcl::RenderContext& rRenderContext, const Rectangl
 
 void DockingAreaWindow::Resize()
 {
-    ImplInitBackground( this );
     ImplInvalidateMenubar( this );
     if (IsNativeControlSupported(CTRL_TOOLBAR, PART_ENTIRE_CONTROL))
         Invalidate();


More information about the Libreoffice-commits mailing list