Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 : #include <sal/types.h>
21 :
22 : #include <vcl/outdev.hxx>
23 : #include <vcl/virdev.hxx>
24 :
25 : #include <vcl/settings.hxx>
26 :
27 : #include <vcl/mapmod.hxx>
28 : #include <vcl/region.hxx>
29 : #include <vcl/font.hxx>
30 : #include <vcl/vclenum.hxx>
31 :
32 : #include <tools/gen.hxx>
33 : #include <tools/color.hxx>
34 : #include <tools/fontenum.hxx>
35 :
36 : #include <vcl/outdevstate.hxx>
37 :
38 : #include "outdev.h"
39 : #include "outdata.hxx"
40 : #include "salgdi.hxx"
41 : #include "sallayout.hxx"
42 :
43 1131692 : OutDevState::~OutDevState()
44 : {
45 1131692 : if ( mnFlags & PushFlags::LINECOLOR )
46 233622 : delete mpLineColor;
47 1131692 : if ( mnFlags & PushFlags::FILLCOLOR )
48 194710 : delete mpFillColor;
49 1131692 : if ( mnFlags & PushFlags::FONT )
50 196426 : delete mpFont;
51 1131692 : if ( mnFlags & PushFlags::TEXTCOLOR )
52 177645 : delete mpTextColor;
53 1131692 : if ( mnFlags & PushFlags::TEXTFILLCOLOR )
54 50832 : delete mpTextFillColor;
55 1131692 : if ( mnFlags & PushFlags::TEXTLINECOLOR )
56 50832 : delete mpTextLineColor;
57 1131692 : if ( mnFlags & PushFlags::OVERLINECOLOR )
58 50832 : delete mpOverlineColor;
59 1131692 : if ( mnFlags & PushFlags::MAPMODE )
60 218291 : delete mpMapMode;
61 1131692 : if ( mnFlags & PushFlags::CLIPREGION )
62 616877 : delete mpClipRegion;
63 1131692 : if ( mnFlags & PushFlags::REFPOINT )
64 50832 : delete mpRefPoint;
65 1131692 : }
66 :
67 :
68 1131692 : void OutputDevice::Push( PushFlags nFlags )
69 : {
70 :
71 1131692 : if ( mpMetaFile )
72 99634 : mpMetaFile->AddAction( new MetaPushAction( nFlags ) );
73 :
74 1131692 : OutDevState* pState = new OutDevState;
75 :
76 1131692 : pState->mnFlags = nFlags;
77 :
78 1131692 : if ( nFlags & PushFlags::LINECOLOR )
79 : {
80 233622 : if ( mbLineColor )
81 167774 : pState->mpLineColor = new Color( maLineColor );
82 : else
83 65848 : pState->mpLineColor = NULL;
84 : }
85 1131692 : if ( nFlags & PushFlags::FILLCOLOR )
86 : {
87 194710 : if ( mbFillColor )
88 185984 : pState->mpFillColor = new Color( maFillColor );
89 : else
90 8726 : pState->mpFillColor = NULL;
91 : }
92 1131692 : if ( nFlags & PushFlags::FONT )
93 196426 : pState->mpFont = new vcl::Font( maFont );
94 1131692 : if ( nFlags & PushFlags::TEXTCOLOR )
95 177645 : pState->mpTextColor = new Color( GetTextColor() );
96 1131692 : if ( nFlags & PushFlags::TEXTFILLCOLOR )
97 : {
98 50832 : if ( IsTextFillColor() )
99 422 : pState->mpTextFillColor = new Color( GetTextFillColor() );
100 : else
101 50410 : pState->mpTextFillColor = NULL;
102 : }
103 1131692 : if ( nFlags & PushFlags::TEXTLINECOLOR )
104 : {
105 50832 : if ( IsTextLineColor() )
106 552 : pState->mpTextLineColor = new Color( GetTextLineColor() );
107 : else
108 50280 : pState->mpTextLineColor = NULL;
109 : }
110 1131692 : if ( nFlags & PushFlags::OVERLINECOLOR )
111 : {
112 50832 : if ( IsOverlineColor() )
113 530 : pState->mpOverlineColor = new Color( GetOverlineColor() );
114 : else
115 50302 : pState->mpOverlineColor = NULL;
116 : }
117 1131692 : if ( nFlags & PushFlags::TEXTALIGN )
118 50832 : pState->meTextAlign = GetTextAlign();
119 1131692 : if( nFlags & PushFlags::TEXTLAYOUTMODE )
120 280724 : pState->mnTextLayoutMode = GetLayoutMode();
121 1131692 : if( nFlags & PushFlags::TEXTLANGUAGE )
122 279955 : pState->meTextLanguage = GetDigitLanguage();
123 1131692 : if ( nFlags & PushFlags::RASTEROP )
124 50832 : pState->meRasterOp = GetRasterOp();
125 1131692 : if ( nFlags & PushFlags::MAPMODE )
126 : {
127 218291 : pState->mpMapMode = new MapMode( maMapMode );
128 218291 : pState->mbMapActive = mbMap;
129 : }
130 1131692 : if ( nFlags & PushFlags::CLIPREGION )
131 : {
132 616877 : if ( mbClipRegion )
133 266742 : pState->mpClipRegion = new vcl::Region( maRegion );
134 : else
135 350135 : pState->mpClipRegion = NULL;
136 : }
137 1131692 : if ( nFlags & PushFlags::REFPOINT )
138 : {
139 50832 : if ( mbRefPoint )
140 0 : pState->mpRefPoint = new Point( maRefPoint );
141 : else
142 50832 : pState->mpRefPoint = NULL;
143 : }
144 :
145 1131692 : mpOutDevStateStack->push_back( pState );
146 :
147 1131692 : if( mpAlphaVDev )
148 14826 : mpAlphaVDev->Push();
149 1131692 : }
150 :
151 1131692 : void OutputDevice::Pop()
152 : {
153 :
154 1131692 : if( mpMetaFile )
155 99634 : mpMetaFile->AddAction( new MetaPopAction() );
156 :
157 1131692 : GDIMetaFile* pOldMetaFile = mpMetaFile;
158 1131692 : mpMetaFile = NULL;
159 :
160 1131692 : if ( mpOutDevStateStack->empty() )
161 : {
162 : SAL_WARN( "vcl.gdi", "OutputDevice::Pop() without OutputDevice::Push()" );
163 1131692 : return;
164 : }
165 1131692 : const OutDevState& rState = mpOutDevStateStack->back();
166 :
167 1131692 : if( mpAlphaVDev )
168 14826 : mpAlphaVDev->Pop();
169 :
170 1131692 : if ( rState.mnFlags & PushFlags::LINECOLOR )
171 : {
172 233622 : if ( rState.mpLineColor )
173 167774 : SetLineColor( *rState.mpLineColor );
174 : else
175 65848 : SetLineColor();
176 : }
177 :
178 1131692 : if ( rState.mnFlags & PushFlags::FILLCOLOR )
179 : {
180 194710 : if ( rState.mpFillColor )
181 185984 : SetFillColor( *rState.mpFillColor );
182 : else
183 8726 : SetFillColor();
184 : }
185 :
186 1131692 : if ( rState.mnFlags & PushFlags::FONT )
187 196426 : SetFont( *rState.mpFont );
188 :
189 1131692 : if ( rState.mnFlags & PushFlags::TEXTCOLOR )
190 177645 : SetTextColor( *rState.mpTextColor );
191 :
192 1131692 : if ( rState.mnFlags & PushFlags::TEXTFILLCOLOR )
193 : {
194 50832 : if ( rState.mpTextFillColor )
195 422 : SetTextFillColor( *rState.mpTextFillColor );
196 : else
197 50410 : SetTextFillColor();
198 : }
199 :
200 1131692 : if ( rState.mnFlags & PushFlags::TEXTLINECOLOR )
201 : {
202 50832 : if ( rState.mpTextLineColor )
203 552 : SetTextLineColor( *rState.mpTextLineColor );
204 : else
205 50280 : SetTextLineColor();
206 : }
207 :
208 1131692 : if ( rState.mnFlags & PushFlags::OVERLINECOLOR )
209 : {
210 50832 : if ( rState.mpOverlineColor )
211 530 : SetOverlineColor( *rState.mpOverlineColor );
212 : else
213 50302 : SetOverlineColor();
214 : }
215 :
216 1131692 : if ( rState.mnFlags & PushFlags::TEXTALIGN )
217 50832 : SetTextAlign( rState.meTextAlign );
218 :
219 1131692 : if( rState.mnFlags & PushFlags::TEXTLAYOUTMODE )
220 280724 : SetLayoutMode( rState.mnTextLayoutMode );
221 :
222 1131692 : if( rState.mnFlags & PushFlags::TEXTLANGUAGE )
223 279955 : SetDigitLanguage( rState.meTextLanguage );
224 :
225 1131692 : if ( rState.mnFlags & PushFlags::RASTEROP )
226 50832 : SetRasterOp( rState.meRasterOp );
227 :
228 1131692 : if ( rState.mnFlags & PushFlags::MAPMODE )
229 : {
230 218291 : if ( rState.mpMapMode )
231 218291 : SetMapMode( *rState.mpMapMode );
232 : else
233 0 : SetMapMode();
234 218291 : mbMap = rState.mbMapActive;
235 : }
236 :
237 1131692 : if ( rState.mnFlags & PushFlags::CLIPREGION )
238 616877 : SetDeviceClipRegion( rState.mpClipRegion );
239 :
240 1131692 : if ( rState.mnFlags & PushFlags::REFPOINT )
241 : {
242 50832 : if ( rState.mpRefPoint )
243 0 : SetRefPoint( *rState.mpRefPoint );
244 : else
245 50832 : SetRefPoint();
246 : }
247 :
248 1131692 : mpOutDevStateStack->pop_back();
249 :
250 1131692 : mpMetaFile = pOldMetaFile;
251 : }
252 :
253 0 : sal_uInt32 OutputDevice::GetGCStackDepth() const
254 : {
255 0 : return mpOutDevStateStack->size();
256 : }
257 :
258 37697 : void OutputDevice::EnableOutput( bool bEnable )
259 : {
260 37697 : mbOutput = bEnable;
261 :
262 37697 : if( mpAlphaVDev )
263 0 : mpAlphaVDev->EnableOutput( bEnable );
264 37697 : }
265 :
266 184470 : void OutputDevice::SetAntialiasing( sal_uInt16 nMode )
267 : {
268 184470 : if ( mnAntialiasing != nMode )
269 : {
270 13401 : mnAntialiasing = nMode;
271 13401 : mbInitFont = true;
272 :
273 13401 : if(mpGraphics)
274 : {
275 4 : mpGraphics->setAntiAliasB2DDraw(mnAntialiasing & ANTIALIASING_ENABLE_B2DDRAW);
276 : }
277 : }
278 :
279 184470 : if( mpAlphaVDev )
280 0 : mpAlphaVDev->SetAntialiasing( nMode );
281 184470 : }
282 :
283 104866 : void OutputDevice::SetDrawMode( sal_uLong nDrawMode )
284 : {
285 :
286 104866 : mnDrawMode = nDrawMode;
287 :
288 104866 : if( mpAlphaVDev )
289 0 : mpAlphaVDev->SetDrawMode( nDrawMode );
290 104866 : }
291 :
292 1544353 : void OutputDevice::SetLayoutMode( ComplexTextLayoutMode nTextLayoutMode )
293 : {
294 1544353 : if( mpMetaFile )
295 26229 : mpMetaFile->AddAction( new MetaLayoutModeAction( nTextLayoutMode ) );
296 :
297 1544353 : mnTextLayoutMode = nTextLayoutMode;
298 :
299 1544353 : if( mpAlphaVDev )
300 27025 : mpAlphaVDev->SetLayoutMode( nTextLayoutMode );
301 1544353 : }
302 :
303 1698277 : void OutputDevice::SetDigitLanguage( LanguageType eTextLanguage )
304 : {
305 1698277 : if( mpMetaFile )
306 37115 : mpMetaFile->AddAction( new MetaTextLanguageAction( eTextLanguage ) );
307 :
308 1698277 : meTextLanguage = eTextLanguage;
309 :
310 1698277 : if( mpAlphaVDev )
311 26544 : mpAlphaVDev->SetDigitLanguage( eTextLanguage );
312 1698277 : }
313 :
314 88796 : void OutputDevice::SetRasterOp( RasterOp eRasterOp )
315 : {
316 :
317 88796 : if ( mpMetaFile )
318 10225 : mpMetaFile->AddAction( new MetaRasterOpAction( eRasterOp ) );
319 :
320 88796 : if ( meRasterOp != eRasterOp )
321 : {
322 8424 : meRasterOp = eRasterOp;
323 8424 : mbInitLineColor = mbInitFillColor = true;
324 :
325 8424 : if( mpGraphics || AcquireGraphics() )
326 8424 : mpGraphics->SetXORMode( (ROP_INVERT == meRasterOp) || (ROP_XOR == meRasterOp), ROP_INVERT == meRasterOp );
327 : }
328 :
329 88796 : if( mpAlphaVDev )
330 13282 : mpAlphaVDev->SetRasterOp( eRasterOp );
331 88796 : }
332 :
333 :
334 488854 : void OutputDevice::SetFillColor()
335 : {
336 :
337 488854 : if ( mpMetaFile )
338 6528 : mpMetaFile->AddAction( new MetaFillColorAction( Color(), false ) );
339 :
340 488854 : if ( mbFillColor )
341 : {
342 106098 : mbInitFillColor = true;
343 106098 : mbFillColor = false;
344 106098 : maFillColor = Color( COL_TRANSPARENT );
345 : }
346 :
347 488854 : if( mpAlphaVDev )
348 2416 : mpAlphaVDev->SetFillColor();
349 488854 : }
350 :
351 2423818 : void OutputDevice::SetFillColor( const Color& rColor )
352 : {
353 :
354 2423818 : Color aColor( rColor );
355 :
356 2423818 : if( mnDrawMode & ( DRAWMODE_BLACKFILL | DRAWMODE_WHITEFILL |
357 : DRAWMODE_GRAYFILL | DRAWMODE_NOFILL |
358 : DRAWMODE_GHOSTEDFILL | DRAWMODE_SETTINGSFILL ) )
359 : {
360 0 : if( !ImplIsColorTransparent( aColor ) )
361 : {
362 0 : if( mnDrawMode & DRAWMODE_BLACKFILL )
363 : {
364 0 : aColor = Color( COL_BLACK );
365 : }
366 0 : else if( mnDrawMode & DRAWMODE_WHITEFILL )
367 : {
368 0 : aColor = Color( COL_WHITE );
369 : }
370 0 : else if( mnDrawMode & DRAWMODE_GRAYFILL )
371 : {
372 0 : const sal_uInt8 cLum = aColor.GetLuminance();
373 0 : aColor = Color( cLum, cLum, cLum );
374 : }
375 0 : else if( mnDrawMode & DRAWMODE_NOFILL )
376 : {
377 0 : aColor = Color( COL_TRANSPARENT );
378 : }
379 0 : else if( mnDrawMode & DRAWMODE_SETTINGSFILL )
380 : {
381 0 : aColor = GetSettings().GetStyleSettings().GetWindowColor();
382 : }
383 :
384 0 : if( mnDrawMode & DRAWMODE_GHOSTEDFILL )
385 : {
386 0 : aColor = Color( (aColor.GetRed() >> 1) | 0x80,
387 0 : (aColor.GetGreen() >> 1) | 0x80,
388 0 : (aColor.GetBlue() >> 1) | 0x80);
389 : }
390 : }
391 : }
392 :
393 2423818 : if ( mpMetaFile )
394 31839 : mpMetaFile->AddAction( new MetaFillColorAction( aColor, true ) );
395 :
396 2423818 : if ( ImplIsColorTransparent( aColor ) )
397 : {
398 48666 : if ( mbFillColor )
399 : {
400 47670 : mbInitFillColor = true;
401 47670 : mbFillColor = false;
402 47670 : maFillColor = Color( COL_TRANSPARENT );
403 : }
404 : }
405 : else
406 : {
407 2375152 : if ( maFillColor != aColor )
408 : {
409 1299436 : mbInitFillColor = true;
410 1299436 : mbFillColor = true;
411 1299436 : maFillColor = aColor;
412 : }
413 : }
414 :
415 2423818 : if( mpAlphaVDev )
416 37592 : mpAlphaVDev->SetFillColor( COL_BLACK );
417 2423818 : }
418 :
419 1238050 : void OutputDevice::SetLineColor()
420 : {
421 :
422 1238050 : if ( mpMetaFile )
423 15298 : mpMetaFile->AddAction( new MetaLineColorAction( Color(), false ) );
424 :
425 1238050 : if ( mbLineColor )
426 : {
427 780861 : mbInitLineColor = true;
428 780861 : mbLineColor = false;
429 780861 : maLineColor = Color( COL_TRANSPARENT );
430 : }
431 :
432 1238050 : if( mpAlphaVDev )
433 9187 : mpAlphaVDev->SetLineColor();
434 1238050 : }
435 :
436 2707473 : void OutputDevice::SetLineColor( const Color& rColor )
437 : {
438 :
439 2707473 : Color aColor = ImplDrawModeToColor( rColor );
440 :
441 2707473 : if( mpMetaFile )
442 39093 : mpMetaFile->AddAction( new MetaLineColorAction( aColor, true ) );
443 :
444 2707473 : if( ImplIsColorTransparent( aColor ) )
445 : {
446 216422 : if ( mbLineColor )
447 : {
448 54540 : mbInitLineColor = true;
449 54540 : mbLineColor = false;
450 54540 : maLineColor = Color( COL_TRANSPARENT );
451 : }
452 : }
453 : else
454 : {
455 2491051 : if( maLineColor != aColor )
456 : {
457 1702926 : mbInitLineColor = true;
458 1702926 : mbLineColor = true;
459 1702926 : maLineColor = aColor;
460 : }
461 : }
462 :
463 2707473 : if( mpAlphaVDev )
464 40589 : mpAlphaVDev->SetLineColor( COL_BLACK );
465 2707473 : }
466 :
467 127779 : void OutputDevice::SetBackground()
468 : {
469 :
470 127779 : maBackground = Wallpaper();
471 127779 : mbBackground = false;
472 :
473 127779 : if( mpAlphaVDev )
474 0 : mpAlphaVDev->SetBackground();
475 127779 : }
476 :
477 1244956 : void OutputDevice::SetBackground( const Wallpaper& rBackground )
478 : {
479 :
480 1244956 : maBackground = rBackground;
481 :
482 1244956 : if( rBackground.GetStyle() == WALLPAPER_NULL )
483 39936 : mbBackground = false;
484 : else
485 1205020 : mbBackground = true;
486 :
487 1244956 : if( mpAlphaVDev )
488 0 : mpAlphaVDev->SetBackground( rBackground );
489 1244956 : }
490 :
491 1534147 : void OutputDevice::SetFont( const vcl::Font& rNewFont )
492 : {
493 :
494 1534147 : vcl::Font aFont( rNewFont );
495 1534147 : aFont.SetLanguage(rNewFont.GetLanguage());
496 1534147 : if ( mnDrawMode & (DRAWMODE_BLACKTEXT | DRAWMODE_WHITETEXT | DRAWMODE_GRAYTEXT | DRAWMODE_GHOSTEDTEXT | DRAWMODE_SETTINGSTEXT |
497 : DRAWMODE_BLACKFILL | DRAWMODE_WHITEFILL | DRAWMODE_GRAYFILL | DRAWMODE_NOFILL |
498 : DRAWMODE_GHOSTEDFILL | DRAWMODE_SETTINGSFILL ) )
499 : {
500 0 : Color aTextColor( aFont.GetColor() );
501 :
502 0 : if ( mnDrawMode & DRAWMODE_BLACKTEXT )
503 0 : aTextColor = Color( COL_BLACK );
504 0 : else if ( mnDrawMode & DRAWMODE_WHITETEXT )
505 0 : aTextColor = Color( COL_WHITE );
506 0 : else if ( mnDrawMode & DRAWMODE_GRAYTEXT )
507 : {
508 0 : const sal_uInt8 cLum = aTextColor.GetLuminance();
509 0 : aTextColor = Color( cLum, cLum, cLum );
510 : }
511 0 : else if ( mnDrawMode & DRAWMODE_SETTINGSTEXT )
512 0 : aTextColor = GetSettings().GetStyleSettings().GetFontColor();
513 :
514 0 : if ( mnDrawMode & DRAWMODE_GHOSTEDTEXT )
515 : {
516 0 : aTextColor = Color( (aTextColor.GetRed() >> 1 ) | 0x80,
517 0 : (aTextColor.GetGreen() >> 1 ) | 0x80,
518 0 : (aTextColor.GetBlue() >> 1 ) | 0x80 );
519 : }
520 :
521 0 : aFont.SetColor( aTextColor );
522 :
523 0 : bool bTransFill = aFont.IsTransparent();
524 0 : if ( !bTransFill )
525 : {
526 0 : Color aTextFillColor( aFont.GetFillColor() );
527 :
528 0 : if ( mnDrawMode & DRAWMODE_BLACKFILL )
529 0 : aTextFillColor = Color( COL_BLACK );
530 0 : else if ( mnDrawMode & DRAWMODE_WHITEFILL )
531 0 : aTextFillColor = Color( COL_WHITE );
532 0 : else if ( mnDrawMode & DRAWMODE_GRAYFILL )
533 : {
534 0 : const sal_uInt8 cLum = aTextFillColor.GetLuminance();
535 0 : aTextFillColor = Color( cLum, cLum, cLum );
536 : }
537 0 : else if( mnDrawMode & DRAWMODE_SETTINGSFILL )
538 0 : aTextFillColor = GetSettings().GetStyleSettings().GetWindowColor();
539 0 : else if ( mnDrawMode & DRAWMODE_NOFILL )
540 : {
541 0 : aTextFillColor = Color( COL_TRANSPARENT );
542 0 : bTransFill = true;
543 : }
544 :
545 0 : if ( !bTransFill && (mnDrawMode & DRAWMODE_GHOSTEDFILL) )
546 : {
547 0 : aTextFillColor = Color( (aTextFillColor.GetRed() >> 1) | 0x80,
548 0 : (aTextFillColor.GetGreen() >> 1) | 0x80,
549 0 : (aTextFillColor.GetBlue() >> 1) | 0x80 );
550 : }
551 :
552 0 : aFont.SetFillColor( aTextFillColor );
553 : }
554 : }
555 :
556 1534147 : if ( mpMetaFile )
557 : {
558 85857 : mpMetaFile->AddAction( new MetaFontAction( aFont ) );
559 : // the color and alignment actions don't belong here
560 : // TODO: get rid of them without breaking anything...
561 85857 : mpMetaFile->AddAction( new MetaTextAlignAction( aFont.GetAlign() ) );
562 85857 : mpMetaFile->AddAction( new MetaTextFillColorAction( aFont.GetFillColor(), !aFont.IsTransparent() ) );
563 : }
564 :
565 1534147 : if ( !maFont.IsSameInstance( aFont ) )
566 : {
567 : // Optimization MT/HDU: COL_TRANSPARENT means SetFont should ignore the font color,
568 : // because SetTextColor() is used for this.
569 : // #i28759# maTextColor might have been changed behind our back, commit then, too.
570 4112547 : if( aFont.GetColor() != COL_TRANSPARENT
571 4112547 : && (aFont.GetColor() != maFont.GetColor() || aFont.GetColor() != maTextColor ) )
572 : {
573 129850 : maTextColor = aFont.GetColor();
574 129850 : mbInitTextColor = true;
575 129850 : if( mpMetaFile )
576 2128 : mpMetaFile->AddAction( new MetaTextColorAction( aFont.GetColor() ) );
577 : }
578 1370849 : maFont = aFont;
579 1370849 : mbNewFont = true;
580 :
581 1370849 : if( mpAlphaVDev )
582 : {
583 : // #i30463#
584 : // Since SetFont might change the text color, apply that only
585 : // selectively to alpha vdev (which normally paints opaque text
586 : // with COL_BLACK)
587 13767 : if( aFont.GetColor() != COL_TRANSPARENT )
588 : {
589 79 : mpAlphaVDev->SetTextColor( COL_BLACK );
590 79 : aFont.SetColor( COL_TRANSPARENT );
591 : }
592 :
593 13767 : mpAlphaVDev->SetFont( aFont );
594 : }
595 1534147 : }
596 1534147 : }
597 :
598 :
599 1656897 : void OutputDevice::InitLineColor()
600 : {
601 : DBG_TESTSOLARMUTEX();
602 :
603 1656897 : if( mbLineColor )
604 : {
605 925449 : if( ROP_0 == meRasterOp )
606 0 : mpGraphics->SetROPLineColor( SAL_ROP_0 );
607 925449 : else if( ROP_1 == meRasterOp )
608 0 : mpGraphics->SetROPLineColor( SAL_ROP_1 );
609 925449 : else if( ROP_INVERT == meRasterOp )
610 0 : mpGraphics->SetROPLineColor( SAL_ROP_INVERT );
611 : else
612 925449 : mpGraphics->SetLineColor( ImplColorToSal( maLineColor ) );
613 : }
614 : else
615 731448 : mpGraphics->SetLineColor();
616 :
617 1656897 : mbInitLineColor = false;
618 1656897 : }
619 :
620 :
621 942174 : void OutputDevice::InitFillColor()
622 : {
623 : DBG_TESTSOLARMUTEX();
624 :
625 942174 : if( mbFillColor )
626 : {
627 932700 : if( ROP_0 == meRasterOp )
628 0 : mpGraphics->SetROPFillColor( SAL_ROP_0 );
629 932700 : else if( ROP_1 == meRasterOp )
630 0 : mpGraphics->SetROPFillColor( SAL_ROP_1 );
631 932700 : else if( ROP_INVERT == meRasterOp )
632 0 : mpGraphics->SetROPFillColor( SAL_ROP_INVERT );
633 : else
634 932700 : mpGraphics->SetFillColor( ImplColorToSal( maFillColor ) );
635 : }
636 : else
637 9474 : mpGraphics->SetFillColor();
638 :
639 942174 : mbInitFillColor = false;
640 942174 : }
641 :
642 624776 : void OutputDevice::ImplReleaseFonts()
643 : {
644 624776 : mpGraphics->ReleaseFonts();
645 624776 : mbNewFont = true;
646 624776 : mbInitFont = true;
647 :
648 624776 : if ( mpFontEntry )
649 : {
650 154470 : mpFontCache->Release( mpFontEntry );
651 154470 : mpFontEntry = NULL;
652 : }
653 :
654 624776 : if ( mpGetDevFontList )
655 : {
656 7909 : delete mpGetDevFontList;
657 7909 : mpGetDevFontList = NULL;
658 : }
659 :
660 624776 : if ( mpGetDevSizeList )
661 : {
662 1680 : delete mpGetDevSizeList;
663 1680 : mpGetDevSizeList = NULL;
664 : }
665 626009 : }
666 :
667 :
668 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|