1*9f62ea84SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*9f62ea84SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*9f62ea84SAndrew Rist * or more contributor license agreements. See the NOTICE file 5*9f62ea84SAndrew Rist * distributed with this work for additional information 6*9f62ea84SAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*9f62ea84SAndrew Rist * to you under the Apache License, Version 2.0 (the 8*9f62ea84SAndrew Rist * "License"); you may not use this file except in compliance 9*9f62ea84SAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 11*9f62ea84SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 13*9f62ea84SAndrew Rist * Unless required by applicable law or agreed to in writing, 14*9f62ea84SAndrew Rist * software distributed under the License is distributed on an 15*9f62ea84SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*9f62ea84SAndrew Rist * KIND, either express or implied. See the License for the 17*9f62ea84SAndrew Rist * specific language governing permissions and limitations 18*9f62ea84SAndrew Rist * under the License. 19cdf0e10cSrcweir * 20*9f62ea84SAndrew Rist *************************************************************/ 21*9f62ea84SAndrew Rist 22*9f62ea84SAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25cdf0e10cSrcweir #include "precompiled_vcl.hxx" 26cdf0e10cSrcweir 27cdf0e10cSrcweir #ifndef _SV_RC_H 28cdf0e10cSrcweir #include <tools/rc.h> 29cdf0e10cSrcweir #endif 30cdf0e10cSrcweir #include <vcl/event.hxx> 31cdf0e10cSrcweir #include <vcl/fixbrd.hxx> 32cdf0e10cSrcweir 33cdf0e10cSrcweir 34cdf0e10cSrcweir 35cdf0e10cSrcweir // ======================================================================= 36cdf0e10cSrcweir 37cdf0e10cSrcweir void FixedBorder::ImplInit( Window* pParent, WinBits nStyle ) 38cdf0e10cSrcweir { 39cdf0e10cSrcweir mnType = FIXEDBORDER_TYPE_DOUBLEOUT; 40cdf0e10cSrcweir mbTransparent = sal_True; 41cdf0e10cSrcweir 42cdf0e10cSrcweir nStyle = ImplInitStyle( nStyle ); 43cdf0e10cSrcweir Control::ImplInit( pParent, nStyle, NULL ); 44cdf0e10cSrcweir ImplInitSettings(); 45cdf0e10cSrcweir } 46cdf0e10cSrcweir 47cdf0e10cSrcweir // ----------------------------------------------------------------------- 48cdf0e10cSrcweir 49cdf0e10cSrcweir WinBits FixedBorder::ImplInitStyle( WinBits nStyle ) 50cdf0e10cSrcweir { 51cdf0e10cSrcweir if ( !(nStyle & WB_NOGROUP) ) 52cdf0e10cSrcweir nStyle |= WB_GROUP; 53cdf0e10cSrcweir return nStyle; 54cdf0e10cSrcweir } 55cdf0e10cSrcweir 56cdf0e10cSrcweir // ----------------------------------------------------------------------- 57cdf0e10cSrcweir 58cdf0e10cSrcweir void FixedBorder::ImplInitSettings() 59cdf0e10cSrcweir { 60cdf0e10cSrcweir Window* pParent = GetParent(); 61cdf0e10cSrcweir if ( (pParent->IsChildTransparentModeEnabled() || 62cdf0e10cSrcweir !(pParent->GetStyle() & WB_CLIPCHILDREN) ) && 63cdf0e10cSrcweir !IsControlBackground() && mbTransparent ) 64cdf0e10cSrcweir { 65cdf0e10cSrcweir SetMouseTransparent( sal_True ); 66cdf0e10cSrcweir EnableChildTransparentMode( sal_True ); 67cdf0e10cSrcweir SetParentClipMode( PARENTCLIPMODE_NOCLIP ); 68cdf0e10cSrcweir SetPaintTransparent( sal_True ); 69cdf0e10cSrcweir SetBackground(); 70cdf0e10cSrcweir } 71cdf0e10cSrcweir else 72cdf0e10cSrcweir { 73cdf0e10cSrcweir SetMouseTransparent( sal_False ); 74cdf0e10cSrcweir EnableChildTransparentMode( sal_False ); 75cdf0e10cSrcweir SetParentClipMode( 0 ); 76cdf0e10cSrcweir SetPaintTransparent( sal_False ); 77cdf0e10cSrcweir 78cdf0e10cSrcweir if ( IsControlBackground() ) 79cdf0e10cSrcweir SetBackground( GetControlBackground() ); 80cdf0e10cSrcweir else 81cdf0e10cSrcweir SetBackground( pParent->GetBackground() ); 82cdf0e10cSrcweir } 83cdf0e10cSrcweir } 84cdf0e10cSrcweir 85cdf0e10cSrcweir // ----------------------------------------------------------------------- 86cdf0e10cSrcweir 87cdf0e10cSrcweir FixedBorder::FixedBorder( Window* pParent, WinBits nStyle ) : 88cdf0e10cSrcweir Control( WINDOW_FIXEDBORDER ) 89cdf0e10cSrcweir { 90cdf0e10cSrcweir ImplInit( pParent, nStyle ); 91cdf0e10cSrcweir } 92cdf0e10cSrcweir 93cdf0e10cSrcweir // ----------------------------------------------------------------------- 94cdf0e10cSrcweir 95cdf0e10cSrcweir FixedBorder::FixedBorder( Window* pParent, const ResId& rResId ) : 96cdf0e10cSrcweir Control( WINDOW_FIXEDBORDER ) 97cdf0e10cSrcweir { 98cdf0e10cSrcweir rResId.SetRT( RSC_CONTROL ); 99cdf0e10cSrcweir WinBits nStyle = ImplInitRes( rResId ); 100cdf0e10cSrcweir ImplInit( pParent, nStyle ); 101cdf0e10cSrcweir ImplLoadRes( rResId ); 102cdf0e10cSrcweir 103cdf0e10cSrcweir if ( !(nStyle & WB_HIDE) ) 104cdf0e10cSrcweir Show(); 105cdf0e10cSrcweir } 106cdf0e10cSrcweir 107cdf0e10cSrcweir // ----------------------------------------------------------------------- 108cdf0e10cSrcweir 109cdf0e10cSrcweir FixedBorder::~FixedBorder() 110cdf0e10cSrcweir { 111cdf0e10cSrcweir } 112cdf0e10cSrcweir 113cdf0e10cSrcweir // ----------------------------------------------------------------------- 114cdf0e10cSrcweir 115cdf0e10cSrcweir void FixedBorder::ImplDraw( OutputDevice* pDev, sal_uLong nDrawFlags, 116cdf0e10cSrcweir const Point& rPos, const Size& rSize ) 117cdf0e10cSrcweir { 118cdf0e10cSrcweir const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings(); 119cdf0e10cSrcweir Rectangle aRect( rPos, rSize ); 120cdf0e10cSrcweir sal_uInt16 nBorderStyle = mnType; 121cdf0e10cSrcweir 122cdf0e10cSrcweir if ( (nDrawFlags & WINDOW_DRAW_MONO) || 123cdf0e10cSrcweir (rStyleSettings.GetOptions() & STYLE_OPTION_MONO) ) 124cdf0e10cSrcweir nBorderStyle |= FRAME_DRAW_MONO; 125cdf0e10cSrcweir 126cdf0e10cSrcweir /* 127cdf0e10cSrcweir // seems only to be used in tools->options around a tabpage (ie, no tabcontrol!) 128cdf0e10cSrcweir // as tabpages that are not embedded in a tabcontrol should not be drawn natively 129cdf0e10cSrcweir // the fixedborder must also not be drawn (reason was, that it looks too ugly, dialogs must be redesigned) 130cdf0e10cSrcweir Window *pWin = pDev->GetOutDevType() == OUTDEV_WINDOW ? (Window*) pDev : NULL; 131cdf0e10cSrcweir if( !(nBorderStyle & FRAME_DRAW_MONO) && pWin && pWin->IsNativeControlSupported( CTRL_FIXEDBORDER, PART_ENTIRE_CONTROL ) ) 132cdf0e10cSrcweir { 133cdf0e10cSrcweir ImplControlValue aControlValue; 134cdf0e10cSrcweir Point aPt; 135cdf0e10cSrcweir Region aCtrlRegion( Rectangle( aPt, GetOutputSizePixel() ) ); 136cdf0e10cSrcweir ControlState nState = IsEnabled() ? CTRL_STATE_ENABLED : 0; 137cdf0e10cSrcweir pWin->DrawNativeControl( CTRL_FIXEDBORDER, PART_ENTIRE_CONTROL, aCtrlRegion, nState, 138cdf0e10cSrcweir aControlValue, rtl::OUString() ); 139cdf0e10cSrcweir } 140cdf0e10cSrcweir else 141cdf0e10cSrcweir */ 142cdf0e10cSrcweir { 143cdf0e10cSrcweir DecorationView aDecoView( pDev ); 144cdf0e10cSrcweir aDecoView.DrawFrame( aRect, nBorderStyle ); 145cdf0e10cSrcweir } 146cdf0e10cSrcweir } 147cdf0e10cSrcweir 148cdf0e10cSrcweir // ----------------------------------------------------------------------- 149cdf0e10cSrcweir 150cdf0e10cSrcweir void FixedBorder::Paint( const Rectangle& ) 151cdf0e10cSrcweir { 152cdf0e10cSrcweir ImplDraw( this, 0, Point(), GetOutputSizePixel() ); 153cdf0e10cSrcweir } 154cdf0e10cSrcweir 155cdf0e10cSrcweir // ----------------------------------------------------------------------- 156cdf0e10cSrcweir 157cdf0e10cSrcweir void FixedBorder::Draw( OutputDevice* pDev, const Point& rPos, const Size& rSize, 158cdf0e10cSrcweir sal_uLong nFlags ) 159cdf0e10cSrcweir { 160cdf0e10cSrcweir Point aPos = pDev->LogicToPixel( rPos ); 161cdf0e10cSrcweir Size aSize = pDev->LogicToPixel( rSize ); 162cdf0e10cSrcweir 163cdf0e10cSrcweir pDev->Push(); 164cdf0e10cSrcweir pDev->SetMapMode(); 165cdf0e10cSrcweir ImplDraw( pDev, nFlags, aPos, aSize ); 166cdf0e10cSrcweir pDev->Pop(); 167cdf0e10cSrcweir } 168cdf0e10cSrcweir 169cdf0e10cSrcweir // ----------------------------------------------------------------------- 170cdf0e10cSrcweir 171cdf0e10cSrcweir void FixedBorder::Resize() 172cdf0e10cSrcweir { 173cdf0e10cSrcweir Invalidate(); 174cdf0e10cSrcweir } 175cdf0e10cSrcweir 176cdf0e10cSrcweir // ----------------------------------------------------------------------- 177cdf0e10cSrcweir 178cdf0e10cSrcweir void FixedBorder::StateChanged( StateChangedType nType ) 179cdf0e10cSrcweir { 180cdf0e10cSrcweir Control::StateChanged( nType ); 181cdf0e10cSrcweir 182cdf0e10cSrcweir if ( (nType == STATE_CHANGE_DATA) || 183cdf0e10cSrcweir (nType == STATE_CHANGE_UPDATEMODE) ) 184cdf0e10cSrcweir { 185cdf0e10cSrcweir if ( IsUpdateMode() ) 186cdf0e10cSrcweir Invalidate(); 187cdf0e10cSrcweir } 188cdf0e10cSrcweir else if ( nType == STATE_CHANGE_STYLE ) 189cdf0e10cSrcweir SetStyle( ImplInitStyle( GetStyle() ) ); 190cdf0e10cSrcweir else if ( nType == STATE_CHANGE_CONTROLBACKGROUND ) 191cdf0e10cSrcweir { 192cdf0e10cSrcweir ImplInitSettings(); 193cdf0e10cSrcweir Invalidate(); 194cdf0e10cSrcweir } 195cdf0e10cSrcweir } 196cdf0e10cSrcweir 197cdf0e10cSrcweir // ----------------------------------------------------------------------- 198cdf0e10cSrcweir 199cdf0e10cSrcweir void FixedBorder::DataChanged( const DataChangedEvent& rDCEvt ) 200cdf0e10cSrcweir { 201cdf0e10cSrcweir Control::DataChanged( rDCEvt ); 202cdf0e10cSrcweir 203cdf0e10cSrcweir if ( (rDCEvt.GetType() == DATACHANGED_SETTINGS) && 204cdf0e10cSrcweir (rDCEvt.GetFlags() & SETTINGS_STYLE) ) 205cdf0e10cSrcweir { 206cdf0e10cSrcweir ImplInitSettings(); 207cdf0e10cSrcweir Invalidate(); 208cdf0e10cSrcweir } 209cdf0e10cSrcweir } 210cdf0e10cSrcweir 211cdf0e10cSrcweir // ----------------------------------------------------------------------- 212cdf0e10cSrcweir 213cdf0e10cSrcweir void FixedBorder::SetTransparent( sal_Bool bTransparent ) 214cdf0e10cSrcweir { 215cdf0e10cSrcweir if ( mbTransparent != bTransparent ) 216cdf0e10cSrcweir { 217cdf0e10cSrcweir mbTransparent = bTransparent; 218cdf0e10cSrcweir ImplInitSettings(); 219cdf0e10cSrcweir Invalidate(); 220cdf0e10cSrcweir } 221cdf0e10cSrcweir } 222cdf0e10cSrcweir 223cdf0e10cSrcweir // ----------------------------------------------------------------------- 224cdf0e10cSrcweir 225cdf0e10cSrcweir void FixedBorder::SetBorderType( sal_uInt16 nType ) 226cdf0e10cSrcweir { 227cdf0e10cSrcweir if ( mnType != nType ) 228cdf0e10cSrcweir { 229cdf0e10cSrcweir mnType = nType; 230cdf0e10cSrcweir Invalidate(); 231cdf0e10cSrcweir } 232cdf0e10cSrcweir } 233