LCOV - code coverage report
Current view: top level - libreoffice/vcl/source/window - dockwin.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 124 522 23.8 %
Date: 2012-12-27 Functions: 19 53 35.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             : 
      21             : #include <tools/time.hxx>
      22             : #include <tools/rc.h>
      23             : #include <vcl/event.hxx>
      24             : #include <vcl/floatwin.hxx>
      25             : #include <vcl/dockwin.hxx>
      26             : #include <vcl/svapp.hxx>
      27             : #include <vcl/timer.hxx>
      28             : #include <vcl/unowrap.hxx>
      29             : 
      30             : #include <svdata.hxx>
      31             : #include <window.h>
      32             : #include <brdwin.hxx>
      33             : #include <salframe.hxx>
      34             : 
      35             : 
      36             : 
      37             : // =======================================================================
      38             : 
      39             : #define DOCKWIN_FLOATSTYLES         (WB_SIZEABLE | WB_MOVEABLE | WB_CLOSEABLE | WB_STANDALONE | WB_PINABLE | WB_ROLLABLE )
      40             : 
      41             : // =======================================================================
      42             : 
      43             : // -----------------------------------------------------------------------
      44             : 
      45             : class DockingWindow::ImplData
      46             : {
      47             : public:
      48             :     ImplData();
      49             :     ~ImplData();
      50             : 
      51             :     Window*         mpParent;
      52             :     Size            maMaxOutSize;
      53             : };
      54             : 
      55        3127 : DockingWindow::ImplData::ImplData()
      56             : {
      57        3127 :     mpParent = NULL;
      58        3127 :     maMaxOutSize = Size( SHRT_MAX, SHRT_MAX );
      59        3127 : }
      60             : 
      61         997 : DockingWindow::ImplData::~ImplData()
      62             : {
      63         997 : }
      64             : 
      65             : // -----------------------------------------------------------------------
      66             : 
      67             : class ImplDockFloatWin : public FloatingWindow
      68             : {
      69             : private:
      70             :     DockingWindow*  mpDockWin;
      71             :     sal_uLong           mnLastTicks;
      72             :     Timer           maDockTimer;
      73             :     Point           maDockPos;
      74             :     Rectangle       maDockRect;
      75             :     sal_Bool            mbInMove;
      76             :     sal_uLong           mnLastUserEvent;
      77             : 
      78             :     DECL_LINK(DockingHdl, void *);
      79             :     DECL_LINK(DockTimerHdl, void *);
      80             : public:
      81             :     ImplDockFloatWin( Window* pParent, WinBits nWinBits,
      82             :                       DockingWindow* pDockingWin );
      83             :     ~ImplDockFloatWin();
      84             : 
      85             :     virtual void    Move();
      86             :     virtual void    Resize();
      87             :     virtual void    TitleButtonClick( sal_uInt16 nButton );
      88             :     virtual void    Pin();
      89             :     virtual void    Roll();
      90             :     virtual void    PopupModeEnd();
      91             :     virtual void    Resizing( Size& rSize );
      92             :     virtual sal_Bool    Close();
      93             : 
      94             :     sal_uLong GetLastTicks() const { return mnLastTicks; }
      95             : };
      96             : 
      97             : 
      98           0 : ImplDockFloatWin::ImplDockFloatWin( Window* pParent, WinBits nWinBits,
      99             :                                     DockingWindow* pDockingWin ) :
     100             :         FloatingWindow( pParent, nWinBits ),
     101             :         mpDockWin( pDockingWin ),
     102           0 :         mnLastTicks( Time::GetSystemTicks() ),
     103             :         mbInMove( sal_False ),
     104           0 :         mnLastUserEvent( 0 )
     105             : {
     106             :     // Daten vom DockingWindow uebernehmen
     107           0 :     if ( pDockingWin )
     108             :     {
     109           0 :         SetSettings( pDockingWin->GetSettings() );
     110           0 :         Enable( pDockingWin->IsEnabled(), sal_False );
     111           0 :         EnableInput( pDockingWin->IsInputEnabled(), sal_False );
     112           0 :         AlwaysEnableInput( pDockingWin->IsAlwaysEnableInput(), sal_False );
     113           0 :         EnableAlwaysOnTop( pDockingWin->IsAlwaysOnTopEnabled() );
     114           0 :         SetActivateMode( pDockingWin->GetActivateMode() );
     115             :     }
     116             : 
     117           0 :     SetBackground();
     118             : 
     119           0 :     maDockTimer.SetTimeoutHdl( LINK( this, ImplDockFloatWin, DockTimerHdl ) );
     120           0 :     maDockTimer.SetTimeout( 50 );
     121           0 : }
     122             : 
     123             : // -----------------------------------------------------------------------
     124             : 
     125           0 : ImplDockFloatWin::~ImplDockFloatWin()
     126             : {
     127           0 :     if( mnLastUserEvent )
     128           0 :         Application::RemoveUserEvent( mnLastUserEvent );
     129           0 : }
     130             : 
     131             : // -----------------------------------------------------------------------
     132             : 
     133           0 : IMPL_LINK_NOARG(ImplDockFloatWin, DockTimerHdl)
     134             : {
     135             :     DBG_ASSERT( mpDockWin->IsFloatingMode(), "docktimer called but not floating" );
     136             : 
     137           0 :     maDockTimer.Stop();
     138           0 :     PointerState aState = GetPointerState();
     139             : 
     140           0 :     if( aState.mnState & KEY_MOD1 )
     141             :     {
     142             :         // i43499 CTRL disables docking now
     143           0 :         mpDockWin->GetParent()->ImplGetFrameWindow()->HideTracking();
     144           0 :         mpDockWin->EndDocking( maDockRect, sal_True );
     145           0 :         if( aState.mnState & ( MOUSE_LEFT | MOUSE_MIDDLE | MOUSE_RIGHT ) )
     146           0 :             maDockTimer.Start();
     147             :     }
     148           0 :     else if( ! ( aState.mnState & ( MOUSE_LEFT | MOUSE_MIDDLE | MOUSE_RIGHT ) ) )
     149             :     {
     150           0 :         mpDockWin->GetParent()->ImplGetFrameWindow()->HideTracking();
     151           0 :         mpDockWin->EndDocking( maDockRect, sal_False );
     152             :     }
     153             :     else
     154             :     {
     155           0 :         mpDockWin->GetParent()->ImplGetFrameWindow()->ShowTracking( maDockRect, SHOWTRACK_BIG | SHOWTRACK_WINDOW );
     156           0 :         maDockTimer.Start();
     157             :     }
     158             : 
     159           0 :     return 0;
     160             : }
     161             : 
     162           0 : IMPL_LINK_NOARG(ImplDockFloatWin, DockingHdl)
     163             : {
     164           0 :     PointerState aState = mpDockWin->GetParent()->GetPointerState();
     165             : 
     166           0 :     mnLastUserEvent = 0;
     167           0 :     if( mpDockWin->IsDockable()                             &&
     168           0 :         (Time::GetSystemTicks() - mnLastTicks > 500)        &&
     169             :         ( aState.mnState & ( MOUSE_LEFT | MOUSE_MIDDLE | MOUSE_RIGHT ) ) &&
     170           0 :         !(aState.mnState & KEY_MOD1) )  // i43499 CTRL disables docking now
     171             :     {
     172           0 :         maDockPos = Point( mpDockWin->GetParent()->AbsoluteScreenToOutputPixel( OutputToAbsoluteScreenPixel( Point() ) ) );
     173           0 :         maDockPos = mpDockWin->GetParent()->OutputToScreenPixel( maDockPos );  // sfx expects screen coordinates
     174             : 
     175           0 :         if( ! mpDockWin->IsDocking() )
     176           0 :             mpDockWin->StartDocking();
     177           0 :         maDockRect = Rectangle( maDockPos, mpDockWin->GetSizePixel() );
     178             : 
     179             :         // mouse pos also in screen pixels
     180           0 :         Point aMousePos = mpDockWin->GetParent()->OutputToScreenPixel( aState.maPos );
     181             : 
     182           0 :         sal_Bool bFloatMode = mpDockWin->Docking( aMousePos, maDockRect );
     183           0 :         if( ! bFloatMode )
     184             :         {
     185           0 :             mpDockWin->GetParent()->ImplGetFrameWindow()->ShowTracking( maDockRect, SHOWTRACK_OBJECT | SHOWTRACK_WINDOW );
     186           0 :             DockTimerHdl( this );
     187             :         }
     188             :         else
     189             :         {
     190           0 :             mpDockWin->GetParent()->ImplGetFrameWindow()->HideTracking();
     191           0 :             maDockTimer.Stop();
     192           0 :             mpDockWin->EndDocking( maDockRect, sal_True );
     193             :         }
     194             :     }
     195           0 :     mbInMove = sal_False;
     196           0 :     return 0;
     197             : }
     198             : // -----------------------------------------------------------------------
     199             : 
     200           0 : void ImplDockFloatWin::Move()
     201             : {
     202           0 :     if( mbInMove )
     203           0 :         return;
     204             : 
     205           0 :     mbInMove = sal_True;
     206           0 :     FloatingWindow::Move();
     207           0 :     mpDockWin->Move();
     208             : 
     209             :     /*
     210             :      *  note: the window should only dock if
     211             :      *  the user releases all mouse buttons. The real problem here
     212             :      *  is that we don't get mouse events (at least not on X)
     213             :      *  if the mouse is on the decoration. So we have to start an
     214             :      *  awkward timer based process that polls the modifier/buttons
     215             :      *  to see whether they are in the right condition shortly after the
     216             :      *  last Move message.
     217             :      */
     218           0 :     if( ! mnLastUserEvent )
     219           0 :         mnLastUserEvent = Application::PostUserEvent( LINK( this, ImplDockFloatWin, DockingHdl ) );
     220             : }
     221             : 
     222             : // -----------------------------------------------------------------------
     223             : 
     224           0 : void ImplDockFloatWin::Resize()
     225             : {
     226           0 :     FloatingWindow::Resize();
     227           0 :     Size aSize( GetSizePixel() );
     228           0 :     mpDockWin->ImplPosSizeWindow( 0, 0, aSize.Width(), aSize.Height(), WINDOW_POSSIZE_POSSIZE );
     229           0 : }
     230             : 
     231             : // -----------------------------------------------------------------------
     232             : 
     233           0 : void ImplDockFloatWin::TitleButtonClick( sal_uInt16 nButton )
     234             : {
     235           0 :     FloatingWindow::TitleButtonClick( nButton );
     236           0 :     mpDockWin->TitleButtonClick( nButton );
     237           0 : }
     238             : 
     239             : // -----------------------------------------------------------------------
     240             : 
     241           0 : void ImplDockFloatWin::Pin()
     242             : {
     243           0 :     FloatingWindow::Pin();
     244           0 :     mpDockWin->Pin();
     245           0 : }
     246             : 
     247             : // -----------------------------------------------------------------------
     248             : 
     249           0 : void ImplDockFloatWin::Roll()
     250             : {
     251           0 :     FloatingWindow::Roll();
     252           0 :     mpDockWin->Roll();
     253           0 : }
     254             : 
     255             : // -----------------------------------------------------------------------
     256             : 
     257           0 : void ImplDockFloatWin::PopupModeEnd()
     258             : {
     259           0 :     FloatingWindow::PopupModeEnd();
     260           0 :     mpDockWin->PopupModeEnd();
     261           0 : }
     262             : 
     263             : // -----------------------------------------------------------------------
     264             : 
     265           0 : void ImplDockFloatWin::Resizing( Size& rSize )
     266             : {
     267           0 :     FloatingWindow::Resizing( rSize );
     268           0 :     mpDockWin->Resizing( rSize );
     269           0 : }
     270             : 
     271             : // -----------------------------------------------------------------------
     272             : 
     273           0 : sal_Bool ImplDockFloatWin::Close()
     274             : {
     275           0 :     return mpDockWin->Close();
     276             : }
     277             : 
     278             : // =======================================================================
     279             : 
     280           0 : sal_Bool DockingWindow::ImplStartDocking( const Point& rPos )
     281             : {
     282           0 :     if ( !mbDockable )
     283           0 :         return sal_False;
     284             : 
     285           0 :     maMouseOff      = rPos;
     286           0 :     maMouseStart    = maMouseOff;
     287           0 :     mbDocking       = sal_True;
     288           0 :     mbLastFloatMode = IsFloatingMode();
     289           0 :     mbStartFloat    = mbLastFloatMode;
     290             : 
     291             :     // FloatingBorder berechnen
     292             :     FloatingWindow* pWin;
     293           0 :     if ( mpFloatWin )
     294           0 :         pWin = mpFloatWin;
     295             :     else
     296           0 :         pWin = new ImplDockFloatWin( mpImplData->mpParent, mnFloatBits, NULL );
     297           0 :     pWin->GetBorder( mnDockLeft, mnDockTop, mnDockRight, mnDockBottom );
     298           0 :     if ( !mpFloatWin )
     299           0 :         delete pWin;
     300             : 
     301           0 :     Point   aPos    = ImplOutputToFrame( Point() );
     302           0 :     Size    aSize   = Window::GetOutputSizePixel();
     303           0 :     mnTrackX        = aPos.X();
     304           0 :     mnTrackY        = aPos.Y();
     305           0 :     mnTrackWidth    = aSize.Width();
     306           0 :     mnTrackHeight   = aSize.Height();
     307             : 
     308           0 :     if ( mbLastFloatMode )
     309             :     {
     310           0 :         maMouseOff.X()  += mnDockLeft;
     311           0 :         maMouseOff.Y()  += mnDockTop;
     312           0 :         mnTrackX        -= mnDockLeft;
     313           0 :         mnTrackY        -= mnDockTop;
     314           0 :         mnTrackWidth    += mnDockLeft+mnDockRight;
     315           0 :         mnTrackHeight   += mnDockTop+mnDockBottom;
     316             :     }
     317             : 
     318           0 :     if ( GetSettings().GetStyleSettings().GetDragFullOptions() & DRAGFULL_OPTION_DOCKING &&
     319           0 :         !( mnFloatBits & ( WB_MOVEABLE | WB_SIZEABLE | WB_CLOSEABLE ) ) ) // no full drag when migrating to system window
     320           0 :         mbDragFull = sal_True;
     321             :     else
     322             :     {
     323           0 :         StartDocking();
     324           0 :         mbDragFull = sal_False;
     325           0 :         ImplUpdateAll();
     326           0 :         ImplGetFrameWindow()->ImplUpdateAll();
     327             :     }
     328             : 
     329           0 :     StartTracking( STARTTRACK_KEYMOD );
     330           0 :     return sal_True;
     331             : }
     332             : 
     333             : // =======================================================================
     334             : 
     335        3127 : void DockingWindow::ImplInitDockingWindowData()
     336             : {
     337        3127 :     mpImplData              = new ImplData;
     338        3127 :     mpWindowImpl->mbDockWin               = sal_True;
     339             : 
     340        3127 :     mpFloatWin              = NULL;
     341        3127 :     mbDockCanceled          = sal_False;
     342        3127 :     mbDockPrevented         = sal_False;
     343        3127 :     mbFloatPrevented        = sal_False;
     344        3127 :     mbDocking               = sal_False;
     345        3127 :     mbPined                 = sal_False;
     346        3127 :     mbRollUp                = sal_False;
     347        3127 :     mbDockBtn               = sal_False;
     348        3127 :     mbHideBtn               = sal_False;
     349        3127 : }
     350             : 
     351             : // -----------------------------------------------------------------------
     352             : 
     353        3127 : void DockingWindow::ImplInit( Window* pParent, WinBits nStyle )
     354             : {
     355        3127 :     if ( !(nStyle & WB_NODIALOGCONTROL) )
     356        3127 :         nStyle |= WB_DIALOGCONTROL;
     357             : 
     358        3127 :     mpImplData->mpParent    = pParent;
     359        3127 :     mbDockable              = (nStyle & WB_DOCKABLE) != 0;
     360        3127 :     mnFloatBits             = WB_BORDER | (nStyle & DOCKWIN_FLOATSTYLES);
     361        3127 :     nStyle                 &= ~(DOCKWIN_FLOATSTYLES | WB_BORDER);
     362        3127 :     if ( nStyle & WB_DOCKBORDER )
     363           0 :         nStyle |= WB_BORDER;
     364             : 
     365        3127 :     Window::ImplInit( pParent, nStyle, NULL );
     366             : 
     367        3127 :     ImplInitSettings();
     368        3127 : }
     369             : 
     370             : // -----------------------------------------------------------------------
     371             : 
     372        3127 : void DockingWindow::ImplInitSettings()
     373             : {
     374             :     // Hack, damit man auch DockingWindows ohne Hintergrund bauen kann
     375             :     // und noch nicht alles umgestellt ist
     376        3127 :     if ( IsBackground() )
     377             :     {
     378        3127 :         const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings();
     379             : 
     380        3127 :         Color aColor;
     381        3127 :         if ( IsControlBackground() )
     382           0 :             aColor = GetControlBackground();
     383        3127 :         else if ( Window::GetStyle() & WB_3DLOOK )
     384        2655 :             aColor = rStyleSettings.GetFaceColor();
     385             :         else
     386         472 :             aColor = rStyleSettings.GetWindowColor();
     387        3127 :         SetBackground( aColor );
     388             :     }
     389        3127 : }
     390             : 
     391             : // -----------------------------------------------------------------------
     392             : 
     393           4 : void DockingWindow::ImplLoadRes( const ResId& rResId )
     394             : {
     395           4 :     Window::ImplLoadRes( rResId );
     396             : 
     397           4 :     sal_uLong  nMask = ReadLongRes();
     398             : 
     399           4 :     if ( (RSC_DOCKINGWINDOW_XYMAPMODE | RSC_DOCKINGWINDOW_X |
     400             :           RSC_DOCKINGWINDOW_Y) & nMask )
     401             :     {
     402             :         // Groessenangabe aus der Resource verwenden
     403           0 :         Point   aPos;
     404           0 :         MapUnit ePosMap = MAP_PIXEL;
     405             : 
     406           0 :         if ( RSC_DOCKINGWINDOW_XYMAPMODE & nMask )
     407           0 :             ePosMap = (MapUnit)ReadLongRes();
     408             : 
     409           0 :         if ( RSC_DOCKINGWINDOW_X & nMask )
     410             :         {
     411           0 :             aPos.X() = ReadShortRes();
     412           0 :             aPos.X() = ImplLogicUnitToPixelX( aPos.X(), ePosMap );
     413             :         }
     414             : 
     415           0 :         if ( RSC_DOCKINGWINDOW_Y & nMask )
     416             :         {
     417           0 :             aPos.Y() = ReadShortRes();
     418           0 :             aPos.Y() = ImplLogicUnitToPixelY( aPos.Y(), ePosMap );
     419             :         }
     420             : 
     421           0 :         SetFloatingPos( aPos );
     422             :     }
     423             : 
     424           4 :     if ( nMask & RSC_DOCKINGWINDOW_FLOATING )
     425             :     {
     426           0 :         if ( (sal_Bool)ReadShortRes() )
     427           0 :             SetFloatingMode( sal_True );
     428             :     }
     429           4 : }
     430             : 
     431             : // -----------------------------------------------------------------------
     432             : 
     433        3123 : DockingWindow::DockingWindow( WindowType nType ) :
     434        3123 :     Window( nType )
     435             : {
     436        3123 :     ImplInitDockingWindowData();
     437        3123 : }
     438             : 
     439             : // -----------------------------------------------------------------------
     440             : 
     441           0 : DockingWindow::DockingWindow( Window* pParent, WinBits nStyle ) :
     442           0 :     Window( WINDOW_DOCKINGWINDOW )
     443             : {
     444           0 :     ImplInitDockingWindowData();
     445           0 :     ImplInit( pParent, nStyle );
     446           0 : }
     447             : 
     448             : // -----------------------------------------------------------------------
     449             : 
     450           4 : DockingWindow::DockingWindow( Window* pParent, const ResId& rResId ) :
     451           4 :     Window( WINDOW_DOCKINGWINDOW )
     452             : {
     453           4 :     ImplInitDockingWindowData();
     454           4 :     rResId.SetRT( RSC_DOCKINGWINDOW );
     455           4 :     WinBits nStyle = ImplInitRes( rResId );
     456           4 :     ImplInit( pParent, nStyle );
     457           4 :     ImplLoadRes( rResId );
     458             : 
     459           4 :     if ( !(nStyle & WB_HIDE) )
     460           4 :         Show();
     461           4 : }
     462             : 
     463             : // -----------------------------------------------------------------------
     464             : 
     465        1994 : DockingWindow::~DockingWindow()
     466             : {
     467         997 :     if ( IsFloatingMode() )
     468             :     {
     469           0 :         Show( sal_False, SHOW_NOFOCUSCHANGE );
     470           0 :         SetFloatingMode( sal_False );
     471             :     }
     472         997 :     delete mpImplData;
     473         997 : }
     474             : 
     475             : // -----------------------------------------------------------------------
     476             : 
     477           0 : void DockingWindow::Tracking( const TrackingEvent& rTEvt )
     478             : {
     479           0 :     if( GetDockingManager()->IsDockable( this ) )   // new docking interface
     480           0 :         return Window::Tracking( rTEvt );
     481             : 
     482           0 :     if ( mbDocking )
     483             :     {
     484           0 :         if ( rTEvt.IsTrackingEnded() )
     485             :         {
     486           0 :             mbDocking = sal_False;
     487           0 :             if ( mbDragFull )
     488             :             {
     489             :                 // Bei Abbruch alten Zustand wieder herstellen
     490           0 :                 if ( rTEvt.IsTrackingCanceled() )
     491             :                 {
     492           0 :                     StartDocking();
     493           0 :                     Rectangle aRect( Point( mnTrackX, mnTrackY ), Size( mnTrackWidth, mnTrackHeight ) );
     494           0 :                     EndDocking( aRect, mbStartFloat );
     495             :                 }
     496             :             }
     497             :             else
     498             :             {
     499           0 :                 HideTracking();
     500           0 :                 if ( rTEvt.IsTrackingCanceled() )
     501             :                 {
     502           0 :                     mbDockCanceled = sal_True;
     503           0 :                     EndDocking( Rectangle( Point( mnTrackX, mnTrackY ), Size( mnTrackWidth, mnTrackHeight ) ), mbLastFloatMode );
     504           0 :                     mbDockCanceled = sal_False;
     505             :                 }
     506             :                 else
     507           0 :                     EndDocking( Rectangle( Point( mnTrackX, mnTrackY ), Size( mnTrackWidth, mnTrackHeight ) ), mbLastFloatMode );
     508             :             }
     509             :         }
     510             :         // Docking nur bei nicht synthetischen MouseEvents
     511           0 :         else if ( !rTEvt.GetMouseEvent().IsSynthetic() || rTEvt.GetMouseEvent().IsModifierChanged() )
     512             :         {
     513           0 :             Point   aMousePos = rTEvt.GetMouseEvent().GetPosPixel();
     514           0 :             Point   aFrameMousePos = ImplOutputToFrame( aMousePos );
     515           0 :             Size    aFrameSize = mpWindowImpl->mpFrameWindow->GetOutputSizePixel();
     516           0 :             if ( aFrameMousePos.X() < 0 )
     517           0 :                 aFrameMousePos.X() = 0;
     518           0 :             if ( aFrameMousePos.Y() < 0 )
     519           0 :                 aFrameMousePos.Y() = 0;
     520           0 :             if ( aFrameMousePos.X() > aFrameSize.Width()-1 )
     521           0 :                 aFrameMousePos.X() = aFrameSize.Width()-1;
     522           0 :             if ( aFrameMousePos.Y() > aFrameSize.Height()-1 )
     523           0 :                 aFrameMousePos.Y() = aFrameSize.Height()-1;
     524           0 :             aMousePos = ImplFrameToOutput( aFrameMousePos );
     525           0 :             aMousePos.X() -= maMouseOff.X();
     526           0 :             aMousePos.Y() -= maMouseOff.Y();
     527           0 :             Point aFramePos = ImplOutputToFrame( aMousePos );
     528           0 :             Rectangle aTrackRect( aFramePos, Size( mnTrackWidth, mnTrackHeight ) );
     529           0 :             Rectangle aCompRect = aTrackRect;
     530           0 :             aFramePos.X()    += maMouseOff.X();
     531           0 :             aFramePos.Y()    += maMouseOff.Y();
     532           0 :             if ( mbDragFull )
     533           0 :                 StartDocking();
     534           0 :             sal_Bool bFloatMode = Docking( aFramePos, aTrackRect );
     535           0 :             mbDockPrevented = sal_False;
     536           0 :             mbFloatPrevented = sal_False;
     537           0 :             if ( mbLastFloatMode != bFloatMode )
     538             :             {
     539           0 :                 if ( bFloatMode )
     540             :                 {
     541           0 :                     aTrackRect.Left()   -= mnDockLeft;
     542           0 :                     aTrackRect.Top()    -= mnDockTop;
     543           0 :                     aTrackRect.Right()  += mnDockRight;
     544           0 :                     aTrackRect.Bottom() += mnDockBottom;
     545             :                 }
     546             :                 else
     547             :                 {
     548           0 :                     if ( aCompRect == aTrackRect )
     549             :                     {
     550           0 :                         aTrackRect.Left()   += mnDockLeft;
     551           0 :                         aTrackRect.Top()    += mnDockTop;
     552           0 :                         aTrackRect.Right()  -= mnDockRight;
     553           0 :                         aTrackRect.Bottom() -= mnDockBottom;
     554             :                     }
     555             :                 }
     556           0 :                 mbLastFloatMode = bFloatMode;
     557             :             }
     558           0 :             if ( mbDragFull )
     559             :             {
     560           0 :                 Point aPos;
     561           0 :                 Point aOldPos = OutputToScreenPixel( aPos );
     562           0 :                 EndDocking( aTrackRect, mbLastFloatMode );
     563             :                 // Wenn der Status bzw. die Position sich
     564             :                 // geaendert hat, dann neu ausgeben
     565           0 :                 if ( aOldPos != OutputToScreenPixel( aPos ) )
     566             :                 {
     567           0 :                     ImplUpdateAll();
     568           0 :                     ImplGetFrameWindow()->ImplUpdateAll();
     569             :                 }
     570             : //                EndDocking( aTrackRect, mbLastFloatMode );
     571             :             }
     572             :             else
     573             :             {
     574             :                 sal_uInt16 nTrackStyle;
     575           0 :                 if ( bFloatMode )
     576           0 :                     nTrackStyle = SHOWTRACK_BIG;
     577             :                 else
     578           0 :                     nTrackStyle = SHOWTRACK_OBJECT;
     579           0 :                 Rectangle aShowTrackRect = aTrackRect;
     580           0 :                 aShowTrackRect.SetPos( ImplFrameToOutput( aShowTrackRect.TopLeft() ) );
     581           0 :                 ShowTracking( aShowTrackRect, nTrackStyle );
     582             : 
     583             :                 // Maus-Offset neu berechnen, da Rechteck veraendert werden
     584             :                 // konnte
     585           0 :                 maMouseOff.X()  = aFramePos.X() - aTrackRect.Left();
     586           0 :                 maMouseOff.Y()  = aFramePos.Y() - aTrackRect.Top();
     587             :             }
     588             : 
     589           0 :             mnTrackX        = aTrackRect.Left();
     590           0 :             mnTrackY        = aTrackRect.Top();
     591           0 :             mnTrackWidth    = aTrackRect.GetWidth();
     592           0 :             mnTrackHeight   = aTrackRect.GetHeight();
     593             :         }
     594             :     }
     595             : }
     596             : 
     597             : // -----------------------------------------------------------------------
     598             : 
     599         158 : long DockingWindow::Notify( NotifyEvent& rNEvt )
     600             : {
     601         158 :     if( GetDockingManager()->IsDockable( this ) )   // new docking interface
     602         126 :         return Window::Notify( rNEvt );
     603             : 
     604          32 :     if ( mbDockable )
     605             :     {
     606          32 :         if ( rNEvt.GetType() == EVENT_MOUSEBUTTONDOWN )
     607             :         {
     608           0 :             const MouseEvent* pMEvt = rNEvt.GetMouseEvent();
     609           0 :             if ( pMEvt->IsLeft() )
     610             :             {
     611           0 :                 if ( pMEvt->IsMod1() && (pMEvt->GetClicks() == 2) )
     612             :                 {
     613           0 :                     SetFloatingMode( !IsFloatingMode() );
     614           0 :                     return sal_True;
     615             :                 }
     616           0 :                 else if ( pMEvt->GetClicks() == 1 )
     617             :                 {
     618             :                     // check if window is floating standalone (IsFloating())
     619             :                     // or only partially floating and still docked with one border
     620             :                     // ( !mpWindowImpl->mbFrame)
     621           0 :                     if( ! IsFloatingMode() || ! mpFloatWin->mpWindowImpl->mbFrame )
     622             :                     {
     623           0 :                         Point   aPos = pMEvt->GetPosPixel();
     624           0 :                         Window* pWindow = rNEvt.GetWindow();
     625           0 :                         if ( pWindow != this )
     626             :                         {
     627           0 :                             aPos = pWindow->OutputToScreenPixel( aPos );
     628           0 :                             aPos = ScreenToOutputPixel( aPos );
     629             :                         }
     630           0 :                         ImplStartDocking( aPos );
     631             :                     }
     632           0 :                     return sal_True;
     633             :                 }
     634             :             }
     635             :         }
     636          32 :         else if( rNEvt.GetType() == EVENT_KEYINPUT )
     637             :         {
     638           0 :             const KeyCode& rKey = rNEvt.GetKeyEvent()->GetKeyCode();
     639           0 :             if( rKey.GetCode() == KEY_F10 && rKey.GetModifier() &&
     640           0 :                 rKey.IsShift() && rKey.IsMod1() )
     641             :             {
     642           0 :                 SetFloatingMode( !IsFloatingMode() );
     643           0 :                 return sal_True;
     644             :             }
     645             :         }
     646             :     }
     647             : 
     648          32 :     return Window::Notify( rNEvt );
     649             : }
     650             : 
     651             : // -----------------------------------------------------------------------
     652             : 
     653           0 : void DockingWindow::StartDocking()
     654             : {
     655           0 :     mbDocking = sal_True;
     656           0 : }
     657             : 
     658             : // -----------------------------------------------------------------------
     659             : 
     660           0 : sal_Bool DockingWindow::Docking( const Point&, Rectangle& )
     661             : {
     662           0 :     return IsFloatingMode();
     663             : }
     664             : 
     665             : // -----------------------------------------------------------------------
     666             : 
     667           0 : void DockingWindow::EndDocking( const Rectangle& rRect, sal_Bool bFloatMode )
     668             : {
     669           0 :     if ( !IsDockingCanceled() )
     670             :     {
     671           0 :         sal_Bool bShow = sal_False;
     672           0 :         if ( bFloatMode != IsFloatingMode() )
     673             :         {
     674           0 :             Show( sal_False, SHOW_NOFOCUSCHANGE );
     675           0 :             SetFloatingMode( bFloatMode );
     676           0 :             bShow = sal_True;
     677           0 :             if ( bFloatMode && mpFloatWin )
     678           0 :                 mpFloatWin->SetPosSizePixel( rRect.TopLeft(), rRect.GetSize() );
     679             :         }
     680           0 :         if ( !bFloatMode )
     681             :         {
     682           0 :             Point aPos = rRect.TopLeft();
     683           0 :             aPos = GetParent()->ScreenToOutputPixel( aPos );
     684           0 :             Window::SetPosSizePixel( aPos, rRect.GetSize() );
     685             :         }
     686             : 
     687           0 :         if ( bShow )
     688           0 :             Show();
     689             :     }
     690           0 :     mbDocking = sal_False;
     691           0 : }
     692             : 
     693             : // -----------------------------------------------------------------------
     694             : 
     695           0 : sal_Bool DockingWindow::PrepareToggleFloatingMode()
     696             : {
     697           0 :     return sal_True;
     698             : }
     699             : 
     700             : // -----------------------------------------------------------------------
     701             : 
     702           0 : sal_Bool DockingWindow::Close()
     703             : {
     704           0 :     ImplDelData aDelData;
     705           0 :     ImplAddDel( &aDelData );
     706           0 :     ImplCallEventListeners( VCLEVENT_WINDOW_CLOSE );
     707           0 :     if ( aDelData.IsDead() )
     708           0 :         return sal_False;
     709           0 :     ImplRemoveDel( &aDelData );
     710             : 
     711           0 :     if ( mpWindowImpl->mxWindowPeer.is() && IsCreatedWithToolkit() )
     712           0 :         return sal_False;
     713             : 
     714           0 :     Show( sal_False, SHOW_NOFOCUSCHANGE );
     715           0 :     return sal_True;
     716             : }
     717             : 
     718             : // -----------------------------------------------------------------------
     719             : 
     720           0 : void DockingWindow::ToggleFloatingMode()
     721             : {
     722           0 : }
     723             : 
     724             : // -----------------------------------------------------------------------
     725             : 
     726           0 : void DockingWindow::TitleButtonClick( sal_uInt16 )
     727             : {
     728           0 : }
     729             : 
     730             : // -----------------------------------------------------------------------
     731             : 
     732           0 : void DockingWindow::Pin()
     733             : {
     734           0 : }
     735             : 
     736             : // -----------------------------------------------------------------------
     737             : 
     738           0 : void DockingWindow::Roll()
     739             : {
     740           0 : }
     741             : 
     742             : // -----------------------------------------------------------------------
     743             : 
     744           0 : void DockingWindow::PopupModeEnd()
     745             : {
     746           0 : }
     747             : 
     748             : // -----------------------------------------------------------------------
     749             : 
     750           0 : void DockingWindow::Resizing( Size& )
     751             : {
     752           0 : }
     753             : 
     754             : // -----------------------------------------------------------------------
     755             : 
     756        3053 : void DockingWindow::StateChanged( StateChangedType nType )
     757             : {
     758        3053 :     if ( nType == STATE_CHANGE_CONTROLBACKGROUND )
     759             :     {
     760           0 :         ImplInitSettings();
     761           0 :         Invalidate();
     762             :     }
     763             : 
     764        3053 :     Window::StateChanged( nType );
     765        3053 : }
     766             : 
     767             : // -----------------------------------------------------------------------
     768             : 
     769        1024 : void DockingWindow::DataChanged( const DataChangedEvent& rDCEvt )
     770             : {
     771        2048 :     if ( (rDCEvt.GetType() == DATACHANGED_SETTINGS) &&
     772        1024 :          (rDCEvt.GetFlags() & SETTINGS_STYLE) )
     773             :     {
     774           0 :         ImplInitSettings();
     775           0 :         Invalidate();
     776             :     }
     777             :     else
     778        1024 :         Window::DataChanged( rDCEvt );
     779        1024 : }
     780             : 
     781             : // -----------------------------------------------------------------------
     782             : 
     783           0 : void DockingWindow::SetFloatingMode( sal_Bool bFloatMode )
     784             : {
     785           0 :     ImplDockingWindowWrapper *pWrapper = ImplGetDockingManager()->GetDockingWindowWrapper( this );
     786           0 :     if( pWrapper )
     787             :     {
     788           0 :         pWrapper->SetFloatingMode( bFloatMode );
     789           0 :         return;
     790             :     }
     791           0 :     if ( IsFloatingMode() != bFloatMode )
     792             :     {
     793           0 :         if ( PrepareToggleFloatingMode() ) // changes to floating mode can be vetoed
     794             :         {
     795           0 :             sal_Bool bVisible = IsVisible();
     796             : 
     797           0 :             if ( bFloatMode )
     798             :             {
     799           0 :                 Show( sal_False, SHOW_NOFOCUSCHANGE );
     800             : 
     801           0 :                 maDockPos = Window::GetPosPixel();
     802             : 
     803           0 :                 Window* pRealParent = mpWindowImpl->mpRealParent;
     804           0 :                 mpOldBorderWin = mpWindowImpl->mpBorderWindow;
     805             : 
     806             :                 ImplDockFloatWin* pWin =
     807             :                     new ImplDockFloatWin(
     808             :                                          mpImplData->mpParent,
     809             :                                          mnFloatBits & ( WB_MOVEABLE | WB_SIZEABLE | WB_CLOSEABLE ) ?  mnFloatBits | WB_SYSTEMWINDOW : mnFloatBits,
     810           0 :                                          this );
     811           0 :                 mpFloatWin      = pWin;
     812           0 :                 mpWindowImpl->mpBorderWindow  = NULL;
     813           0 :                 mpWindowImpl->mnLeftBorder    = 0;
     814           0 :                 mpWindowImpl->mnTopBorder     = 0;
     815           0 :                 mpWindowImpl->mnRightBorder   = 0;
     816           0 :                 mpWindowImpl->mnBottomBorder  = 0;
     817             :                 // Falls Parent zerstoert wird, muessen wir auch vom
     818             :                 // BorderWindow den Parent umsetzen
     819           0 :                 if ( mpOldBorderWin )
     820           0 :                     mpOldBorderWin->SetParent( pWin );
     821           0 :                 SetParent( pWin );
     822           0 :                 SetPosPixel( Point() );
     823           0 :                 mpWindowImpl->mpBorderWindow = pWin;
     824           0 :                 pWin->mpWindowImpl->mpClientWindow = this;
     825           0 :                 mpWindowImpl->mpRealParent = pRealParent;
     826           0 :                 pWin->SetText( Window::GetText() );
     827           0 :                 pWin->SetOutputSizePixel( Window::GetSizePixel() );
     828           0 :                 pWin->SetPosPixel( maFloatPos );
     829             :                 // DockingDaten ans FloatingWindow weiterreichen
     830           0 :                 pWin->ShowTitleButton( TITLE_BUTTON_DOCKING, mbDockBtn );
     831           0 :                 pWin->ShowTitleButton( TITLE_BUTTON_HIDE, mbHideBtn );
     832           0 :                 pWin->SetPin( mbPined );
     833           0 :                 if ( mbRollUp )
     834           0 :                     pWin->RollUp();
     835             :                 else
     836           0 :                     pWin->RollDown();
     837           0 :                 pWin->SetRollUpOutputSizePixel( maRollUpOutSize );
     838           0 :                 pWin->SetMinOutputSizePixel( maMinOutSize );
     839           0 :                 pWin->SetMaxOutputSizePixel( mpImplData->maMaxOutSize );
     840             : 
     841           0 :                 ToggleFloatingMode();
     842             : 
     843           0 :                 if ( bVisible )
     844           0 :                     Show();
     845             :             }
     846             :             else
     847             :             {
     848           0 :                 Show( sal_False, SHOW_NOFOCUSCHANGE );
     849             : 
     850             :                 // FloatingDaten wird im FloatingWindow speichern
     851           0 :                 maFloatPos      = mpFloatWin->GetPosPixel();
     852           0 :                 mbDockBtn       = mpFloatWin->IsTitleButtonVisible( TITLE_BUTTON_DOCKING );
     853           0 :                 mbHideBtn       = mpFloatWin->IsTitleButtonVisible( TITLE_BUTTON_HIDE );
     854           0 :                 mbPined         = mpFloatWin->IsPined();
     855           0 :                 mbRollUp        = mpFloatWin->IsRollUp();
     856           0 :                 maRollUpOutSize = mpFloatWin->GetRollUpOutputSizePixel();
     857           0 :                 maMinOutSize    = mpFloatWin->GetMinOutputSizePixel();
     858           0 :                 mpImplData->maMaxOutSize = mpFloatWin->GetMaxOutputSizePixel();
     859             : 
     860           0 :                 Window* pRealParent = mpWindowImpl->mpRealParent;
     861           0 :                 mpWindowImpl->mpBorderWindow = NULL;
     862           0 :                 if ( mpOldBorderWin )
     863             :                 {
     864           0 :                     SetParent( mpOldBorderWin );
     865           0 :                     ((ImplBorderWindow*)mpOldBorderWin)->GetBorder( mpWindowImpl->mnLeftBorder, mpWindowImpl->mnTopBorder, mpWindowImpl->mnRightBorder, mpWindowImpl->mnBottomBorder );
     866           0 :                     mpOldBorderWin->Resize();
     867             :                 }
     868           0 :                 mpWindowImpl->mpBorderWindow = mpOldBorderWin;
     869           0 :                 SetParent( pRealParent );
     870           0 :                 mpWindowImpl->mpRealParent = pRealParent;
     871           0 :                 delete static_cast<ImplDockFloatWin*>(mpFloatWin);
     872           0 :                 mpFloatWin = NULL;
     873           0 :                 SetPosPixel( maDockPos );
     874             : 
     875           0 :                 ToggleFloatingMode();
     876             : 
     877           0 :                 if ( bVisible )
     878           0 :                     Show();
     879             :             }
     880             :         }
     881             :     }
     882             : }
     883             : 
     884             : // -----------------------------------------------------------------------
     885             : 
     886           0 : void DockingWindow::SetFloatStyle( WinBits nStyle )
     887             : {
     888           0 :     ImplDockingWindowWrapper *pWrapper = ImplGetDockingManager()->GetDockingWindowWrapper( this );
     889           0 :     if( pWrapper )
     890             :     {
     891           0 :         pWrapper->SetFloatStyle( nStyle );
     892           0 :         return;
     893             :     }
     894             : 
     895           0 :     mnFloatBits = nStyle;
     896             : }
     897             : 
     898             : // -----------------------------------------------------------------------
     899             : 
     900         731 : WinBits DockingWindow::GetFloatStyle() const
     901             : {
     902         731 :     ImplDockingWindowWrapper *pWrapper = ImplGetDockingManager()->GetDockingWindowWrapper( this );
     903         731 :     if( pWrapper )
     904             :     {
     905           0 :         return pWrapper->GetFloatStyle();
     906             :     }
     907             : 
     908         731 :     return mnFloatBits;
     909             : }
     910             : 
     911             : // -----------------------------------------------------------------------
     912             : 
     913        4158 : void DockingWindow::setPosSizePixel( long nX, long nY,
     914             :                                      long nWidth, long nHeight,
     915             :                                      sal_uInt16 nFlags )
     916             : {
     917        4158 :     ImplDockingWindowWrapper *pWrapper = ImplGetDockingManager()->GetDockingWindowWrapper( this );
     918        4158 :     if( pWrapper )
     919             :     {
     920        2446 :         if ( pWrapper->mpFloatWin )
     921           0 :             pWrapper->mpFloatWin->setPosSizePixel( nX, nY, nWidth, nHeight, nFlags );
     922             :         else
     923        2446 :             Window::setPosSizePixel( nX, nY, nWidth, nHeight, nFlags );
     924        6604 :         return;
     925             :     }
     926             : 
     927        1712 :     if ( mpFloatWin )
     928           0 :         mpFloatWin->setPosSizePixel( nX, nY, nWidth, nHeight, nFlags );
     929             :     else
     930        1712 :         Window::setPosSizePixel( nX, nY, nWidth, nHeight, nFlags );
     931             : }
     932             : 
     933             : // -----------------------------------------------------------------------
     934             : 
     935        3053 : Point DockingWindow::GetPosPixel() const
     936             : {
     937        3053 :     ImplDockingWindowWrapper *pWrapper = ImplGetDockingManager()->GetDockingWindowWrapper( this );
     938        3053 :     if( pWrapper )
     939             :     {
     940        3053 :         if ( pWrapper->mpFloatWin )
     941           0 :             return pWrapper->mpFloatWin->GetPosPixel();
     942             :         else
     943        3053 :             return Window::GetPosPixel();
     944             :     }
     945             : 
     946           0 :     if ( mpFloatWin )
     947           0 :         return mpFloatWin->GetPosPixel();
     948             :     else
     949           0 :         return Window::GetPosPixel();
     950             : }
     951             : 
     952             : // -----------------------------------------------------------------------
     953             : 
     954        4744 : Size DockingWindow::GetSizePixel() const
     955             : {
     956        4744 :     ImplDockingWindowWrapper *pWrapper = ImplGetDockingManager()->GetDockingWindowWrapper( this );
     957        4744 :     if( pWrapper )
     958             :     {
     959        3053 :         if ( pWrapper->mpFloatWin )
     960           0 :             return pWrapper->mpFloatWin->GetSizePixel();
     961             :         else
     962        3053 :             return Window::GetSizePixel();
     963             :     }
     964             : 
     965        1691 :     if ( mpFloatWin )
     966           0 :         return mpFloatWin->GetSizePixel();
     967             :     else
     968        1691 :         return Window::GetSizePixel();
     969             : }
     970             : 
     971             : // -----------------------------------------------------------------------
     972             : 
     973        1426 : void DockingWindow::SetOutputSizePixel( const Size& rNewSize )
     974             : {
     975        1426 :     ImplDockingWindowWrapper *pWrapper = ImplGetDockingManager()->GetDockingWindowWrapper( this );
     976        1426 :     if( pWrapper )
     977             :     {
     978         927 :         if ( pWrapper->mpFloatWin )
     979           0 :             pWrapper->mpFloatWin->SetOutputSizePixel( rNewSize );
     980             :         else
     981         927 :             Window::SetOutputSizePixel( rNewSize );
     982        2353 :         return;
     983             :     }
     984             : 
     985         499 :     if ( mpFloatWin )
     986           0 :         mpFloatWin->SetOutputSizePixel( rNewSize );
     987             :     else
     988         499 :         Window::SetOutputSizePixel( rNewSize );
     989             : }
     990             : 
     991             : // -----------------------------------------------------------------------
     992             : 
     993        2022 : Size DockingWindow::GetOutputSizePixel() const
     994             : {
     995        2022 :     ImplDockingWindowWrapper *pWrapper = ImplGetDockingManager()->GetDockingWindowWrapper( this );
     996        2022 :     if( pWrapper )
     997             :     {
     998        1976 :         if ( pWrapper->mpFloatWin )
     999           0 :             return pWrapper->mpFloatWin->GetOutputSizePixel();
    1000             :         else
    1001        1976 :             return Window::GetOutputSizePixel();
    1002             :     }
    1003             : 
    1004          46 :     if ( mpFloatWin )
    1005           0 :         return mpFloatWin->GetOutputSizePixel();
    1006             :     else
    1007          46 :         return Window::GetOutputSizePixel();
    1008             : }
    1009             : 
    1010           0 : Point DockingWindow::GetFloatingPos() const
    1011             : {
    1012           0 :     ImplDockingWindowWrapper *pWrapper = ImplGetDockingManager()->GetDockingWindowWrapper( this );
    1013           0 :     if( pWrapper )
    1014             :     {
    1015           0 :         if ( pWrapper->mpFloatWin )
    1016             :         {
    1017           0 :             WindowStateData aData;
    1018           0 :             aData.SetMask( WINDOWSTATE_MASK_POS );
    1019           0 :             pWrapper->mpFloatWin->GetWindowStateData( aData );
    1020           0 :             Point aPos( aData.GetX(), aData.GetY() );
    1021           0 :             aPos = pWrapper->mpFloatWin->GetParent()->ImplGetFrameWindow()->AbsoluteScreenToOutputPixel( aPos );
    1022           0 :             return aPos;
    1023             :         }
    1024             :         else
    1025           0 :             return maFloatPos;
    1026             :     }
    1027             : 
    1028           0 :     if ( mpFloatWin )
    1029             :     {
    1030           0 :         WindowStateData aData;
    1031           0 :         aData.SetMask( WINDOWSTATE_MASK_POS );
    1032           0 :         mpFloatWin->GetWindowStateData( aData );
    1033           0 :         Point aPos( aData.GetX(), aData.GetY() );
    1034           0 :         aPos = mpFloatWin->GetParent()->ImplGetFrameWindow()->AbsoluteScreenToOutputPixel( aPos );
    1035           0 :         return aPos;
    1036             :     }
    1037             :     else
    1038           0 :         return maFloatPos;
    1039             : }
    1040             : 
    1041       23766 : sal_Bool DockingWindow::IsFloatingMode() const
    1042             : {
    1043       23766 :     ImplDockingWindowWrapper *pWrapper = ImplGetDockingManager()->GetDockingWindowWrapper( this );
    1044       23766 :     if( pWrapper )
    1045       14629 :         return pWrapper->IsFloatingMode();
    1046             :     else
    1047        9137 :         return (mpFloatWin != NULL);
    1048             : }
    1049             : 
    1050           0 : void DockingWindow::SetMaxOutputSizePixel( const Size& rSize )
    1051             : {
    1052           0 :     if ( mpFloatWin )
    1053           0 :         mpFloatWin->SetMaxOutputSizePixel( rSize );
    1054           0 :     mpImplData->maMaxOutSize = rSize;
    1055           0 : }
    1056             : 
    1057             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10