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