svtools/source/brwbox/ebbcontrols.cxx |   24 +++++++++++++++++++++++-
 vcl/inc/vcl/button.hxx                |   15 +++++++++------
 vcl/source/control/button.cxx         |   18 ++++++++++++------
 3 files changed, 44 insertions(+), 13 deletions(-)

New commits:
commit a1345cd93a57ec7d9352f2c71ec2664332ce5e76
Author: Noel Power <noel.po...@novell.com>
Date:   Fri Jul 6 11:19:57 2012 +0100

    fdo#51336 - change vcl checkbox no-label behaviour
    
    Change-Id: I352c6041cc520dc76c302190dcf3a6945f5ac85f

diff --git a/svtools/source/brwbox/ebbcontrols.cxx 
b/svtools/source/brwbox/ebbcontrols.cxx
index 1d7b025..b0ab801 100644
--- a/svtools/source/brwbox/ebbcontrols.cxx
+++ b/svtools/source/brwbox/ebbcontrols.cxx
@@ -253,6 +253,28 @@ namespace svt
     //= CheckBoxControl
     //==================================================================
     //------------------------------------------------------------------
+
+    class CBCntrlTriState : public TriStateBox
+    {
+        CBCntrlTriState( const CBCntrlTriState & );
+        CBCntrlTriState& operator= ( const CBCntrlTriState & );
+    protected:
+        virtual void ImplHandleHoriAlign( const Point& rPos, const Size& rSize,
+                                    const Size& rImageSize, Rectangle& 
rStateRect )
+        {
+            WinBits nWinStyle = GetStyle();
+            if ( nWinStyle & WB_CENTER )
+                rStateRect.Left() = 
rPos.X()+((rSize.Width()-rImageSize.Width())/2);
+            else if ( nWinStyle & WB_RIGHT )
+                rStateRect.Left() = rPos.X()+rSize.Width()-rImageSize.Width();
+            else
+                rStateRect.Left() = rPos.X();
+        }
+    public:
+        CBCntrlTriState( Window* pParent, WinBits nStyle = 0 ) : TriStateBox( 
pParent, nStyle ) {}
+        CBCntrlTriState( Window* pParent, const ResId& rResId ) : TriStateBox( 
pParent, rResId ) {}
+    };
+
     CheckBoxControl::CheckBoxControl(Window* pParent, WinBits nWinStyle)
                    :Control(pParent, nWinStyle)
     {
@@ -267,7 +289,7 @@ namespace svt
 
         EnableChildTransparentMode();
 
-        pBox = new TriStateBox(this,WB_CENTER|WB_VCENTER);
+        pBox = new CBCntrlTriState(this,WB_CENTER|WB_VCENTER);
         pBox->EnableChildTransparentMode();
         pBox->SetPaintTransparent( sal_True );
         pBox->SetClickHdl( LINK( this, CheckBoxControl, OnClick ) );
diff --git a/vcl/inc/vcl/button.hxx b/vcl/inc/vcl/button.hxx
index 51b6034..64f7581 100644
--- a/vcl/inc/vcl/button.hxx
+++ b/vcl/inc/vcl/button.hxx
@@ -401,7 +401,6 @@ public:
 
 class VCL_DLLPUBLIC CheckBox : public Button
 {
-private:
     Rectangle       maStateRect;
     Rectangle       maMouseRect;
     TriState        meState;
@@ -420,7 +419,7 @@ private:
     SAL_DLLPRIVATE void         ImplDrawCheckBox( bool bLayout = false );
     SAL_DLLPRIVATE long         ImplGetImageToTextDistance() const;
     SAL_DLLPRIVATE Size         ImplGetCheckImageSize() const;
-
+private:
     // Copy assignment is forbidden and not implemented.
     SAL_DLLPRIVATE              CheckBox(const CheckBox &);
     SAL_DLLPRIVATE              CheckBox& operator= (const CheckBox &);
@@ -428,15 +427,19 @@ private:
 protected:
     using Control::ImplInitSettings;
     using Window::ImplInit;
+    // allows the behaviour of horizontal placement of the checbox image to be
+    // overridden.
+    virtual void ImplHandleHoriAlign( const Point& rPos, const Size& rSize,
+                                    const Size& rImageSize, Rectangle& 
rStateRect );
     SAL_DLLPRIVATE void         ImplInit( Window* pParent, WinBits nStyle );
     SAL_DLLPRIVATE void         ImplLoadRes( const ResId& rResId );
-    SAL_DLLPRIVATE virtual void FillLayoutData() const;
-    SAL_DLLPRIVATE virtual const Font&
+                   virtual void FillLayoutData() const;
+                   virtual const Font&
                                 GetCanonicalFont( const StyleSettings& _rStyle 
) const;
-    SAL_DLLPRIVATE virtual const Color&
+                   virtual const Color&
                                 GetCanonicalTextColor( const StyleSettings& 
_rStyle ) const;
 
-    SAL_DLLPRIVATE virtual void ImplDrawCheckBoxState();
+                   virtual void ImplDrawCheckBoxState();
     SAL_DLLPRIVATE const Rectangle& GetStateRect() const { return maStateRect; 
}
     SAL_DLLPRIVATE const Rectangle& GetMouseRect() const { return maMouseRect; 
}
 public:
diff --git a/vcl/source/control/button.cxx b/vcl/source/control/button.cxx
index 6d5a8f9..e3ed723 100644
--- a/vcl/source/control/button.cxx
+++ b/vcl/source/control/button.cxx
@@ -3251,12 +3251,9 @@ void CheckBox::ImplDraw( OutputDevice* pDev, sal_uLong 
nDrawFlags,
     }
     else
     {
-        if ( nWinStyle & WB_CENTER )
-            rStateRect.Left() = 
rPos.X()+((rSize.Width()-rImageSize.Width())/2);
-        else if ( nWinStyle & WB_RIGHT )
-            rStateRect.Left() = rPos.X()+rSize.Width()-rImageSize.Width();
-        else
-            rStateRect.Left() = rPos.X();
+        // allow specific handling of WB_CENTER, WB_LEFT & WB_RIGHT by
+        // by subclasses
+        ImplHandleHoriAlign( rPos, rSize, rImageSize, rStateRect );
         if ( nWinStyle & WB_VCENTER )
             rStateRect.Top() = 
rPos.Y()+((rSize.Height()-rImageSize.Height())/2);
         else if ( nWinStyle & WB_BOTTOM )
@@ -3298,6 +3295,15 @@ void CheckBox::ImplDraw( OutputDevice* pDev, sal_uLong 
nDrawFlags,
 
 // -----------------------------------------------------------------------
 
+void CheckBox:: ImplHandleHoriAlign( const Point& rPos, const Size& /*rSize*/,
+                                    const Size& /*rImageSize*/, Rectangle& 
rStateRect )
+{
+    // align Checkbox image left ( always )
+    rStateRect.Left() = rPos.X();
+}
+
+// -----------------------------------------------------------------------
+
 void CheckBox::ImplDrawCheckBox( bool bLayout )
 {
     Size aImageSize = ImplGetCheckImageSize();
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to