Line data Source code
1 : /*
2 : * This file is part of the LibreOffice project.
3 : *
4 : * This Source Code Form is subject to the terms of the Mozilla Public
5 : * License, v. 2.0. If a copy of the MPL was not distributed with this
6 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
7 : *
8 : * This file incorporates work covered by the following license notice:
9 : *
10 : * Licensed to the Apache Software Foundation (ASF) under one or more
11 : * contributor license agreements. See the NOTICE file distributed
12 : * with this work for additional information regarding copyright
13 : * ownership. The ASF licenses this file to you under the Apache
14 : * License, Version 2.0 (the "License"); you may not use this file
15 : * except in compliance with the License. You may obtain a copy of
16 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
17 : */
18 : #include "svx/sidebar/ValueSetWithTextControl.hxx"
19 : #include <svx/dialogs.hrc>
20 : #include <svx/dialmgr.hxx>
21 : #include <sfx2/sidebar/Theme.hxx>
22 :
23 : #include <limits.h>
24 : #include <com/sun/star/uno/Reference.h>
25 : #include <com/sun/star/uno/Sequence.h>
26 : #include <com/sun/star/lang/Locale.hpp>
27 : #include <com/sun/star/style/NumberingType.hpp>
28 : #include <com/sun/star/lang/XMultiServiceFactory.hpp>
29 : #include <com/sun/star/container/XIndexAccess.hpp>
30 : #include <com/sun/star/text/XDefaultNumberingProvider.hpp>
31 : #include <com/sun/star/text/XNumberingFormatter.hpp>
32 : #include <com/sun/star/beans/PropertyValue.hpp>
33 : #include <comphelper/processfactory.hxx>
34 : #include <com/sun/star/text/XNumberingTypeInfo.hpp>
35 : #include <i18nlangtag/mslangid.hxx>
36 : #include <svtools/valueset.hxx>
37 : #include <editeng/brushitem.hxx>
38 : #include <vcl/graph.hxx>
39 : #include <vcl/settings.hxx>
40 : #include <svx/nbdtmg.hxx>
41 : #include <svx/nbdtmgfact.hxx>
42 :
43 : using namespace com::sun::star::uno;
44 : using namespace com::sun::star::beans;
45 : using namespace com::sun::star::lang;
46 : using namespace com::sun::star::i18n;
47 : using namespace com::sun::star::text;
48 : using namespace com::sun::star::container;
49 : using namespace com::sun::star::style;
50 :
51 : namespace svx { namespace sidebar {
52 :
53 0 : static Font& lcl_GetDefaultBulletFont()
54 : {
55 : static sal_Bool bInit = 0;
56 : static Font aDefBulletFont( OUString( "StarSymbol" ),
57 0 : OUString(), Size( 0, 14 ) );
58 0 : if(!bInit)
59 : {
60 0 : aDefBulletFont.SetCharSet( RTL_TEXTENCODING_SYMBOL );
61 0 : aDefBulletFont.SetFamily( FAMILY_DONTKNOW );
62 0 : aDefBulletFont.SetPitch( PITCH_DONTKNOW );
63 0 : aDefBulletFont.SetWeight( WEIGHT_DONTKNOW );
64 0 : aDefBulletFont.SetTransparent( true );
65 0 : bInit = sal_True;
66 : }
67 0 : return aDefBulletFont;
68 : }
69 :
70 0 : ValueSetWithTextControl::ValueSetWithTextControl(
71 : const tControlType eControlType,
72 : Window* pParent,
73 : const ResId& rResId)
74 : : ValueSet( pParent, rResId )
75 : , meControlType( eControlType )
76 0 : , maItems()
77 : {
78 0 : SetColCount( 1 );
79 0 : }
80 :
81 :
82 0 : ValueSetWithTextControl::~ValueSetWithTextControl(void)
83 : {
84 0 : }
85 :
86 :
87 0 : void ValueSetWithTextControl::AddItem(
88 : const Image& rItemImage,
89 : const Image* pSelectedItemImage,
90 : const OUString& rItemText,
91 : const OUString* pItemHelpText )
92 : {
93 0 : if ( meControlType != IMAGE_TEXT )
94 : {
95 0 : return;
96 : }
97 :
98 0 : ValueSetWithTextItem aItem;
99 0 : aItem.maItemImage = rItemImage;
100 0 : aItem.maSelectedItemImage = (pSelectedItemImage != 0)
101 : ? *pSelectedItemImage
102 0 : : rItemImage;
103 :
104 0 : if ( GetDPIScaleFactor() > 1 )
105 : {
106 0 : BitmapEx b = aItem.maItemImage.GetBitmapEx();
107 0 : b.Scale(GetDPIScaleFactor(), GetDPIScaleFactor());
108 0 : aItem.maItemImage = Image(b);
109 :
110 0 : if ( pSelectedItemImage != 0 )
111 : {
112 0 : b = aItem.maSelectedItemImage.GetBitmapEx();
113 0 : b.Scale(GetDPIScaleFactor(), GetDPIScaleFactor());
114 0 : aItem.maSelectedItemImage = Image(b);
115 0 : }
116 : }
117 :
118 0 : aItem.maItemText = rItemText;
119 :
120 0 : maItems.push_back( aItem );
121 :
122 0 : InsertItem( maItems.size() );
123 0 : SetItemText( maItems.size(),
124 0 : (pItemHelpText != 0) ? *pItemHelpText : rItemText );
125 : }
126 :
127 :
128 0 : void ValueSetWithTextControl::AddItem(
129 : const OUString& rItemText,
130 : const OUString& rItemText2,
131 : const OUString* pItemHelpText )
132 : {
133 0 : if ( meControlType != TEXT_TEXT )
134 : {
135 0 : return;
136 : }
137 :
138 0 : ValueSetWithTextItem aItem;
139 0 : aItem.maItemText = rItemText;
140 0 : aItem.maItemText2 = rItemText2;
141 :
142 0 : maItems.push_back( aItem );
143 :
144 0 : InsertItem( maItems.size() );
145 0 : SetItemText( maItems.size(),
146 0 : (pItemHelpText != 0) ? *pItemHelpText : rItemText );
147 : }
148 :
149 :
150 0 : void ValueSetWithTextControl::ReplaceItemImages(
151 : const sal_uInt16 nItemId,
152 : const Image& rItemImage,
153 : const Image* pSelectedItemImage )
154 : {
155 0 : if ( meControlType != IMAGE_TEXT )
156 : {
157 0 : return;
158 : }
159 :
160 0 : if ( nItemId == 0 ||
161 0 : nItemId > maItems.size() )
162 : {
163 0 : return;
164 : }
165 :
166 0 : maItems[nItemId-1].maItemImage = rItemImage;
167 0 : maItems[nItemId-1].maSelectedItemImage = (pSelectedItemImage != 0)
168 : ? *pSelectedItemImage
169 0 : : rItemImage;
170 :
171 : //#ifndef MACOSX
172 0 : if ( GetDPIScaleFactor() > 1 )
173 : {
174 0 : BitmapEx b = maItems[nItemId-1].maItemImage.GetBitmapEx();
175 0 : b.Scale(GetDPIScaleFactor(), GetDPIScaleFactor());
176 0 : maItems[nItemId-1].maItemImage = Image(b);
177 :
178 0 : if ( pSelectedItemImage != 0 )
179 : {
180 0 : b = maItems[nItemId-1].maSelectedItemImage.GetBitmapEx();
181 0 : b.Scale(GetDPIScaleFactor(), GetDPIScaleFactor());
182 0 : maItems[nItemId-1].maSelectedItemImage = Image(b);
183 0 : }
184 : }
185 : //#endif
186 : }
187 :
188 :
189 0 : void ValueSetWithTextControl::UserDraw( const UserDrawEvent& rUDEvt )
190 : {
191 0 : const Rectangle aRect = rUDEvt.GetRect();
192 0 : OutputDevice* pDev = rUDEvt.GetDevice();
193 0 : pDev->Push( PUSH_ALL );
194 0 : const sal_uInt16 nItemId = rUDEvt.GetItemId();
195 :
196 0 : const long nRectHeight = aRect.GetHeight();
197 0 : const Point aBLPos = aRect.TopLeft();
198 :
199 0 : Font aFont(OutputDevice::GetDefaultFont(DEFAULTFONT_UI_SANS, MsLangId::getSystemLanguage(), DEFAULTFONT_FLAGS_ONLYONE));
200 : {
201 0 : Size aSize = aFont.GetSize();
202 0 : aSize.Height() = (nRectHeight*4)/9;
203 0 : aFont.SetSize( aSize );
204 : }
205 :
206 : {
207 : //draw backgroud
208 0 : if ( GetSelectItemId() == nItemId )
209 : {
210 0 : Rectangle aBackRect = aRect;
211 0 : aBackRect.Top() += 3;
212 0 : aBackRect.Bottom() -= 2;
213 0 : pDev->SetFillColor( sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Color_Highlight ) );
214 0 : pDev->DrawRect(aBackRect);
215 : }
216 : else
217 : {
218 0 : pDev->SetFillColor( COL_TRANSPARENT );
219 0 : pDev->DrawRect(aRect);
220 : }
221 :
222 : //draw image + text resp. text + text
223 0 : Image* pImage = 0;
224 0 : if ( GetSelectItemId() == nItemId )
225 : {
226 0 : aFont.SetColor( sfx2::sidebar::Theme::GetColor( sfx2::sidebar::Theme::Color_HighlightText ) );
227 0 : pImage = &maItems[nItemId-1].maSelectedItemImage;
228 : }
229 : else
230 : {
231 0 : aFont.SetColor( GetSettings().GetStyleSettings().GetFieldTextColor() );
232 0 : pImage = &maItems[nItemId-1].maItemImage;
233 : }
234 :
235 0 : Rectangle aStrRect = aRect;
236 0 : aStrRect.Top() += nRectHeight/4;
237 0 : aStrRect.Bottom() -= nRectHeight/4;
238 :
239 0 : switch ( meControlType )
240 : {
241 : case IMAGE_TEXT:
242 : {
243 : Point aImgStart(
244 0 : aBLPos.X() + 4,
245 0 : aBLPos.Y() + ( ( nRectHeight - pImage->GetSizePixel().Height() ) / 2 ) );
246 0 : pDev->DrawImage( aImgStart, *pImage );
247 :
248 0 : aStrRect.Left() += pImage->GetSizePixel().Width() + 12;
249 0 : pDev->SetFont(aFont);
250 0 : pDev->DrawText(aStrRect, maItems[nItemId-1].maItemText, TEXT_DRAW_ENDELLIPSIS);
251 : }
252 0 : break;
253 : case TEXT_TEXT:
254 : {
255 0 : const long nRectWidth = aRect.GetWidth();
256 0 : aStrRect.Left() += 8;
257 0 : aStrRect.Right() -= (nRectWidth*2)/3;
258 0 : pDev->SetFont(aFont);
259 0 : pDev->DrawText(aStrRect, maItems[nItemId-1].maItemText, TEXT_DRAW_ENDELLIPSIS);
260 0 : aStrRect.Left() += nRectWidth/3;
261 0 : aStrRect.Right() += (nRectWidth*2)/3;
262 0 : pDev->DrawText(aStrRect, maItems[nItemId-1].maItemText2, TEXT_DRAW_ENDELLIPSIS);
263 : }
264 0 : break;
265 : }
266 : }
267 :
268 0 : Invalidate( aRect );
269 0 : pDev->Pop();
270 0 : }
271 :
272 0 : SvxNumValueSet2::SvxNumValueSet2( Window* pParent, const ResId& rResId) :
273 : ValueSet( pParent, rResId ),
274 : aLineColor ( COL_LIGHTGRAY ),
275 0 : pVDev ( NULL )
276 : {
277 0 : SetColCount( 3 );
278 0 : SetLineCount( 3 );
279 0 : SetStyle( GetStyle() | WB_ITEMBORDER );
280 0 : }
281 :
282 0 : SvxNumValueSet2::~SvxNumValueSet2()
283 : {
284 0 : delete pVDev;
285 0 : }
286 :
287 0 : void SvxNumValueSet2::SetNumberingSettings(
288 : const Sequence<Sequence<PropertyValue> >& aNum,
289 : Reference<XNumberingFormatter>& xFormat,
290 : const Locale& rLocale )
291 : {
292 0 : aNumSettings = aNum;
293 0 : xFormatter = xFormat;
294 0 : aLocale = rLocale;
295 0 : if(aNum.getLength() > 9)
296 0 : SetStyle( GetStyle()|WB_VSCROLL);
297 0 : InsertItem( DEFAULT_NONE, DEFAULT_NONE - 1 );
298 0 : SetItemText( DEFAULT_NONE, SVX_RESSTR( RID_SVXSTR_NUMBULLET_NONE ));
299 :
300 0 : for ( sal_Int32 i = 0; i < aNum.getLength(); i++ )
301 : {
302 0 : InsertItem( i + 1);
303 0 : if( i < 8 )
304 : {
305 0 : NBOTypeMgrBase* pNumbering = NBOutlineTypeMgrFact::CreateInstance(eNBOType::NUMBERING);
306 0 : if ( pNumbering )
307 : {
308 0 : SetItemText( i + 1, pNumbering->GetDescription(i));
309 : }
310 : }
311 : }
312 0 : }
313 :
314 0 : void SvxNumValueSet2::UserDraw( const UserDrawEvent& rUDEvt )
315 : {
316 0 : const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings();
317 0 : const Color aBackColor = rStyleSettings.GetFieldColor();
318 0 : const Color aTextColor = rStyleSettings.GetFieldTextColor();
319 :
320 0 : OutputDevice* pDev = rUDEvt.GetDevice();
321 0 : Rectangle aRect = rUDEvt.GetRect();
322 0 : sal_uInt32 nItemId = rUDEvt.GetItemId();
323 0 : long nRectWidth = aRect.GetWidth();
324 0 : long nRectHeight = aRect.GetHeight();
325 0 : Size aRectSize(nRectWidth, aRect.GetHeight());
326 0 : Point aBLPos = aRect.TopLeft();
327 0 : Font aOldFont = pDev->GetFont();
328 0 : Color aOldColor = pDev->GetLineColor();
329 0 : pDev->SetLineColor(aBackColor);
330 : Font aFont(OutputDevice::GetDefaultFont(
331 0 : DEFAULTFONT_UI_SANS, MsLangId::getSystemLanguage(), DEFAULTFONT_FLAGS_ONLYONE));
332 :
333 0 : Size aSize = aFont.GetSize();
334 0 : aSize.Height() = nRectHeight/5;
335 0 : aFont.SetColor(aTextColor);
336 0 : aFont.SetFillColor(aBackColor);
337 0 : aFont.SetSize( aSize );
338 0 : pDev->SetFont(aFont);
339 0 : pDev->SetLineColor(aTextColor);
340 0 : if(!pVDev)
341 : {
342 : // Die Linien werden nur einmalig in das VirtualDevice gepainted
343 : // nur die Gliederungspage bekommt es aktuell
344 0 : pVDev = new VirtualDevice(*pDev);
345 0 : pVDev->SetMapMode(pDev->GetMapMode());
346 0 : pVDev->EnableRTL( IsRTLEnabled() );
347 0 : pVDev->SetOutputSize( aRectSize );
348 0 : aOrgRect = aRect;
349 :
350 0 : pVDev->SetLineColor( aBackColor );
351 0 : pVDev->SetFillColor( aBackColor );
352 0 : pVDev->DrawRect(aOrgRect);
353 :
354 0 : if(aBackColor == aLineColor)
355 0 : aLineColor.Invert();
356 0 : if(GetSettings().GetStyleSettings().GetHighContrastMode())
357 0 : pVDev->SetLineColor(aTextColor);
358 : else
359 0 : pVDev->SetLineColor(aLineColor);
360 : // Linien nur einmalig Zeichnen
361 0 : Point aStart(aBLPos.X() + nRectWidth *30 / 100,0);
362 0 : Point aEnd(aBLPos.X() + nRectWidth * 9 / 10,0);
363 0 : for( sal_uInt32 i = 11; i < 100; i += 33)
364 : {
365 0 : aStart.Y() = aEnd.Y() = aBLPos.Y() + nRectHeight * i / 100;
366 0 : pVDev->DrawLine(aStart, aEnd);
367 0 : aStart.Y() = aEnd.Y() = aBLPos.Y() + nRectHeight * (i + 11) / 100;
368 0 : pVDev->DrawLine(aStart, aEnd);
369 : }
370 : }
371 0 : if ( nItemId != DEFAULT_NONE)
372 : pDev->DrawOutDev( aRect.TopLeft(), aRectSize,
373 0 : aOrgRect.TopLeft(), aRectSize,
374 0 : *pVDev );
375 :
376 0 : Point aStart(aBLPos.X() + nRectWidth / 9,0);
377 0 : if ( nItemId == DEFAULT_NONE)
378 : {
379 0 : OUString sText(SVX_RESSTR( RID_SVXSTR_NUMBULLET_NONE));
380 0 : Font aLclFont = pDev->GetFont();
381 0 : Size aLclSize = aLclFont.GetSize();
382 0 : aLclSize.Height() = nRectHeight/4;
383 0 : aLclFont.SetSize( aLclSize );
384 0 : pDev->SetFont(aLclFont);
385 0 : long nTextWidth = pDev->GetTextWidth(sText);
386 0 : long nTextHeight = pDev->GetTextHeight();
387 : //GVT refine
388 0 : while (nTextWidth>nRectWidth && aLclSize.Height()>4) {
389 0 : aLclSize.Height() = aLclSize.Height()*0.9;
390 0 : aLclFont.SetSize( aLclSize );
391 0 : pDev->SetFont(aLclFont);
392 0 : nTextWidth = pDev->GetTextWidth(sText);
393 : }
394 0 : Point aSStart(aBLPos.X()+(nRectWidth-nTextWidth)/2, aBLPos.Y() +(nRectHeight-nTextHeight)/2);
395 0 : pDev->DrawText(aSStart, sText);
396 0 : pDev->SetFont(aOldFont);
397 : }
398 : else
399 : {
400 0 : NBOTypeMgrBase* pNumbering = NBOutlineTypeMgrFact::CreateInstance(eNBOType::NUMBERING);
401 0 : if ( pNumbering && nItemId <= DEFAULT_BULLET_TYPES )
402 : {
403 0 : for( sal_uInt32 i = 0; i < 3; i++ )
404 : {
405 0 : sal_uInt32 nY = 11 + i * 33;
406 0 : aStart.Y() = aBLPos.Y() + nRectHeight * nY / 100;
407 0 : OUString sText;
408 0 : sal_uInt16 nLvl = 0;
409 0 : SvxNumRule aTempRule( 0, 10, false );
410 0 : pNumbering->ApplyNumRule(aTempRule,nItemId -1,1<<nLvl);
411 0 : SvxNumberFormat aNumFmt(aTempRule.GetLevel(nLvl));
412 0 : sText = aNumFmt.GetPrefix() + aNumFmt.GetNumStr(i+1) + aNumFmt.GetSuffix();
413 0 : aStart.X() = aBLPos.X() + 2;
414 0 : aStart.Y() -= pDev->GetTextHeight()/2;
415 0 : pDev->DrawText(aStart, sText);
416 0 : }
417 : }
418 0 : pDev->SetFont(aOldFont);
419 0 : pDev->SetLineColor(aOldColor);
420 0 : }
421 : //End
422 0 : }
423 :
424 :
425 :
426 0 : SvxNumValueSet3::SvxNumValueSet3( Window* pParent, const ResId& rResId) :
427 0 : ValueSet( pParent, rResId )
428 : {
429 0 : SetColCount( 3 );
430 0 : SetLineCount( 4 );
431 0 : SetStyle( GetStyle() | WB_ITEMBORDER );
432 0 : }
433 :
434 0 : SvxNumValueSet3::~SvxNumValueSet3()
435 : {
436 0 : }
437 :
438 0 : void SvxNumValueSet3::UserDraw( const UserDrawEvent& rUDEvt )
439 : {
440 0 : Rectangle aRect = rUDEvt.GetRect();
441 0 : OutputDevice* pDev = rUDEvt.GetDevice();
442 0 : sal_uInt32 nItemId = rUDEvt.GetItemId();
443 :
444 0 : long nRectHeight = aRect.GetHeight();
445 0 : long nRectWidth = aRect.GetWidth();
446 0 : Point aBLPos = aRect.TopLeft();
447 0 : NBOTypeMgrBase* pBullets = NBOutlineTypeMgrFact::CreateInstance(eNBOType::MIXBULLETS);
448 0 : if ( pBullets )
449 : {
450 0 : if ( nItemId <= DEFAULT_BULLET_TYPES ) {
451 0 : sal_uInt16 nLvl = 0;
452 0 : SvxNumRule aTempRule( 0, 10, false );
453 0 : pBullets->ApplyNumRule(aTempRule,nItemId -1,1<<nLvl);
454 0 : SvxNumberFormat aFmt(aTempRule.GetLevel(nLvl));
455 0 : sal_Int16 eNumType = aFmt.GetNumberingType();
456 0 : if( eNumType == SVX_NUM_CHAR_SPECIAL)
457 : {
458 0 : sal_Unicode cChar = aFmt.GetBulletChar();
459 : //End
460 0 : const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings();
461 0 : const Color aBackColor = rStyleSettings.GetFieldColor();
462 0 : const Color aTextColor = rStyleSettings.GetFieldTextColor();
463 :
464 0 : Font aOldFont = pDev->GetFont();
465 0 : Font aFont( lcl_GetDefaultBulletFont() );
466 :
467 0 : Size aSize = aFont.GetSize();
468 0 : aSize.Height() = nRectHeight*3/6;
469 0 : aFont.SetColor(aTextColor);
470 0 : aFont.SetFillColor(aBackColor);
471 0 : aFont.SetSize( aSize );
472 0 : pDev->SetFont(aFont);
473 0 : pDev->SetFillColor( aBackColor ); //wj
474 :
475 0 : OUString sText(cChar);
476 0 : Font aOldBulletFont = pDev->GetFont();
477 0 : Font aBulletFnt(aFmt.GetBulletFont() ? *aFmt.GetBulletFont() : aOldBulletFont);
478 0 : Size aBulSize = aOldBulletFont.GetSize();
479 0 : aBulletFnt.SetSize(aBulSize);
480 0 : pDev->SetFont(aBulletFnt);
481 0 : long nTextWidth = pDev->GetTextWidth(sText);
482 0 : long nTextHeight = pDev->GetTextHeight();
483 0 : Point aStart(aBLPos.X()+(nRectWidth-nTextWidth)/2, aBLPos.Y() +(nRectHeight-nTextHeight)/2);
484 0 : pDev->DrawText(aStart, sText);
485 0 : pDev->SetFont(aOldFont);
486 0 : }else if ( eNumType == SVX_NUM_BITMAP )
487 : {
488 0 : const SvxBrushItem* pBrushItem = aFmt.GetBrush();
489 0 : if(pBrushItem)
490 : {
491 0 : const Graphic* pGrf = pBrushItem->GetGraphic();
492 0 : if(pGrf)
493 : {
494 0 : Size aSize(nRectHeight*6/20, nRectHeight*6/20);
495 0 : Point aStart(aBLPos.X() + nRectWidth*7/20, aBLPos.Y() + nRectHeight*7/20);
496 :
497 0 : pGrf->Draw( pDev, aStart, aSize );
498 : }
499 : }
500 0 : }
501 0 : }else if ( nItemId == DEFAULT_NONE)
502 : {
503 0 : const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings();
504 0 : const Color aBackColor = rStyleSettings.GetFieldColor();
505 0 : const Color aTextColor = rStyleSettings.GetFieldTextColor();
506 :
507 0 : Font aOldFont = pDev->GetFont();
508 0 : Font aFont(OutputDevice::GetDefaultFont(DEFAULTFONT_UI_SANS, MsLangId::getSystemLanguage(), DEFAULTFONT_FLAGS_ONLYONE));
509 0 : Size aSize = aFont.GetSize();
510 : //aSize.Height() = nRectHeight/5;
511 0 : aSize.Height() = nRectHeight/4;
512 0 : aFont.SetColor(aTextColor);
513 0 : aFont.SetFillColor(aBackColor);
514 0 : aFont.SetSize( aSize );
515 0 : pDev->SetFont(aFont);
516 0 : pDev->SetFillColor( aBackColor );
517 :
518 0 : OUString sText(SVX_RESSTR( RID_SVXSTR_NUMBULLET_NONE));
519 :
520 0 : long nTextWidth = pDev->GetTextWidth(sText);
521 0 : long nTextHeight = pDev->GetTextHeight();
522 : //GVT refine
523 0 : while (nTextWidth>nRectWidth && aSize.Height()>4) {
524 0 : aSize.Height() = aSize.Height()*0.9;
525 0 : aFont.SetSize( aSize );
526 0 : pDev->SetFont(aFont);
527 0 : nTextWidth = pDev->GetTextWidth(sText);
528 : }
529 0 : Point aStart(aBLPos.X()+(nRectWidth-nTextWidth)/2, aBLPos.Y() +(nRectHeight-nTextHeight)/2);
530 0 : pDev->DrawText(aStart, sText);
531 :
532 0 : pDev->SetFont(aOldFont);
533 : }
534 : }
535 :
536 0 : }
537 :
538 : } } // end of namespace svx::sidebar
|