[Libreoffice-commits] core.git: svtools/source

Eike Rathke erack at redhat.com
Tue Nov 21 10:19:50 UTC 2017


 svtools/source/control/tabbar.cxx |   47 ++++++++++++++++++++------------------
 1 file changed, 25 insertions(+), 22 deletions(-)

New commits:
commit 77ee31f4f89a4db50064040d026feecbbfb7b20b
Author: Eike Rathke <erack at redhat.com>
Date:   Mon Nov 20 23:30:50 2017 +0100

    Render lock symbol with sheet name, tdf#95880 follow-up
    
    Visually somewhat cleaner, plus may have benefits in RTL context
    or could be easier adapted.
    
    Change-Id: Iec75879e05c9c6bb602d3a368fb8eba59d1c8a13
    Reviewed-on: https://gerrit.libreoffice.org/45012
    Reviewed-by: Eike Rathke <erack at redhat.com>
    Tested-by: Eike Rathke <erack at redhat.com>

diff --git a/svtools/source/control/tabbar.cxx b/svtools/source/control/tabbar.cxx
index c25b7c07c536..cb9ee3fe007c 100644
--- a/svtools/source/control/tabbar.cxx
+++ b/svtools/source/control/tabbar.cxx
@@ -126,17 +126,6 @@ public:
             mrRenderContext.DrawCtrlText(aPos, aText, 0, aText.getLength(), (DrawTextFlags::Disable | DrawTextFlags::Mnemonic));
     }
 
-    void drawProtectionSymbol(const OUString &aProtectionSymbol)
-    {
-        tools::Rectangle aRect = maRect;
-        long nSymbolHeight = mrRenderContext.GetTextHeight();
-        Point aPos = aRect.TopLeft();
-        aPos.X() += 2;
-        aPos.Y() += (aRect.getHeight() - nSymbolHeight) / 2;
-
-        mrRenderContext.DrawText(aPos, aProtectionSymbol);
-    }
-
     void drawOverTopBorder()
     {
         Point aTopLeft  = maRect.TopLeft()  + Point(1, 0);
@@ -242,6 +231,18 @@ struct ImplTabBarItem
     {
         return mbSelect || (pCurItem == this);
     }
+
+    OUString GetRenderText() const
+    {
+        if (!mbProtect)
+            return maText;
+        else
+        {
+            constexpr sal_uInt32 cLockChar[] = { 0x1F512, 0x2002 };   // Lock + EN SPACE
+            const OUString aLockSymbol( cLockChar, SAL_N_ELEMENTS(cLockChar));
+            return aLockSymbol + maText;
+        }
+    }
 };
 
 class ImplTabButton : public PushButton
@@ -676,7 +677,7 @@ bool TabBar::ImplCalcWidth()
     bool bChanged = false;
     for (ImplTabBarItem* pItem : mpImpl->mpItemList)
     {
-        long nNewWidth = GetTextWidth(pItem->maText);
+        long nNewWidth = GetTextWidth(pItem->GetRenderText());
         if (mnCurMaxWidth && (nNewWidth > mnCurMaxWidth))
         {
             pItem->mbShort = true;
@@ -1187,7 +1188,9 @@ void TabBar::Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle& r
             bool bSelected = pItem->IsSelected(pCurItem);
             // We disable custom background color in high contrast mode.
             bool bCustomBgColor = !pItem->IsDefaultTabBgColor() && !rStyleSettings.GetHighContrastMode();
-            OUString aText = pItem->mbShort ? rRenderContext.GetEllipsisString(pItem->maText, mnCurMaxWidth) : pItem->maText;
+            OUString aText = pItem->mbShort ?
+                rRenderContext.GetEllipsisString(pItem->GetRenderText(), mnCurMaxWidth) :
+                pItem->GetRenderText();
 
             aDrawer.setRect(aRect);
             aDrawer.setSelected(bSelected);
@@ -1232,13 +1235,6 @@ void TabBar::Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle& r
 
             aDrawer.drawText(aText);
 
-            if (pItem->mbProtect)
-            {
-                constexpr sal_uInt32 cLockChar = 0x1F512;
-                OUString aLockSymbol( &cLockChar, 1);
-                aDrawer.drawProtectionSymbol(aLockSymbol);
-            }
-
             if (bCurrent)
             {
                 rRenderContext.SetLineColor();
@@ -2064,8 +2060,15 @@ void TabBar::SetProtectionSymbol(sal_uInt16 nPageId, bool bProtection)
     sal_uInt16 nPos = GetPagePos(nPageId);
     if (nPos != PAGE_NOT_FOUND)
     {
-        mpImpl->mpItemList[nPos]->mbProtect = bProtection;
-        Invalidate(mpImpl->mpItemList[nPos]->maRect);
+        if (mpImpl->mpItemList[nPos]->mbProtect != bProtection)
+        {
+            mpImpl->mpItemList[nPos]->mbProtect = bProtection;
+            mbSizeFormat = true;    // render text width changes, thus bar width
+
+            // redraw bar
+            if (IsReallyVisible() && IsUpdateMode())
+                Invalidate();
+        }
     }
 }
 


More information about the Libreoffice-commits mailing list