LCOV - code coverage report
Current view: top level - vcl/source/control - fixed.cxx (source / functions) Hit Total Coverage
Test: commit 10e77ab3ff6f4314137acd6e2702a6e5c1ce1fae Lines: 319 609 52.4 %
Date: 2014-11-03 Functions: 52 79 65.8 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : #include "tools/rc.h"
      21             : 
      22             : #include "vcl/decoview.hxx"
      23             : #include "vcl/dialog.hxx"
      24             : #include "vcl/event.hxx"
      25             : #include "vcl/fixed.hxx"
      26             : #include "vcl/svapp.hxx"
      27             : #include "vcl/settings.hxx"
      28             : 
      29             : #include <comphelper/string.hxx>
      30             : #include "controldata.hxx"
      31             : #include "impimagetree.hxx"
      32             : #include "window.h"
      33             : 
      34             : #define FIXEDLINE_TEXT_BORDER    4
      35             : 
      36             : #define FIXEDTEXT_VIEW_STYLE    (WB_3DLOOK |                        \
      37             :                                  WB_LEFT | WB_CENTER | WB_RIGHT |   \
      38             :                                  WB_TOP | WB_VCENTER | WB_BOTTOM |  \
      39             :                                  WB_WORDBREAK | WB_NOLABEL |        \
      40             :                                  WB_INFO | WB_PATHELLIPSIS)
      41             : #define FIXEDLINE_VIEW_STYLE    (WB_3DLOOK | WB_NOLABEL)
      42             : #define FIXEDBITMAP_VIEW_STYLE  (WB_3DLOOK |                        \
      43             :                                  WB_LEFT | WB_CENTER | WB_RIGHT |   \
      44             :                                  WB_TOP | WB_VCENTER | WB_BOTTOM |  \
      45             :                                  WB_SCALE)
      46             : #define FIXEDIMAGE_VIEW_STYLE   (WB_3DLOOK |                        \
      47             :                                  WB_LEFT | WB_CENTER | WB_RIGHT |   \
      48             :                                  WB_TOP | WB_VCENTER | WB_BOTTOM |  \
      49             :                                  WB_SCALE)
      50             : 
      51           0 : static Point ImplCalcPos( WinBits nStyle, const Point& rPos,
      52             :                           const Size& rObjSize, const Size& rWinSize )
      53             : {
      54             :     long    nX;
      55             :     long    nY;
      56             : 
      57           0 :     if ( nStyle & WB_LEFT )
      58           0 :         nX = 0;
      59           0 :     else if ( nStyle & WB_RIGHT )
      60           0 :         nX = rWinSize.Width()-rObjSize.Width();
      61             :     else
      62           0 :         nX = (rWinSize.Width()-rObjSize.Width())/2;
      63             : 
      64           0 :     if ( nStyle & WB_TOP )
      65           0 :         nY = 0;
      66           0 :     else if ( nStyle & WB_BOTTOM )
      67           0 :         nY = rWinSize.Height()-rObjSize.Height();
      68             :     else
      69           0 :         nY = (rWinSize.Height()-rObjSize.Height())/2;
      70             : 
      71           0 :     if ( nStyle & WB_TOPLEFTVISIBLE )
      72             :     {
      73           0 :         if ( nX < 0 )
      74           0 :             nX = 0;
      75           0 :         if ( nY < 0 )
      76           0 :             nY = 0;
      77             :     }
      78             : 
      79           0 :     Point aPos( nX+rPos.X(), nY+rPos.Y() );
      80           0 :     return aPos;
      81             : }
      82             : 
      83        5573 : void FixedText::ImplInit( vcl::Window* pParent, WinBits nStyle )
      84             : {
      85        5573 :     nStyle = ImplInitStyle( nStyle );
      86        5573 :     Control::ImplInit( pParent, nStyle, NULL );
      87        5573 :     ImplInitSettings( true, true, true );
      88        5573 : }
      89             : 
      90       14407 : WinBits FixedText::ImplInitStyle( WinBits nStyle )
      91             : {
      92       14407 :     if ( !(nStyle & WB_NOGROUP) )
      93       14407 :         nStyle |= WB_GROUP;
      94       14407 :     return nStyle;
      95             : }
      96             : 
      97        7885 : const vcl::Font& FixedText::GetCanonicalFont( const StyleSettings& _rStyle ) const
      98             : {
      99        7885 :     return ( GetStyle() & WB_INFO ) ? _rStyle.GetInfoFont() : _rStyle.GetLabelFont();
     100             : }
     101             : 
     102        7879 : const Color& FixedText::GetCanonicalTextColor( const StyleSettings& _rStyle ) const
     103             : {
     104        7879 :     return ( GetStyle() & WB_INFO ) ? _rStyle.GetInfoTextColor() : _rStyle.GetLabelTextColor();
     105             : }
     106             : 
     107        7883 : void FixedText::ImplInitSettings( bool bFont,
     108             :                                   bool bForeground, bool bBackground )
     109             : {
     110        7883 :     Control::ImplInitSettings( bFont, bForeground );
     111             : 
     112        7883 :     if ( bBackground )
     113             :     {
     114        6079 :         vcl::Window* pParent = GetParent();
     115        6079 :         if ( pParent->IsChildTransparentModeEnabled() && !IsControlBackground() )
     116             :         {
     117        1482 :             EnableChildTransparentMode( true );
     118        1482 :             SetParentClipMode( PARENTCLIPMODE_NOCLIP );
     119        1482 :             SetPaintTransparent( true );
     120        1482 :             SetBackground();
     121             :         }
     122             :         else
     123             :         {
     124        4597 :             EnableChildTransparentMode( false );
     125        4597 :             SetParentClipMode( 0 );
     126        4597 :             SetPaintTransparent( false );
     127             : 
     128        4597 :             if ( IsControlBackground() )
     129           0 :                 SetBackground( GetControlBackground() );
     130             :             else
     131        4597 :                 SetBackground( pParent->GetBackground() );
     132             :         }
     133             :     }
     134        7883 : }
     135             : 
     136        1893 : FixedText::FixedText( vcl::Window* pParent, WinBits nStyle )
     137             :     : Control(WINDOW_FIXEDTEXT)
     138             :     , m_nMaxWidthChars(-1)
     139             :     , m_nMinWidthChars(-1)
     140        1893 :     , m_pMnemonicWindow(NULL)
     141             : {
     142        1893 :     ImplInit( pParent, nStyle );
     143        1893 : }
     144             : 
     145        3680 : FixedText::FixedText( vcl::Window* pParent, const ResId& rResId )
     146             :     : Control(WINDOW_FIXEDTEXT)
     147             :     , m_nMaxWidthChars(-1)
     148             :     , m_nMinWidthChars(-1)
     149        3680 :     , m_pMnemonicWindow(NULL)
     150             : {
     151        3680 :     rResId.SetRT( RSC_TEXT );
     152        3680 :     WinBits nStyle = ImplInitRes( rResId );
     153        3680 :     ImplInit( pParent, nStyle );
     154        3680 :     ImplLoadRes( rResId );
     155             : 
     156        3680 :     if ( !(nStyle & WB_HIDE) )
     157        3680 :         Show();
     158        3680 : }
     159             : 
     160       11873 : sal_uInt16 FixedText::ImplGetTextStyle( WinBits nWinStyle )
     161             : {
     162       11873 :     sal_uInt16 nTextStyle = TEXT_DRAW_MNEMONIC | TEXT_DRAW_ENDELLIPSIS;
     163             : 
     164       11873 :     if( ! (nWinStyle & WB_NOMULTILINE) )
     165       11873 :         nTextStyle |= TEXT_DRAW_MULTILINE;
     166             : 
     167       11873 :     if ( nWinStyle & WB_RIGHT )
     168           0 :         nTextStyle |= TEXT_DRAW_RIGHT;
     169       11873 :     else if ( nWinStyle & WB_CENTER )
     170         134 :         nTextStyle |= TEXT_DRAW_CENTER;
     171             :     else
     172       11739 :         nTextStyle |= TEXT_DRAW_LEFT;
     173       11873 :     if ( nWinStyle & WB_BOTTOM )
     174           0 :         nTextStyle |= TEXT_DRAW_BOTTOM;
     175       11873 :     else if ( nWinStyle & WB_VCENTER )
     176        4717 :         nTextStyle |= TEXT_DRAW_VCENTER;
     177             :     else
     178        7156 :         nTextStyle |= TEXT_DRAW_TOP;
     179       11873 :     if ( nWinStyle & WB_WORDBREAK )
     180             :     {
     181        6909 :         nTextStyle |= TEXT_DRAW_WORDBREAK;
     182        6909 :         if ( (nWinStyle & WB_HYPHENATION ) == WB_HYPHENATION )
     183           0 :             nTextStyle |= TEXT_DRAW_WORDBREAK_HYPHENATION;
     184             :     }
     185       11873 :     if ( nWinStyle & WB_NOLABEL )
     186           0 :         nTextStyle &= ~TEXT_DRAW_MNEMONIC;
     187             : 
     188       11873 :     return nTextStyle;
     189             : }
     190             : 
     191       10073 : void FixedText::ImplDraw( OutputDevice* pDev, sal_uLong nDrawFlags,
     192             :                           const Point& rPos, const Size& rSize,
     193             :                           bool bFillLayout
     194             :                           ) const
     195             : {
     196       10073 :     const StyleSettings&    rStyleSettings = GetSettings().GetStyleSettings();
     197       10073 :     WinBits                 nWinStyle = GetStyle();
     198       10073 :     OUString           aText( GetText() );
     199       10073 :     sal_uInt16              nTextStyle = FixedText::ImplGetTextStyle( nWinStyle );
     200       10073 :     Point                   aPos = rPos;
     201             : 
     202       10073 :     if ( nWinStyle & WB_EXTRAOFFSET )
     203           0 :         aPos.X() += 2;
     204             : 
     205       10073 :     if ( nWinStyle & WB_PATHELLIPSIS )
     206             :     {
     207           0 :         nTextStyle &= ~(TEXT_DRAW_ENDELLIPSIS | TEXT_DRAW_MULTILINE | TEXT_DRAW_WORDBREAK);
     208           0 :         nTextStyle |= TEXT_DRAW_PATHELLIPSIS;
     209             :     }
     210       10073 :     if ( nDrawFlags & WINDOW_DRAW_NOMNEMONIC )
     211             :     {
     212           0 :         if ( nTextStyle & TEXT_DRAW_MNEMONIC )
     213             :         {
     214           0 :             aText = GetNonMnemonicString( aText );
     215           0 :             nTextStyle &= ~TEXT_DRAW_MNEMONIC;
     216             :         }
     217             :     }
     218       10073 :     if ( !(nDrawFlags & WINDOW_DRAW_NODISABLE) )
     219             :     {
     220       10073 :         if ( !IsEnabled() )
     221         431 :             nTextStyle |= TEXT_DRAW_DISABLE;
     222             :     }
     223       20146 :     if ( (nDrawFlags & WINDOW_DRAW_MONO) ||
     224       10073 :          (rStyleSettings.GetOptions() & STYLE_OPTION_MONO) )
     225           0 :         nTextStyle |= TEXT_DRAW_MONO;
     226             : 
     227       10073 :     if( bFillLayout )
     228           2 :         mpControlData->mpLayoutData->m_aDisplayText = OUString();
     229             : 
     230       10073 :     Rectangle aRect( Rectangle( aPos, rSize ) );
     231             :     DrawControlText( *pDev, aRect, aText, nTextStyle,
     232             :         bFillLayout ? &mpControlData->mpLayoutData->m_aUnicodeBoundRects : NULL,
     233             :         bFillLayout ? &mpControlData->mpLayoutData->m_aDisplayText : NULL
     234       10073 :     );
     235       10073 : }
     236             : 
     237       10071 : void FixedText::Paint( const Rectangle& )
     238             : {
     239       10071 :     ImplDraw( this, 0, Point(), GetOutputSizePixel() );
     240       10071 : }
     241             : 
     242           0 : void FixedText::Draw( OutputDevice* pDev, const Point& rPos, const Size& rSize,
     243             :                       sal_uLong nFlags )
     244             : {
     245           0 :     ImplInitSettings( true, true, true );
     246             : 
     247           0 :     Point       aPos  = pDev->LogicToPixel( rPos );
     248           0 :     Size        aSize = pDev->LogicToPixel( rSize );
     249           0 :     vcl::Font   aFont = GetDrawPixelFont( pDev );
     250             : 
     251           0 :     pDev->Push();
     252           0 :     pDev->SetMapMode();
     253           0 :     pDev->SetFont( aFont );
     254           0 :     if ( nFlags & WINDOW_DRAW_MONO )
     255           0 :         pDev->SetTextColor( Color( COL_BLACK ) );
     256             :     else
     257           0 :         pDev->SetTextColor( GetTextColor() );
     258           0 :     pDev->SetTextFillColor();
     259             : 
     260           0 :     bool bBorder = !(nFlags & WINDOW_DRAW_NOBORDER ) && (GetStyle() & WB_BORDER);
     261           0 :     bool bBackground = !(nFlags & WINDOW_DRAW_NOBACKGROUND) && IsControlBackground();
     262           0 :     if ( bBorder || bBackground )
     263             :     {
     264           0 :         Rectangle aRect( aPos, aSize );
     265           0 :         if ( bBorder )
     266             :         {
     267           0 :             ImplDrawFrame( pDev, aRect );
     268             :         }
     269           0 :         if ( bBackground )
     270             :         {
     271           0 :             pDev->SetFillColor( GetControlBackground() );
     272           0 :             pDev->DrawRect( aRect );
     273             :         }
     274             :     }
     275             : 
     276           0 :     ImplDraw( pDev, nFlags, aPos, aSize );
     277           0 :     pDev->Pop();
     278           0 : }
     279             : 
     280       21981 : void FixedText::Resize()
     281             : {
     282       21981 :     Control::Resize();
     283       21981 :     Invalidate();
     284       21981 : }
     285             : 
     286       28370 : void FixedText::StateChanged( StateChangedType nType )
     287             : {
     288       28370 :     Control::StateChanged( nType );
     289             : 
     290       28370 :     if ( (nType == StateChangedType::ENABLE) ||
     291       20605 :          (nType == StateChangedType::TEXT) ||
     292             :          (nType == StateChangedType::UPDATEMODE) )
     293             :     {
     294       15530 :         if ( IsReallyVisible() && IsUpdateMode() )
     295        1798 :             Invalidate();
     296             :     }
     297       20605 :     else if ( nType == StateChangedType::STYLE )
     298             :     {
     299        8834 :         SetStyle( ImplInitStyle( GetStyle() ) );
     300       17668 :         if ( (GetPrevStyle() & FIXEDTEXT_VIEW_STYLE) !=
     301        8834 :              (GetStyle() & FIXEDTEXT_VIEW_STYLE) )
     302             :         {
     303        1478 :             ImplInitSettings( true, false, false );
     304        1478 :             Invalidate();
     305             :         }
     306             :     }
     307       11771 :     else if ( (nType == StateChangedType::ZOOM)  ||
     308             :               (nType == StateChangedType::CONTROLFONT) )
     309             :     {
     310         324 :         ImplInitSettings( true, false, false );
     311         324 :         Invalidate();
     312             :     }
     313       11447 :     else if ( nType == StateChangedType::CONTROLFOREGROUND )
     314             :     {
     315           2 :         ImplInitSettings( false, true, false );
     316           2 :         Invalidate();
     317             :     }
     318       11445 :     else if ( nType == StateChangedType::CONTROLBACKGROUND )
     319             :     {
     320           0 :         ImplInitSettings( false, false, true );
     321           0 :         Invalidate();
     322             :     }
     323       28370 : }
     324             : 
     325         770 : void FixedText::DataChanged( const DataChangedEvent& rDCEvt )
     326             : {
     327         770 :     Control::DataChanged( rDCEvt );
     328             : 
     329        2310 :     if ( (rDCEvt.GetType() == DATACHANGED_FONTS) ||
     330        2046 :          (rDCEvt.GetType() == DATACHANGED_FONTSUBSTITUTION) ||
     331        1540 :          ((rDCEvt.GetType() == DATACHANGED_SETTINGS) &&
     332         770 :           (rDCEvt.GetFlags() & SETTINGS_STYLE)) )
     333             :     {
     334         506 :         ImplInitSettings( true, true, true );
     335         506 :         Invalidate();
     336             :     }
     337         770 : }
     338             : 
     339        1552 : Size FixedText::getTextDimensions(Control const *pControl, const OUString &rTxt, long nMaxWidth)
     340             : {
     341        1552 :     sal_uInt16 nStyle = ImplGetTextStyle( pControl->GetStyle() );
     342        1552 :     if ( !( pControl->GetStyle() & WB_NOLABEL ) )
     343        1552 :         nStyle |= TEXT_DRAW_MNEMONIC;
     344             : 
     345             :     return pControl->GetTextRect(Rectangle( Point(), Size(nMaxWidth, 0x7fffffff)),
     346        1552 :                                        rTxt, nStyle).GetSize();
     347             : }
     348             : 
     349        1552 : Size FixedText::CalcMinimumTextSize( Control const *pControl, long nMaxWidth )
     350             : {
     351        1552 :     Size aSize = getTextDimensions(pControl, pControl->GetText(), nMaxWidth);
     352             : 
     353        1552 :     if ( pControl->GetStyle() & WB_EXTRAOFFSET )
     354           0 :         aSize.Width() += 2;
     355             : 
     356             :     // GetTextRect cannot take an empty string
     357        1552 :     if ( aSize.Width() < 0 )
     358           0 :         aSize.Width() = 0;
     359        1552 :     if ( aSize.Height() <= 0 )
     360          42 :         aSize.Height() = pControl->GetTextHeight();
     361             : 
     362        1552 :     return aSize;
     363             : }
     364             : 
     365        1516 : Size FixedText::CalcMinimumSize( long nMaxWidth ) const
     366             : {
     367        1516 :     return CalcWindowSize( CalcMinimumTextSize ( this, nMaxWidth ) );
     368             : }
     369             : 
     370        1480 : Size FixedText::GetOptimalSize() const
     371             : {
     372        1480 :     sal_Int32 nMaxAvailWidth = 0x7fffffff;
     373        1480 :     const OUString &rTxt = GetText();
     374        1480 :     if (m_nMaxWidthChars != -1 && m_nMaxWidthChars < rTxt.getLength())
     375             :     {
     376             :         nMaxAvailWidth = getTextDimensions(this,
     377           0 :             rTxt.copy(0, m_nMaxWidthChars), 0x7fffffff).Width();
     378             :     }
     379        1480 :     Size aRet = CalcMinimumSize(nMaxAvailWidth);
     380        1480 :     if (m_nMinWidthChars != -1)
     381             :     {
     382           0 :         OUStringBuffer aBuf;
     383           0 :         comphelper::string::padToLength(aBuf, m_nMinWidthChars, 'x');
     384             :         Size aMinAllowed = getTextDimensions(this,
     385           0 :             aBuf.makeStringAndClear(), 0x7fffffff);
     386           0 :         if (aMinAllowed.Width() > aRet.Width())
     387           0 :             aRet = aMinAllowed;
     388             :     }
     389        1480 :     return aRet;
     390             : }
     391             : 
     392           2 : void FixedText::FillLayoutData() const
     393             : {
     394           2 :     mpControlData->mpLayoutData = new vcl::ControlLayoutData();
     395           2 :     ImplDraw( const_cast<FixedText*>(this), 0, Point(), GetOutputSizePixel(), true );
     396           2 : }
     397             : 
     398           0 : void FixedText::setMaxWidthChars(sal_Int32 nWidth)
     399             : {
     400           0 :     if (nWidth != m_nMaxWidthChars)
     401             :     {
     402           0 :         m_nMaxWidthChars = nWidth;
     403           0 :         queue_resize();
     404             :     }
     405           0 : }
     406             : 
     407           0 : void FixedText::setMinWidthChars(sal_Int32 nWidth)
     408             : {
     409           0 :     if (nWidth != m_nMinWidthChars)
     410             :     {
     411           0 :         m_nMinWidthChars = nWidth;
     412           0 :         queue_resize();
     413             :     }
     414           0 : }
     415             : 
     416        8868 : bool FixedText::set_property(const OString &rKey, const OString &rValue)
     417             : {
     418        8868 :     if (rKey == "max-width-chars")
     419           0 :         setMaxWidthChars(rValue.toInt32());
     420        8868 :     else if (rKey == "width-chars")
     421           0 :         setMinWidthChars(rValue.toInt32());
     422        8868 :     else if (rKey == "ellipsize")
     423             :     {
     424           0 :         WinBits nBits = GetStyle();
     425           0 :         nBits &= ~(WB_PATHELLIPSIS);
     426           0 :         if (rValue != "none")
     427             :         {
     428             :             SAL_WARN_IF(rValue != "end", "vcl.layout", "Only endellipsis support for now");
     429           0 :             nBits |= WB_PATHELLIPSIS;
     430             :         }
     431           0 :         SetStyle(nBits);
     432             :     }
     433             :     else
     434        8868 :         return Control::set_property(rKey, rValue);
     435           0 :     return true;
     436             : }
     437             : 
     438          10 : vcl::Window* FixedText::getAccessibleRelationLabelFor() const
     439             : {
     440          10 :     vcl::Window *pWindow = Control::getAccessibleRelationLabelFor();
     441          10 :     if (pWindow)
     442           0 :         return pWindow;
     443          10 :     return get_mnemonic_widget();
     444             : }
     445             : 
     446        9957 : void FixedText::set_mnemonic_widget(vcl::Window *pWindow)
     447             : {
     448        9957 :     if (pWindow == m_pMnemonicWindow)
     449       16962 :         return;
     450        2952 :     if (m_pMnemonicWindow)
     451             :     {
     452        1476 :         vcl::Window *pTempReEntryGuard = m_pMnemonicWindow;
     453        1476 :         m_pMnemonicWindow = NULL;
     454        1476 :         pTempReEntryGuard->remove_mnemonic_label(this);
     455             :     }
     456        2952 :     m_pMnemonicWindow = pWindow;
     457        2952 :     if (m_pMnemonicWindow)
     458        1476 :         m_pMnemonicWindow->add_mnemonic_label(this);
     459             : }
     460             : 
     461       12652 : FixedText::~FixedText()
     462             : {
     463        5529 :     set_mnemonic_widget(NULL);
     464        7123 : }
     465             : 
     466           0 : SelectableFixedText::SelectableFixedText(vcl::Window* pParent, WinBits nStyle)
     467           0 :     : Edit(pParent, nStyle)
     468             : {
     469             :     // no border
     470           0 :     SetBorderStyle( WindowBorderStyle::NOBORDER );
     471             :     // read-only
     472           0 :     SetReadOnly();
     473             :     // make it transparent
     474           0 :     SetControlBackground();
     475           0 :     SetBackground();
     476           0 :     SetPaintTransparent( true );
     477           0 : }
     478             : 
     479           0 : void SelectableFixedText::LoseFocus()
     480             : {
     481           0 :     Edit::LoseFocus();
     482             :     // clear cursor
     483           0 :     Invalidate();
     484           0 : }
     485             : 
     486         514 : void FixedLine::ImplInit( vcl::Window* pParent, WinBits nStyle )
     487             : {
     488         514 :     nStyle = ImplInitStyle( nStyle );
     489         514 :     Control::ImplInit( pParent, nStyle, NULL );
     490         514 :     ImplInitSettings( true, true, true );
     491         514 : }
     492             : 
     493         514 : WinBits FixedLine::ImplInitStyle( WinBits nStyle )
     494             : {
     495         514 :     if ( !(nStyle & WB_NOGROUP) )
     496         514 :         nStyle |= WB_GROUP;
     497         514 :     return nStyle;
     498             : }
     499             : 
     500         514 : const vcl::Font& FixedLine::GetCanonicalFont( const StyleSettings& _rStyle ) const
     501             : {
     502         514 :     return _rStyle.GetGroupFont();
     503             : }
     504             : 
     505         514 : const Color& FixedLine::GetCanonicalTextColor( const StyleSettings& _rStyle ) const
     506             : {
     507         514 :     return _rStyle.GetGroupTextColor();
     508             : }
     509             : 
     510         514 : void FixedLine::ImplInitSettings( bool bFont,
     511             :                                   bool bForeground, bool bBackground )
     512             : {
     513         514 :     Control::ImplInitSettings( bFont, bForeground );
     514             : 
     515         514 :     if ( bBackground )
     516             :     {
     517         514 :         vcl::Window* pParent = GetParent();
     518         514 :         if ( pParent->IsChildTransparentModeEnabled() && !IsControlBackground() )
     519             :         {
     520         464 :             EnableChildTransparentMode( true );
     521         464 :             SetParentClipMode( PARENTCLIPMODE_NOCLIP );
     522         464 :             SetPaintTransparent( true );
     523         464 :             SetBackground();
     524             :         }
     525             :         else
     526             :         {
     527          50 :             EnableChildTransparentMode( false );
     528          50 :             SetParentClipMode( 0 );
     529          50 :             SetPaintTransparent( false );
     530             : 
     531          50 :             if ( IsControlBackground() )
     532           0 :                 SetBackground( GetControlBackground() );
     533             :             else
     534          50 :                 SetBackground( pParent->GetBackground() );
     535             :         }
     536             :     }
     537         514 : }
     538             : 
     539          31 : void FixedLine::ImplDraw( bool bLayout )
     540             : {
     541          31 :     Size                    aOutSize = GetOutputSizePixel();
     542          31 :     OUString                aText = GetText();
     543          31 :     WinBits                 nWinStyle = GetStyle();
     544          31 :     MetricVector*           pVector = bLayout ? &mpControlData->mpLayoutData->m_aUnicodeBoundRects : NULL;
     545          31 :     OUString*               pDisplayText = bLayout ? &mpControlData->mpLayoutData->m_aDisplayText : NULL;
     546             : 
     547          31 :     DecorationView aDecoView( this );
     548          31 :     if ( aText.isEmpty() )
     549             :     {
     550          31 :         if( !pVector )
     551             :         {
     552          31 :             if ( nWinStyle & WB_VERT )
     553             :             {
     554          12 :                 long nX = (aOutSize.Width()-1)/2;
     555          12 :                 aDecoView.DrawSeparator( Point( nX, 0 ), Point( nX, aOutSize.Height()-1 ) );
     556             :             }
     557             :             else
     558             :             {
     559          19 :                 long nY = (aOutSize.Height()-1)/2;
     560          19 :                 aDecoView.DrawSeparator( Point( 0, nY ), Point( aOutSize.Width()-1, nY ), false );
     561             :             }
     562             :         }
     563             :     }
     564           0 :     else if( (nWinStyle & WB_VERT) )
     565             :     {
     566           0 :         long nWidth = GetTextWidth( aText );
     567           0 :         Push( PushFlags::FONT );
     568           0 :         vcl::Font aFont( GetFont() );
     569           0 :         aFont.SetOrientation( 900 );
     570           0 :         SetFont( aFont );
     571           0 :         Point aStartPt( aOutSize.Width()/2, aOutSize.Height()-1 );
     572           0 :         if( (nWinStyle & WB_VCENTER) )
     573           0 :             aStartPt.Y() -= (aOutSize.Height() - nWidth)/2;
     574           0 :         Point aTextPt( aStartPt );
     575           0 :         aTextPt.X() -= GetTextHeight()/2;
     576           0 :         DrawText( aTextPt, aText, 0, aText.getLength(), pVector, pDisplayText );
     577           0 :         Pop();
     578           0 :         if( aOutSize.Height() - aStartPt.Y() > FIXEDLINE_TEXT_BORDER )
     579           0 :             aDecoView.DrawSeparator( Point( aStartPt.X(), aOutSize.Height()-1 ),
     580           0 :                                      Point( aStartPt.X(), aStartPt.Y() + FIXEDLINE_TEXT_BORDER ) );
     581           0 :         if( aStartPt.Y() - nWidth - FIXEDLINE_TEXT_BORDER > 0 )
     582           0 :             aDecoView.DrawSeparator( Point( aStartPt.X(), aStartPt.Y() - nWidth - FIXEDLINE_TEXT_BORDER ),
     583           0 :                                      Point( aStartPt.X(), 0 ) );
     584             :     }
     585             :     else
     586             :     {
     587           0 :         sal_uInt16      nStyle = TEXT_DRAW_MNEMONIC | TEXT_DRAW_LEFT | TEXT_DRAW_VCENTER | TEXT_DRAW_ENDELLIPSIS;
     588           0 :         Rectangle   aRect( 0, 0, aOutSize.Width(), aOutSize.Height() );
     589           0 :         const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings();
     590           0 :         if( (nWinStyle & WB_CENTER) )
     591           0 :             nStyle |= TEXT_DRAW_CENTER;
     592             : 
     593           0 :         if ( !IsEnabled() )
     594           0 :             nStyle |= TEXT_DRAW_DISABLE;
     595           0 :         if ( GetStyle() & WB_NOLABEL )
     596           0 :             nStyle &= ~TEXT_DRAW_MNEMONIC;
     597           0 :         if ( rStyleSettings.GetOptions() & STYLE_OPTION_MONO )
     598           0 :             nStyle |= TEXT_DRAW_MONO;
     599             : 
     600           0 :         DrawControlText( *this, aRect, aText, nStyle, pVector, pDisplayText );
     601             : 
     602           0 :         if( !pVector )
     603             :         {
     604           0 :             long nTop = aRect.Top() + ((aRect.GetHeight()-1)/2);
     605           0 :             aDecoView.DrawSeparator( Point( aRect.Right()+FIXEDLINE_TEXT_BORDER, nTop ), Point( aOutSize.Width()-1, nTop ), false );
     606           0 :             if( aRect.Left() > FIXEDLINE_TEXT_BORDER )
     607           0 :                 aDecoView.DrawSeparator( Point( 0, nTop ), Point( aRect.Left()-FIXEDLINE_TEXT_BORDER, nTop ), false );
     608             :         }
     609          31 :     }
     610          31 : }
     611             : 
     612         514 : FixedLine::FixedLine( vcl::Window* pParent, WinBits nStyle ) :
     613         514 :     Control( WINDOW_FIXEDLINE )
     614             : {
     615         514 :     ImplInit( pParent, nStyle );
     616         514 :     SetSizePixel( Size( 2, 2 ) );
     617         514 : }
     618             : 
     619           0 : FixedLine::FixedLine( vcl::Window* pParent, const ResId& rResId ) :
     620           0 :     Control( WINDOW_FIXEDLINE )
     621             : {
     622           0 :     rResId.SetRT( RSC_FIXEDLINE );
     623           0 :     WinBits nStyle = ImplInitRes( rResId );
     624           0 :     ImplInit( pParent, nStyle );
     625           0 :     ImplLoadRes( rResId );
     626             : 
     627           0 :     if ( !(nStyle & WB_HIDE) )
     628           0 :         Show();
     629           0 : }
     630             : 
     631           0 : void  FixedLine::FillLayoutData() const
     632             : {
     633           0 :     mpControlData->mpLayoutData = new vcl::ControlLayoutData();
     634           0 :     const_cast<FixedLine*>(this)->ImplDraw( true );
     635           0 : }
     636             : 
     637          31 : void FixedLine::Paint( const Rectangle& )
     638             : {
     639          31 :     ImplDraw();
     640          31 : }
     641             : 
     642           0 : void FixedLine::Draw( OutputDevice*, const Point&, const Size&, sal_uLong )
     643             : {
     644           0 : }
     645             : 
     646        1008 : void FixedLine::Resize()
     647             : {
     648        1008 :     Control::Resize();
     649        1008 :     Invalidate();
     650        1008 : }
     651             : 
     652        1252 : void FixedLine::StateChanged( StateChangedType nType )
     653             : {
     654        1252 :     Control::StateChanged( nType );
     655             : 
     656        1252 :     if ( (nType == StateChangedType::ENABLE) ||
     657        1028 :          (nType == StateChangedType::TEXT) ||
     658             :          (nType == StateChangedType::UPDATEMODE) )
     659             :     {
     660         448 :         if ( IsReallyVisible() && IsUpdateMode() )
     661         208 :             Invalidate();
     662             :     }
     663        1028 :     else if ( nType == StateChangedType::STYLE )
     664             :     {
     665           0 :         SetStyle( ImplInitStyle( GetStyle() ) );
     666           0 :         if ( (GetPrevStyle() & FIXEDLINE_VIEW_STYLE) !=
     667           0 :              (GetStyle() & FIXEDLINE_VIEW_STYLE) )
     668           0 :             Invalidate();
     669             :     }
     670        1028 :     else if ( (nType == StateChangedType::ZOOM)  ||
     671        1028 :               (nType == StateChangedType::STYLE) ||
     672             :               (nType == StateChangedType::CONTROLFONT) )
     673             :     {
     674           0 :         ImplInitSettings( true, false, false );
     675           0 :         Invalidate();
     676             :     }
     677        1028 :     else if ( nType == StateChangedType::CONTROLFOREGROUND )
     678             :     {
     679           0 :         ImplInitSettings( false, true, false );
     680           0 :         Invalidate();
     681             :     }
     682        1028 :     else if ( nType == StateChangedType::CONTROLBACKGROUND )
     683             :     {
     684           0 :         ImplInitSettings( false, false, true );
     685           0 :         Invalidate();
     686             :     }
     687        1252 : }
     688             : 
     689           0 : void FixedLine::DataChanged( const DataChangedEvent& rDCEvt )
     690             : {
     691           0 :     Control::DataChanged( rDCEvt );
     692             : 
     693           0 :     if ( (rDCEvt.GetType() == DATACHANGED_FONTS) ||
     694           0 :          (rDCEvt.GetType() == DATACHANGED_FONTSUBSTITUTION) ||
     695           0 :          ((rDCEvt.GetType() == DATACHANGED_SETTINGS) &&
     696           0 :           (rDCEvt.GetFlags() & SETTINGS_STYLE)) )
     697             :     {
     698           0 :         ImplInitSettings( true, true, true );
     699           0 :         Invalidate();
     700             :     }
     701           0 : }
     702             : 
     703          36 : Size FixedLine::GetOptimalSize() const
     704             : {
     705          36 :     return CalcWindowSize( FixedText::CalcMinimumTextSize ( this, 0x7fffffff ) );
     706             : }
     707             : 
     708           0 : void FixedBitmap::ImplInit( vcl::Window* pParent, WinBits nStyle )
     709             : {
     710           0 :     nStyle = ImplInitStyle( nStyle );
     711           0 :     Control::ImplInit( pParent, nStyle, NULL );
     712           0 :     ImplInitSettings();
     713           0 : }
     714             : 
     715           0 : WinBits FixedBitmap::ImplInitStyle( WinBits nStyle )
     716             : {
     717           0 :     if ( !(nStyle & WB_NOGROUP) )
     718           0 :         nStyle |= WB_GROUP;
     719           0 :     return nStyle;
     720             : }
     721             : 
     722           0 : void FixedBitmap::ImplInitSettings()
     723             : {
     724           0 :     vcl::Window* pParent = GetParent();
     725           0 :     if ( pParent->IsChildTransparentModeEnabled() && !IsControlBackground() )
     726             :     {
     727           0 :         EnableChildTransparentMode( true );
     728           0 :         SetParentClipMode( PARENTCLIPMODE_NOCLIP );
     729           0 :         SetPaintTransparent( true );
     730           0 :         SetBackground();
     731             :     }
     732             :     else
     733             :     {
     734           0 :         EnableChildTransparentMode( false );
     735           0 :         SetParentClipMode( 0 );
     736           0 :         SetPaintTransparent( false );
     737             : 
     738           0 :         if ( IsControlBackground() )
     739           0 :             SetBackground( GetControlBackground() );
     740             :         else
     741           0 :             SetBackground( pParent->GetBackground() );
     742             :     }
     743           0 : }
     744             : 
     745           0 : FixedBitmap::FixedBitmap( vcl::Window* pParent, WinBits nStyle ) :
     746           0 :     Control( WINDOW_FIXEDBITMAP )
     747             : {
     748           0 :     ImplInit( pParent, nStyle );
     749           0 : }
     750             : 
     751           0 : FixedBitmap::~FixedBitmap()
     752             : {
     753           0 : }
     754             : 
     755           0 : void FixedBitmap::ImplDraw( OutputDevice* pDev, sal_uLong /* nDrawFlags */,
     756             :                             const Point& rPos, const Size& rSize )
     757             : {
     758           0 :     Bitmap* pBitmap = &maBitmap;
     759             : 
     760             :     // do we have a Bitmap?
     761           0 :     if ( !(!(*pBitmap)) )
     762             :     {
     763           0 :         if ( GetStyle() & WB_SCALE )
     764           0 :             pDev->DrawBitmap( rPos, rSize, *pBitmap );
     765             :         else
     766             :         {
     767           0 :             Point aPos = ImplCalcPos( GetStyle(), rPos, pBitmap->GetSizePixel(), rSize );
     768           0 :             pDev->DrawBitmap( aPos, *pBitmap );
     769             :         }
     770             :     }
     771           0 : }
     772             : 
     773           0 : void FixedBitmap::Paint( const Rectangle& )
     774             : {
     775           0 :     ImplDraw( this, 0, Point(), GetOutputSizePixel() );
     776           0 : }
     777             : 
     778           0 : void FixedBitmap::Draw( OutputDevice* pDev, const Point& rPos, const Size& rSize,
     779             :                         sal_uLong nFlags )
     780             : {
     781           0 :     Point       aPos  = pDev->LogicToPixel( rPos );
     782           0 :     Size        aSize = pDev->LogicToPixel( rSize );
     783           0 :     Rectangle   aRect( aPos, aSize );
     784             : 
     785           0 :     pDev->Push();
     786           0 :     pDev->SetMapMode();
     787             : 
     788             :     // Border
     789           0 :     if ( !(nFlags & WINDOW_DRAW_NOBORDER) && (GetStyle() & WB_BORDER) )
     790             :     {
     791           0 :         DecorationView aDecoView( pDev );
     792           0 :         aRect = aDecoView.DrawFrame( aRect, FRAME_DRAW_DOUBLEIN );
     793             :     }
     794           0 :     pDev->IntersectClipRegion( aRect );
     795           0 :     ImplDraw( pDev, nFlags, aRect.TopLeft(), aRect.GetSize() );
     796             : 
     797           0 :     pDev->Pop();
     798           0 : }
     799             : 
     800           0 : void FixedBitmap::Resize()
     801             : {
     802           0 :     Control::Resize();
     803           0 :     Invalidate();
     804           0 : }
     805             : 
     806           0 : void FixedBitmap::StateChanged( StateChangedType nType )
     807             : {
     808           0 :     Control::StateChanged( nType );
     809             : 
     810           0 :     if ( (nType == StateChangedType::DATA) ||
     811             :          (nType == StateChangedType::UPDATEMODE) )
     812             :     {
     813           0 :         if ( IsReallyVisible() && IsUpdateMode() )
     814           0 :             Invalidate();
     815             :     }
     816           0 :     else if ( nType == StateChangedType::STYLE )
     817             :     {
     818           0 :         SetStyle( ImplInitStyle( GetStyle() ) );
     819           0 :         if ( (GetPrevStyle() & FIXEDBITMAP_VIEW_STYLE) !=
     820           0 :              (GetStyle() & FIXEDBITMAP_VIEW_STYLE) )
     821           0 :             Invalidate();
     822             :     }
     823           0 :     else if ( nType == StateChangedType::CONTROLBACKGROUND )
     824             :     {
     825           0 :         ImplInitSettings();
     826           0 :         Invalidate();
     827             :     }
     828           0 : }
     829             : 
     830           0 : void FixedBitmap::DataChanged( const DataChangedEvent& rDCEvt )
     831             : {
     832           0 :     Control::DataChanged( rDCEvt );
     833             : 
     834           0 :     if ( (rDCEvt.GetType() == DATACHANGED_SETTINGS) &&
     835           0 :          (rDCEvt.GetFlags() & SETTINGS_STYLE) )
     836             :     {
     837           0 :         ImplInitSettings();
     838           0 :         Invalidate();
     839             :     }
     840           0 : }
     841             : 
     842           0 : void FixedBitmap::SetBitmap( const Bitmap& rBitmap )
     843             : {
     844           0 :     maBitmap = rBitmap;
     845           0 :     StateChanged( StateChangedType::DATA );
     846           0 :     queue_resize();
     847           0 : }
     848             : 
     849        8430 : void FixedImage::ImplInit( vcl::Window* pParent, WinBits nStyle )
     850             : {
     851        8430 :     nStyle = ImplInitStyle( nStyle );
     852        8430 :     mbInUserDraw = false;
     853        8430 :     Control::ImplInit( pParent, nStyle, NULL );
     854        8430 :     ImplInitSettings();
     855        8430 : }
     856             : 
     857        8430 : WinBits FixedImage::ImplInitStyle( WinBits nStyle )
     858             : {
     859        8430 :     if ( !(nStyle & WB_NOGROUP) )
     860        8430 :         nStyle |= WB_GROUP;
     861        8430 :     return nStyle;
     862             : }
     863             : 
     864        8532 : void FixedImage::ImplInitSettings()
     865             : {
     866        8532 :     vcl::Window* pParent = GetParent();
     867        8532 :     if ( pParent && pParent->IsChildTransparentModeEnabled() && !IsControlBackground() )
     868             :     {
     869        3816 :         EnableChildTransparentMode( true );
     870        3816 :         SetParentClipMode( PARENTCLIPMODE_NOCLIP );
     871        3816 :         SetPaintTransparent( true );
     872        3816 :         SetBackground();
     873             :     }
     874             :     else
     875             :     {
     876        4716 :         EnableChildTransparentMode( false );
     877        4716 :         SetParentClipMode( 0 );
     878        4716 :         SetPaintTransparent( false );
     879             : 
     880        4716 :         if ( IsControlBackground() )
     881           0 :             SetBackground( GetControlBackground() );
     882        4716 :         else if ( pParent )
     883        4716 :             SetBackground( pParent->GetBackground() );
     884             :     }
     885        8532 : }
     886             : 
     887           0 : void FixedImage::ImplLoadRes( const ResId& rResId )
     888             : {
     889           0 :     Control::ImplLoadRes( rResId );
     890             : 
     891           0 :     sal_uLong nObjMask = ReadLongRes();
     892             : 
     893           0 :     if ( RSC_FIXEDIMAGE_IMAGE & nObjMask )
     894             :     {
     895           0 :         maImage = Image( ResId( (RSHEADER_TYPE*)GetClassRes(), *rResId.GetResMgr() ) );
     896           0 :         IncrementRes( GetObjSizeRes( (RSHEADER_TYPE*)GetClassRes() ) );
     897             :     }
     898           0 : }
     899             : 
     900        8430 : FixedImage::FixedImage( vcl::Window* pParent, WinBits nStyle ) :
     901        8430 :     Control( WINDOW_FIXEDIMAGE )
     902             : {
     903        8430 :     ImplInit( pParent, nStyle );
     904        8430 : }
     905             : 
     906           0 : FixedImage::FixedImage( vcl::Window* pParent, const ResId& rResId ) :
     907           0 :     Control( WINDOW_FIXEDIMAGE )
     908             : {
     909           0 :     rResId.SetRT( RSC_FIXEDIMAGE );
     910           0 :     WinBits nStyle = ImplInitRes( rResId );
     911           0 :     ImplInit( pParent, nStyle );
     912           0 :     ImplLoadRes( rResId );
     913             : 
     914           0 :     if ( !(nStyle & WB_HIDE) )
     915           0 :         Show();
     916           0 : }
     917             : 
     918       16838 : FixedImage::~FixedImage()
     919             : {
     920       16838 : }
     921             : 
     922        6976 : void FixedImage::ImplDraw( OutputDevice* pDev, sal_uLong nDrawFlags,
     923             :                            const Point& rPos, const Size& rSize )
     924             : {
     925        6976 :     sal_uInt16 nStyle = 0;
     926        6976 :     if ( !(nDrawFlags & WINDOW_DRAW_NODISABLE) )
     927             :     {
     928        6976 :         if ( !IsEnabled() )
     929           0 :             nStyle |= IMAGE_DRAW_DISABLE;
     930             :     }
     931             : 
     932        6976 :     Image *pImage = &maImage;
     933             : 
     934             :     // do we have an image?
     935        6976 :     if ( !(!(*pImage)) )
     936             :     {
     937        6976 :         if ( GetStyle() & WB_SCALE )
     938        6976 :             pDev->DrawImage( rPos, rSize, *pImage, nStyle );
     939             :         else
     940             :         {
     941           0 :             Point aPos = ImplCalcPos( GetStyle(), rPos, pImage->GetSizePixel(), rSize );
     942           0 :             pDev->DrawImage( aPos, *pImage, nStyle );
     943             :         }
     944             :     }
     945             : 
     946        6976 :     mbInUserDraw = true;
     947        6976 :     UserDrawEvent aUDEvt( pDev, Rectangle( rPos, rSize ), 0, nStyle );
     948        6976 :     UserDraw( aUDEvt );
     949        6976 :     mbInUserDraw = false;
     950        6976 : }
     951             : 
     952        6976 : void FixedImage::Paint( const Rectangle& )
     953             : {
     954        6976 :     ImplDraw( this, 0, Point(), GetOutputSizePixel() );
     955        6976 : }
     956             : 
     957        3690 : Size FixedImage::GetOptimalSize() const
     958             : {
     959        3690 :     return maImage.GetSizePixel();
     960             : }
     961             : 
     962        6976 : void FixedImage::UserDraw( const UserDrawEvent& )
     963             : {
     964        6976 : }
     965             : 
     966           0 : void FixedImage::Draw( OutputDevice* pDev, const Point& rPos, const Size& rSize,
     967             :                        sal_uLong nFlags )
     968             : {
     969           0 :     Point       aPos  = pDev->LogicToPixel( rPos );
     970           0 :     Size        aSize = pDev->LogicToPixel( rSize );
     971           0 :     Rectangle   aRect( aPos, aSize );
     972             : 
     973           0 :     pDev->Push();
     974           0 :     pDev->SetMapMode();
     975             : 
     976             :     // Border
     977           0 :     if ( !(nFlags & WINDOW_DRAW_NOBORDER) && (GetStyle() & WB_BORDER) )
     978             :     {
     979           0 :         ImplDrawFrame( pDev, aRect );
     980             :     }
     981           0 :     pDev->IntersectClipRegion( aRect );
     982           0 :     ImplDraw( pDev, nFlags, aRect.TopLeft(), aRect.GetSize() );
     983             : 
     984           0 :     pDev->Pop();
     985           0 : }
     986             : 
     987       12096 : void FixedImage::Resize()
     988             : {
     989       12096 :     Control::Resize();
     990       12096 :     Invalidate();
     991       12096 : }
     992             : 
     993       27816 : void FixedImage::StateChanged( StateChangedType nType )
     994             : {
     995       27816 :     Control::StateChanged( nType );
     996             : 
     997       27816 :     if ( (nType == StateChangedType::ENABLE) ||
     998       17214 :          (nType == StateChangedType::DATA) ||
     999             :          (nType == StateChangedType::UPDATEMODE) )
    1000             :     {
    1001       21204 :         if ( IsReallyVisible() && IsUpdateMode() )
    1002          40 :             Invalidate();
    1003             :     }
    1004       17214 :     else if ( nType == StateChangedType::STYLE )
    1005             :     {
    1006           0 :         SetStyle( ImplInitStyle( GetStyle() ) );
    1007           0 :         if ( (GetPrevStyle() & FIXEDIMAGE_VIEW_STYLE) !=
    1008           0 :              (GetStyle() & FIXEDIMAGE_VIEW_STYLE) )
    1009           0 :             Invalidate();
    1010             :     }
    1011       17214 :     else if ( nType == StateChangedType::CONTROLBACKGROUND )
    1012             :     {
    1013           0 :         ImplInitSettings();
    1014           0 :         Invalidate();
    1015             :     }
    1016       27816 : }
    1017             : 
    1018         106 : void FixedImage::DataChanged( const DataChangedEvent& rDCEvt )
    1019             : {
    1020         106 :     Control::DataChanged( rDCEvt );
    1021             : 
    1022         212 :     if ( (rDCEvt.GetType() == DATACHANGED_SETTINGS) &&
    1023         106 :          (rDCEvt.GetFlags() & SETTINGS_STYLE) )
    1024             :     {
    1025         102 :         ImplInitSettings();
    1026         102 :         Invalidate();
    1027             :     }
    1028         106 : }
    1029             : 
    1030        8434 : void FixedImage::SetImage( const Image& rImage )
    1031             : {
    1032        8434 :     if ( rImage != maImage )
    1033             :     {
    1034        8410 :         maImage = rImage;
    1035        8410 :         StateChanged( StateChangedType::DATA );
    1036        8410 :         queue_resize();
    1037             :     }
    1038        8434 : }
    1039             : 
    1040           0 : bool FixedImage::SetModeImage( const Image& rImage )
    1041             : {
    1042           0 :     SetImage( rImage );
    1043           0 :     return true;
    1044             : }
    1045             : 
    1046             : 
    1047        4016 : Image FixedImage::loadThemeImage(const OString &rFileName)
    1048             : {
    1049        4016 :     static ImplImageTreeSingletonRef aImageTree;
    1050             :     OUString sIconTheme =
    1051        4016 :         Application::GetSettings().GetStyleSettings().DetermineIconTheme();
    1052        8032 :     const OUString sFileName(OStringToOUString(rFileName, RTL_TEXTENCODING_UTF8));
    1053        8032 :     BitmapEx aBitmap;
    1054        4016 :     bool bSuccess = aImageTree->loadImage(sFileName, sIconTheme, aBitmap, true);
    1055             :     SAL_WARN_IF(!bSuccess, "vcl.layout", "Unable to load " << sFileName
    1056             :         << " from theme " << sIconTheme);
    1057        8032 :     return Image(aBitmap);
    1058             : }
    1059             : 
    1060       18508 : bool FixedImage::set_property(const OString &rKey, const OString &rValue)
    1061             : {
    1062       18508 :     if (rKey == "pixbuf")
    1063             :     {
    1064        3710 :         SetImage(FixedImage::loadThemeImage(rValue));
    1065             :     }
    1066             :     else
    1067       14798 :         return Control::set_property(rKey, rValue);
    1068        3710 :     return true;
    1069        1233 : }
    1070             : 
    1071             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10