1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 29*cdf0e10cSrcweir #include "precompiled_vcl.hxx" 30*cdf0e10cSrcweir 31*cdf0e10cSrcweir #include <svids.hrc> 32*cdf0e10cSrcweir #include <svdata.hxx> 33*cdf0e10cSrcweir #include <brdwin.hxx> 34*cdf0e10cSrcweir #include <window.h> 35*cdf0e10cSrcweir 36*cdf0e10cSrcweir #include <vcl/event.hxx> 37*cdf0e10cSrcweir #include <vcl/decoview.hxx> 38*cdf0e10cSrcweir #include <vcl/syswin.hxx> 39*cdf0e10cSrcweir #include <vcl/dockwin.hxx> 40*cdf0e10cSrcweir #include <vcl/floatwin.hxx> 41*cdf0e10cSrcweir #include <vcl/bitmap.hxx> 42*cdf0e10cSrcweir #include <vcl/gradient.hxx> 43*cdf0e10cSrcweir #include <vcl/image.hxx> 44*cdf0e10cSrcweir #include <vcl/virdev.hxx> 45*cdf0e10cSrcweir #include <vcl/help.hxx> 46*cdf0e10cSrcweir #include <vcl/edit.hxx> 47*cdf0e10cSrcweir #include <vcl/metric.hxx> 48*cdf0e10cSrcweir 49*cdf0e10cSrcweir #include <tools/debug.hxx> 50*cdf0e10cSrcweir 51*cdf0e10cSrcweir using namespace ::com::sun::star::uno; 52*cdf0e10cSrcweir 53*cdf0e10cSrcweir // useful caption height for title bar buttons 54*cdf0e10cSrcweir #define MIN_CAPTION_HEIGHT 18 55*cdf0e10cSrcweir 56*cdf0e10cSrcweir // ======================================================================= 57*cdf0e10cSrcweir 58*cdf0e10cSrcweir static void ImplGetPinImage( sal_uInt16 nStyle, sal_Bool bPinIn, Image& rImage ) 59*cdf0e10cSrcweir { 60*cdf0e10cSrcweir // ImageListe laden, wenn noch nicht vorhanden 61*cdf0e10cSrcweir ImplSVData* pSVData = ImplGetSVData(); 62*cdf0e10cSrcweir if ( !pSVData->maCtrlData.mpPinImgList ) 63*cdf0e10cSrcweir { 64*cdf0e10cSrcweir ResMgr* pResMgr = ImplGetResMgr(); 65*cdf0e10cSrcweir pSVData->maCtrlData.mpPinImgList = new ImageList(); 66*cdf0e10cSrcweir if( pResMgr ) 67*cdf0e10cSrcweir { 68*cdf0e10cSrcweir Color aMaskColor( 0x00, 0x00, 0xFF ); 69*cdf0e10cSrcweir pSVData->maCtrlData.mpPinImgList->InsertFromHorizontalBitmap 70*cdf0e10cSrcweir ( ResId( SV_RESID_BITMAP_PIN, *pResMgr ), 4, 71*cdf0e10cSrcweir &aMaskColor, NULL, NULL, 0); 72*cdf0e10cSrcweir } 73*cdf0e10cSrcweir } 74*cdf0e10cSrcweir 75*cdf0e10cSrcweir // Image ermitteln und zurueckgeben 76*cdf0e10cSrcweir sal_uInt16 nId; 77*cdf0e10cSrcweir if ( nStyle & BUTTON_DRAW_PRESSED ) 78*cdf0e10cSrcweir { 79*cdf0e10cSrcweir if ( bPinIn ) 80*cdf0e10cSrcweir nId = 4; 81*cdf0e10cSrcweir else 82*cdf0e10cSrcweir nId = 3; 83*cdf0e10cSrcweir } 84*cdf0e10cSrcweir else 85*cdf0e10cSrcweir { 86*cdf0e10cSrcweir if ( bPinIn ) 87*cdf0e10cSrcweir nId = 2; 88*cdf0e10cSrcweir else 89*cdf0e10cSrcweir nId = 1; 90*cdf0e10cSrcweir } 91*cdf0e10cSrcweir rImage = pSVData->maCtrlData.mpPinImgList->GetImage( nId ); 92*cdf0e10cSrcweir } 93*cdf0e10cSrcweir 94*cdf0e10cSrcweir // ----------------------------------------------------------------------- 95*cdf0e10cSrcweir 96*cdf0e10cSrcweir void Window::ImplCalcSymbolRect( Rectangle& rRect ) 97*cdf0e10cSrcweir { 98*cdf0e10cSrcweir // Den Rand den der Button in der nicht Default-Darstellung freilaesst, 99*cdf0e10cSrcweir // dazuaddieren, da wir diesen bei kleinen Buttons mit ausnutzen wollen 100*cdf0e10cSrcweir rRect.Left()--; 101*cdf0e10cSrcweir rRect.Top()--; 102*cdf0e10cSrcweir rRect.Right()++; 103*cdf0e10cSrcweir rRect.Bottom()++; 104*cdf0e10cSrcweir 105*cdf0e10cSrcweir // Zwischen dem Symbol und dem Button-Rand lassen wir 5% Platz 106*cdf0e10cSrcweir long nExtraWidth = ((rRect.GetWidth()*50)+500)/1000; 107*cdf0e10cSrcweir long nExtraHeight = ((rRect.GetHeight()*50)+500)/1000; 108*cdf0e10cSrcweir rRect.Left() += nExtraWidth; 109*cdf0e10cSrcweir rRect.Right() -= nExtraWidth; 110*cdf0e10cSrcweir rRect.Top() += nExtraHeight; 111*cdf0e10cSrcweir rRect.Bottom() -= nExtraHeight; 112*cdf0e10cSrcweir } 113*cdf0e10cSrcweir 114*cdf0e10cSrcweir // ----------------------------------------------------------------------- 115*cdf0e10cSrcweir 116*cdf0e10cSrcweir static void ImplDrawBrdWinSymbol( OutputDevice* pDev, 117*cdf0e10cSrcweir const Rectangle& rRect, SymbolType eSymbol ) 118*cdf0e10cSrcweir { 119*cdf0e10cSrcweir // Zwischen dem Symbol und dem Button lassen wir 5% Platz 120*cdf0e10cSrcweir DecorationView aDecoView( pDev ); 121*cdf0e10cSrcweir Rectangle aTempRect = rRect; 122*cdf0e10cSrcweir Window::ImplCalcSymbolRect( aTempRect ); 123*cdf0e10cSrcweir aDecoView.DrawSymbol( aTempRect, eSymbol, 124*cdf0e10cSrcweir pDev->GetSettings().GetStyleSettings().GetButtonTextColor(), 0 ); 125*cdf0e10cSrcweir } 126*cdf0e10cSrcweir 127*cdf0e10cSrcweir // ----------------------------------------------------------------------- 128*cdf0e10cSrcweir 129*cdf0e10cSrcweir static void ImplDrawBrdWinSymbolButton( OutputDevice* pDev, 130*cdf0e10cSrcweir const Rectangle& rRect, 131*cdf0e10cSrcweir SymbolType eSymbol, sal_uInt16 nState ) 132*cdf0e10cSrcweir { 133*cdf0e10cSrcweir sal_Bool bMouseOver = (nState & BUTTON_DRAW_HIGHLIGHT) != 0; 134*cdf0e10cSrcweir nState &= ~BUTTON_DRAW_HIGHLIGHT; 135*cdf0e10cSrcweir 136*cdf0e10cSrcweir Rectangle aTempRect; 137*cdf0e10cSrcweir Window *pWin = dynamic_cast< Window* >(pDev); 138*cdf0e10cSrcweir if( pWin ) 139*cdf0e10cSrcweir { 140*cdf0e10cSrcweir if( bMouseOver ) 141*cdf0e10cSrcweir { 142*cdf0e10cSrcweir // provide a bright background for selection effect 143*cdf0e10cSrcweir pWin->SetFillColor( pDev->GetSettings().GetStyleSettings().GetWindowColor() ); 144*cdf0e10cSrcweir pWin->SetLineColor(); 145*cdf0e10cSrcweir pWin->DrawRect( rRect ); 146*cdf0e10cSrcweir pWin->DrawSelectionBackground( rRect, 2, (nState & BUTTON_DRAW_PRESSED) ? sal_True : sal_False, 147*cdf0e10cSrcweir sal_True, sal_False ); 148*cdf0e10cSrcweir } 149*cdf0e10cSrcweir aTempRect = rRect; 150*cdf0e10cSrcweir aTempRect.nLeft+=3; 151*cdf0e10cSrcweir aTempRect.nRight-=4; 152*cdf0e10cSrcweir aTempRect.nTop+=3; 153*cdf0e10cSrcweir aTempRect.nBottom-=4; 154*cdf0e10cSrcweir } 155*cdf0e10cSrcweir else 156*cdf0e10cSrcweir { 157*cdf0e10cSrcweir DecorationView aDecoView( pDev ); 158*cdf0e10cSrcweir aTempRect = aDecoView.DrawButton( rRect, nState|BUTTON_DRAW_FLAT ); 159*cdf0e10cSrcweir } 160*cdf0e10cSrcweir ImplDrawBrdWinSymbol( pDev, aTempRect, eSymbol ); 161*cdf0e10cSrcweir } 162*cdf0e10cSrcweir 163*cdf0e10cSrcweir 164*cdf0e10cSrcweir // ======================================================================= 165*cdf0e10cSrcweir 166*cdf0e10cSrcweir // ------------------------ 167*cdf0e10cSrcweir // - ImplBorderWindowView - 168*cdf0e10cSrcweir // ------------------------ 169*cdf0e10cSrcweir 170*cdf0e10cSrcweir ImplBorderWindowView::~ImplBorderWindowView() 171*cdf0e10cSrcweir { 172*cdf0e10cSrcweir } 173*cdf0e10cSrcweir 174*cdf0e10cSrcweir // ----------------------------------------------------------------------- 175*cdf0e10cSrcweir 176*cdf0e10cSrcweir sal_Bool ImplBorderWindowView::MouseMove( const MouseEvent& ) 177*cdf0e10cSrcweir { 178*cdf0e10cSrcweir return sal_False; 179*cdf0e10cSrcweir } 180*cdf0e10cSrcweir 181*cdf0e10cSrcweir // ----------------------------------------------------------------------- 182*cdf0e10cSrcweir 183*cdf0e10cSrcweir sal_Bool ImplBorderWindowView::MouseButtonDown( const MouseEvent& ) 184*cdf0e10cSrcweir { 185*cdf0e10cSrcweir return sal_False; 186*cdf0e10cSrcweir } 187*cdf0e10cSrcweir 188*cdf0e10cSrcweir // ----------------------------------------------------------------------- 189*cdf0e10cSrcweir 190*cdf0e10cSrcweir sal_Bool ImplBorderWindowView::Tracking( const TrackingEvent& ) 191*cdf0e10cSrcweir { 192*cdf0e10cSrcweir return sal_False; 193*cdf0e10cSrcweir } 194*cdf0e10cSrcweir 195*cdf0e10cSrcweir // ----------------------------------------------------------------------- 196*cdf0e10cSrcweir 197*cdf0e10cSrcweir String ImplBorderWindowView::RequestHelp( const Point&, Rectangle& ) 198*cdf0e10cSrcweir { 199*cdf0e10cSrcweir return String(); 200*cdf0e10cSrcweir } 201*cdf0e10cSrcweir 202*cdf0e10cSrcweir // ----------------------------------------------------------------------- 203*cdf0e10cSrcweir 204*cdf0e10cSrcweir Rectangle ImplBorderWindowView::GetMenuRect() const 205*cdf0e10cSrcweir { 206*cdf0e10cSrcweir return Rectangle(); 207*cdf0e10cSrcweir } 208*cdf0e10cSrcweir 209*cdf0e10cSrcweir // ----------------------------------------------------------------------- 210*cdf0e10cSrcweir 211*cdf0e10cSrcweir void ImplBorderWindowView::ImplInitTitle( ImplBorderFrameData* pData ) 212*cdf0e10cSrcweir { 213*cdf0e10cSrcweir ImplBorderWindow* pBorderWindow = pData->mpBorderWindow; 214*cdf0e10cSrcweir 215*cdf0e10cSrcweir if ( !(pBorderWindow->GetStyle() & WB_MOVEABLE) || 216*cdf0e10cSrcweir (pData->mnTitleType == BORDERWINDOW_TITLE_NONE) ) 217*cdf0e10cSrcweir { 218*cdf0e10cSrcweir pData->mnTitleType = BORDERWINDOW_TITLE_NONE; 219*cdf0e10cSrcweir pData->mnTitleHeight = 0; 220*cdf0e10cSrcweir } 221*cdf0e10cSrcweir else 222*cdf0e10cSrcweir { 223*cdf0e10cSrcweir const StyleSettings& rStyleSettings = pData->mpOutDev->GetSettings().GetStyleSettings(); 224*cdf0e10cSrcweir if ( pData->mnTitleType == BORDERWINDOW_TITLE_TEAROFF ) 225*cdf0e10cSrcweir pData->mnTitleHeight = rStyleSettings.GetTearOffTitleHeight(); 226*cdf0e10cSrcweir else 227*cdf0e10cSrcweir { 228*cdf0e10cSrcweir if ( pData->mnTitleType == BORDERWINDOW_TITLE_SMALL ) 229*cdf0e10cSrcweir { 230*cdf0e10cSrcweir pBorderWindow->SetPointFont( rStyleSettings.GetFloatTitleFont() ); 231*cdf0e10cSrcweir pData->mnTitleHeight = rStyleSettings.GetFloatTitleHeight(); 232*cdf0e10cSrcweir } 233*cdf0e10cSrcweir else // pData->mnTitleType == BORDERWINDOW_TITLE_NORMAL 234*cdf0e10cSrcweir { 235*cdf0e10cSrcweir pBorderWindow->SetPointFont( rStyleSettings.GetTitleFont() ); 236*cdf0e10cSrcweir pData->mnTitleHeight = rStyleSettings.GetTitleHeight(); 237*cdf0e10cSrcweir } 238*cdf0e10cSrcweir long nTextHeight = pBorderWindow->GetTextHeight(); 239*cdf0e10cSrcweir if ( nTextHeight > pData->mnTitleHeight ) 240*cdf0e10cSrcweir pData->mnTitleHeight = nTextHeight; 241*cdf0e10cSrcweir } 242*cdf0e10cSrcweir } 243*cdf0e10cSrcweir } 244*cdf0e10cSrcweir 245*cdf0e10cSrcweir // ----------------------------------------------------------------------- 246*cdf0e10cSrcweir 247*cdf0e10cSrcweir sal_uInt16 ImplBorderWindowView::ImplHitTest( ImplBorderFrameData* pData, const Point& rPos ) 248*cdf0e10cSrcweir { 249*cdf0e10cSrcweir ImplBorderWindow* pBorderWindow = pData->mpBorderWindow; 250*cdf0e10cSrcweir 251*cdf0e10cSrcweir if ( pData->maTitleRect.IsInside( rPos ) ) 252*cdf0e10cSrcweir { 253*cdf0e10cSrcweir if ( pData->maCloseRect.IsInside( rPos ) ) 254*cdf0e10cSrcweir return BORDERWINDOW_HITTEST_CLOSE; 255*cdf0e10cSrcweir else if ( pData->maRollRect.IsInside( rPos ) ) 256*cdf0e10cSrcweir return BORDERWINDOW_HITTEST_ROLL; 257*cdf0e10cSrcweir else if ( pData->maMenuRect.IsInside( rPos ) ) 258*cdf0e10cSrcweir return BORDERWINDOW_HITTEST_MENU; 259*cdf0e10cSrcweir else if ( pData->maDockRect.IsInside( rPos ) ) 260*cdf0e10cSrcweir return BORDERWINDOW_HITTEST_DOCK; 261*cdf0e10cSrcweir else if ( pData->maHideRect.IsInside( rPos ) ) 262*cdf0e10cSrcweir return BORDERWINDOW_HITTEST_HIDE; 263*cdf0e10cSrcweir else if ( pData->maHelpRect.IsInside( rPos ) ) 264*cdf0e10cSrcweir return BORDERWINDOW_HITTEST_HELP; 265*cdf0e10cSrcweir else if ( pData->maPinRect.IsInside( rPos ) ) 266*cdf0e10cSrcweir return BORDERWINDOW_HITTEST_PIN; 267*cdf0e10cSrcweir else 268*cdf0e10cSrcweir return BORDERWINDOW_HITTEST_TITLE; 269*cdf0e10cSrcweir } 270*cdf0e10cSrcweir 271*cdf0e10cSrcweir if ( (pBorderWindow->GetStyle() & WB_SIZEABLE) && 272*cdf0e10cSrcweir !pBorderWindow->mbRollUp ) 273*cdf0e10cSrcweir { 274*cdf0e10cSrcweir long nSizeWidth = pData->mnNoTitleTop+pData->mnTitleHeight; 275*cdf0e10cSrcweir if ( nSizeWidth < 16 ) 276*cdf0e10cSrcweir nSizeWidth = 16; 277*cdf0e10cSrcweir 278*cdf0e10cSrcweir // no corner resize for floating toolbars, which would lead to jumps while formatting 279*cdf0e10cSrcweir // setting nSizeWidth = 0 will only return pure left,top,right,bottom 280*cdf0e10cSrcweir if( pBorderWindow->GetStyle() & WB_OWNERDRAWDECORATION ) 281*cdf0e10cSrcweir nSizeWidth = 0; 282*cdf0e10cSrcweir 283*cdf0e10cSrcweir if ( rPos.X() < pData->mnLeftBorder ) 284*cdf0e10cSrcweir { 285*cdf0e10cSrcweir if ( rPos.Y() < nSizeWidth ) 286*cdf0e10cSrcweir return BORDERWINDOW_HITTEST_TOPLEFT; 287*cdf0e10cSrcweir else if ( rPos.Y() >= pData->mnHeight-nSizeWidth ) 288*cdf0e10cSrcweir return BORDERWINDOW_HITTEST_BOTTOMLEFT; 289*cdf0e10cSrcweir else 290*cdf0e10cSrcweir return BORDERWINDOW_HITTEST_LEFT; 291*cdf0e10cSrcweir } 292*cdf0e10cSrcweir else if ( rPos.X() >= pData->mnWidth-pData->mnRightBorder ) 293*cdf0e10cSrcweir { 294*cdf0e10cSrcweir if ( rPos.Y() < nSizeWidth ) 295*cdf0e10cSrcweir return BORDERWINDOW_HITTEST_TOPRIGHT; 296*cdf0e10cSrcweir else if ( rPos.Y() >= pData->mnHeight-nSizeWidth ) 297*cdf0e10cSrcweir return BORDERWINDOW_HITTEST_BOTTOMRIGHT; 298*cdf0e10cSrcweir else 299*cdf0e10cSrcweir return BORDERWINDOW_HITTEST_RIGHT; 300*cdf0e10cSrcweir } 301*cdf0e10cSrcweir else if ( rPos.Y() < pData->mnNoTitleTop ) 302*cdf0e10cSrcweir { 303*cdf0e10cSrcweir if ( rPos.X() < nSizeWidth ) 304*cdf0e10cSrcweir return BORDERWINDOW_HITTEST_TOPLEFT; 305*cdf0e10cSrcweir else if ( rPos.X() >= pData->mnWidth-nSizeWidth ) 306*cdf0e10cSrcweir return BORDERWINDOW_HITTEST_TOPRIGHT; 307*cdf0e10cSrcweir else 308*cdf0e10cSrcweir return BORDERWINDOW_HITTEST_TOP; 309*cdf0e10cSrcweir } 310*cdf0e10cSrcweir else if ( rPos.Y() >= pData->mnHeight-pData->mnBottomBorder ) 311*cdf0e10cSrcweir { 312*cdf0e10cSrcweir if ( rPos.X() < nSizeWidth ) 313*cdf0e10cSrcweir return BORDERWINDOW_HITTEST_BOTTOMLEFT; 314*cdf0e10cSrcweir else if ( rPos.X() >= pData->mnWidth-nSizeWidth ) 315*cdf0e10cSrcweir return BORDERWINDOW_HITTEST_BOTTOMRIGHT; 316*cdf0e10cSrcweir else 317*cdf0e10cSrcweir return BORDERWINDOW_HITTEST_BOTTOM; 318*cdf0e10cSrcweir } 319*cdf0e10cSrcweir } 320*cdf0e10cSrcweir 321*cdf0e10cSrcweir return 0; 322*cdf0e10cSrcweir } 323*cdf0e10cSrcweir 324*cdf0e10cSrcweir // ----------------------------------------------------------------------- 325*cdf0e10cSrcweir 326*cdf0e10cSrcweir sal_Bool ImplBorderWindowView::ImplMouseMove( ImplBorderFrameData* pData, const MouseEvent& rMEvt ) 327*cdf0e10cSrcweir { 328*cdf0e10cSrcweir sal_uInt16 oldCloseState = pData->mnCloseState; 329*cdf0e10cSrcweir sal_uInt16 oldMenuState = pData->mnMenuState; 330*cdf0e10cSrcweir pData->mnCloseState &= ~BUTTON_DRAW_HIGHLIGHT; 331*cdf0e10cSrcweir pData->mnMenuState &= ~BUTTON_DRAW_HIGHLIGHT; 332*cdf0e10cSrcweir 333*cdf0e10cSrcweir Point aMousePos = rMEvt.GetPosPixel(); 334*cdf0e10cSrcweir sal_uInt16 nHitTest = ImplHitTest( pData, aMousePos ); 335*cdf0e10cSrcweir PointerStyle ePtrStyle = POINTER_ARROW; 336*cdf0e10cSrcweir if ( nHitTest & BORDERWINDOW_HITTEST_LEFT ) 337*cdf0e10cSrcweir ePtrStyle = POINTER_WINDOW_WSIZE; 338*cdf0e10cSrcweir else if ( nHitTest & BORDERWINDOW_HITTEST_RIGHT ) 339*cdf0e10cSrcweir ePtrStyle = POINTER_WINDOW_ESIZE; 340*cdf0e10cSrcweir else if ( nHitTest & BORDERWINDOW_HITTEST_TOP ) 341*cdf0e10cSrcweir ePtrStyle = POINTER_WINDOW_NSIZE; 342*cdf0e10cSrcweir else if ( nHitTest & BORDERWINDOW_HITTEST_BOTTOM ) 343*cdf0e10cSrcweir ePtrStyle = POINTER_WINDOW_SSIZE; 344*cdf0e10cSrcweir else if ( nHitTest & BORDERWINDOW_HITTEST_TOPLEFT ) 345*cdf0e10cSrcweir ePtrStyle = POINTER_WINDOW_NWSIZE; 346*cdf0e10cSrcweir else if ( nHitTest & BORDERWINDOW_HITTEST_BOTTOMRIGHT ) 347*cdf0e10cSrcweir ePtrStyle = POINTER_WINDOW_SESIZE; 348*cdf0e10cSrcweir else if ( nHitTest & BORDERWINDOW_HITTEST_TOPRIGHT ) 349*cdf0e10cSrcweir ePtrStyle = POINTER_WINDOW_NESIZE; 350*cdf0e10cSrcweir else if ( nHitTest & BORDERWINDOW_HITTEST_BOTTOMLEFT ) 351*cdf0e10cSrcweir ePtrStyle = POINTER_WINDOW_SWSIZE; 352*cdf0e10cSrcweir else if ( nHitTest & BORDERWINDOW_HITTEST_CLOSE ) 353*cdf0e10cSrcweir pData->mnCloseState |= BUTTON_DRAW_HIGHLIGHT; 354*cdf0e10cSrcweir else if ( nHitTest & BORDERWINDOW_HITTEST_MENU ) 355*cdf0e10cSrcweir pData->mnMenuState |= BUTTON_DRAW_HIGHLIGHT; 356*cdf0e10cSrcweir pData->mpBorderWindow->SetPointer( Pointer( ePtrStyle ) ); 357*cdf0e10cSrcweir 358*cdf0e10cSrcweir if( pData->mnCloseState != oldCloseState ) 359*cdf0e10cSrcweir pData->mpBorderWindow->Invalidate( pData->maCloseRect ); 360*cdf0e10cSrcweir if( pData->mnMenuState != oldMenuState ) 361*cdf0e10cSrcweir pData->mpBorderWindow->Invalidate( pData->maMenuRect ); 362*cdf0e10cSrcweir 363*cdf0e10cSrcweir return sal_True; 364*cdf0e10cSrcweir } 365*cdf0e10cSrcweir 366*cdf0e10cSrcweir // ----------------------------------------------------------------------- 367*cdf0e10cSrcweir 368*cdf0e10cSrcweir sal_Bool ImplBorderWindowView::ImplMouseButtonDown( ImplBorderFrameData* pData, const MouseEvent& rMEvt ) 369*cdf0e10cSrcweir { 370*cdf0e10cSrcweir ImplBorderWindow* pBorderWindow = pData->mpBorderWindow; 371*cdf0e10cSrcweir 372*cdf0e10cSrcweir if ( rMEvt.IsLeft() || rMEvt.IsRight() ) 373*cdf0e10cSrcweir { 374*cdf0e10cSrcweir pData->maMouseOff = rMEvt.GetPosPixel(); 375*cdf0e10cSrcweir pData->mnHitTest = ImplHitTest( pData, pData->maMouseOff ); 376*cdf0e10cSrcweir sal_uInt16 nDragFullTest = 0; 377*cdf0e10cSrcweir if ( pData->mnHitTest ) 378*cdf0e10cSrcweir { 379*cdf0e10cSrcweir sal_Bool bTracking = sal_True; 380*cdf0e10cSrcweir sal_Bool bHitTest = sal_True; 381*cdf0e10cSrcweir 382*cdf0e10cSrcweir if ( pData->mnHitTest & BORDERWINDOW_HITTEST_CLOSE ) 383*cdf0e10cSrcweir { 384*cdf0e10cSrcweir pData->mnCloseState |= BUTTON_DRAW_PRESSED; 385*cdf0e10cSrcweir DrawWindow( BORDERWINDOW_DRAW_CLOSE ); 386*cdf0e10cSrcweir } 387*cdf0e10cSrcweir else if ( pData->mnHitTest & BORDERWINDOW_HITTEST_ROLL ) 388*cdf0e10cSrcweir { 389*cdf0e10cSrcweir pData->mnRollState |= BUTTON_DRAW_PRESSED; 390*cdf0e10cSrcweir DrawWindow( BORDERWINDOW_DRAW_ROLL ); 391*cdf0e10cSrcweir } 392*cdf0e10cSrcweir else if ( pData->mnHitTest & BORDERWINDOW_HITTEST_DOCK ) 393*cdf0e10cSrcweir { 394*cdf0e10cSrcweir pData->mnDockState |= BUTTON_DRAW_PRESSED; 395*cdf0e10cSrcweir DrawWindow( BORDERWINDOW_DRAW_DOCK ); 396*cdf0e10cSrcweir } 397*cdf0e10cSrcweir else if ( pData->mnHitTest & BORDERWINDOW_HITTEST_MENU ) 398*cdf0e10cSrcweir { 399*cdf0e10cSrcweir pData->mnMenuState |= BUTTON_DRAW_PRESSED; 400*cdf0e10cSrcweir DrawWindow( BORDERWINDOW_DRAW_MENU ); 401*cdf0e10cSrcweir 402*cdf0e10cSrcweir // call handler already on mouse down 403*cdf0e10cSrcweir if ( pBorderWindow->ImplGetClientWindow()->IsSystemWindow() ) 404*cdf0e10cSrcweir { 405*cdf0e10cSrcweir SystemWindow* pClientWindow = (SystemWindow*)(pBorderWindow->ImplGetClientWindow()); 406*cdf0e10cSrcweir pClientWindow->TitleButtonClick( TITLE_BUTTON_MENU ); 407*cdf0e10cSrcweir } 408*cdf0e10cSrcweir } 409*cdf0e10cSrcweir else if ( pData->mnHitTest & BORDERWINDOW_HITTEST_HIDE ) 410*cdf0e10cSrcweir { 411*cdf0e10cSrcweir pData->mnHideState |= BUTTON_DRAW_PRESSED; 412*cdf0e10cSrcweir DrawWindow( BORDERWINDOW_DRAW_HIDE ); 413*cdf0e10cSrcweir } 414*cdf0e10cSrcweir else if ( pData->mnHitTest & BORDERWINDOW_HITTEST_HELP ) 415*cdf0e10cSrcweir { 416*cdf0e10cSrcweir pData->mnHelpState |= BUTTON_DRAW_PRESSED; 417*cdf0e10cSrcweir DrawWindow( BORDERWINDOW_DRAW_HELP ); 418*cdf0e10cSrcweir } 419*cdf0e10cSrcweir else if ( pData->mnHitTest & BORDERWINDOW_HITTEST_PIN ) 420*cdf0e10cSrcweir { 421*cdf0e10cSrcweir pData->mnPinState |= BUTTON_DRAW_PRESSED; 422*cdf0e10cSrcweir DrawWindow( BORDERWINDOW_DRAW_PIN ); 423*cdf0e10cSrcweir } 424*cdf0e10cSrcweir else 425*cdf0e10cSrcweir { 426*cdf0e10cSrcweir if ( rMEvt.GetClicks() == 1 ) 427*cdf0e10cSrcweir { 428*cdf0e10cSrcweir if ( bTracking ) 429*cdf0e10cSrcweir { 430*cdf0e10cSrcweir Point aPos = pBorderWindow->GetPosPixel(); 431*cdf0e10cSrcweir Size aSize = pBorderWindow->GetOutputSizePixel(); 432*cdf0e10cSrcweir pData->mnTrackX = aPos.X(); 433*cdf0e10cSrcweir pData->mnTrackY = aPos.Y(); 434*cdf0e10cSrcweir pData->mnTrackWidth = aSize.Width(); 435*cdf0e10cSrcweir pData->mnTrackHeight = aSize.Height(); 436*cdf0e10cSrcweir 437*cdf0e10cSrcweir if ( pData->mnHitTest & BORDERWINDOW_HITTEST_TITLE ) 438*cdf0e10cSrcweir nDragFullTest = DRAGFULL_OPTION_WINDOWMOVE; 439*cdf0e10cSrcweir else 440*cdf0e10cSrcweir nDragFullTest = DRAGFULL_OPTION_WINDOWSIZE; 441*cdf0e10cSrcweir } 442*cdf0e10cSrcweir } 443*cdf0e10cSrcweir else 444*cdf0e10cSrcweir { 445*cdf0e10cSrcweir bTracking = sal_False; 446*cdf0e10cSrcweir 447*cdf0e10cSrcweir if ( (pData->mnHitTest & BORDERWINDOW_DRAW_TITLE) && 448*cdf0e10cSrcweir ((rMEvt.GetClicks() % 2) == 0) ) 449*cdf0e10cSrcweir { 450*cdf0e10cSrcweir pData->mnHitTest = 0; 451*cdf0e10cSrcweir bHitTest = sal_False; 452*cdf0e10cSrcweir 453*cdf0e10cSrcweir if ( pBorderWindow->ImplGetClientWindow()->IsSystemWindow() ) 454*cdf0e10cSrcweir { 455*cdf0e10cSrcweir SystemWindow* pClientWindow = (SystemWindow*)(pBorderWindow->ImplGetClientWindow()); 456*cdf0e10cSrcweir if ( sal_True /*pBorderWindow->mbDockBtn*/ ) // always perform docking on double click, no button required 457*cdf0e10cSrcweir pClientWindow->TitleButtonClick( TITLE_BUTTON_DOCKING ); 458*cdf0e10cSrcweir else if ( pBorderWindow->GetStyle() & WB_ROLLABLE ) 459*cdf0e10cSrcweir { 460*cdf0e10cSrcweir if ( pClientWindow->IsRollUp() ) 461*cdf0e10cSrcweir pClientWindow->RollDown(); 462*cdf0e10cSrcweir else 463*cdf0e10cSrcweir pClientWindow->RollUp(); 464*cdf0e10cSrcweir pClientWindow->Roll(); 465*cdf0e10cSrcweir } 466*cdf0e10cSrcweir } 467*cdf0e10cSrcweir } 468*cdf0e10cSrcweir } 469*cdf0e10cSrcweir } 470*cdf0e10cSrcweir 471*cdf0e10cSrcweir if ( bTracking ) 472*cdf0e10cSrcweir { 473*cdf0e10cSrcweir pData->mbDragFull = sal_False; 474*cdf0e10cSrcweir if ( nDragFullTest ) 475*cdf0e10cSrcweir pData->mbDragFull = sal_True; // always fulldrag for proper docking, ignore system settings 476*cdf0e10cSrcweir pBorderWindow->StartTracking(); 477*cdf0e10cSrcweir } 478*cdf0e10cSrcweir else if ( bHitTest ) 479*cdf0e10cSrcweir pData->mnHitTest = 0; 480*cdf0e10cSrcweir } 481*cdf0e10cSrcweir } 482*cdf0e10cSrcweir 483*cdf0e10cSrcweir return sal_True; 484*cdf0e10cSrcweir } 485*cdf0e10cSrcweir 486*cdf0e10cSrcweir // ----------------------------------------------------------------------- 487*cdf0e10cSrcweir 488*cdf0e10cSrcweir sal_Bool ImplBorderWindowView::ImplTracking( ImplBorderFrameData* pData, const TrackingEvent& rTEvt ) 489*cdf0e10cSrcweir { 490*cdf0e10cSrcweir ImplBorderWindow* pBorderWindow = pData->mpBorderWindow; 491*cdf0e10cSrcweir 492*cdf0e10cSrcweir if ( rTEvt.IsTrackingEnded() ) 493*cdf0e10cSrcweir { 494*cdf0e10cSrcweir sal_uInt16 nHitTest = pData->mnHitTest; 495*cdf0e10cSrcweir pData->mnHitTest = 0; 496*cdf0e10cSrcweir 497*cdf0e10cSrcweir if ( nHitTest & BORDERWINDOW_HITTEST_CLOSE ) 498*cdf0e10cSrcweir { 499*cdf0e10cSrcweir if ( pData->mnCloseState & BUTTON_DRAW_PRESSED ) 500*cdf0e10cSrcweir { 501*cdf0e10cSrcweir pData->mnCloseState &= ~BUTTON_DRAW_PRESSED; 502*cdf0e10cSrcweir DrawWindow( BORDERWINDOW_DRAW_CLOSE ); 503*cdf0e10cSrcweir 504*cdf0e10cSrcweir // Bei Abbruch kein Click-Handler rufen 505*cdf0e10cSrcweir if ( !rTEvt.IsTrackingCanceled() ) 506*cdf0e10cSrcweir { 507*cdf0e10cSrcweir // dispatch to correct window type (why is Close() not virtual ??? ) 508*cdf0e10cSrcweir // TODO: make Close() virtual 509*cdf0e10cSrcweir Window *pWin = pBorderWindow->ImplGetClientWindow()->ImplGetWindow(); 510*cdf0e10cSrcweir SystemWindow *pSysWin = dynamic_cast<SystemWindow* >(pWin); 511*cdf0e10cSrcweir DockingWindow *pDockWin = dynamic_cast<DockingWindow*>(pWin); 512*cdf0e10cSrcweir if ( pSysWin ) 513*cdf0e10cSrcweir pSysWin->Close(); 514*cdf0e10cSrcweir else if ( pDockWin ) 515*cdf0e10cSrcweir pDockWin->Close(); 516*cdf0e10cSrcweir } 517*cdf0e10cSrcweir } 518*cdf0e10cSrcweir } 519*cdf0e10cSrcweir else if ( nHitTest & BORDERWINDOW_HITTEST_ROLL ) 520*cdf0e10cSrcweir { 521*cdf0e10cSrcweir if ( pData->mnRollState & BUTTON_DRAW_PRESSED ) 522*cdf0e10cSrcweir { 523*cdf0e10cSrcweir pData->mnRollState &= ~BUTTON_DRAW_PRESSED; 524*cdf0e10cSrcweir DrawWindow( BORDERWINDOW_DRAW_ROLL ); 525*cdf0e10cSrcweir 526*cdf0e10cSrcweir // Bei Abbruch kein Click-Handler rufen 527*cdf0e10cSrcweir if ( !rTEvt.IsTrackingCanceled() ) 528*cdf0e10cSrcweir { 529*cdf0e10cSrcweir if ( pBorderWindow->ImplGetClientWindow()->IsSystemWindow() ) 530*cdf0e10cSrcweir { 531*cdf0e10cSrcweir SystemWindow* pClientWindow = (SystemWindow*)(pBorderWindow->ImplGetClientWindow()); 532*cdf0e10cSrcweir if ( pClientWindow->IsRollUp() ) 533*cdf0e10cSrcweir pClientWindow->RollDown(); 534*cdf0e10cSrcweir else 535*cdf0e10cSrcweir pClientWindow->RollUp(); 536*cdf0e10cSrcweir pClientWindow->Roll(); 537*cdf0e10cSrcweir } 538*cdf0e10cSrcweir } 539*cdf0e10cSrcweir } 540*cdf0e10cSrcweir } 541*cdf0e10cSrcweir else if ( nHitTest & BORDERWINDOW_HITTEST_DOCK ) 542*cdf0e10cSrcweir { 543*cdf0e10cSrcweir if ( pData->mnDockState & BUTTON_DRAW_PRESSED ) 544*cdf0e10cSrcweir { 545*cdf0e10cSrcweir pData->mnDockState &= ~BUTTON_DRAW_PRESSED; 546*cdf0e10cSrcweir DrawWindow( BORDERWINDOW_DRAW_DOCK ); 547*cdf0e10cSrcweir 548*cdf0e10cSrcweir // Bei Abbruch kein Click-Handler rufen 549*cdf0e10cSrcweir if ( !rTEvt.IsTrackingCanceled() ) 550*cdf0e10cSrcweir { 551*cdf0e10cSrcweir if ( pBorderWindow->ImplGetClientWindow()->IsSystemWindow() ) 552*cdf0e10cSrcweir { 553*cdf0e10cSrcweir SystemWindow* pClientWindow = (SystemWindow*)(pBorderWindow->ImplGetClientWindow()); 554*cdf0e10cSrcweir pClientWindow->TitleButtonClick( TITLE_BUTTON_DOCKING ); 555*cdf0e10cSrcweir } 556*cdf0e10cSrcweir } 557*cdf0e10cSrcweir } 558*cdf0e10cSrcweir } 559*cdf0e10cSrcweir else if ( nHitTest & BORDERWINDOW_HITTEST_MENU ) 560*cdf0e10cSrcweir { 561*cdf0e10cSrcweir if ( pData->mnMenuState & BUTTON_DRAW_PRESSED ) 562*cdf0e10cSrcweir { 563*cdf0e10cSrcweir pData->mnMenuState &= ~BUTTON_DRAW_PRESSED; 564*cdf0e10cSrcweir DrawWindow( BORDERWINDOW_DRAW_MENU ); 565*cdf0e10cSrcweir 566*cdf0e10cSrcweir // handler already called on mouse down 567*cdf0e10cSrcweir } 568*cdf0e10cSrcweir } 569*cdf0e10cSrcweir else if ( nHitTest & BORDERWINDOW_HITTEST_HIDE ) 570*cdf0e10cSrcweir { 571*cdf0e10cSrcweir if ( pData->mnHideState & BUTTON_DRAW_PRESSED ) 572*cdf0e10cSrcweir { 573*cdf0e10cSrcweir pData->mnHideState &= ~BUTTON_DRAW_PRESSED; 574*cdf0e10cSrcweir DrawWindow( BORDERWINDOW_DRAW_HIDE ); 575*cdf0e10cSrcweir 576*cdf0e10cSrcweir // Bei Abbruch kein Click-Handler rufen 577*cdf0e10cSrcweir if ( !rTEvt.IsTrackingCanceled() ) 578*cdf0e10cSrcweir { 579*cdf0e10cSrcweir if ( pBorderWindow->ImplGetClientWindow()->IsSystemWindow() ) 580*cdf0e10cSrcweir { 581*cdf0e10cSrcweir SystemWindow* pClientWindow = (SystemWindow*)(pBorderWindow->ImplGetClientWindow()); 582*cdf0e10cSrcweir pClientWindow->TitleButtonClick( TITLE_BUTTON_HIDE ); 583*cdf0e10cSrcweir } 584*cdf0e10cSrcweir } 585*cdf0e10cSrcweir } 586*cdf0e10cSrcweir } 587*cdf0e10cSrcweir else if ( nHitTest & BORDERWINDOW_HITTEST_HELP ) 588*cdf0e10cSrcweir { 589*cdf0e10cSrcweir if ( pData->mnHelpState & BUTTON_DRAW_PRESSED ) 590*cdf0e10cSrcweir { 591*cdf0e10cSrcweir pData->mnHelpState &= ~BUTTON_DRAW_PRESSED; 592*cdf0e10cSrcweir DrawWindow( BORDERWINDOW_DRAW_HELP ); 593*cdf0e10cSrcweir 594*cdf0e10cSrcweir // Bei Abbruch kein Click-Handler rufen 595*cdf0e10cSrcweir if ( !rTEvt.IsTrackingCanceled() ) 596*cdf0e10cSrcweir { 597*cdf0e10cSrcweir } 598*cdf0e10cSrcweir } 599*cdf0e10cSrcweir } 600*cdf0e10cSrcweir else if ( nHitTest & BORDERWINDOW_HITTEST_PIN ) 601*cdf0e10cSrcweir { 602*cdf0e10cSrcweir if ( pData->mnPinState & BUTTON_DRAW_PRESSED ) 603*cdf0e10cSrcweir { 604*cdf0e10cSrcweir pData->mnPinState &= ~BUTTON_DRAW_PRESSED; 605*cdf0e10cSrcweir DrawWindow( BORDERWINDOW_DRAW_PIN ); 606*cdf0e10cSrcweir 607*cdf0e10cSrcweir // Bei Abbruch kein Click-Handler rufen 608*cdf0e10cSrcweir if ( !rTEvt.IsTrackingCanceled() ) 609*cdf0e10cSrcweir { 610*cdf0e10cSrcweir if ( pBorderWindow->ImplGetClientWindow()->IsSystemWindow() ) 611*cdf0e10cSrcweir { 612*cdf0e10cSrcweir SystemWindow* pClientWindow = (SystemWindow*)(pBorderWindow->ImplGetClientWindow()); 613*cdf0e10cSrcweir pClientWindow->SetPin( !pClientWindow->IsPined() ); 614*cdf0e10cSrcweir pClientWindow->Pin(); 615*cdf0e10cSrcweir } 616*cdf0e10cSrcweir } 617*cdf0e10cSrcweir } 618*cdf0e10cSrcweir } 619*cdf0e10cSrcweir else 620*cdf0e10cSrcweir { 621*cdf0e10cSrcweir if ( pData->mbDragFull ) 622*cdf0e10cSrcweir { 623*cdf0e10cSrcweir // Bei Abbruch alten Zustand wieder herstellen 624*cdf0e10cSrcweir if ( rTEvt.IsTrackingCanceled() ) 625*cdf0e10cSrcweir pBorderWindow->SetPosSizePixel( Point( pData->mnTrackX, pData->mnTrackY ), Size( pData->mnTrackWidth, pData->mnTrackHeight ) ); 626*cdf0e10cSrcweir } 627*cdf0e10cSrcweir else 628*cdf0e10cSrcweir { 629*cdf0e10cSrcweir pBorderWindow->HideTracking(); 630*cdf0e10cSrcweir if ( !rTEvt.IsTrackingCanceled() ) 631*cdf0e10cSrcweir pBorderWindow->SetPosSizePixel( Point( pData->mnTrackX, pData->mnTrackY ), Size( pData->mnTrackWidth, pData->mnTrackHeight ) ); 632*cdf0e10cSrcweir } 633*cdf0e10cSrcweir 634*cdf0e10cSrcweir if ( !rTEvt.IsTrackingCanceled() ) 635*cdf0e10cSrcweir { 636*cdf0e10cSrcweir if ( pBorderWindow->ImplGetClientWindow()->ImplIsFloatingWindow() ) 637*cdf0e10cSrcweir { 638*cdf0e10cSrcweir if ( ((FloatingWindow*)pBorderWindow->ImplGetClientWindow())->IsInPopupMode() ) 639*cdf0e10cSrcweir ((FloatingWindow*)pBorderWindow->ImplGetClientWindow())->EndPopupMode( FLOATWIN_POPUPMODEEND_TEAROFF ); 640*cdf0e10cSrcweir } 641*cdf0e10cSrcweir } 642*cdf0e10cSrcweir } 643*cdf0e10cSrcweir } 644*cdf0e10cSrcweir else if ( !rTEvt.GetMouseEvent().IsSynthetic() ) 645*cdf0e10cSrcweir { 646*cdf0e10cSrcweir Point aMousePos = rTEvt.GetMouseEvent().GetPosPixel(); 647*cdf0e10cSrcweir 648*cdf0e10cSrcweir if ( pData->mnHitTest & BORDERWINDOW_HITTEST_CLOSE ) 649*cdf0e10cSrcweir { 650*cdf0e10cSrcweir if ( pData->maCloseRect.IsInside( aMousePos ) ) 651*cdf0e10cSrcweir { 652*cdf0e10cSrcweir if ( !(pData->mnCloseState & BUTTON_DRAW_PRESSED) ) 653*cdf0e10cSrcweir { 654*cdf0e10cSrcweir pData->mnCloseState |= BUTTON_DRAW_PRESSED; 655*cdf0e10cSrcweir DrawWindow( BORDERWINDOW_DRAW_CLOSE ); 656*cdf0e10cSrcweir } 657*cdf0e10cSrcweir } 658*cdf0e10cSrcweir else 659*cdf0e10cSrcweir { 660*cdf0e10cSrcweir if ( pData->mnCloseState & BUTTON_DRAW_PRESSED ) 661*cdf0e10cSrcweir { 662*cdf0e10cSrcweir pData->mnCloseState &= ~BUTTON_DRAW_PRESSED; 663*cdf0e10cSrcweir DrawWindow( BORDERWINDOW_DRAW_CLOSE ); 664*cdf0e10cSrcweir } 665*cdf0e10cSrcweir } 666*cdf0e10cSrcweir } 667*cdf0e10cSrcweir else if ( pData->mnHitTest & BORDERWINDOW_HITTEST_ROLL ) 668*cdf0e10cSrcweir { 669*cdf0e10cSrcweir if ( pData->maRollRect.IsInside( aMousePos ) ) 670*cdf0e10cSrcweir { 671*cdf0e10cSrcweir if ( !(pData->mnRollState & BUTTON_DRAW_PRESSED) ) 672*cdf0e10cSrcweir { 673*cdf0e10cSrcweir pData->mnRollState |= BUTTON_DRAW_PRESSED; 674*cdf0e10cSrcweir DrawWindow( BORDERWINDOW_DRAW_ROLL ); 675*cdf0e10cSrcweir } 676*cdf0e10cSrcweir } 677*cdf0e10cSrcweir else 678*cdf0e10cSrcweir { 679*cdf0e10cSrcweir if ( pData->mnRollState & BUTTON_DRAW_PRESSED ) 680*cdf0e10cSrcweir { 681*cdf0e10cSrcweir pData->mnRollState &= ~BUTTON_DRAW_PRESSED; 682*cdf0e10cSrcweir DrawWindow( BORDERWINDOW_DRAW_ROLL ); 683*cdf0e10cSrcweir } 684*cdf0e10cSrcweir } 685*cdf0e10cSrcweir } 686*cdf0e10cSrcweir else if ( pData->mnHitTest & BORDERWINDOW_HITTEST_DOCK ) 687*cdf0e10cSrcweir { 688*cdf0e10cSrcweir if ( pData->maDockRect.IsInside( aMousePos ) ) 689*cdf0e10cSrcweir { 690*cdf0e10cSrcweir if ( !(pData->mnDockState & BUTTON_DRAW_PRESSED) ) 691*cdf0e10cSrcweir { 692*cdf0e10cSrcweir pData->mnDockState |= BUTTON_DRAW_PRESSED; 693*cdf0e10cSrcweir DrawWindow( BORDERWINDOW_DRAW_DOCK ); 694*cdf0e10cSrcweir } 695*cdf0e10cSrcweir } 696*cdf0e10cSrcweir else 697*cdf0e10cSrcweir { 698*cdf0e10cSrcweir if ( pData->mnDockState & BUTTON_DRAW_PRESSED ) 699*cdf0e10cSrcweir { 700*cdf0e10cSrcweir pData->mnDockState &= ~BUTTON_DRAW_PRESSED; 701*cdf0e10cSrcweir DrawWindow( BORDERWINDOW_DRAW_DOCK ); 702*cdf0e10cSrcweir } 703*cdf0e10cSrcweir } 704*cdf0e10cSrcweir } 705*cdf0e10cSrcweir else if ( pData->mnHitTest & BORDERWINDOW_HITTEST_MENU ) 706*cdf0e10cSrcweir { 707*cdf0e10cSrcweir if ( pData->maMenuRect.IsInside( aMousePos ) ) 708*cdf0e10cSrcweir { 709*cdf0e10cSrcweir if ( !(pData->mnMenuState & BUTTON_DRAW_PRESSED) ) 710*cdf0e10cSrcweir { 711*cdf0e10cSrcweir pData->mnMenuState |= BUTTON_DRAW_PRESSED; 712*cdf0e10cSrcweir DrawWindow( BORDERWINDOW_DRAW_MENU ); 713*cdf0e10cSrcweir 714*cdf0e10cSrcweir } 715*cdf0e10cSrcweir } 716*cdf0e10cSrcweir else 717*cdf0e10cSrcweir { 718*cdf0e10cSrcweir if ( pData->mnMenuState & BUTTON_DRAW_PRESSED ) 719*cdf0e10cSrcweir { 720*cdf0e10cSrcweir pData->mnMenuState &= ~BUTTON_DRAW_PRESSED; 721*cdf0e10cSrcweir DrawWindow( BORDERWINDOW_DRAW_MENU ); 722*cdf0e10cSrcweir } 723*cdf0e10cSrcweir } 724*cdf0e10cSrcweir } 725*cdf0e10cSrcweir else if ( pData->mnHitTest & BORDERWINDOW_HITTEST_HIDE ) 726*cdf0e10cSrcweir { 727*cdf0e10cSrcweir if ( pData->maHideRect.IsInside( aMousePos ) ) 728*cdf0e10cSrcweir { 729*cdf0e10cSrcweir if ( !(pData->mnHideState & BUTTON_DRAW_PRESSED) ) 730*cdf0e10cSrcweir { 731*cdf0e10cSrcweir pData->mnHideState |= BUTTON_DRAW_PRESSED; 732*cdf0e10cSrcweir DrawWindow( BORDERWINDOW_DRAW_HIDE ); 733*cdf0e10cSrcweir } 734*cdf0e10cSrcweir } 735*cdf0e10cSrcweir else 736*cdf0e10cSrcweir { 737*cdf0e10cSrcweir if ( pData->mnHideState & BUTTON_DRAW_PRESSED ) 738*cdf0e10cSrcweir { 739*cdf0e10cSrcweir pData->mnHideState &= ~BUTTON_DRAW_PRESSED; 740*cdf0e10cSrcweir DrawWindow( BORDERWINDOW_DRAW_HIDE ); 741*cdf0e10cSrcweir } 742*cdf0e10cSrcweir } 743*cdf0e10cSrcweir } 744*cdf0e10cSrcweir else if ( pData->mnHitTest & BORDERWINDOW_HITTEST_HELP ) 745*cdf0e10cSrcweir { 746*cdf0e10cSrcweir if ( pData->maHelpRect.IsInside( aMousePos ) ) 747*cdf0e10cSrcweir { 748*cdf0e10cSrcweir if ( !(pData->mnHelpState & BUTTON_DRAW_PRESSED) ) 749*cdf0e10cSrcweir { 750*cdf0e10cSrcweir pData->mnHelpState |= BUTTON_DRAW_PRESSED; 751*cdf0e10cSrcweir DrawWindow( BORDERWINDOW_DRAW_HELP ); 752*cdf0e10cSrcweir } 753*cdf0e10cSrcweir } 754*cdf0e10cSrcweir else 755*cdf0e10cSrcweir { 756*cdf0e10cSrcweir if ( pData->mnHelpState & BUTTON_DRAW_PRESSED ) 757*cdf0e10cSrcweir { 758*cdf0e10cSrcweir pData->mnHelpState &= ~BUTTON_DRAW_PRESSED; 759*cdf0e10cSrcweir DrawWindow( BORDERWINDOW_DRAW_HELP ); 760*cdf0e10cSrcweir } 761*cdf0e10cSrcweir } 762*cdf0e10cSrcweir } 763*cdf0e10cSrcweir else if ( pData->mnHitTest & BORDERWINDOW_HITTEST_PIN ) 764*cdf0e10cSrcweir { 765*cdf0e10cSrcweir if ( pData->maPinRect.IsInside( aMousePos ) ) 766*cdf0e10cSrcweir { 767*cdf0e10cSrcweir if ( !(pData->mnPinState & BUTTON_DRAW_PRESSED) ) 768*cdf0e10cSrcweir { 769*cdf0e10cSrcweir pData->mnPinState |= BUTTON_DRAW_PRESSED; 770*cdf0e10cSrcweir DrawWindow( BORDERWINDOW_DRAW_PIN ); 771*cdf0e10cSrcweir } 772*cdf0e10cSrcweir } 773*cdf0e10cSrcweir else 774*cdf0e10cSrcweir { 775*cdf0e10cSrcweir if ( pData->mnPinState & BUTTON_DRAW_PRESSED ) 776*cdf0e10cSrcweir { 777*cdf0e10cSrcweir pData->mnPinState &= ~BUTTON_DRAW_PRESSED; 778*cdf0e10cSrcweir DrawWindow( BORDERWINDOW_DRAW_PIN ); 779*cdf0e10cSrcweir } 780*cdf0e10cSrcweir } 781*cdf0e10cSrcweir } 782*cdf0e10cSrcweir else 783*cdf0e10cSrcweir { 784*cdf0e10cSrcweir /* 785*cdf0e10cSrcweir // adjusting mousepos not required, we allow the whole screen (no desktop anymore...) 786*cdf0e10cSrcweir Point aFrameMousePos = pBorderWindow->ImplOutputToFrame( aMousePos ); 787*cdf0e10cSrcweir Size aFrameSize = pBorderWindow->ImplGetFrameWindow()->GetOutputSizePixel(); 788*cdf0e10cSrcweir if ( aFrameMousePos.X() < 0 ) 789*cdf0e10cSrcweir aFrameMousePos.X() = 0; 790*cdf0e10cSrcweir if ( aFrameMousePos.Y() < 0 ) 791*cdf0e10cSrcweir aFrameMousePos.Y() = 0; 792*cdf0e10cSrcweir if ( aFrameMousePos.X() > aFrameSize.Width()-1 ) 793*cdf0e10cSrcweir aFrameMousePos.X() = aFrameSize.Width()-1; 794*cdf0e10cSrcweir if ( aFrameMousePos.Y() > aFrameSize.Height()-1 ) 795*cdf0e10cSrcweir aFrameMousePos.Y() = aFrameSize.Height()-1; 796*cdf0e10cSrcweir aMousePos = pBorderWindow->ImplFrameToOutput( aFrameMousePos ); 797*cdf0e10cSrcweir */ 798*cdf0e10cSrcweir 799*cdf0e10cSrcweir aMousePos.X() -= pData->maMouseOff.X(); 800*cdf0e10cSrcweir aMousePos.Y() -= pData->maMouseOff.Y(); 801*cdf0e10cSrcweir 802*cdf0e10cSrcweir if ( pData->mnHitTest & BORDERWINDOW_HITTEST_TITLE ) 803*cdf0e10cSrcweir { 804*cdf0e10cSrcweir pData->mpBorderWindow->SetPointer( Pointer( POINTER_MOVE ) ); 805*cdf0e10cSrcweir 806*cdf0e10cSrcweir Point aPos = pBorderWindow->GetPosPixel(); 807*cdf0e10cSrcweir aPos.X() += aMousePos.X(); 808*cdf0e10cSrcweir aPos.Y() += aMousePos.Y(); 809*cdf0e10cSrcweir if ( pData->mbDragFull ) 810*cdf0e10cSrcweir { 811*cdf0e10cSrcweir pBorderWindow->SetPosPixel( aPos ); 812*cdf0e10cSrcweir pBorderWindow->ImplUpdateAll(); 813*cdf0e10cSrcweir pBorderWindow->ImplGetFrameWindow()->ImplUpdateAll(); 814*cdf0e10cSrcweir } 815*cdf0e10cSrcweir else 816*cdf0e10cSrcweir { 817*cdf0e10cSrcweir pData->mnTrackX = aPos.X(); 818*cdf0e10cSrcweir pData->mnTrackY = aPos.Y(); 819*cdf0e10cSrcweir pBorderWindow->ShowTracking( Rectangle( pBorderWindow->ScreenToOutputPixel( aPos ), pBorderWindow->GetOutputSizePixel() ), SHOWTRACK_BIG ); 820*cdf0e10cSrcweir } 821*cdf0e10cSrcweir } 822*cdf0e10cSrcweir else 823*cdf0e10cSrcweir { 824*cdf0e10cSrcweir Point aOldPos = pBorderWindow->GetPosPixel(); 825*cdf0e10cSrcweir Size aSize = pBorderWindow->GetSizePixel(); 826*cdf0e10cSrcweir Rectangle aNewRect( aOldPos, aSize ); 827*cdf0e10cSrcweir long nOldWidth = aSize.Width(); 828*cdf0e10cSrcweir long nOldHeight = aSize.Height(); 829*cdf0e10cSrcweir long nBorderWidth = pData->mnLeftBorder+pData->mnRightBorder; 830*cdf0e10cSrcweir long nBorderHeight = pData->mnTopBorder+pData->mnBottomBorder; 831*cdf0e10cSrcweir long nMinWidth = pBorderWindow->mnMinWidth+nBorderWidth; 832*cdf0e10cSrcweir long nMinHeight = pBorderWindow->mnMinHeight+nBorderHeight; 833*cdf0e10cSrcweir long nMinWidth2 = nBorderWidth; 834*cdf0e10cSrcweir long nMaxWidth = pBorderWindow->mnMaxWidth+nBorderWidth; 835*cdf0e10cSrcweir long nMaxHeight = pBorderWindow->mnMaxHeight+nBorderHeight; 836*cdf0e10cSrcweir 837*cdf0e10cSrcweir if ( pData->mnTitleHeight ) 838*cdf0e10cSrcweir { 839*cdf0e10cSrcweir nMinWidth2 += 4; 840*cdf0e10cSrcweir 841*cdf0e10cSrcweir if ( pBorderWindow->GetStyle() & WB_CLOSEABLE ) 842*cdf0e10cSrcweir nMinWidth2 += pData->maCloseRect.GetWidth(); 843*cdf0e10cSrcweir } 844*cdf0e10cSrcweir if ( nMinWidth2 > nMinWidth ) 845*cdf0e10cSrcweir nMinWidth = nMinWidth2; 846*cdf0e10cSrcweir if ( pData->mnHitTest & (BORDERWINDOW_HITTEST_LEFT | BORDERWINDOW_HITTEST_TOPLEFT | BORDERWINDOW_HITTEST_BOTTOMLEFT) ) 847*cdf0e10cSrcweir { 848*cdf0e10cSrcweir aNewRect.Left() += aMousePos.X(); 849*cdf0e10cSrcweir if ( aNewRect.GetWidth() < nMinWidth ) 850*cdf0e10cSrcweir aNewRect.Left() = aNewRect.Right()-nMinWidth+1; 851*cdf0e10cSrcweir else if ( aNewRect.GetWidth() > nMaxWidth ) 852*cdf0e10cSrcweir aNewRect.Left() = aNewRect.Right()-nMaxWidth+1; 853*cdf0e10cSrcweir } 854*cdf0e10cSrcweir else if ( pData->mnHitTest & (BORDERWINDOW_HITTEST_RIGHT | BORDERWINDOW_HITTEST_TOPRIGHT | BORDERWINDOW_HITTEST_BOTTOMRIGHT) ) 855*cdf0e10cSrcweir { 856*cdf0e10cSrcweir aNewRect.Right() += aMousePos.X(); 857*cdf0e10cSrcweir if ( aNewRect.GetWidth() < nMinWidth ) 858*cdf0e10cSrcweir aNewRect.Right() = aNewRect.Left()+nMinWidth+1; 859*cdf0e10cSrcweir else if ( aNewRect.GetWidth() > nMaxWidth ) 860*cdf0e10cSrcweir aNewRect.Right() = aNewRect.Left()+nMaxWidth+1; 861*cdf0e10cSrcweir } 862*cdf0e10cSrcweir if ( pData->mnHitTest & (BORDERWINDOW_HITTEST_TOP | BORDERWINDOW_HITTEST_TOPLEFT | BORDERWINDOW_HITTEST_TOPRIGHT) ) 863*cdf0e10cSrcweir { 864*cdf0e10cSrcweir aNewRect.Top() += aMousePos.Y(); 865*cdf0e10cSrcweir if ( aNewRect.GetHeight() < nMinHeight ) 866*cdf0e10cSrcweir aNewRect.Top() = aNewRect.Bottom()-nMinHeight+1; 867*cdf0e10cSrcweir else if ( aNewRect.GetHeight() > nMaxHeight ) 868*cdf0e10cSrcweir aNewRect.Top() = aNewRect.Bottom()-nMaxHeight+1; 869*cdf0e10cSrcweir } 870*cdf0e10cSrcweir else if ( pData->mnHitTest & (BORDERWINDOW_HITTEST_BOTTOM | BORDERWINDOW_HITTEST_BOTTOMLEFT | BORDERWINDOW_HITTEST_BOTTOMRIGHT) ) 871*cdf0e10cSrcweir { 872*cdf0e10cSrcweir aNewRect.Bottom() += aMousePos.Y(); 873*cdf0e10cSrcweir if ( aNewRect.GetHeight() < nMinHeight ) 874*cdf0e10cSrcweir aNewRect.Bottom() = aNewRect.Top()+nMinHeight+1; 875*cdf0e10cSrcweir else if ( aNewRect.GetHeight() > nMaxHeight ) 876*cdf0e10cSrcweir aNewRect.Bottom() = aNewRect.Top()+nMaxHeight+1; 877*cdf0e10cSrcweir } 878*cdf0e10cSrcweir 879*cdf0e10cSrcweir // call Resizing-Handler for SystemWindows 880*cdf0e10cSrcweir if ( pBorderWindow->ImplGetClientWindow()->IsSystemWindow() ) 881*cdf0e10cSrcweir { 882*cdf0e10cSrcweir // adjust size for Resizing-call 883*cdf0e10cSrcweir aSize = aNewRect.GetSize(); 884*cdf0e10cSrcweir aSize.Width() -= nBorderWidth; 885*cdf0e10cSrcweir aSize.Height() -= nBorderHeight; 886*cdf0e10cSrcweir ((SystemWindow*)pBorderWindow->ImplGetClientWindow())->Resizing( aSize ); 887*cdf0e10cSrcweir aSize.Width() += nBorderWidth; 888*cdf0e10cSrcweir aSize.Height() += nBorderHeight; 889*cdf0e10cSrcweir if ( aSize.Width() < nMinWidth ) 890*cdf0e10cSrcweir aSize.Width() = nMinWidth; 891*cdf0e10cSrcweir if ( aSize.Height() < nMinHeight ) 892*cdf0e10cSrcweir aSize.Height() = nMinHeight; 893*cdf0e10cSrcweir if ( aSize.Width() > nMaxWidth ) 894*cdf0e10cSrcweir aSize.Width() = nMaxWidth; 895*cdf0e10cSrcweir if ( aSize.Height() > nMaxHeight ) 896*cdf0e10cSrcweir aSize.Height() = nMaxHeight; 897*cdf0e10cSrcweir if ( pData->mnHitTest & (BORDERWINDOW_HITTEST_LEFT | BORDERWINDOW_HITTEST_TOPLEFT | BORDERWINDOW_HITTEST_BOTTOMLEFT) ) 898*cdf0e10cSrcweir aNewRect.Left() = aNewRect.Right()-aSize.Width()+1; 899*cdf0e10cSrcweir else 900*cdf0e10cSrcweir aNewRect.Right() = aNewRect.Left()+aSize.Width()-1; 901*cdf0e10cSrcweir if ( pData->mnHitTest & (BORDERWINDOW_HITTEST_TOP | BORDERWINDOW_HITTEST_TOPLEFT | BORDERWINDOW_HITTEST_TOPRIGHT) ) 902*cdf0e10cSrcweir aNewRect.Top() = aNewRect.Bottom()-aSize.Height()+1; 903*cdf0e10cSrcweir else 904*cdf0e10cSrcweir aNewRect.Bottom() = aNewRect.Top()+aSize.Height()-1; 905*cdf0e10cSrcweir } 906*cdf0e10cSrcweir 907*cdf0e10cSrcweir if ( pData->mbDragFull ) 908*cdf0e10cSrcweir { 909*cdf0e10cSrcweir // no move (only resize) if position did not change 910*cdf0e10cSrcweir if( aOldPos != aNewRect.TopLeft() ) 911*cdf0e10cSrcweir pBorderWindow->SetPosSizePixel( aNewRect.Left(), aNewRect.Top(), 912*cdf0e10cSrcweir aNewRect.GetWidth(), aNewRect.GetHeight(), WINDOW_POSSIZE_POSSIZE ); 913*cdf0e10cSrcweir else 914*cdf0e10cSrcweir pBorderWindow->SetPosSizePixel( aNewRect.Left(), aNewRect.Top(), 915*cdf0e10cSrcweir aNewRect.GetWidth(), aNewRect.GetHeight(), WINDOW_POSSIZE_SIZE ); 916*cdf0e10cSrcweir 917*cdf0e10cSrcweir pBorderWindow->ImplUpdateAll(); 918*cdf0e10cSrcweir pBorderWindow->ImplGetFrameWindow()->ImplUpdateAll(); 919*cdf0e10cSrcweir if ( pData->mnHitTest & (BORDERWINDOW_HITTEST_RIGHT | BORDERWINDOW_HITTEST_TOPRIGHT | BORDERWINDOW_HITTEST_BOTTOMRIGHT) ) 920*cdf0e10cSrcweir pData->maMouseOff.X() += aNewRect.GetWidth()-nOldWidth; 921*cdf0e10cSrcweir if ( pData->mnHitTest & (BORDERWINDOW_HITTEST_BOTTOM | BORDERWINDOW_HITTEST_BOTTOMLEFT | BORDERWINDOW_HITTEST_BOTTOMRIGHT) ) 922*cdf0e10cSrcweir pData->maMouseOff.Y() += aNewRect.GetHeight()-nOldHeight; 923*cdf0e10cSrcweir } 924*cdf0e10cSrcweir else 925*cdf0e10cSrcweir { 926*cdf0e10cSrcweir pData->mnTrackX = aNewRect.Left(); 927*cdf0e10cSrcweir pData->mnTrackY = aNewRect.Top(); 928*cdf0e10cSrcweir pData->mnTrackWidth = aNewRect.GetWidth(); 929*cdf0e10cSrcweir pData->mnTrackHeight = aNewRect.GetHeight(); 930*cdf0e10cSrcweir pBorderWindow->ShowTracking( Rectangle( pBorderWindow->ScreenToOutputPixel( aNewRect.TopLeft() ), aNewRect.GetSize() ), SHOWTRACK_BIG ); 931*cdf0e10cSrcweir } 932*cdf0e10cSrcweir } 933*cdf0e10cSrcweir } 934*cdf0e10cSrcweir } 935*cdf0e10cSrcweir 936*cdf0e10cSrcweir return sal_True; 937*cdf0e10cSrcweir } 938*cdf0e10cSrcweir 939*cdf0e10cSrcweir // ----------------------------------------------------------------------- 940*cdf0e10cSrcweir 941*cdf0e10cSrcweir String ImplBorderWindowView::ImplRequestHelp( ImplBorderFrameData* pData, 942*cdf0e10cSrcweir const Point& rPos, 943*cdf0e10cSrcweir Rectangle& rHelpRect ) 944*cdf0e10cSrcweir { 945*cdf0e10cSrcweir sal_uInt16 nHelpId = 0; 946*cdf0e10cSrcweir String aHelpStr; 947*cdf0e10cSrcweir sal_uInt16 nHitTest = ImplHitTest( pData, rPos ); 948*cdf0e10cSrcweir if ( nHitTest ) 949*cdf0e10cSrcweir { 950*cdf0e10cSrcweir if ( nHitTest & BORDERWINDOW_HITTEST_CLOSE ) 951*cdf0e10cSrcweir { 952*cdf0e10cSrcweir nHelpId = SV_HELPTEXT_CLOSE; 953*cdf0e10cSrcweir rHelpRect = pData->maCloseRect; 954*cdf0e10cSrcweir } 955*cdf0e10cSrcweir else if ( nHitTest & BORDERWINDOW_HITTEST_ROLL ) 956*cdf0e10cSrcweir { 957*cdf0e10cSrcweir if ( pData->mpBorderWindow->mbRollUp ) 958*cdf0e10cSrcweir nHelpId = SV_HELPTEXT_ROLLDOWN; 959*cdf0e10cSrcweir else 960*cdf0e10cSrcweir nHelpId = SV_HELPTEXT_ROLLUP; 961*cdf0e10cSrcweir rHelpRect = pData->maRollRect; 962*cdf0e10cSrcweir } 963*cdf0e10cSrcweir else if ( nHitTest & BORDERWINDOW_HITTEST_DOCK ) 964*cdf0e10cSrcweir { 965*cdf0e10cSrcweir nHelpId = SV_HELPTEXT_MAXIMIZE; 966*cdf0e10cSrcweir rHelpRect = pData->maDockRect; 967*cdf0e10cSrcweir } 968*cdf0e10cSrcweir /* no help string available 969*cdf0e10cSrcweir else if ( nHitTest & BORDERWINDOW_HITTEST_MENU ) 970*cdf0e10cSrcweir { 971*cdf0e10cSrcweir nHelpId = SV_HELPTEXT_MENU; 972*cdf0e10cSrcweir rHelpRect = pData->maMenuRect; 973*cdf0e10cSrcweir }*/ 974*cdf0e10cSrcweir else if ( nHitTest & BORDERWINDOW_HITTEST_HIDE ) 975*cdf0e10cSrcweir { 976*cdf0e10cSrcweir nHelpId = SV_HELPTEXT_MINIMIZE; 977*cdf0e10cSrcweir rHelpRect = pData->maHideRect; 978*cdf0e10cSrcweir } 979*cdf0e10cSrcweir else if ( nHitTest & BORDERWINDOW_HITTEST_HELP ) 980*cdf0e10cSrcweir { 981*cdf0e10cSrcweir nHelpId = SV_HELPTEXT_HELP; 982*cdf0e10cSrcweir rHelpRect = pData->maHelpRect; 983*cdf0e10cSrcweir } 984*cdf0e10cSrcweir else if ( nHitTest & BORDERWINDOW_HITTEST_PIN ) 985*cdf0e10cSrcweir { 986*cdf0e10cSrcweir nHelpId = SV_HELPTEXT_ALWAYSVISIBLE; 987*cdf0e10cSrcweir rHelpRect = pData->maPinRect; 988*cdf0e10cSrcweir } 989*cdf0e10cSrcweir else if ( nHitTest & BORDERWINDOW_HITTEST_TITLE ) 990*cdf0e10cSrcweir { 991*cdf0e10cSrcweir if( !pData->maTitleRect.IsEmpty() ) 992*cdf0e10cSrcweir { 993*cdf0e10cSrcweir // tooltip only if title truncated 994*cdf0e10cSrcweir if( pData->mbTitleClipped ) 995*cdf0e10cSrcweir { 996*cdf0e10cSrcweir rHelpRect = pData->maTitleRect; 997*cdf0e10cSrcweir // no help id, use window title as help string 998*cdf0e10cSrcweir aHelpStr = pData->mpBorderWindow->GetText(); 999*cdf0e10cSrcweir } 1000*cdf0e10cSrcweir } 1001*cdf0e10cSrcweir } 1002*cdf0e10cSrcweir } 1003*cdf0e10cSrcweir 1004*cdf0e10cSrcweir if( nHelpId && ImplGetResMgr() ) 1005*cdf0e10cSrcweir aHelpStr = String( ResId( nHelpId, *ImplGetResMgr() ) ); 1006*cdf0e10cSrcweir 1007*cdf0e10cSrcweir return aHelpStr; 1008*cdf0e10cSrcweir } 1009*cdf0e10cSrcweir 1010*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1011*cdf0e10cSrcweir 1012*cdf0e10cSrcweir long ImplBorderWindowView::ImplCalcTitleWidth( const ImplBorderFrameData* pData ) const 1013*cdf0e10cSrcweir { 1014*cdf0e10cSrcweir // kein sichtbarer Title, dann auch keine Breite 1015*cdf0e10cSrcweir if ( !pData->mnTitleHeight ) 1016*cdf0e10cSrcweir return 0; 1017*cdf0e10cSrcweir 1018*cdf0e10cSrcweir ImplBorderWindow* pBorderWindow = pData->mpBorderWindow; 1019*cdf0e10cSrcweir long nTitleWidth = pBorderWindow->GetTextWidth( pBorderWindow->GetText() )+6; 1020*cdf0e10cSrcweir nTitleWidth += pData->maPinRect.GetWidth(); 1021*cdf0e10cSrcweir nTitleWidth += pData->maCloseRect.GetWidth(); 1022*cdf0e10cSrcweir nTitleWidth += pData->maRollRect.GetWidth(); 1023*cdf0e10cSrcweir nTitleWidth += pData->maDockRect.GetWidth(); 1024*cdf0e10cSrcweir nTitleWidth += pData->maMenuRect.GetWidth(); 1025*cdf0e10cSrcweir nTitleWidth += pData->maHideRect.GetWidth(); 1026*cdf0e10cSrcweir nTitleWidth += pData->maHelpRect.GetWidth(); 1027*cdf0e10cSrcweir nTitleWidth += pData->mnLeftBorder+pData->mnRightBorder; 1028*cdf0e10cSrcweir return nTitleWidth; 1029*cdf0e10cSrcweir } 1030*cdf0e10cSrcweir 1031*cdf0e10cSrcweir // ======================================================================= 1032*cdf0e10cSrcweir 1033*cdf0e10cSrcweir // -------------------------- 1034*cdf0e10cSrcweir // - ImplNoBorderWindowView - 1035*cdf0e10cSrcweir // -------------------------- 1036*cdf0e10cSrcweir 1037*cdf0e10cSrcweir ImplNoBorderWindowView::ImplNoBorderWindowView( ImplBorderWindow* ) 1038*cdf0e10cSrcweir { 1039*cdf0e10cSrcweir } 1040*cdf0e10cSrcweir 1041*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1042*cdf0e10cSrcweir 1043*cdf0e10cSrcweir void ImplNoBorderWindowView::Init( OutputDevice*, long, long ) 1044*cdf0e10cSrcweir { 1045*cdf0e10cSrcweir } 1046*cdf0e10cSrcweir 1047*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1048*cdf0e10cSrcweir 1049*cdf0e10cSrcweir void ImplNoBorderWindowView::GetBorder( sal_Int32& rLeftBorder, sal_Int32& rTopBorder, 1050*cdf0e10cSrcweir sal_Int32& rRightBorder, sal_Int32& rBottomBorder ) const 1051*cdf0e10cSrcweir { 1052*cdf0e10cSrcweir rLeftBorder = 0; 1053*cdf0e10cSrcweir rTopBorder = 0; 1054*cdf0e10cSrcweir rRightBorder = 0; 1055*cdf0e10cSrcweir rBottomBorder = 0; 1056*cdf0e10cSrcweir } 1057*cdf0e10cSrcweir 1058*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1059*cdf0e10cSrcweir 1060*cdf0e10cSrcweir long ImplNoBorderWindowView::CalcTitleWidth() const 1061*cdf0e10cSrcweir { 1062*cdf0e10cSrcweir return 0; 1063*cdf0e10cSrcweir } 1064*cdf0e10cSrcweir 1065*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1066*cdf0e10cSrcweir 1067*cdf0e10cSrcweir void ImplNoBorderWindowView::DrawWindow( sal_uInt16, OutputDevice*, const Point* ) 1068*cdf0e10cSrcweir { 1069*cdf0e10cSrcweir } 1070*cdf0e10cSrcweir 1071*cdf0e10cSrcweir // ======================================================================= 1072*cdf0e10cSrcweir 1073*cdf0e10cSrcweir // ----------------------------- 1074*cdf0e10cSrcweir // - ImplSmallBorderWindowView - 1075*cdf0e10cSrcweir // ----------------------------- 1076*cdf0e10cSrcweir 1077*cdf0e10cSrcweir // ======================================================================= 1078*cdf0e10cSrcweir 1079*cdf0e10cSrcweir ImplSmallBorderWindowView::ImplSmallBorderWindowView( ImplBorderWindow* pBorderWindow ) 1080*cdf0e10cSrcweir { 1081*cdf0e10cSrcweir mpBorderWindow = pBorderWindow; 1082*cdf0e10cSrcweir } 1083*cdf0e10cSrcweir 1084*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1085*cdf0e10cSrcweir 1086*cdf0e10cSrcweir void ImplSmallBorderWindowView::Init( OutputDevice* pDev, long nWidth, long nHeight ) 1087*cdf0e10cSrcweir { 1088*cdf0e10cSrcweir mpOutDev = pDev; 1089*cdf0e10cSrcweir mnWidth = nWidth; 1090*cdf0e10cSrcweir mnHeight = nHeight; 1091*cdf0e10cSrcweir mbNWFBorder = false; 1092*cdf0e10cSrcweir 1093*cdf0e10cSrcweir sal_uInt16 nBorderStyle = mpBorderWindow->GetBorderStyle(); 1094*cdf0e10cSrcweir if ( nBorderStyle & WINDOW_BORDER_NOBORDER ) 1095*cdf0e10cSrcweir { 1096*cdf0e10cSrcweir mnLeftBorder = 0; 1097*cdf0e10cSrcweir mnTopBorder = 0; 1098*cdf0e10cSrcweir mnRightBorder = 0; 1099*cdf0e10cSrcweir mnBottomBorder = 0; 1100*cdf0e10cSrcweir } 1101*cdf0e10cSrcweir else 1102*cdf0e10cSrcweir { 1103*cdf0e10cSrcweir // FIXME: this is currently only on aqua, check with other 1104*cdf0e10cSrcweir // platforms 1105*cdf0e10cSrcweir if( ImplGetSVData()->maNWFData.mbNoFocusRects ) 1106*cdf0e10cSrcweir { 1107*cdf0e10cSrcweir // for native widget drawing we must find out what 1108*cdf0e10cSrcweir // control this border belongs to 1109*cdf0e10cSrcweir Window *pWin = NULL, *pCtrl = NULL; 1110*cdf0e10cSrcweir if( mpOutDev->GetOutDevType() == OUTDEV_WINDOW ) 1111*cdf0e10cSrcweir pWin = (Window*) mpOutDev; 1112*cdf0e10cSrcweir 1113*cdf0e10cSrcweir ControlType aCtrlType = 0; 1114*cdf0e10cSrcweir if( pWin && (pCtrl = mpBorderWindow->GetWindow( WINDOW_CLIENT )) != NULL ) 1115*cdf0e10cSrcweir { 1116*cdf0e10cSrcweir switch( pCtrl->GetType() ) 1117*cdf0e10cSrcweir { 1118*cdf0e10cSrcweir case WINDOW_LISTBOX: 1119*cdf0e10cSrcweir if( pCtrl->GetStyle() & WB_DROPDOWN ) 1120*cdf0e10cSrcweir { 1121*cdf0e10cSrcweir aCtrlType = CTRL_LISTBOX; 1122*cdf0e10cSrcweir mbNWFBorder = true; 1123*cdf0e10cSrcweir } 1124*cdf0e10cSrcweir break; 1125*cdf0e10cSrcweir case WINDOW_COMBOBOX: 1126*cdf0e10cSrcweir if( pCtrl->GetStyle() & WB_DROPDOWN ) 1127*cdf0e10cSrcweir { 1128*cdf0e10cSrcweir aCtrlType = CTRL_COMBOBOX; 1129*cdf0e10cSrcweir mbNWFBorder = true; 1130*cdf0e10cSrcweir } 1131*cdf0e10cSrcweir break; 1132*cdf0e10cSrcweir case WINDOW_MULTILINEEDIT: 1133*cdf0e10cSrcweir aCtrlType = CTRL_MULTILINE_EDITBOX; 1134*cdf0e10cSrcweir mbNWFBorder = true; 1135*cdf0e10cSrcweir break; 1136*cdf0e10cSrcweir case WINDOW_EDIT: 1137*cdf0e10cSrcweir case WINDOW_PATTERNFIELD: 1138*cdf0e10cSrcweir case WINDOW_METRICFIELD: 1139*cdf0e10cSrcweir case WINDOW_CURRENCYFIELD: 1140*cdf0e10cSrcweir case WINDOW_DATEFIELD: 1141*cdf0e10cSrcweir case WINDOW_TIMEFIELD: 1142*cdf0e10cSrcweir case WINDOW_LONGCURRENCYFIELD: 1143*cdf0e10cSrcweir case WINDOW_NUMERICFIELD: 1144*cdf0e10cSrcweir case WINDOW_SPINFIELD: 1145*cdf0e10cSrcweir mbNWFBorder = true; 1146*cdf0e10cSrcweir aCtrlType = (pCtrl->GetStyle() & WB_SPIN) ? CTRL_SPINBOX : CTRL_EDITBOX; 1147*cdf0e10cSrcweir break; 1148*cdf0e10cSrcweir default: 1149*cdf0e10cSrcweir break; 1150*cdf0e10cSrcweir } 1151*cdf0e10cSrcweir } 1152*cdf0e10cSrcweir if( mbNWFBorder ) 1153*cdf0e10cSrcweir { 1154*cdf0e10cSrcweir ImplControlValue aControlValue; 1155*cdf0e10cSrcweir Rectangle aCtrlRegion( (const Point&)Point(), Size( mnWidth < 10 ? 10 : mnWidth, mnHeight < 10 ? 10 : mnHeight ) ); 1156*cdf0e10cSrcweir Rectangle aBounds( aCtrlRegion ); 1157*cdf0e10cSrcweir Rectangle aContent( aCtrlRegion ); 1158*cdf0e10cSrcweir if( pWin->GetNativeControlRegion( aCtrlType, PART_ENTIRE_CONTROL, aCtrlRegion, 1159*cdf0e10cSrcweir CTRL_STATE_ENABLED, aControlValue, rtl::OUString(), 1160*cdf0e10cSrcweir aBounds, aContent ) ) 1161*cdf0e10cSrcweir { 1162*cdf0e10cSrcweir mnLeftBorder = aContent.Left() - aBounds.Left(); 1163*cdf0e10cSrcweir mnRightBorder = aBounds.Right() - aContent.Right(); 1164*cdf0e10cSrcweir mnTopBorder = aContent.Top() - aBounds.Top(); 1165*cdf0e10cSrcweir mnBottomBorder = aBounds.Bottom() - aContent.Bottom(); 1166*cdf0e10cSrcweir if( mnWidth && mnHeight ) 1167*cdf0e10cSrcweir { 1168*cdf0e10cSrcweir 1169*cdf0e10cSrcweir mpBorderWindow->SetPaintTransparent( sal_True ); 1170*cdf0e10cSrcweir mpBorderWindow->SetBackground(); 1171*cdf0e10cSrcweir pCtrl->SetPaintTransparent( sal_True ); 1172*cdf0e10cSrcweir 1173*cdf0e10cSrcweir Window* pCompoundParent = NULL; 1174*cdf0e10cSrcweir if( pWin->GetParent() && pWin->GetParent()->IsCompoundControl() ) 1175*cdf0e10cSrcweir pCompoundParent = pWin->GetParent(); 1176*cdf0e10cSrcweir 1177*cdf0e10cSrcweir if( pCompoundParent ) 1178*cdf0e10cSrcweir pCompoundParent->SetPaintTransparent( sal_True ); 1179*cdf0e10cSrcweir 1180*cdf0e10cSrcweir if( mnWidth < aBounds.GetWidth() || mnHeight < aBounds.GetHeight() ) 1181*cdf0e10cSrcweir { 1182*cdf0e10cSrcweir if( ! pCompoundParent ) // compound controls have to fix themselves 1183*cdf0e10cSrcweir { 1184*cdf0e10cSrcweir Point aPos( mpBorderWindow->GetPosPixel() ); 1185*cdf0e10cSrcweir if( mnWidth < aBounds.GetWidth() ) 1186*cdf0e10cSrcweir aPos.X() -= (aBounds.GetWidth() - mnWidth) / 2; 1187*cdf0e10cSrcweir if( mnHeight < aBounds.GetHeight() ) 1188*cdf0e10cSrcweir aPos.Y() -= (aBounds.GetHeight() - mnHeight) / 2; 1189*cdf0e10cSrcweir mpBorderWindow->SetPosSizePixel( aPos, aBounds.GetSize() ); 1190*cdf0e10cSrcweir } 1191*cdf0e10cSrcweir } 1192*cdf0e10cSrcweir } 1193*cdf0e10cSrcweir } 1194*cdf0e10cSrcweir else 1195*cdf0e10cSrcweir mbNWFBorder = false; 1196*cdf0e10cSrcweir } 1197*cdf0e10cSrcweir } 1198*cdf0e10cSrcweir 1199*cdf0e10cSrcweir if( ! mbNWFBorder ) 1200*cdf0e10cSrcweir { 1201*cdf0e10cSrcweir sal_uInt16 nStyle = FRAME_DRAW_NODRAW; 1202*cdf0e10cSrcweir // Wenn Border umgesetzt wurde oder BorderWindow ein Frame-Fenster 1203*cdf0e10cSrcweir // ist, dann Border nach aussen 1204*cdf0e10cSrcweir if ( (nBorderStyle & WINDOW_BORDER_DOUBLEOUT) || mpBorderWindow->mbSmallOutBorder ) 1205*cdf0e10cSrcweir nStyle |= FRAME_DRAW_DOUBLEOUT; 1206*cdf0e10cSrcweir else 1207*cdf0e10cSrcweir nStyle |= FRAME_DRAW_DOUBLEIN; 1208*cdf0e10cSrcweir if ( nBorderStyle & WINDOW_BORDER_MONO ) 1209*cdf0e10cSrcweir nStyle |= FRAME_DRAW_MONO; 1210*cdf0e10cSrcweir 1211*cdf0e10cSrcweir DecorationView aDecoView( mpOutDev ); 1212*cdf0e10cSrcweir Rectangle aRect( 0, 0, 10, 10 ); 1213*cdf0e10cSrcweir Rectangle aCalcRect = aDecoView.DrawFrame( aRect, nStyle ); 1214*cdf0e10cSrcweir mnLeftBorder = aCalcRect.Left(); 1215*cdf0e10cSrcweir mnTopBorder = aCalcRect.Top(); 1216*cdf0e10cSrcweir mnRightBorder = aRect.Right()-aCalcRect.Right(); 1217*cdf0e10cSrcweir mnBottomBorder = aRect.Bottom()-aCalcRect.Bottom(); 1218*cdf0e10cSrcweir } 1219*cdf0e10cSrcweir } 1220*cdf0e10cSrcweir } 1221*cdf0e10cSrcweir 1222*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1223*cdf0e10cSrcweir 1224*cdf0e10cSrcweir void ImplSmallBorderWindowView::GetBorder( sal_Int32& rLeftBorder, sal_Int32& rTopBorder, 1225*cdf0e10cSrcweir sal_Int32& rRightBorder, sal_Int32& rBottomBorder ) const 1226*cdf0e10cSrcweir { 1227*cdf0e10cSrcweir rLeftBorder = mnLeftBorder; 1228*cdf0e10cSrcweir rTopBorder = mnTopBorder; 1229*cdf0e10cSrcweir rRightBorder = mnRightBorder; 1230*cdf0e10cSrcweir rBottomBorder = mnBottomBorder; 1231*cdf0e10cSrcweir } 1232*cdf0e10cSrcweir 1233*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1234*cdf0e10cSrcweir 1235*cdf0e10cSrcweir long ImplSmallBorderWindowView::CalcTitleWidth() const 1236*cdf0e10cSrcweir { 1237*cdf0e10cSrcweir return 0; 1238*cdf0e10cSrcweir } 1239*cdf0e10cSrcweir 1240*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1241*cdf0e10cSrcweir 1242*cdf0e10cSrcweir void ImplSmallBorderWindowView::DrawWindow( sal_uInt16 nDrawFlags, OutputDevice*, const Point* ) 1243*cdf0e10cSrcweir { 1244*cdf0e10cSrcweir sal_uInt16 nBorderStyle = mpBorderWindow->GetBorderStyle(); 1245*cdf0e10cSrcweir if ( nBorderStyle & WINDOW_BORDER_NOBORDER ) 1246*cdf0e10cSrcweir return; 1247*cdf0e10cSrcweir 1248*cdf0e10cSrcweir sal_Bool bNativeOK = sal_False; 1249*cdf0e10cSrcweir // for native widget drawing we must find out what 1250*cdf0e10cSrcweir // control this border belongs to 1251*cdf0e10cSrcweir Window *pWin = NULL, *pCtrl = NULL; 1252*cdf0e10cSrcweir if( mpOutDev->GetOutDevType() == OUTDEV_WINDOW ) 1253*cdf0e10cSrcweir pWin = (Window*) mpOutDev; 1254*cdf0e10cSrcweir 1255*cdf0e10cSrcweir ControlType aCtrlType = 0; 1256*cdf0e10cSrcweir ControlPart aCtrlPart = PART_ENTIRE_CONTROL; 1257*cdf0e10cSrcweir 1258*cdf0e10cSrcweir if( pWin && (pCtrl = mpBorderWindow->GetWindow( WINDOW_CLIENT )) != NULL ) 1259*cdf0e10cSrcweir { 1260*cdf0e10cSrcweir switch( pCtrl->GetType() ) 1261*cdf0e10cSrcweir { 1262*cdf0e10cSrcweir case WINDOW_MULTILINEEDIT: 1263*cdf0e10cSrcweir aCtrlType = CTRL_MULTILINE_EDITBOX; 1264*cdf0e10cSrcweir break; 1265*cdf0e10cSrcweir case WINDOW_EDIT: 1266*cdf0e10cSrcweir case WINDOW_PATTERNFIELD: 1267*cdf0e10cSrcweir case WINDOW_METRICFIELD: 1268*cdf0e10cSrcweir case WINDOW_CURRENCYFIELD: 1269*cdf0e10cSrcweir case WINDOW_DATEFIELD: 1270*cdf0e10cSrcweir case WINDOW_TIMEFIELD: 1271*cdf0e10cSrcweir case WINDOW_LONGCURRENCYFIELD: 1272*cdf0e10cSrcweir case WINDOW_NUMERICFIELD: 1273*cdf0e10cSrcweir case WINDOW_SPINFIELD: 1274*cdf0e10cSrcweir if( pCtrl->GetStyle() & WB_SPIN ) 1275*cdf0e10cSrcweir aCtrlType = CTRL_SPINBOX; 1276*cdf0e10cSrcweir else 1277*cdf0e10cSrcweir aCtrlType = CTRL_EDITBOX; 1278*cdf0e10cSrcweir break; 1279*cdf0e10cSrcweir 1280*cdf0e10cSrcweir case WINDOW_LISTBOX: 1281*cdf0e10cSrcweir case WINDOW_MULTILISTBOX: 1282*cdf0e10cSrcweir case WINDOW_TREELISTBOX: 1283*cdf0e10cSrcweir aCtrlType = CTRL_LISTBOX; 1284*cdf0e10cSrcweir if( pCtrl->GetStyle() & WB_DROPDOWN ) 1285*cdf0e10cSrcweir aCtrlPart = PART_ENTIRE_CONTROL; 1286*cdf0e10cSrcweir else 1287*cdf0e10cSrcweir aCtrlPart = PART_WINDOW; 1288*cdf0e10cSrcweir break; 1289*cdf0e10cSrcweir 1290*cdf0e10cSrcweir case WINDOW_LISTBOXWINDOW: 1291*cdf0e10cSrcweir aCtrlType = CTRL_LISTBOX; 1292*cdf0e10cSrcweir aCtrlPart = PART_WINDOW; 1293*cdf0e10cSrcweir break; 1294*cdf0e10cSrcweir 1295*cdf0e10cSrcweir case WINDOW_COMBOBOX: 1296*cdf0e10cSrcweir case WINDOW_PATTERNBOX: 1297*cdf0e10cSrcweir case WINDOW_NUMERICBOX: 1298*cdf0e10cSrcweir case WINDOW_METRICBOX: 1299*cdf0e10cSrcweir case WINDOW_CURRENCYBOX: 1300*cdf0e10cSrcweir case WINDOW_DATEBOX: 1301*cdf0e10cSrcweir case WINDOW_TIMEBOX: 1302*cdf0e10cSrcweir case WINDOW_LONGCURRENCYBOX: 1303*cdf0e10cSrcweir if( pCtrl->GetStyle() & WB_DROPDOWN ) 1304*cdf0e10cSrcweir { 1305*cdf0e10cSrcweir aCtrlType = CTRL_COMBOBOX; 1306*cdf0e10cSrcweir aCtrlPart = PART_ENTIRE_CONTROL; 1307*cdf0e10cSrcweir } 1308*cdf0e10cSrcweir else 1309*cdf0e10cSrcweir { 1310*cdf0e10cSrcweir aCtrlType = CTRL_LISTBOX; 1311*cdf0e10cSrcweir aCtrlPart = PART_WINDOW; 1312*cdf0e10cSrcweir } 1313*cdf0e10cSrcweir break; 1314*cdf0e10cSrcweir 1315*cdf0e10cSrcweir default: 1316*cdf0e10cSrcweir break; 1317*cdf0e10cSrcweir } 1318*cdf0e10cSrcweir } 1319*cdf0e10cSrcweir 1320*cdf0e10cSrcweir if ( aCtrlType && pCtrl->IsNativeControlSupported(aCtrlType, aCtrlPart) ) 1321*cdf0e10cSrcweir { 1322*cdf0e10cSrcweir ImplControlValue aControlValue; 1323*cdf0e10cSrcweir ControlState nState = CTRL_STATE_ENABLED; 1324*cdf0e10cSrcweir 1325*cdf0e10cSrcweir if ( !pWin->IsEnabled() ) 1326*cdf0e10cSrcweir nState &= ~CTRL_STATE_ENABLED; 1327*cdf0e10cSrcweir if ( pWin->HasFocus() ) 1328*cdf0e10cSrcweir nState |= CTRL_STATE_FOCUSED; 1329*cdf0e10cSrcweir else if( mbNWFBorder ) 1330*cdf0e10cSrcweir { 1331*cdf0e10cSrcweir // FIXME: this is curently only on aqua, see if other platforms can profit 1332*cdf0e10cSrcweir 1333*cdf0e10cSrcweir // FIXME: for aqua focus rings all controls need to support GetNativeControlRegion 1334*cdf0e10cSrcweir // for the dropdown style 1335*cdf0e10cSrcweir if( pCtrl->HasFocus() || pCtrl->HasChildPathFocus() ) 1336*cdf0e10cSrcweir nState |= CTRL_STATE_FOCUSED; 1337*cdf0e10cSrcweir } 1338*cdf0e10cSrcweir 1339*cdf0e10cSrcweir sal_Bool bMouseOver = sal_False; 1340*cdf0e10cSrcweir Window *pCtrlChild = pCtrl->GetWindow( WINDOW_FIRSTCHILD ); 1341*cdf0e10cSrcweir while( pCtrlChild && (bMouseOver = pCtrlChild->IsMouseOver()) == sal_False ) 1342*cdf0e10cSrcweir pCtrlChild = pCtrlChild->GetWindow( WINDOW_NEXT ); 1343*cdf0e10cSrcweir 1344*cdf0e10cSrcweir if( bMouseOver ) 1345*cdf0e10cSrcweir nState |= CTRL_STATE_ROLLOVER; 1346*cdf0e10cSrcweir 1347*cdf0e10cSrcweir Point aPoint; 1348*cdf0e10cSrcweir Rectangle aCtrlRegion( aPoint, Size( mnWidth, mnHeight ) ); 1349*cdf0e10cSrcweir 1350*cdf0e10cSrcweir Rectangle aBoundingRgn( aPoint, Size( mnWidth, mnHeight ) ); 1351*cdf0e10cSrcweir Rectangle aContentRgn( aCtrlRegion ); 1352*cdf0e10cSrcweir if( ! ImplGetSVData()->maNWFData.mbCanDrawWidgetAnySize && 1353*cdf0e10cSrcweir pWin->GetNativeControlRegion( aCtrlType, aCtrlPart, aCtrlRegion, 1354*cdf0e10cSrcweir nState, aControlValue, rtl::OUString(), 1355*cdf0e10cSrcweir aBoundingRgn, aContentRgn )) 1356*cdf0e10cSrcweir { 1357*cdf0e10cSrcweir aCtrlRegion=aContentRgn; 1358*cdf0e10cSrcweir } 1359*cdf0e10cSrcweir 1360*cdf0e10cSrcweir bNativeOK = pWin->DrawNativeControl( aCtrlType, aCtrlPart, aCtrlRegion, nState, 1361*cdf0e10cSrcweir aControlValue, rtl::OUString() ); 1362*cdf0e10cSrcweir 1363*cdf0e10cSrcweir // if the native theme draws the spinbuttons in one call, make sure the proper settings 1364*cdf0e10cSrcweir // are passed, this might force a redraw though.... (TODO: improve) 1365*cdf0e10cSrcweir if ( (aCtrlType == CTRL_SPINBOX) && !pCtrl->IsNativeControlSupported( CTRL_SPINBOX, PART_BUTTON_UP ) ) 1366*cdf0e10cSrcweir { 1367*cdf0e10cSrcweir Edit *pEdit = ((Edit*) pCtrl)->GetSubEdit(); 1368*cdf0e10cSrcweir if ( pEdit ) 1369*cdf0e10cSrcweir pCtrl->Paint( Rectangle() ); // make sure the buttons are also drawn as they might overwrite the border 1370*cdf0e10cSrcweir } 1371*cdf0e10cSrcweir } 1372*cdf0e10cSrcweir 1373*cdf0e10cSrcweir if( bNativeOK ) 1374*cdf0e10cSrcweir return; 1375*cdf0e10cSrcweir 1376*cdf0e10cSrcweir if ( nDrawFlags & BORDERWINDOW_DRAW_FRAME ) 1377*cdf0e10cSrcweir { 1378*cdf0e10cSrcweir if ( nBorderStyle & WINDOW_BORDER_ACTIVE ) 1379*cdf0e10cSrcweir { 1380*cdf0e10cSrcweir Color aColor = mpOutDev->GetSettings().GetStyleSettings().GetHighlightColor(); 1381*cdf0e10cSrcweir mpOutDev->SetLineColor(); 1382*cdf0e10cSrcweir mpOutDev->SetFillColor( aColor ); 1383*cdf0e10cSrcweir mpOutDev->DrawRect( Rectangle( 0, 0, mnWidth-1, mnTopBorder ) ); 1384*cdf0e10cSrcweir mpOutDev->DrawRect( Rectangle( 0, mnHeight-mnBottomBorder, mnWidth-1, mnHeight-1 ) ); 1385*cdf0e10cSrcweir mpOutDev->DrawRect( Rectangle( 0, 0, mnLeftBorder, mnHeight-1 ) ); 1386*cdf0e10cSrcweir mpOutDev->DrawRect( Rectangle( mnWidth-mnRightBorder, 0, mnWidth-1, mnHeight-1 ) ); 1387*cdf0e10cSrcweir } 1388*cdf0e10cSrcweir else 1389*cdf0e10cSrcweir { 1390*cdf0e10cSrcweir sal_uInt16 nStyle = 0; 1391*cdf0e10cSrcweir // Wenn Border umgesetzt wurde oder BorderWindow ein Frame-Fenster 1392*cdf0e10cSrcweir // ist, dann Border nach aussen 1393*cdf0e10cSrcweir if ( (nBorderStyle & WINDOW_BORDER_DOUBLEOUT) || mpBorderWindow->mbSmallOutBorder ) 1394*cdf0e10cSrcweir nStyle |= FRAME_DRAW_DOUBLEOUT; 1395*cdf0e10cSrcweir else 1396*cdf0e10cSrcweir nStyle |= FRAME_DRAW_DOUBLEIN; 1397*cdf0e10cSrcweir if ( nBorderStyle & WINDOW_BORDER_MONO ) 1398*cdf0e10cSrcweir nStyle |= FRAME_DRAW_MONO; 1399*cdf0e10cSrcweir if ( nBorderStyle & WINDOW_BORDER_MENU ) 1400*cdf0e10cSrcweir nStyle |= FRAME_DRAW_MENU; 1401*cdf0e10cSrcweir // tell DrawFrame that we're drawing a window border of a frame window to avoid round corners 1402*cdf0e10cSrcweir if( pWin && pWin == pWin->ImplGetFrameWindow() ) 1403*cdf0e10cSrcweir nStyle |= FRAME_DRAW_WINDOWBORDER; 1404*cdf0e10cSrcweir 1405*cdf0e10cSrcweir DecorationView aDecoView( mpOutDev ); 1406*cdf0e10cSrcweir Point aTmpPoint; 1407*cdf0e10cSrcweir Rectangle aInRect( aTmpPoint, Size( mnWidth, mnHeight ) ); 1408*cdf0e10cSrcweir aDecoView.DrawFrame( aInRect, nStyle ); 1409*cdf0e10cSrcweir } 1410*cdf0e10cSrcweir } 1411*cdf0e10cSrcweir } 1412*cdf0e10cSrcweir 1413*cdf0e10cSrcweir // ======================================================================= 1414*cdf0e10cSrcweir 1415*cdf0e10cSrcweir // --------------------------- 1416*cdf0e10cSrcweir // - ImplStdBorderWindowView - 1417*cdf0e10cSrcweir // --------------------------- 1418*cdf0e10cSrcweir 1419*cdf0e10cSrcweir ImplStdBorderWindowView::ImplStdBorderWindowView( ImplBorderWindow* pBorderWindow ) 1420*cdf0e10cSrcweir { 1421*cdf0e10cSrcweir maFrameData.mpBorderWindow = pBorderWindow; 1422*cdf0e10cSrcweir maFrameData.mbDragFull = sal_False; 1423*cdf0e10cSrcweir maFrameData.mnHitTest = 0; 1424*cdf0e10cSrcweir maFrameData.mnPinState = 0; 1425*cdf0e10cSrcweir maFrameData.mnCloseState = 0; 1426*cdf0e10cSrcweir maFrameData.mnRollState = 0; 1427*cdf0e10cSrcweir maFrameData.mnDockState = 0; 1428*cdf0e10cSrcweir maFrameData.mnMenuState = 0; 1429*cdf0e10cSrcweir maFrameData.mnHideState = 0; 1430*cdf0e10cSrcweir maFrameData.mnHelpState = 0; 1431*cdf0e10cSrcweir maFrameData.mbTitleClipped = 0; 1432*cdf0e10cSrcweir 1433*cdf0e10cSrcweir mpATitleVirDev = NULL; 1434*cdf0e10cSrcweir mpDTitleVirDev = NULL; 1435*cdf0e10cSrcweir } 1436*cdf0e10cSrcweir 1437*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1438*cdf0e10cSrcweir 1439*cdf0e10cSrcweir ImplStdBorderWindowView::~ImplStdBorderWindowView() 1440*cdf0e10cSrcweir { 1441*cdf0e10cSrcweir if ( mpATitleVirDev ) 1442*cdf0e10cSrcweir delete mpATitleVirDev; 1443*cdf0e10cSrcweir if ( mpDTitleVirDev ) 1444*cdf0e10cSrcweir delete mpDTitleVirDev; 1445*cdf0e10cSrcweir } 1446*cdf0e10cSrcweir 1447*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1448*cdf0e10cSrcweir 1449*cdf0e10cSrcweir sal_Bool ImplStdBorderWindowView::MouseMove( const MouseEvent& rMEvt ) 1450*cdf0e10cSrcweir { 1451*cdf0e10cSrcweir return ImplMouseMove( &maFrameData, rMEvt ); 1452*cdf0e10cSrcweir } 1453*cdf0e10cSrcweir 1454*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1455*cdf0e10cSrcweir 1456*cdf0e10cSrcweir sal_Bool ImplStdBorderWindowView::MouseButtonDown( const MouseEvent& rMEvt ) 1457*cdf0e10cSrcweir { 1458*cdf0e10cSrcweir return ImplMouseButtonDown( &maFrameData, rMEvt ); 1459*cdf0e10cSrcweir } 1460*cdf0e10cSrcweir 1461*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1462*cdf0e10cSrcweir 1463*cdf0e10cSrcweir sal_Bool ImplStdBorderWindowView::Tracking( const TrackingEvent& rTEvt ) 1464*cdf0e10cSrcweir { 1465*cdf0e10cSrcweir return ImplTracking( &maFrameData, rTEvt ); 1466*cdf0e10cSrcweir } 1467*cdf0e10cSrcweir 1468*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1469*cdf0e10cSrcweir 1470*cdf0e10cSrcweir String ImplStdBorderWindowView::RequestHelp( const Point& rPos, Rectangle& rHelpRect ) 1471*cdf0e10cSrcweir { 1472*cdf0e10cSrcweir return ImplRequestHelp( &maFrameData, rPos, rHelpRect ); 1473*cdf0e10cSrcweir } 1474*cdf0e10cSrcweir 1475*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1476*cdf0e10cSrcweir 1477*cdf0e10cSrcweir Rectangle ImplStdBorderWindowView::GetMenuRect() const 1478*cdf0e10cSrcweir { 1479*cdf0e10cSrcweir return maFrameData.maMenuRect; 1480*cdf0e10cSrcweir } 1481*cdf0e10cSrcweir 1482*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1483*cdf0e10cSrcweir 1484*cdf0e10cSrcweir void ImplStdBorderWindowView::Init( OutputDevice* pDev, long nWidth, long nHeight ) 1485*cdf0e10cSrcweir { 1486*cdf0e10cSrcweir ImplBorderFrameData* pData = &maFrameData; 1487*cdf0e10cSrcweir ImplBorderWindow* pBorderWindow = maFrameData.mpBorderWindow; 1488*cdf0e10cSrcweir const StyleSettings& rStyleSettings = pDev->GetSettings().GetStyleSettings(); 1489*cdf0e10cSrcweir DecorationView aDecoView( pDev ); 1490*cdf0e10cSrcweir Rectangle aRect( 0, 0, 10, 10 ); 1491*cdf0e10cSrcweir Rectangle aCalcRect = aDecoView.DrawFrame( aRect, FRAME_DRAW_DOUBLEOUT | FRAME_DRAW_NODRAW ); 1492*cdf0e10cSrcweir 1493*cdf0e10cSrcweir pData->mpOutDev = pDev; 1494*cdf0e10cSrcweir pData->mnWidth = nWidth; 1495*cdf0e10cSrcweir pData->mnHeight = nHeight; 1496*cdf0e10cSrcweir 1497*cdf0e10cSrcweir pData->mnTitleType = pBorderWindow->mnTitleType; 1498*cdf0e10cSrcweir pData->mbFloatWindow = pBorderWindow->mbFloatWindow; 1499*cdf0e10cSrcweir 1500*cdf0e10cSrcweir if ( !(pBorderWindow->GetStyle() & WB_MOVEABLE) || (pData->mnTitleType == BORDERWINDOW_TITLE_NONE) ) 1501*cdf0e10cSrcweir pData->mnBorderSize = 0; 1502*cdf0e10cSrcweir else if ( pData->mnTitleType == BORDERWINDOW_TITLE_TEAROFF ) 1503*cdf0e10cSrcweir pData->mnBorderSize = 0; 1504*cdf0e10cSrcweir else 1505*cdf0e10cSrcweir pData->mnBorderSize = rStyleSettings.GetBorderSize(); 1506*cdf0e10cSrcweir pData->mnLeftBorder = aCalcRect.Left(); 1507*cdf0e10cSrcweir pData->mnTopBorder = aCalcRect.Top(); 1508*cdf0e10cSrcweir pData->mnRightBorder = aRect.Right()-aCalcRect.Right(); 1509*cdf0e10cSrcweir pData->mnBottomBorder = aRect.Bottom()-aCalcRect.Bottom(); 1510*cdf0e10cSrcweir pData->mnLeftBorder += pData->mnBorderSize; 1511*cdf0e10cSrcweir pData->mnTopBorder += pData->mnBorderSize; 1512*cdf0e10cSrcweir pData->mnRightBorder += pData->mnBorderSize; 1513*cdf0e10cSrcweir pData->mnBottomBorder += pData->mnBorderSize; 1514*cdf0e10cSrcweir pData->mnNoTitleTop = pData->mnTopBorder; 1515*cdf0e10cSrcweir 1516*cdf0e10cSrcweir ImplInitTitle( &maFrameData ); 1517*cdf0e10cSrcweir if ( pData->mnTitleHeight ) 1518*cdf0e10cSrcweir { 1519*cdf0e10cSrcweir // to improve symbol display force a minum title height 1520*cdf0e10cSrcweir if( pData->mnTitleHeight < MIN_CAPTION_HEIGHT ) 1521*cdf0e10cSrcweir pData->mnTitleHeight = MIN_CAPTION_HEIGHT; 1522*cdf0e10cSrcweir 1523*cdf0e10cSrcweir // set a proper background for drawing 1524*cdf0e10cSrcweir // highlighted buttons in the title 1525*cdf0e10cSrcweir pBorderWindow->SetBackground( rStyleSettings.GetWindowColor() ); 1526*cdf0e10cSrcweir 1527*cdf0e10cSrcweir pData->maTitleRect.Left() = pData->mnLeftBorder; 1528*cdf0e10cSrcweir pData->maTitleRect.Right() = nWidth-pData->mnRightBorder-1; 1529*cdf0e10cSrcweir pData->maTitleRect.Top() = pData->mnTopBorder; 1530*cdf0e10cSrcweir pData->maTitleRect.Bottom() = pData->maTitleRect.Top()+pData->mnTitleHeight-1; 1531*cdf0e10cSrcweir 1532*cdf0e10cSrcweir if ( pData->mnTitleType & (BORDERWINDOW_TITLE_NORMAL | BORDERWINDOW_TITLE_SMALL) ) 1533*cdf0e10cSrcweir { 1534*cdf0e10cSrcweir long nLeft = pData->maTitleRect.Left(); 1535*cdf0e10cSrcweir long nRight = pData->maTitleRect.Right(); 1536*cdf0e10cSrcweir long nItemTop = pData->maTitleRect.Top(); 1537*cdf0e10cSrcweir long nItemBottom = pData->maTitleRect.Bottom(); 1538*cdf0e10cSrcweir nLeft += 1; 1539*cdf0e10cSrcweir nRight -= 3; 1540*cdf0e10cSrcweir nItemTop += 2; 1541*cdf0e10cSrcweir nItemBottom -= 2; 1542*cdf0e10cSrcweir 1543*cdf0e10cSrcweir if ( pBorderWindow->GetStyle() & WB_PINABLE ) 1544*cdf0e10cSrcweir { 1545*cdf0e10cSrcweir Image aImage; 1546*cdf0e10cSrcweir ImplGetPinImage( 0, 0, aImage ); 1547*cdf0e10cSrcweir pData->maPinRect.Top() = nItemTop; 1548*cdf0e10cSrcweir pData->maPinRect.Bottom() = nItemBottom; 1549*cdf0e10cSrcweir pData->maPinRect.Left() = nLeft; 1550*cdf0e10cSrcweir pData->maPinRect.Right() = pData->maPinRect.Left()+aImage.GetSizePixel().Width(); 1551*cdf0e10cSrcweir nLeft += pData->maPinRect.GetWidth()+3; 1552*cdf0e10cSrcweir } 1553*cdf0e10cSrcweir 1554*cdf0e10cSrcweir if ( pBorderWindow->GetStyle() & WB_CLOSEABLE ) 1555*cdf0e10cSrcweir { 1556*cdf0e10cSrcweir pData->maCloseRect.Top() = nItemTop; 1557*cdf0e10cSrcweir pData->maCloseRect.Bottom() = nItemBottom; 1558*cdf0e10cSrcweir pData->maCloseRect.Right() = nRight; 1559*cdf0e10cSrcweir pData->maCloseRect.Left() = pData->maCloseRect.Right()-pData->maCloseRect.GetHeight()+1; 1560*cdf0e10cSrcweir nRight -= pData->maCloseRect.GetWidth()+3; 1561*cdf0e10cSrcweir } 1562*cdf0e10cSrcweir 1563*cdf0e10cSrcweir if ( pBorderWindow->mbMenuBtn ) 1564*cdf0e10cSrcweir { 1565*cdf0e10cSrcweir pData->maMenuRect.Top() = nItemTop; 1566*cdf0e10cSrcweir pData->maMenuRect.Bottom() = nItemBottom; 1567*cdf0e10cSrcweir pData->maMenuRect.Right() = nRight; 1568*cdf0e10cSrcweir pData->maMenuRect.Left() = pData->maMenuRect.Right()-pData->maMenuRect.GetHeight()+1; 1569*cdf0e10cSrcweir nRight -= pData->maMenuRect.GetWidth(); 1570*cdf0e10cSrcweir } 1571*cdf0e10cSrcweir 1572*cdf0e10cSrcweir if ( pBorderWindow->mbDockBtn ) 1573*cdf0e10cSrcweir { 1574*cdf0e10cSrcweir pData->maDockRect.Top() = nItemTop; 1575*cdf0e10cSrcweir pData->maDockRect.Bottom() = nItemBottom; 1576*cdf0e10cSrcweir pData->maDockRect.Right() = nRight; 1577*cdf0e10cSrcweir pData->maDockRect.Left() = pData->maDockRect.Right()-pData->maDockRect.GetHeight()+1; 1578*cdf0e10cSrcweir nRight -= pData->maDockRect.GetWidth(); 1579*cdf0e10cSrcweir if ( !pBorderWindow->mbHideBtn && 1580*cdf0e10cSrcweir !(pBorderWindow->GetStyle() & WB_ROLLABLE) ) 1581*cdf0e10cSrcweir nRight -= 3; 1582*cdf0e10cSrcweir } 1583*cdf0e10cSrcweir 1584*cdf0e10cSrcweir if ( pBorderWindow->mbHideBtn ) 1585*cdf0e10cSrcweir { 1586*cdf0e10cSrcweir pData->maHideRect.Top() = nItemTop; 1587*cdf0e10cSrcweir pData->maHideRect.Bottom() = nItemBottom; 1588*cdf0e10cSrcweir pData->maHideRect.Right() = nRight; 1589*cdf0e10cSrcweir pData->maHideRect.Left() = pData->maHideRect.Right()-pData->maHideRect.GetHeight()+1; 1590*cdf0e10cSrcweir nRight -= pData->maHideRect.GetWidth(); 1591*cdf0e10cSrcweir if ( !(pBorderWindow->GetStyle() & WB_ROLLABLE) ) 1592*cdf0e10cSrcweir nRight -= 3; 1593*cdf0e10cSrcweir } 1594*cdf0e10cSrcweir 1595*cdf0e10cSrcweir if ( pBorderWindow->GetStyle() & WB_ROLLABLE ) 1596*cdf0e10cSrcweir { 1597*cdf0e10cSrcweir pData->maRollRect.Top() = nItemTop; 1598*cdf0e10cSrcweir pData->maRollRect.Bottom() = nItemBottom; 1599*cdf0e10cSrcweir pData->maRollRect.Right() = nRight; 1600*cdf0e10cSrcweir pData->maRollRect.Left() = pData->maRollRect.Right()-pData->maRollRect.GetHeight()+1; 1601*cdf0e10cSrcweir nRight -= pData->maRollRect.GetWidth(); 1602*cdf0e10cSrcweir } 1603*cdf0e10cSrcweir 1604*cdf0e10cSrcweir if ( pBorderWindow->mbHelpBtn ) 1605*cdf0e10cSrcweir { 1606*cdf0e10cSrcweir pData->maHelpRect.Top() = nItemTop; 1607*cdf0e10cSrcweir pData->maHelpRect.Bottom() = nItemBottom; 1608*cdf0e10cSrcweir pData->maHelpRect.Right() = nRight; 1609*cdf0e10cSrcweir pData->maHelpRect.Left() = pData->maHelpRect.Right()-pData->maHelpRect.GetHeight()+1; 1610*cdf0e10cSrcweir nRight -= pData->maHelpRect.GetWidth()+3; 1611*cdf0e10cSrcweir } 1612*cdf0e10cSrcweir } 1613*cdf0e10cSrcweir else 1614*cdf0e10cSrcweir { 1615*cdf0e10cSrcweir pData->maPinRect.SetEmpty(); 1616*cdf0e10cSrcweir pData->maCloseRect.SetEmpty(); 1617*cdf0e10cSrcweir pData->maDockRect.SetEmpty(); 1618*cdf0e10cSrcweir pData->maMenuRect.SetEmpty(); 1619*cdf0e10cSrcweir pData->maHideRect.SetEmpty(); 1620*cdf0e10cSrcweir pData->maRollRect.SetEmpty(); 1621*cdf0e10cSrcweir pData->maHelpRect.SetEmpty(); 1622*cdf0e10cSrcweir } 1623*cdf0e10cSrcweir 1624*cdf0e10cSrcweir pData->mnTopBorder += pData->mnTitleHeight; 1625*cdf0e10cSrcweir } 1626*cdf0e10cSrcweir else 1627*cdf0e10cSrcweir { 1628*cdf0e10cSrcweir pData->maTitleRect.SetEmpty(); 1629*cdf0e10cSrcweir pData->maPinRect.SetEmpty(); 1630*cdf0e10cSrcweir pData->maCloseRect.SetEmpty(); 1631*cdf0e10cSrcweir pData->maDockRect.SetEmpty(); 1632*cdf0e10cSrcweir pData->maMenuRect.SetEmpty(); 1633*cdf0e10cSrcweir pData->maHideRect.SetEmpty(); 1634*cdf0e10cSrcweir pData->maRollRect.SetEmpty(); 1635*cdf0e10cSrcweir pData->maHelpRect.SetEmpty(); 1636*cdf0e10cSrcweir } 1637*cdf0e10cSrcweir } 1638*cdf0e10cSrcweir 1639*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1640*cdf0e10cSrcweir 1641*cdf0e10cSrcweir void ImplStdBorderWindowView::GetBorder( sal_Int32& rLeftBorder, sal_Int32& rTopBorder, 1642*cdf0e10cSrcweir sal_Int32& rRightBorder, sal_Int32& rBottomBorder ) const 1643*cdf0e10cSrcweir { 1644*cdf0e10cSrcweir rLeftBorder = maFrameData.mnLeftBorder; 1645*cdf0e10cSrcweir rTopBorder = maFrameData.mnTopBorder; 1646*cdf0e10cSrcweir rRightBorder = maFrameData.mnRightBorder; 1647*cdf0e10cSrcweir rBottomBorder = maFrameData.mnBottomBorder; 1648*cdf0e10cSrcweir } 1649*cdf0e10cSrcweir 1650*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1651*cdf0e10cSrcweir 1652*cdf0e10cSrcweir long ImplStdBorderWindowView::CalcTitleWidth() const 1653*cdf0e10cSrcweir { 1654*cdf0e10cSrcweir return ImplCalcTitleWidth( &maFrameData ); 1655*cdf0e10cSrcweir } 1656*cdf0e10cSrcweir 1657*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1658*cdf0e10cSrcweir 1659*cdf0e10cSrcweir void ImplStdBorderWindowView::DrawWindow( sal_uInt16 nDrawFlags, OutputDevice* pOutDev, const Point* pOffset ) 1660*cdf0e10cSrcweir { 1661*cdf0e10cSrcweir ImplBorderFrameData* pData = &maFrameData; 1662*cdf0e10cSrcweir OutputDevice* pDev = pOutDev ? pOutDev : pData->mpOutDev; 1663*cdf0e10cSrcweir ImplBorderWindow* pBorderWindow = pData->mpBorderWindow; 1664*cdf0e10cSrcweir Point aTmpPoint = pOffset ? Point(*pOffset) : Point(); 1665*cdf0e10cSrcweir Rectangle aInRect( aTmpPoint, Size( pData->mnWidth, pData->mnHeight ) ); 1666*cdf0e10cSrcweir const StyleSettings& rStyleSettings = pData->mpOutDev->GetSettings().GetStyleSettings(); 1667*cdf0e10cSrcweir DecorationView aDecoView( pDev ); 1668*cdf0e10cSrcweir Color aFrameColor( rStyleSettings.GetFaceColor() ); 1669*cdf0e10cSrcweir 1670*cdf0e10cSrcweir aFrameColor.DecreaseContrast( (sal_uInt8) (0.50 * 255)); 1671*cdf0e10cSrcweir 1672*cdf0e10cSrcweir // Draw Frame 1673*cdf0e10cSrcweir if ( nDrawFlags & BORDERWINDOW_DRAW_FRAME ) 1674*cdf0e10cSrcweir { 1675*cdf0e10cSrcweir // single line frame 1676*cdf0e10cSrcweir pDev->SetLineColor( aFrameColor ); 1677*cdf0e10cSrcweir pDev->SetFillColor(); 1678*cdf0e10cSrcweir pDev->DrawRect( aInRect ); 1679*cdf0e10cSrcweir aInRect.nLeft++; aInRect.nRight--; 1680*cdf0e10cSrcweir aInRect.nTop++; aInRect.nBottom--; 1681*cdf0e10cSrcweir } 1682*cdf0e10cSrcweir else 1683*cdf0e10cSrcweir aInRect = aDecoView.DrawFrame( aInRect, FRAME_DRAW_DOUBLEOUT | FRAME_DRAW_NODRAW); 1684*cdf0e10cSrcweir 1685*cdf0e10cSrcweir // Draw Border 1686*cdf0e10cSrcweir pDev->SetLineColor(); 1687*cdf0e10cSrcweir long nBorderSize = pData->mnBorderSize; 1688*cdf0e10cSrcweir if ( (nDrawFlags & BORDERWINDOW_DRAW_BORDER) && nBorderSize ) 1689*cdf0e10cSrcweir { 1690*cdf0e10cSrcweir pDev->SetFillColor( rStyleSettings.GetFaceColor() ); 1691*cdf0e10cSrcweir pDev->DrawRect( Rectangle( Point( aInRect.Left(), aInRect.Top() ), 1692*cdf0e10cSrcweir Size( aInRect.GetWidth(), nBorderSize ) ) ); 1693*cdf0e10cSrcweir pDev->DrawRect( Rectangle( Point( aInRect.Left(), aInRect.Top()+nBorderSize ), 1694*cdf0e10cSrcweir Size( nBorderSize, aInRect.GetHeight()-nBorderSize ) ) ); 1695*cdf0e10cSrcweir pDev->DrawRect( Rectangle( Point( aInRect.Left(), aInRect.Bottom()-nBorderSize+1 ), 1696*cdf0e10cSrcweir Size( aInRect.GetWidth(), nBorderSize ) ) ); 1697*cdf0e10cSrcweir pDev->DrawRect( Rectangle( Point( aInRect.Right()-nBorderSize+1, aInRect.Top()+nBorderSize ), 1698*cdf0e10cSrcweir Size( nBorderSize, aInRect.GetHeight()-nBorderSize ) ) ); 1699*cdf0e10cSrcweir } 1700*cdf0e10cSrcweir 1701*cdf0e10cSrcweir // Draw Title 1702*cdf0e10cSrcweir if ( (nDrawFlags & BORDERWINDOW_DRAW_TITLE) && !pData->maTitleRect.IsEmpty() ) 1703*cdf0e10cSrcweir { 1704*cdf0e10cSrcweir aInRect = pData->maTitleRect; 1705*cdf0e10cSrcweir 1706*cdf0e10cSrcweir // use no gradient anymore, just a static titlecolor 1707*cdf0e10cSrcweir pDev->SetFillColor( aFrameColor ); 1708*cdf0e10cSrcweir pDev->SetTextColor( rStyleSettings.GetButtonTextColor() ); 1709*cdf0e10cSrcweir Rectangle aTitleRect( pData->maTitleRect ); 1710*cdf0e10cSrcweir if( pOffset ) 1711*cdf0e10cSrcweir aTitleRect.Move( pOffset->X(), pOffset->Y() ); 1712*cdf0e10cSrcweir pDev->DrawRect( aTitleRect ); 1713*cdf0e10cSrcweir 1714*cdf0e10cSrcweir 1715*cdf0e10cSrcweir if ( pData->mnTitleType != BORDERWINDOW_TITLE_TEAROFF ) 1716*cdf0e10cSrcweir { 1717*cdf0e10cSrcweir aInRect.Left() += 2; 1718*cdf0e10cSrcweir aInRect.Right() -= 2; 1719*cdf0e10cSrcweir 1720*cdf0e10cSrcweir if ( !pData->maPinRect.IsEmpty() ) 1721*cdf0e10cSrcweir aInRect.Left() = pData->maPinRect.Right()+2; 1722*cdf0e10cSrcweir 1723*cdf0e10cSrcweir if ( !pData->maHelpRect.IsEmpty() ) 1724*cdf0e10cSrcweir aInRect.Right() = pData->maHelpRect.Left()-2; 1725*cdf0e10cSrcweir else if ( !pData->maRollRect.IsEmpty() ) 1726*cdf0e10cSrcweir aInRect.Right() = pData->maRollRect.Left()-2; 1727*cdf0e10cSrcweir else if ( !pData->maHideRect.IsEmpty() ) 1728*cdf0e10cSrcweir aInRect.Right() = pData->maHideRect.Left()-2; 1729*cdf0e10cSrcweir else if ( !pData->maDockRect.IsEmpty() ) 1730*cdf0e10cSrcweir aInRect.Right() = pData->maDockRect.Left()-2; 1731*cdf0e10cSrcweir else if ( !pData->maMenuRect.IsEmpty() ) 1732*cdf0e10cSrcweir aInRect.Right() = pData->maMenuRect.Left()-2; 1733*cdf0e10cSrcweir else if ( !pData->maCloseRect.IsEmpty() ) 1734*cdf0e10cSrcweir aInRect.Right() = pData->maCloseRect.Left()-2; 1735*cdf0e10cSrcweir 1736*cdf0e10cSrcweir if ( pOffset ) 1737*cdf0e10cSrcweir aInRect.Move( pOffset->X(), pOffset->Y() ); 1738*cdf0e10cSrcweir 1739*cdf0e10cSrcweir sal_uInt16 nTextStyle = TEXT_DRAW_LEFT | TEXT_DRAW_VCENTER | TEXT_DRAW_ENDELLIPSIS | TEXT_DRAW_CLIP; 1740*cdf0e10cSrcweir 1741*cdf0e10cSrcweir // must show tooltip ? 1742*cdf0e10cSrcweir TextRectInfo aInfo; 1743*cdf0e10cSrcweir pDev->GetTextRect( aInRect, pBorderWindow->GetText(), nTextStyle, &aInfo ); 1744*cdf0e10cSrcweir pData->mbTitleClipped = aInfo.IsEllipses(); 1745*cdf0e10cSrcweir 1746*cdf0e10cSrcweir pDev->DrawText( aInRect, pBorderWindow->GetText(), nTextStyle ); 1747*cdf0e10cSrcweir } 1748*cdf0e10cSrcweir } 1749*cdf0e10cSrcweir 1750*cdf0e10cSrcweir if ( ((nDrawFlags & BORDERWINDOW_DRAW_CLOSE) || (nDrawFlags & BORDERWINDOW_DRAW_TITLE)) && 1751*cdf0e10cSrcweir !pData->maCloseRect.IsEmpty() ) 1752*cdf0e10cSrcweir { 1753*cdf0e10cSrcweir Rectangle aSymbolRect( pData->maCloseRect ); 1754*cdf0e10cSrcweir if ( pOffset ) 1755*cdf0e10cSrcweir aSymbolRect.Move( pOffset->X(), pOffset->Y() ); 1756*cdf0e10cSrcweir ImplDrawBrdWinSymbolButton( pDev, aSymbolRect, SYMBOL_CLOSE, pData->mnCloseState ); 1757*cdf0e10cSrcweir } 1758*cdf0e10cSrcweir if ( ((nDrawFlags & BORDERWINDOW_DRAW_DOCK) || (nDrawFlags & BORDERWINDOW_DRAW_TITLE)) && 1759*cdf0e10cSrcweir !pData->maDockRect.IsEmpty() ) 1760*cdf0e10cSrcweir { 1761*cdf0e10cSrcweir Rectangle aSymbolRect( pData->maDockRect ); 1762*cdf0e10cSrcweir if ( pOffset ) 1763*cdf0e10cSrcweir aSymbolRect.Move( pOffset->X(), pOffset->Y() ); 1764*cdf0e10cSrcweir ImplDrawBrdWinSymbolButton( pDev, aSymbolRect, SYMBOL_DOCK, pData->mnDockState ); 1765*cdf0e10cSrcweir } 1766*cdf0e10cSrcweir if ( ((nDrawFlags & BORDERWINDOW_DRAW_MENU) || (nDrawFlags & BORDERWINDOW_DRAW_TITLE)) && 1767*cdf0e10cSrcweir !pData->maMenuRect.IsEmpty() ) 1768*cdf0e10cSrcweir { 1769*cdf0e10cSrcweir Rectangle aSymbolRect( pData->maMenuRect ); 1770*cdf0e10cSrcweir if ( pOffset ) 1771*cdf0e10cSrcweir aSymbolRect.Move( pOffset->X(), pOffset->Y() ); 1772*cdf0e10cSrcweir ImplDrawBrdWinSymbolButton( pDev, aSymbolRect, SYMBOL_MENU, pData->mnMenuState ); 1773*cdf0e10cSrcweir } 1774*cdf0e10cSrcweir if ( ((nDrawFlags & BORDERWINDOW_DRAW_HIDE) || (nDrawFlags & BORDERWINDOW_DRAW_TITLE)) && 1775*cdf0e10cSrcweir !pData->maHideRect.IsEmpty() ) 1776*cdf0e10cSrcweir { 1777*cdf0e10cSrcweir Rectangle aSymbolRect( pData->maHideRect ); 1778*cdf0e10cSrcweir if ( pOffset ) 1779*cdf0e10cSrcweir aSymbolRect.Move( pOffset->X(), pOffset->Y() ); 1780*cdf0e10cSrcweir ImplDrawBrdWinSymbolButton( pDev, aSymbolRect, SYMBOL_HIDE, pData->mnHideState ); 1781*cdf0e10cSrcweir } 1782*cdf0e10cSrcweir if ( ((nDrawFlags & BORDERWINDOW_DRAW_ROLL) || (nDrawFlags & BORDERWINDOW_DRAW_TITLE)) && 1783*cdf0e10cSrcweir !pData->maRollRect.IsEmpty() ) 1784*cdf0e10cSrcweir { 1785*cdf0e10cSrcweir SymbolType eType; 1786*cdf0e10cSrcweir if ( pBorderWindow->mbRollUp ) 1787*cdf0e10cSrcweir eType = SYMBOL_ROLLDOWN; 1788*cdf0e10cSrcweir else 1789*cdf0e10cSrcweir eType = SYMBOL_ROLLUP; 1790*cdf0e10cSrcweir Rectangle aSymbolRect( pData->maRollRect ); 1791*cdf0e10cSrcweir if ( pOffset ) 1792*cdf0e10cSrcweir aSymbolRect.Move( pOffset->X(), pOffset->Y() ); 1793*cdf0e10cSrcweir ImplDrawBrdWinSymbolButton( pDev, aSymbolRect, eType, pData->mnRollState ); 1794*cdf0e10cSrcweir } 1795*cdf0e10cSrcweir 1796*cdf0e10cSrcweir if ( ((nDrawFlags & BORDERWINDOW_DRAW_HELP) || (nDrawFlags & BORDERWINDOW_DRAW_TITLE)) && 1797*cdf0e10cSrcweir !pData->maHelpRect.IsEmpty() ) 1798*cdf0e10cSrcweir { 1799*cdf0e10cSrcweir Rectangle aSymbolRect( pData->maHelpRect ); 1800*cdf0e10cSrcweir if ( pOffset ) 1801*cdf0e10cSrcweir aSymbolRect.Move( pOffset->X(), pOffset->Y() ); 1802*cdf0e10cSrcweir ImplDrawBrdWinSymbolButton( pDev, aSymbolRect, SYMBOL_HELP, pData->mnHelpState ); 1803*cdf0e10cSrcweir } 1804*cdf0e10cSrcweir if ( ((nDrawFlags & BORDERWINDOW_DRAW_PIN) || (nDrawFlags & BORDERWINDOW_DRAW_TITLE)) && 1805*cdf0e10cSrcweir !pData->maPinRect.IsEmpty() ) 1806*cdf0e10cSrcweir { 1807*cdf0e10cSrcweir Image aImage; 1808*cdf0e10cSrcweir ImplGetPinImage( pData->mnPinState, pBorderWindow->mbPined, aImage ); 1809*cdf0e10cSrcweir Size aImageSize = aImage.GetSizePixel(); 1810*cdf0e10cSrcweir long nRectHeight = pData->maPinRect.GetHeight(); 1811*cdf0e10cSrcweir Point aPos( pData->maPinRect.TopLeft() ); 1812*cdf0e10cSrcweir if ( pOffset ) 1813*cdf0e10cSrcweir aPos.Move( pOffset->X(), pOffset->Y() ); 1814*cdf0e10cSrcweir if ( nRectHeight < aImageSize.Height() ) 1815*cdf0e10cSrcweir { 1816*cdf0e10cSrcweir pDev->DrawImage( aPos, Size( aImageSize.Width(), nRectHeight ), aImage ); 1817*cdf0e10cSrcweir } 1818*cdf0e10cSrcweir else 1819*cdf0e10cSrcweir { 1820*cdf0e10cSrcweir aPos.Y() += (nRectHeight-aImageSize.Height())/2; 1821*cdf0e10cSrcweir pDev->DrawImage( aPos, aImage ); 1822*cdf0e10cSrcweir } 1823*cdf0e10cSrcweir } 1824*cdf0e10cSrcweir } 1825*cdf0e10cSrcweir 1826*cdf0e10cSrcweir 1827*cdf0e10cSrcweir // ======================================================================= 1828*cdf0e10cSrcweir void ImplBorderWindow::ImplInit( Window* pParent, 1829*cdf0e10cSrcweir WinBits nStyle, sal_uInt16 nTypeStyle, 1830*cdf0e10cSrcweir const ::com::sun::star::uno::Any& ) 1831*cdf0e10cSrcweir { 1832*cdf0e10cSrcweir ImplInit( pParent, nStyle, nTypeStyle, NULL ); 1833*cdf0e10cSrcweir } 1834*cdf0e10cSrcweir 1835*cdf0e10cSrcweir void ImplBorderWindow::ImplInit( Window* pParent, 1836*cdf0e10cSrcweir WinBits nStyle, sal_uInt16 nTypeStyle, 1837*cdf0e10cSrcweir SystemParentData* pSystemParentData 1838*cdf0e10cSrcweir ) 1839*cdf0e10cSrcweir { 1840*cdf0e10cSrcweir // Alle WindowBits entfernen, die wir nicht haben wollen 1841*cdf0e10cSrcweir WinBits nOrgStyle = nStyle; 1842*cdf0e10cSrcweir WinBits nTestStyle = (WB_MOVEABLE | WB_SIZEABLE | WB_ROLLABLE | WB_PINABLE | WB_CLOSEABLE | WB_STANDALONE | WB_DIALOGCONTROL | WB_NODIALOGCONTROL | WB_SYSTEMFLOATWIN | WB_INTROWIN | WB_DEFAULTWIN | WB_TOOLTIPWIN | WB_NOSHADOW | WB_OWNERDRAWDECORATION | WB_SYSTEMCHILDWINDOW | WB_NEEDSFOCUS); 1843*cdf0e10cSrcweir if ( nTypeStyle & BORDERWINDOW_STYLE_APP ) 1844*cdf0e10cSrcweir nTestStyle |= WB_APP; 1845*cdf0e10cSrcweir nStyle &= nTestStyle; 1846*cdf0e10cSrcweir 1847*cdf0e10cSrcweir mpWindowImpl->mbBorderWin = sal_True; 1848*cdf0e10cSrcweir mbSmallOutBorder = sal_False; 1849*cdf0e10cSrcweir if ( nTypeStyle & BORDERWINDOW_STYLE_FRAME ) 1850*cdf0e10cSrcweir { 1851*cdf0e10cSrcweir if( (nStyle & WB_SYSTEMCHILDWINDOW) ) 1852*cdf0e10cSrcweir { 1853*cdf0e10cSrcweir mpWindowImpl->mbOverlapWin = sal_True; 1854*cdf0e10cSrcweir mpWindowImpl->mbFrame = sal_True; 1855*cdf0e10cSrcweir mbFrameBorder = sal_False; 1856*cdf0e10cSrcweir } 1857*cdf0e10cSrcweir else if( (nStyle & WB_OWNERDRAWDECORATION) ) 1858*cdf0e10cSrcweir { 1859*cdf0e10cSrcweir mpWindowImpl->mbOverlapWin = sal_True; 1860*cdf0e10cSrcweir mpWindowImpl->mbFrame = sal_True; 1861*cdf0e10cSrcweir mbFrameBorder = (nOrgStyle & WB_NOBORDER) ? sal_False : sal_True; 1862*cdf0e10cSrcweir } 1863*cdf0e10cSrcweir else 1864*cdf0e10cSrcweir { 1865*cdf0e10cSrcweir mpWindowImpl->mbOverlapWin = sal_True; 1866*cdf0e10cSrcweir mpWindowImpl->mbFrame = sal_True; 1867*cdf0e10cSrcweir mbFrameBorder = sal_False; 1868*cdf0e10cSrcweir // closeable windows may have a border as well, eg. system floating windows without caption 1869*cdf0e10cSrcweir if ( (nOrgStyle & (WB_BORDER | WB_NOBORDER | WB_MOVEABLE | WB_SIZEABLE/* | WB_CLOSEABLE*/)) == WB_BORDER ) 1870*cdf0e10cSrcweir mbSmallOutBorder = sal_True; 1871*cdf0e10cSrcweir } 1872*cdf0e10cSrcweir } 1873*cdf0e10cSrcweir else if ( nTypeStyle & BORDERWINDOW_STYLE_OVERLAP ) 1874*cdf0e10cSrcweir { 1875*cdf0e10cSrcweir mpWindowImpl->mbOverlapWin = sal_True; 1876*cdf0e10cSrcweir mbFrameBorder = sal_True; 1877*cdf0e10cSrcweir } 1878*cdf0e10cSrcweir else 1879*cdf0e10cSrcweir mbFrameBorder = sal_False; 1880*cdf0e10cSrcweir 1881*cdf0e10cSrcweir if ( nTypeStyle & BORDERWINDOW_STYLE_FLOAT ) 1882*cdf0e10cSrcweir mbFloatWindow = sal_True; 1883*cdf0e10cSrcweir else 1884*cdf0e10cSrcweir mbFloatWindow = sal_False; 1885*cdf0e10cSrcweir 1886*cdf0e10cSrcweir Window::ImplInit( pParent, nStyle, pSystemParentData ); 1887*cdf0e10cSrcweir SetBackground(); 1888*cdf0e10cSrcweir SetTextFillColor(); 1889*cdf0e10cSrcweir 1890*cdf0e10cSrcweir mpMenuBarWindow = NULL; 1891*cdf0e10cSrcweir mnMinWidth = 0; 1892*cdf0e10cSrcweir mnMinHeight = 0; 1893*cdf0e10cSrcweir mnMaxWidth = SHRT_MAX; 1894*cdf0e10cSrcweir mnMaxHeight = SHRT_MAX; 1895*cdf0e10cSrcweir mnRollHeight = 0; 1896*cdf0e10cSrcweir mnOrgMenuHeight = 0; 1897*cdf0e10cSrcweir mbPined = sal_False; 1898*cdf0e10cSrcweir mbRollUp = sal_False; 1899*cdf0e10cSrcweir mbMenuHide = sal_False; 1900*cdf0e10cSrcweir mbDockBtn = sal_False; 1901*cdf0e10cSrcweir mbMenuBtn = sal_False; 1902*cdf0e10cSrcweir mbHideBtn = sal_False; 1903*cdf0e10cSrcweir mbHelpBtn = sal_False; 1904*cdf0e10cSrcweir mbDisplayActive = IsActive(); 1905*cdf0e10cSrcweir 1906*cdf0e10cSrcweir if ( nTypeStyle & BORDERWINDOW_STYLE_FLOAT ) 1907*cdf0e10cSrcweir mnTitleType = BORDERWINDOW_TITLE_SMALL; 1908*cdf0e10cSrcweir else 1909*cdf0e10cSrcweir mnTitleType = BORDERWINDOW_TITLE_NORMAL; 1910*cdf0e10cSrcweir mnBorderStyle = WINDOW_BORDER_NORMAL; 1911*cdf0e10cSrcweir InitView(); 1912*cdf0e10cSrcweir } 1913*cdf0e10cSrcweir 1914*cdf0e10cSrcweir // ======================================================================= 1915*cdf0e10cSrcweir 1916*cdf0e10cSrcweir ImplBorderWindow::ImplBorderWindow( Window* pParent, 1917*cdf0e10cSrcweir SystemParentData* pSystemParentData, 1918*cdf0e10cSrcweir WinBits nStyle, sal_uInt16 nTypeStyle 1919*cdf0e10cSrcweir ) : Window( WINDOW_BORDERWINDOW ) 1920*cdf0e10cSrcweir { 1921*cdf0e10cSrcweir ImplInit( pParent, nStyle, nTypeStyle, pSystemParentData ); 1922*cdf0e10cSrcweir } 1923*cdf0e10cSrcweir 1924*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1925*cdf0e10cSrcweir 1926*cdf0e10cSrcweir ImplBorderWindow::ImplBorderWindow( Window* pParent, WinBits nStyle , 1927*cdf0e10cSrcweir sal_uInt16 nTypeStyle ) : 1928*cdf0e10cSrcweir Window( WINDOW_BORDERWINDOW ) 1929*cdf0e10cSrcweir { 1930*cdf0e10cSrcweir ImplInit( pParent, nStyle, nTypeStyle, ::com::sun::star::uno::Any() ); 1931*cdf0e10cSrcweir } 1932*cdf0e10cSrcweir 1933*cdf0e10cSrcweir ImplBorderWindow::ImplBorderWindow( Window* pParent, 1934*cdf0e10cSrcweir WinBits nStyle, sal_uInt16 nTypeStyle, 1935*cdf0e10cSrcweir const ::com::sun::star::uno::Any& aSystemToken ) : 1936*cdf0e10cSrcweir Window( WINDOW_BORDERWINDOW ) 1937*cdf0e10cSrcweir { 1938*cdf0e10cSrcweir ImplInit( pParent, nStyle, nTypeStyle, aSystemToken ); 1939*cdf0e10cSrcweir } 1940*cdf0e10cSrcweir 1941*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1942*cdf0e10cSrcweir 1943*cdf0e10cSrcweir ImplBorderWindow::~ImplBorderWindow() 1944*cdf0e10cSrcweir { 1945*cdf0e10cSrcweir delete mpBorderView; 1946*cdf0e10cSrcweir } 1947*cdf0e10cSrcweir 1948*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1949*cdf0e10cSrcweir 1950*cdf0e10cSrcweir void ImplBorderWindow::MouseMove( const MouseEvent& rMEvt ) 1951*cdf0e10cSrcweir { 1952*cdf0e10cSrcweir mpBorderView->MouseMove( rMEvt ); 1953*cdf0e10cSrcweir } 1954*cdf0e10cSrcweir 1955*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1956*cdf0e10cSrcweir 1957*cdf0e10cSrcweir void ImplBorderWindow::MouseButtonDown( const MouseEvent& rMEvt ) 1958*cdf0e10cSrcweir { 1959*cdf0e10cSrcweir mpBorderView->MouseButtonDown( rMEvt ); 1960*cdf0e10cSrcweir } 1961*cdf0e10cSrcweir 1962*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1963*cdf0e10cSrcweir 1964*cdf0e10cSrcweir void ImplBorderWindow::Tracking( const TrackingEvent& rTEvt ) 1965*cdf0e10cSrcweir { 1966*cdf0e10cSrcweir mpBorderView->Tracking( rTEvt ); 1967*cdf0e10cSrcweir } 1968*cdf0e10cSrcweir 1969*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1970*cdf0e10cSrcweir 1971*cdf0e10cSrcweir void ImplBorderWindow::Paint( const Rectangle& ) 1972*cdf0e10cSrcweir { 1973*cdf0e10cSrcweir mpBorderView->DrawWindow( BORDERWINDOW_DRAW_ALL ); 1974*cdf0e10cSrcweir } 1975*cdf0e10cSrcweir 1976*cdf0e10cSrcweir void ImplBorderWindow::Draw( const Rectangle&, OutputDevice* pOutDev, const Point& rPos ) 1977*cdf0e10cSrcweir { 1978*cdf0e10cSrcweir mpBorderView->DrawWindow( BORDERWINDOW_DRAW_ALL, pOutDev, &rPos ); 1979*cdf0e10cSrcweir } 1980*cdf0e10cSrcweir 1981*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1982*cdf0e10cSrcweir 1983*cdf0e10cSrcweir void ImplBorderWindow::Activate() 1984*cdf0e10cSrcweir { 1985*cdf0e10cSrcweir SetDisplayActive( sal_True ); 1986*cdf0e10cSrcweir Window::Activate(); 1987*cdf0e10cSrcweir } 1988*cdf0e10cSrcweir 1989*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1990*cdf0e10cSrcweir 1991*cdf0e10cSrcweir void ImplBorderWindow::Deactivate() 1992*cdf0e10cSrcweir { 1993*cdf0e10cSrcweir // Fenster die immer Active sind, nehmen wir von dieser Regel aus, 1994*cdf0e10cSrcweir // genauso, wenn ein Menu aktiv wird, ignorieren wir das Deactivate 1995*cdf0e10cSrcweir if ( GetActivateMode() && !ImplGetSVData()->maWinData.mbNoDeactivate ) 1996*cdf0e10cSrcweir SetDisplayActive( sal_False ); 1997*cdf0e10cSrcweir Window::Deactivate(); 1998*cdf0e10cSrcweir } 1999*cdf0e10cSrcweir 2000*cdf0e10cSrcweir // ----------------------------------------------------------------------- 2001*cdf0e10cSrcweir 2002*cdf0e10cSrcweir void ImplBorderWindow::RequestHelp( const HelpEvent& rHEvt ) 2003*cdf0e10cSrcweir { 2004*cdf0e10cSrcweir // no keyboard help for border win 2005*cdf0e10cSrcweir if ( rHEvt.GetMode() & (HELPMODE_BALLOON | HELPMODE_QUICK) && !rHEvt.KeyboardActivated() ) 2006*cdf0e10cSrcweir { 2007*cdf0e10cSrcweir Point aMousePosPixel = ScreenToOutputPixel( rHEvt.GetMousePosPixel() ); 2008*cdf0e10cSrcweir Rectangle aHelpRect; 2009*cdf0e10cSrcweir String aHelpStr( mpBorderView->RequestHelp( aMousePosPixel, aHelpRect ) ); 2010*cdf0e10cSrcweir 2011*cdf0e10cSrcweir // Rechteck ermitteln 2012*cdf0e10cSrcweir if ( aHelpStr.Len() ) 2013*cdf0e10cSrcweir { 2014*cdf0e10cSrcweir aHelpRect.SetPos( OutputToScreenPixel( aHelpRect.TopLeft() ) ); 2015*cdf0e10cSrcweir if ( rHEvt.GetMode() & HELPMODE_BALLOON ) 2016*cdf0e10cSrcweir Help::ShowBalloon( this, aHelpRect.Center(), aHelpRect, aHelpStr ); 2017*cdf0e10cSrcweir else 2018*cdf0e10cSrcweir Help::ShowQuickHelp( this, aHelpRect, aHelpStr ); 2019*cdf0e10cSrcweir return; 2020*cdf0e10cSrcweir } 2021*cdf0e10cSrcweir } 2022*cdf0e10cSrcweir 2023*cdf0e10cSrcweir Window::RequestHelp( rHEvt ); 2024*cdf0e10cSrcweir } 2025*cdf0e10cSrcweir 2026*cdf0e10cSrcweir // ----------------------------------------------------------------------- 2027*cdf0e10cSrcweir 2028*cdf0e10cSrcweir void ImplBorderWindow::Resize() 2029*cdf0e10cSrcweir { 2030*cdf0e10cSrcweir Size aSize = GetOutputSizePixel(); 2031*cdf0e10cSrcweir 2032*cdf0e10cSrcweir if ( !mbRollUp ) 2033*cdf0e10cSrcweir { 2034*cdf0e10cSrcweir Window* pClientWindow = ImplGetClientWindow(); 2035*cdf0e10cSrcweir 2036*cdf0e10cSrcweir if ( mpMenuBarWindow ) 2037*cdf0e10cSrcweir { 2038*cdf0e10cSrcweir sal_Int32 nLeftBorder; 2039*cdf0e10cSrcweir sal_Int32 nTopBorder; 2040*cdf0e10cSrcweir sal_Int32 nRightBorder; 2041*cdf0e10cSrcweir sal_Int32 nBottomBorder; 2042*cdf0e10cSrcweir long nMenuHeight = mpMenuBarWindow->GetSizePixel().Height(); 2043*cdf0e10cSrcweir if ( mbMenuHide ) 2044*cdf0e10cSrcweir { 2045*cdf0e10cSrcweir if ( nMenuHeight ) 2046*cdf0e10cSrcweir mnOrgMenuHeight = nMenuHeight; 2047*cdf0e10cSrcweir nMenuHeight = 0; 2048*cdf0e10cSrcweir } 2049*cdf0e10cSrcweir else 2050*cdf0e10cSrcweir { 2051*cdf0e10cSrcweir if ( !nMenuHeight ) 2052*cdf0e10cSrcweir nMenuHeight = mnOrgMenuHeight; 2053*cdf0e10cSrcweir } 2054*cdf0e10cSrcweir mpBorderView->GetBorder( nLeftBorder, nTopBorder, nRightBorder, nBottomBorder ); 2055*cdf0e10cSrcweir mpMenuBarWindow->SetPosSizePixel( nLeftBorder, 2056*cdf0e10cSrcweir nTopBorder, 2057*cdf0e10cSrcweir aSize.Width()-nLeftBorder-nRightBorder, 2058*cdf0e10cSrcweir nMenuHeight, 2059*cdf0e10cSrcweir WINDOW_POSSIZE_POS | 2060*cdf0e10cSrcweir WINDOW_POSSIZE_WIDTH | WINDOW_POSSIZE_HEIGHT ); 2061*cdf0e10cSrcweir } 2062*cdf0e10cSrcweir 2063*cdf0e10cSrcweir GetBorder( pClientWindow->mpWindowImpl->mnLeftBorder, pClientWindow->mpWindowImpl->mnTopBorder, 2064*cdf0e10cSrcweir pClientWindow->mpWindowImpl->mnRightBorder, pClientWindow->mpWindowImpl->mnBottomBorder ); 2065*cdf0e10cSrcweir pClientWindow->ImplPosSizeWindow( pClientWindow->mpWindowImpl->mnLeftBorder, 2066*cdf0e10cSrcweir pClientWindow->mpWindowImpl->mnTopBorder, 2067*cdf0e10cSrcweir aSize.Width()-pClientWindow->mpWindowImpl->mnLeftBorder-pClientWindow->mpWindowImpl->mnRightBorder, 2068*cdf0e10cSrcweir aSize.Height()-pClientWindow->mpWindowImpl->mnTopBorder-pClientWindow->mpWindowImpl->mnBottomBorder, 2069*cdf0e10cSrcweir WINDOW_POSSIZE_X | WINDOW_POSSIZE_Y | 2070*cdf0e10cSrcweir WINDOW_POSSIZE_WIDTH | WINDOW_POSSIZE_HEIGHT ); 2071*cdf0e10cSrcweir } 2072*cdf0e10cSrcweir 2073*cdf0e10cSrcweir // UpdateView 2074*cdf0e10cSrcweir mpBorderView->Init( this, aSize.Width(), aSize.Height() ); 2075*cdf0e10cSrcweir InvalidateBorder(); 2076*cdf0e10cSrcweir 2077*cdf0e10cSrcweir Window::Resize(); 2078*cdf0e10cSrcweir } 2079*cdf0e10cSrcweir 2080*cdf0e10cSrcweir // ----------------------------------------------------------------------- 2081*cdf0e10cSrcweir 2082*cdf0e10cSrcweir void ImplBorderWindow::StateChanged( StateChangedType nType ) 2083*cdf0e10cSrcweir { 2084*cdf0e10cSrcweir if ( (nType == STATE_CHANGE_TEXT) || 2085*cdf0e10cSrcweir (nType == STATE_CHANGE_IMAGE) || 2086*cdf0e10cSrcweir (nType == STATE_CHANGE_DATA) ) 2087*cdf0e10cSrcweir { 2088*cdf0e10cSrcweir if ( IsReallyVisible() && mbFrameBorder ) 2089*cdf0e10cSrcweir { 2090*cdf0e10cSrcweir if ( HasPaintEvent() ) 2091*cdf0e10cSrcweir InvalidateBorder(); 2092*cdf0e10cSrcweir else 2093*cdf0e10cSrcweir mpBorderView->DrawWindow( BORDERWINDOW_DRAW_TITLE ); 2094*cdf0e10cSrcweir } 2095*cdf0e10cSrcweir } 2096*cdf0e10cSrcweir 2097*cdf0e10cSrcweir Window::StateChanged( nType ); 2098*cdf0e10cSrcweir } 2099*cdf0e10cSrcweir 2100*cdf0e10cSrcweir // ----------------------------------------------------------------------- 2101*cdf0e10cSrcweir 2102*cdf0e10cSrcweir void ImplBorderWindow::DataChanged( const DataChangedEvent& rDCEvt ) 2103*cdf0e10cSrcweir { 2104*cdf0e10cSrcweir if ( (rDCEvt.GetType() == DATACHANGED_FONTS) || 2105*cdf0e10cSrcweir (rDCEvt.GetType() == DATACHANGED_FONTSUBSTITUTION) || 2106*cdf0e10cSrcweir ((rDCEvt.GetType() == DATACHANGED_SETTINGS) && 2107*cdf0e10cSrcweir (rDCEvt.GetFlags() & SETTINGS_STYLE)) ) 2108*cdf0e10cSrcweir { 2109*cdf0e10cSrcweir if ( !mpWindowImpl->mbFrame || (GetStyle() & WB_OWNERDRAWDECORATION) ) 2110*cdf0e10cSrcweir UpdateView( sal_True, ImplGetWindow()->GetOutputSizePixel() ); 2111*cdf0e10cSrcweir } 2112*cdf0e10cSrcweir 2113*cdf0e10cSrcweir Window::DataChanged( rDCEvt ); 2114*cdf0e10cSrcweir } 2115*cdf0e10cSrcweir 2116*cdf0e10cSrcweir // ----------------------------------------------------------------------- 2117*cdf0e10cSrcweir 2118*cdf0e10cSrcweir void ImplBorderWindow::InitView() 2119*cdf0e10cSrcweir { 2120*cdf0e10cSrcweir if ( mbSmallOutBorder ) 2121*cdf0e10cSrcweir mpBorderView = new ImplSmallBorderWindowView( this ); 2122*cdf0e10cSrcweir else if ( mpWindowImpl->mbFrame ) 2123*cdf0e10cSrcweir { 2124*cdf0e10cSrcweir if( mbFrameBorder ) 2125*cdf0e10cSrcweir mpBorderView = new ImplStdBorderWindowView( this ); 2126*cdf0e10cSrcweir else 2127*cdf0e10cSrcweir mpBorderView = new ImplNoBorderWindowView( this ); 2128*cdf0e10cSrcweir } 2129*cdf0e10cSrcweir else if ( !mbFrameBorder ) 2130*cdf0e10cSrcweir mpBorderView = new ImplSmallBorderWindowView( this ); 2131*cdf0e10cSrcweir else 2132*cdf0e10cSrcweir mpBorderView = new ImplStdBorderWindowView( this ); 2133*cdf0e10cSrcweir Size aSize = GetOutputSizePixel(); 2134*cdf0e10cSrcweir mpBorderView->Init( this, aSize.Width(), aSize.Height() ); 2135*cdf0e10cSrcweir } 2136*cdf0e10cSrcweir 2137*cdf0e10cSrcweir // ----------------------------------------------------------------------- 2138*cdf0e10cSrcweir 2139*cdf0e10cSrcweir void ImplBorderWindow::UpdateView( sal_Bool bNewView, const Size& rNewOutSize ) 2140*cdf0e10cSrcweir { 2141*cdf0e10cSrcweir sal_Int32 nLeftBorder; 2142*cdf0e10cSrcweir sal_Int32 nTopBorder; 2143*cdf0e10cSrcweir sal_Int32 nRightBorder; 2144*cdf0e10cSrcweir sal_Int32 nBottomBorder; 2145*cdf0e10cSrcweir Size aOldSize = GetSizePixel(); 2146*cdf0e10cSrcweir Size aOutputSize = rNewOutSize; 2147*cdf0e10cSrcweir 2148*cdf0e10cSrcweir if ( bNewView ) 2149*cdf0e10cSrcweir { 2150*cdf0e10cSrcweir delete mpBorderView; 2151*cdf0e10cSrcweir InitView(); 2152*cdf0e10cSrcweir } 2153*cdf0e10cSrcweir else 2154*cdf0e10cSrcweir { 2155*cdf0e10cSrcweir Size aSize = aOutputSize; 2156*cdf0e10cSrcweir mpBorderView->GetBorder( nLeftBorder, nTopBorder, nRightBorder, nBottomBorder ); 2157*cdf0e10cSrcweir aSize.Width() += nLeftBorder+nRightBorder; 2158*cdf0e10cSrcweir aSize.Height() += nTopBorder+nBottomBorder; 2159*cdf0e10cSrcweir mpBorderView->Init( this, aSize.Width(), aSize.Height() ); 2160*cdf0e10cSrcweir } 2161*cdf0e10cSrcweir 2162*cdf0e10cSrcweir Window* pClientWindow = ImplGetClientWindow(); 2163*cdf0e10cSrcweir if ( pClientWindow ) 2164*cdf0e10cSrcweir { 2165*cdf0e10cSrcweir GetBorder( pClientWindow->mpWindowImpl->mnLeftBorder, pClientWindow->mpWindowImpl->mnTopBorder, 2166*cdf0e10cSrcweir pClientWindow->mpWindowImpl->mnRightBorder, pClientWindow->mpWindowImpl->mnBottomBorder ); 2167*cdf0e10cSrcweir } 2168*cdf0e10cSrcweir GetBorder( nLeftBorder, nTopBorder, nRightBorder, nBottomBorder ); 2169*cdf0e10cSrcweir if ( aOldSize.Width() || aOldSize.Height() ) 2170*cdf0e10cSrcweir { 2171*cdf0e10cSrcweir aOutputSize.Width() += nLeftBorder+nRightBorder; 2172*cdf0e10cSrcweir aOutputSize.Height() += nTopBorder+nBottomBorder; 2173*cdf0e10cSrcweir if ( aOutputSize == GetSizePixel() ) 2174*cdf0e10cSrcweir InvalidateBorder(); 2175*cdf0e10cSrcweir else 2176*cdf0e10cSrcweir SetSizePixel( aOutputSize ); 2177*cdf0e10cSrcweir } 2178*cdf0e10cSrcweir } 2179*cdf0e10cSrcweir 2180*cdf0e10cSrcweir // ----------------------------------------------------------------------- 2181*cdf0e10cSrcweir 2182*cdf0e10cSrcweir void ImplBorderWindow::InvalidateBorder() 2183*cdf0e10cSrcweir { 2184*cdf0e10cSrcweir if ( IsReallyVisible() ) 2185*cdf0e10cSrcweir { 2186*cdf0e10cSrcweir // Nur wenn wir einen Border haben, muessen wir auch invalidieren 2187*cdf0e10cSrcweir sal_Int32 nLeftBorder; 2188*cdf0e10cSrcweir sal_Int32 nTopBorder; 2189*cdf0e10cSrcweir sal_Int32 nRightBorder; 2190*cdf0e10cSrcweir sal_Int32 nBottomBorder; 2191*cdf0e10cSrcweir mpBorderView->GetBorder( nLeftBorder, nTopBorder, nRightBorder, nBottomBorder ); 2192*cdf0e10cSrcweir if ( nLeftBorder || nTopBorder || nRightBorder || nBottomBorder ) 2193*cdf0e10cSrcweir { 2194*cdf0e10cSrcweir Rectangle aWinRect( Point( 0, 0 ), GetOutputSizePixel() ); 2195*cdf0e10cSrcweir Region aRegion( aWinRect ); 2196*cdf0e10cSrcweir aWinRect.Left() += nLeftBorder; 2197*cdf0e10cSrcweir aWinRect.Top() += nTopBorder; 2198*cdf0e10cSrcweir aWinRect.Right() -= nRightBorder; 2199*cdf0e10cSrcweir aWinRect.Bottom() -= nBottomBorder; 2200*cdf0e10cSrcweir // kein Output-Bereich mehr, dann alles invalidieren 2201*cdf0e10cSrcweir if ( (aWinRect.Right() < aWinRect.Left()) || 2202*cdf0e10cSrcweir (aWinRect.Bottom() < aWinRect.Top()) ) 2203*cdf0e10cSrcweir Invalidate( INVALIDATE_NOCHILDREN ); 2204*cdf0e10cSrcweir else 2205*cdf0e10cSrcweir { 2206*cdf0e10cSrcweir aRegion.Exclude( aWinRect ); 2207*cdf0e10cSrcweir Invalidate( aRegion, INVALIDATE_NOCHILDREN ); 2208*cdf0e10cSrcweir } 2209*cdf0e10cSrcweir } 2210*cdf0e10cSrcweir } 2211*cdf0e10cSrcweir } 2212*cdf0e10cSrcweir 2213*cdf0e10cSrcweir // ----------------------------------------------------------------------- 2214*cdf0e10cSrcweir 2215*cdf0e10cSrcweir void ImplBorderWindow::SetDisplayActive( sal_Bool bActive ) 2216*cdf0e10cSrcweir { 2217*cdf0e10cSrcweir if ( mbDisplayActive != bActive ) 2218*cdf0e10cSrcweir { 2219*cdf0e10cSrcweir mbDisplayActive = bActive; 2220*cdf0e10cSrcweir if ( mbFrameBorder ) 2221*cdf0e10cSrcweir InvalidateBorder(); 2222*cdf0e10cSrcweir } 2223*cdf0e10cSrcweir } 2224*cdf0e10cSrcweir 2225*cdf0e10cSrcweir // ----------------------------------------------------------------------- 2226*cdf0e10cSrcweir 2227*cdf0e10cSrcweir void ImplBorderWindow::SetTitleType( sal_uInt16 nTitleType, const Size& rSize ) 2228*cdf0e10cSrcweir { 2229*cdf0e10cSrcweir mnTitleType = nTitleType; 2230*cdf0e10cSrcweir UpdateView( sal_False, rSize ); 2231*cdf0e10cSrcweir } 2232*cdf0e10cSrcweir 2233*cdf0e10cSrcweir // ----------------------------------------------------------------------- 2234*cdf0e10cSrcweir 2235*cdf0e10cSrcweir void ImplBorderWindow::SetBorderStyle( sal_uInt16 nStyle ) 2236*cdf0e10cSrcweir { 2237*cdf0e10cSrcweir if ( !mbFrameBorder && (mnBorderStyle != nStyle) ) 2238*cdf0e10cSrcweir { 2239*cdf0e10cSrcweir mnBorderStyle = nStyle; 2240*cdf0e10cSrcweir UpdateView( sal_False, ImplGetWindow()->GetOutputSizePixel() ); 2241*cdf0e10cSrcweir } 2242*cdf0e10cSrcweir } 2243*cdf0e10cSrcweir 2244*cdf0e10cSrcweir // ----------------------------------------------------------------------- 2245*cdf0e10cSrcweir 2246*cdf0e10cSrcweir void ImplBorderWindow::SetPin( sal_Bool bPin ) 2247*cdf0e10cSrcweir { 2248*cdf0e10cSrcweir mbPined = bPin; 2249*cdf0e10cSrcweir InvalidateBorder(); 2250*cdf0e10cSrcweir } 2251*cdf0e10cSrcweir 2252*cdf0e10cSrcweir // ----------------------------------------------------------------------- 2253*cdf0e10cSrcweir 2254*cdf0e10cSrcweir void ImplBorderWindow::SetRollUp( sal_Bool bRollUp, const Size& rSize ) 2255*cdf0e10cSrcweir { 2256*cdf0e10cSrcweir mbRollUp = bRollUp; 2257*cdf0e10cSrcweir mnRollHeight = rSize.Height(); 2258*cdf0e10cSrcweir UpdateView( sal_False, rSize ); 2259*cdf0e10cSrcweir } 2260*cdf0e10cSrcweir 2261*cdf0e10cSrcweir // ----------------------------------------------------------------------- 2262*cdf0e10cSrcweir 2263*cdf0e10cSrcweir void ImplBorderWindow::SetCloser() 2264*cdf0e10cSrcweir { 2265*cdf0e10cSrcweir SetStyle( GetStyle() | WB_CLOSEABLE ); 2266*cdf0e10cSrcweir Size aSize = GetOutputSizePixel(); 2267*cdf0e10cSrcweir mpBorderView->Init( this, aSize.Width(), aSize.Height() ); 2268*cdf0e10cSrcweir InvalidateBorder(); 2269*cdf0e10cSrcweir } 2270*cdf0e10cSrcweir 2271*cdf0e10cSrcweir // ----------------------------------------------------------------------- 2272*cdf0e10cSrcweir 2273*cdf0e10cSrcweir void ImplBorderWindow::SetDockButton( sal_Bool bDockButton ) 2274*cdf0e10cSrcweir { 2275*cdf0e10cSrcweir mbDockBtn = bDockButton; 2276*cdf0e10cSrcweir Size aSize = GetOutputSizePixel(); 2277*cdf0e10cSrcweir mpBorderView->Init( this, aSize.Width(), aSize.Height() ); 2278*cdf0e10cSrcweir InvalidateBorder(); 2279*cdf0e10cSrcweir } 2280*cdf0e10cSrcweir 2281*cdf0e10cSrcweir // ----------------------------------------------------------------------- 2282*cdf0e10cSrcweir 2283*cdf0e10cSrcweir void ImplBorderWindow::SetHideButton( sal_Bool bHideButton ) 2284*cdf0e10cSrcweir { 2285*cdf0e10cSrcweir mbHideBtn = bHideButton; 2286*cdf0e10cSrcweir Size aSize = GetOutputSizePixel(); 2287*cdf0e10cSrcweir mpBorderView->Init( this, aSize.Width(), aSize.Height() ); 2288*cdf0e10cSrcweir InvalidateBorder(); 2289*cdf0e10cSrcweir } 2290*cdf0e10cSrcweir 2291*cdf0e10cSrcweir // ----------------------------------------------------------------------- 2292*cdf0e10cSrcweir 2293*cdf0e10cSrcweir void ImplBorderWindow::SetHelpButton( sal_Bool bHelpButton ) 2294*cdf0e10cSrcweir { 2295*cdf0e10cSrcweir mbHelpBtn = bHelpButton; 2296*cdf0e10cSrcweir Size aSize = GetOutputSizePixel(); 2297*cdf0e10cSrcweir mpBorderView->Init( this, aSize.Width(), aSize.Height() ); 2298*cdf0e10cSrcweir InvalidateBorder(); 2299*cdf0e10cSrcweir } 2300*cdf0e10cSrcweir 2301*cdf0e10cSrcweir // ----------------------------------------------------------------------- 2302*cdf0e10cSrcweir 2303*cdf0e10cSrcweir void ImplBorderWindow::SetMenuButton( sal_Bool bMenuButton ) 2304*cdf0e10cSrcweir { 2305*cdf0e10cSrcweir mbMenuBtn = bMenuButton; 2306*cdf0e10cSrcweir Size aSize = GetOutputSizePixel(); 2307*cdf0e10cSrcweir mpBorderView->Init( this, aSize.Width(), aSize.Height() ); 2308*cdf0e10cSrcweir InvalidateBorder(); 2309*cdf0e10cSrcweir } 2310*cdf0e10cSrcweir 2311*cdf0e10cSrcweir // ----------------------------------------------------------------------- 2312*cdf0e10cSrcweir 2313*cdf0e10cSrcweir void ImplBorderWindow::UpdateMenuHeight() 2314*cdf0e10cSrcweir { 2315*cdf0e10cSrcweir Resize(); 2316*cdf0e10cSrcweir } 2317*cdf0e10cSrcweir 2318*cdf0e10cSrcweir // ----------------------------------------------------------------------- 2319*cdf0e10cSrcweir 2320*cdf0e10cSrcweir void ImplBorderWindow::SetMenuBarWindow( Window* pWindow ) 2321*cdf0e10cSrcweir { 2322*cdf0e10cSrcweir mpMenuBarWindow = pWindow; 2323*cdf0e10cSrcweir UpdateMenuHeight(); 2324*cdf0e10cSrcweir if ( pWindow ) 2325*cdf0e10cSrcweir pWindow->Show(); 2326*cdf0e10cSrcweir } 2327*cdf0e10cSrcweir 2328*cdf0e10cSrcweir // ----------------------------------------------------------------------- 2329*cdf0e10cSrcweir 2330*cdf0e10cSrcweir void ImplBorderWindow::SetMenuBarMode( sal_Bool bHide ) 2331*cdf0e10cSrcweir { 2332*cdf0e10cSrcweir mbMenuHide = bHide; 2333*cdf0e10cSrcweir UpdateMenuHeight(); 2334*cdf0e10cSrcweir } 2335*cdf0e10cSrcweir 2336*cdf0e10cSrcweir // ----------------------------------------------------------------------- 2337*cdf0e10cSrcweir 2338*cdf0e10cSrcweir void ImplBorderWindow::GetBorder( sal_Int32& rLeftBorder, sal_Int32& rTopBorder, 2339*cdf0e10cSrcweir sal_Int32& rRightBorder, sal_Int32& rBottomBorder ) const 2340*cdf0e10cSrcweir { 2341*cdf0e10cSrcweir mpBorderView->GetBorder( rLeftBorder, rTopBorder, rRightBorder, rBottomBorder ); 2342*cdf0e10cSrcweir if ( mpMenuBarWindow && !mbMenuHide ) 2343*cdf0e10cSrcweir rTopBorder += mpMenuBarWindow->GetSizePixel().Height(); 2344*cdf0e10cSrcweir } 2345*cdf0e10cSrcweir 2346*cdf0e10cSrcweir // ----------------------------------------------------------------------- 2347*cdf0e10cSrcweir 2348*cdf0e10cSrcweir long ImplBorderWindow::CalcTitleWidth() const 2349*cdf0e10cSrcweir { 2350*cdf0e10cSrcweir return mpBorderView->CalcTitleWidth(); 2351*cdf0e10cSrcweir } 2352*cdf0e10cSrcweir 2353*cdf0e10cSrcweir Rectangle ImplBorderWindow::GetMenuRect() const 2354*cdf0e10cSrcweir { 2355*cdf0e10cSrcweir return mpBorderView->GetMenuRect(); 2356*cdf0e10cSrcweir } 2357