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 <vcl/outdevstate.hxx>
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 "outdev.h"
37 : #include "outdata.hxx"
38 : #include <outdevstatestack.hxx>
39 : #include "salgdi.hxx"
40 : #include "sallayout.hxx"
41 :
42 1174849 : OutDevState::OutDevState()
43 : : mpMapMode(0)
44 : , mbMapActive(false)
45 : , mpClipRegion(0)
46 : , mpLineColor(0)
47 : , mpFillColor(0)
48 : , mpFont(0)
49 : , mpTextColor(0)
50 : , mpTextFillColor(0)
51 : , mpTextLineColor(0)
52 : , mpOverlineColor(0)
53 : , mpRefPoint(0)
54 : , meTextAlign(ALIGN_TOP)
55 : , meRasterOp(ROP_OVERPAINT)
56 : , mnTextLayoutMode(TEXT_LAYOUT_DEFAULT)
57 : , meTextLanguage(0)
58 1174849 : , mnFlags(PushFlags::NONE)
59 : {
60 1174849 : }
61 :
62 1174422 : OutDevState::~OutDevState()
63 : {
64 1174422 : delete mpLineColor;
65 1174422 : delete mpFillColor;
66 1174422 : delete mpFont;
67 1174422 : delete mpTextColor;
68 1174422 : delete mpTextFillColor;
69 1174422 : delete mpTextLineColor;
70 1174422 : delete mpOverlineColor;
71 1174422 : delete mpMapMode;
72 1174422 : delete mpClipRegion;
73 1174422 : delete mpRefPoint;
74 1174422 : }
75 :
76 907009 : void OutputDevice::Push( PushFlags nFlags )
77 : {
78 :
79 907009 : if ( mpMetaFile )
80 61902 : mpMetaFile->AddAction( new MetaPushAction( nFlags ) );
81 :
82 907009 : OutDevState* pState = new OutDevState;
83 :
84 907009 : pState->mnFlags = nFlags;
85 :
86 907009 : if (nFlags & PushFlags::LINECOLOR && mbLineColor)
87 : {
88 146332 : pState->mpLineColor = new Color( maLineColor );
89 : }
90 907009 : if (nFlags & PushFlags::FILLCOLOR && mbFillColor)
91 : {
92 191364 : pState->mpFillColor = new Color( maFillColor );
93 : }
94 907009 : if ( nFlags & PushFlags::FONT )
95 176675 : pState->mpFont = new vcl::Font( maFont );
96 907009 : if ( nFlags & PushFlags::TEXTCOLOR )
97 165739 : pState->mpTextColor = new Color( GetTextColor() );
98 907009 : if (nFlags & PushFlags::TEXTFILLCOLOR && IsTextFillColor())
99 : {
100 1048 : pState->mpTextFillColor = new Color( GetTextFillColor() );
101 : }
102 907009 : if (nFlags & PushFlags::TEXTLINECOLOR && IsTextLineColor())
103 : {
104 852 : pState->mpTextLineColor = new Color( GetTextLineColor() );
105 : }
106 907009 : if (nFlags & PushFlags::OVERLINECOLOR && IsOverlineColor())
107 : {
108 848 : pState->mpOverlineColor = new Color( GetOverlineColor() );
109 : }
110 907009 : if ( nFlags & PushFlags::TEXTALIGN )
111 76998 : pState->meTextAlign = GetTextAlign();
112 907009 : if( nFlags & PushFlags::TEXTLAYOUTMODE )
113 367780 : pState->mnTextLayoutMode = GetLayoutMode();
114 907009 : if( nFlags & PushFlags::TEXTLANGUAGE )
115 366431 : pState->meTextLanguage = GetDigitLanguage();
116 907009 : if ( nFlags & PushFlags::RASTEROP )
117 77006 : pState->meRasterOp = GetRasterOp();
118 907009 : if ( nFlags & PushFlags::MAPMODE )
119 : {
120 179885 : pState->mpMapMode = new MapMode( maMapMode );
121 179885 : pState->mbMapActive = mbMap;
122 : }
123 907009 : if (nFlags & PushFlags::CLIPREGION && mbClipRegion)
124 : {
125 166264 : pState->mpClipRegion = new vcl::Region( maRegion );
126 : }
127 907009 : if (nFlags & PushFlags::REFPOINT && mbRefPoint)
128 : {
129 0 : pState->mpRefPoint = new Point( maRefPoint );
130 : }
131 :
132 907009 : mpOutDevStateStack->push_back( pState );
133 :
134 907009 : if( mpAlphaVDev )
135 28614 : mpAlphaVDev->Push();
136 907009 : }
137 :
138 907009 : void OutputDevice::Pop()
139 : {
140 :
141 907009 : if( mpMetaFile )
142 61902 : mpMetaFile->AddAction( new MetaPopAction() );
143 :
144 907009 : GDIMetaFile* pOldMetaFile = mpMetaFile;
145 907009 : mpMetaFile = NULL;
146 :
147 907009 : if ( mpOutDevStateStack->empty() )
148 : {
149 : SAL_WARN( "vcl.gdi", "OutputDevice::Pop() without OutputDevice::Push()" );
150 907009 : return;
151 : }
152 907009 : const OutDevState& rState = mpOutDevStateStack->back();
153 :
154 907009 : if( mpAlphaVDev )
155 28614 : mpAlphaVDev->Pop();
156 :
157 907009 : if ( rState.mnFlags & PushFlags::LINECOLOR )
158 : {
159 228289 : if ( rState.mpLineColor )
160 146332 : SetLineColor( *rState.mpLineColor );
161 : else
162 81957 : SetLineColor();
163 : }
164 :
165 907009 : if ( rState.mnFlags & PushFlags::FILLCOLOR )
166 : {
167 204276 : if ( rState.mpFillColor )
168 191364 : SetFillColor( *rState.mpFillColor );
169 : else
170 12912 : SetFillColor();
171 : }
172 :
173 907009 : if ( rState.mnFlags & PushFlags::FONT )
174 176675 : SetFont( *rState.mpFont );
175 :
176 907009 : if ( rState.mnFlags & PushFlags::TEXTCOLOR )
177 165739 : SetTextColor( *rState.mpTextColor );
178 :
179 907009 : if ( rState.mnFlags & PushFlags::TEXTFILLCOLOR )
180 : {
181 76998 : if ( rState.mpTextFillColor )
182 1048 : SetTextFillColor( *rState.mpTextFillColor );
183 : else
184 75950 : SetTextFillColor();
185 : }
186 :
187 907009 : if ( rState.mnFlags & PushFlags::TEXTLINECOLOR )
188 : {
189 76998 : if ( rState.mpTextLineColor )
190 852 : SetTextLineColor( *rState.mpTextLineColor );
191 : else
192 76146 : SetTextLineColor();
193 : }
194 :
195 907009 : if ( rState.mnFlags & PushFlags::OVERLINECOLOR )
196 : {
197 76998 : if ( rState.mpOverlineColor )
198 848 : SetOverlineColor( *rState.mpOverlineColor );
199 : else
200 76150 : SetOverlineColor();
201 : }
202 :
203 907009 : if ( rState.mnFlags & PushFlags::TEXTALIGN )
204 76998 : SetTextAlign( rState.meTextAlign );
205 :
206 907009 : if( rState.mnFlags & PushFlags::TEXTLAYOUTMODE )
207 367780 : SetLayoutMode( rState.mnTextLayoutMode );
208 :
209 907009 : if( rState.mnFlags & PushFlags::TEXTLANGUAGE )
210 366431 : SetDigitLanguage( rState.meTextLanguage );
211 :
212 907009 : if ( rState.mnFlags & PushFlags::RASTEROP )
213 77006 : SetRasterOp( rState.meRasterOp );
214 :
215 907009 : if ( rState.mnFlags & PushFlags::MAPMODE )
216 : {
217 179885 : if ( rState.mpMapMode )
218 179885 : SetMapMode( *rState.mpMapMode );
219 : else
220 0 : SetMapMode();
221 179885 : mbMap = rState.mbMapActive;
222 : }
223 :
224 907009 : if ( rState.mnFlags & PushFlags::CLIPREGION )
225 375390 : SetDeviceClipRegion( rState.mpClipRegion );
226 :
227 907009 : if ( rState.mnFlags & PushFlags::REFPOINT )
228 : {
229 76998 : if ( rState.mpRefPoint )
230 0 : SetRefPoint( *rState.mpRefPoint );
231 : else
232 76998 : SetRefPoint();
233 : }
234 :
235 907009 : mpOutDevStateStack->pop_back();
236 :
237 907009 : mpMetaFile = pOldMetaFile;
238 : }
239 :
240 0 : sal_uInt32 OutputDevice::GetGCStackDepth() const
241 : {
242 0 : return mpOutDevStateStack->size();
243 : }
244 :
245 47992 : void OutputDevice::EnableOutput( bool bEnable )
246 : {
247 47992 : mbOutput = bEnable;
248 :
249 47992 : if( mpAlphaVDev )
250 0 : mpAlphaVDev->EnableOutput( bEnable );
251 47992 : }
252 :
253 167063 : void OutputDevice::SetAntialiasing( AntialiasingFlags nMode )
254 : {
255 167063 : if ( mnAntialiasing != nMode )
256 : {
257 18524 : mnAntialiasing = nMode;
258 18524 : mbInitFont = true;
259 :
260 18524 : if(mpGraphics)
261 : {
262 12959 : mpGraphics->setAntiAliasB2DDraw(bool(mnAntialiasing & AntialiasingFlags::EnableB2dDraw));
263 : }
264 : }
265 :
266 167063 : if( mpAlphaVDev )
267 0 : mpAlphaVDev->SetAntialiasing( nMode );
268 167063 : }
269 :
270 114263 : void OutputDevice::SetDrawMode( DrawModeFlags nDrawMode )
271 : {
272 :
273 114263 : mnDrawMode = nDrawMode;
274 :
275 114263 : if( mpAlphaVDev )
276 0 : mpAlphaVDev->SetDrawMode( nDrawMode );
277 114263 : }
278 :
279 1334450 : void OutputDevice::SetLayoutMode( ComplexTextLayoutMode nTextLayoutMode )
280 : {
281 1334450 : if( mpMetaFile )
282 23258 : mpMetaFile->AddAction( new MetaLayoutModeAction( nTextLayoutMode ) );
283 :
284 1334450 : mnTextLayoutMode = nTextLayoutMode;
285 :
286 1334450 : if( mpAlphaVDev )
287 52158 : mpAlphaVDev->SetLayoutMode( nTextLayoutMode );
288 1334450 : }
289 :
290 1768739 : void OutputDevice::SetDigitLanguage( LanguageType eTextLanguage )
291 : {
292 1768739 : if( mpMetaFile )
293 28755 : mpMetaFile->AddAction( new MetaTextLanguageAction( eTextLanguage ) );
294 :
295 1768739 : meTextLanguage = eTextLanguage;
296 :
297 1768739 : if( mpAlphaVDev )
298 51236 : mpAlphaVDev->SetDigitLanguage( eTextLanguage );
299 1768739 : }
300 :
301 135551 : void OutputDevice::SetRasterOp( RasterOp eRasterOp )
302 : {
303 :
304 135551 : if ( mpMetaFile )
305 14601 : mpMetaFile->AddAction( new MetaRasterOpAction( eRasterOp ) );
306 :
307 135551 : if ( meRasterOp != eRasterOp )
308 : {
309 7256 : meRasterOp = eRasterOp;
310 7256 : mbInitLineColor = mbInitFillColor = true;
311 :
312 7256 : if( mpGraphics || AcquireGraphics() )
313 7256 : mpGraphics->SetXORMode( (ROP_INVERT == meRasterOp) || (ROP_XOR == meRasterOp), ROP_INVERT == meRasterOp );
314 : }
315 :
316 135551 : if( mpAlphaVDev )
317 25670 : mpAlphaVDev->SetRasterOp( eRasterOp );
318 135551 : }
319 :
320 :
321 371538 : void OutputDevice::SetFillColor()
322 : {
323 :
324 371538 : if ( mpMetaFile )
325 7194 : mpMetaFile->AddAction( new MetaFillColorAction( Color(), false ) );
326 :
327 371538 : if ( mbFillColor )
328 : {
329 61898 : mbInitFillColor = true;
330 61898 : mbFillColor = false;
331 61898 : maFillColor = Color( COL_TRANSPARENT );
332 : }
333 :
334 371538 : if( mpAlphaVDev )
335 3238 : mpAlphaVDev->SetFillColor();
336 371538 : }
337 :
338 1871380 : void OutputDevice::SetFillColor( const Color& rColor )
339 : {
340 :
341 1871380 : Color aColor( rColor );
342 :
343 1871380 : if( mnDrawMode & ( DrawModeFlags::BlackFill | DrawModeFlags::WhiteFill |
344 : DrawModeFlags::GrayFill | DrawModeFlags::NoFill |
345 1871380 : DrawModeFlags::GhostedFill | DrawModeFlags::SettingsFill ) )
346 : {
347 79 : if( !ImplIsColorTransparent( aColor ) )
348 : {
349 70 : if( mnDrawMode & DrawModeFlags::BlackFill )
350 : {
351 0 : aColor = Color( COL_BLACK );
352 : }
353 70 : else if( mnDrawMode & DrawModeFlags::WhiteFill )
354 : {
355 70 : aColor = Color( COL_WHITE );
356 : }
357 0 : else if( mnDrawMode & DrawModeFlags::GrayFill )
358 : {
359 0 : const sal_uInt8 cLum = aColor.GetLuminance();
360 0 : aColor = Color( cLum, cLum, cLum );
361 : }
362 0 : else if( mnDrawMode & DrawModeFlags::NoFill )
363 : {
364 0 : aColor = Color( COL_TRANSPARENT );
365 : }
366 0 : else if( mnDrawMode & DrawModeFlags::SettingsFill )
367 : {
368 0 : aColor = GetSettings().GetStyleSettings().GetWindowColor();
369 : }
370 :
371 70 : if( mnDrawMode & DrawModeFlags::GhostedFill )
372 : {
373 0 : aColor = Color( (aColor.GetRed() >> 1) | 0x80,
374 0 : (aColor.GetGreen() >> 1) | 0x80,
375 0 : (aColor.GetBlue() >> 1) | 0x80);
376 : }
377 : }
378 : }
379 :
380 1871380 : if ( mpMetaFile )
381 52011 : mpMetaFile->AddAction( new MetaFillColorAction( aColor, true ) );
382 :
383 1871380 : if ( ImplIsColorTransparent( aColor ) )
384 : {
385 19544 : if ( mbFillColor )
386 : {
387 17458 : mbInitFillColor = true;
388 17458 : mbFillColor = false;
389 17458 : maFillColor = Color( COL_TRANSPARENT );
390 : }
391 : }
392 : else
393 : {
394 1851836 : if ( maFillColor != aColor )
395 : {
396 1000573 : mbInitFillColor = true;
397 1000573 : mbFillColor = true;
398 1000573 : maFillColor = aColor;
399 : }
400 : }
401 :
402 1871380 : if( mpAlphaVDev )
403 70481 : mpAlphaVDev->SetFillColor( COL_BLACK );
404 1871380 : }
405 :
406 1030479 : void OutputDevice::SetLineColor()
407 : {
408 :
409 1030479 : if ( mpMetaFile )
410 17532 : mpMetaFile->AddAction( new MetaLineColorAction( Color(), false ) );
411 :
412 1030479 : if ( mbLineColor )
413 : {
414 571251 : mbInitLineColor = true;
415 571251 : mbLineColor = false;
416 571251 : maLineColor = Color( COL_TRANSPARENT );
417 : }
418 :
419 1030479 : if( mpAlphaVDev )
420 17181 : mpAlphaVDev->SetLineColor();
421 1030479 : }
422 :
423 1851736 : void OutputDevice::SetLineColor( const Color& rColor )
424 : {
425 :
426 1851736 : Color aColor = ImplDrawModeToColor( rColor );
427 :
428 1851736 : if( mpMetaFile )
429 64688 : mpMetaFile->AddAction( new MetaLineColorAction( aColor, true ) );
430 :
431 1851736 : if( ImplIsColorTransparent( aColor ) )
432 : {
433 117460 : if ( mbLineColor )
434 : {
435 34780 : mbInitLineColor = true;
436 34780 : mbLineColor = false;
437 34780 : maLineColor = Color( COL_TRANSPARENT );
438 : }
439 : }
440 : else
441 : {
442 1734276 : if( maLineColor != aColor )
443 : {
444 1139098 : mbInitLineColor = true;
445 1139098 : mbLineColor = true;
446 1139098 : maLineColor = aColor;
447 : }
448 : }
449 :
450 1851736 : if( mpAlphaVDev )
451 76251 : mpAlphaVDev->SetLineColor( COL_BLACK );
452 1851736 : }
453 :
454 80864 : void OutputDevice::SetBackground()
455 : {
456 :
457 80864 : maBackground = Wallpaper();
458 80864 : mbBackground = false;
459 :
460 80864 : if( mpAlphaVDev )
461 10 : mpAlphaVDev->SetBackground();
462 80864 : }
463 :
464 712649 : void OutputDevice::SetBackground( const Wallpaper& rBackground )
465 : {
466 :
467 712649 : maBackground = rBackground;
468 :
469 712649 : if( rBackground.GetStyle() == WALLPAPER_NULL )
470 26425 : mbBackground = false;
471 : else
472 686224 : mbBackground = true;
473 :
474 712649 : if( mpAlphaVDev )
475 0 : mpAlphaVDev->SetBackground( rBackground );
476 712649 : }
477 :
478 1391535 : void OutputDevice::SetFont( const vcl::Font& rNewFont )
479 : {
480 :
481 1391535 : vcl::Font aFont( rNewFont );
482 1391535 : aFont.SetLanguage(rNewFont.GetLanguage());
483 1391535 : if ( mnDrawMode & (DrawModeFlags::BlackText | DrawModeFlags::WhiteText | DrawModeFlags::GrayText | DrawModeFlags::GhostedText | DrawModeFlags::SettingsText |
484 : DrawModeFlags::BlackFill | DrawModeFlags::WhiteFill | DrawModeFlags::GrayFill | DrawModeFlags::NoFill |
485 1391535 : DrawModeFlags::GhostedFill | DrawModeFlags::SettingsFill ) )
486 : {
487 18 : Color aTextColor( aFont.GetColor() );
488 :
489 18 : if ( mnDrawMode & DrawModeFlags::BlackText )
490 0 : aTextColor = Color( COL_BLACK );
491 18 : else if ( mnDrawMode & DrawModeFlags::WhiteText )
492 18 : aTextColor = Color( COL_WHITE );
493 0 : else if ( mnDrawMode & DrawModeFlags::GrayText )
494 : {
495 0 : const sal_uInt8 cLum = aTextColor.GetLuminance();
496 0 : aTextColor = Color( cLum, cLum, cLum );
497 : }
498 0 : else if ( mnDrawMode & DrawModeFlags::SettingsText )
499 0 : aTextColor = GetSettings().GetStyleSettings().GetFontColor();
500 :
501 18 : if ( mnDrawMode & DrawModeFlags::GhostedText )
502 : {
503 0 : aTextColor = Color( (aTextColor.GetRed() >> 1 ) | 0x80,
504 0 : (aTextColor.GetGreen() >> 1 ) | 0x80,
505 0 : (aTextColor.GetBlue() >> 1 ) | 0x80 );
506 : }
507 :
508 18 : aFont.SetColor( aTextColor );
509 :
510 18 : bool bTransFill = aFont.IsTransparent();
511 18 : if ( !bTransFill )
512 : {
513 0 : Color aTextFillColor( aFont.GetFillColor() );
514 :
515 0 : if ( mnDrawMode & DrawModeFlags::BlackFill )
516 0 : aTextFillColor = Color( COL_BLACK );
517 0 : else if ( mnDrawMode & DrawModeFlags::WhiteFill )
518 0 : aTextFillColor = Color( COL_WHITE );
519 0 : else if ( mnDrawMode & DrawModeFlags::GrayFill )
520 : {
521 0 : const sal_uInt8 cLum = aTextFillColor.GetLuminance();
522 0 : aTextFillColor = Color( cLum, cLum, cLum );
523 : }
524 0 : else if( mnDrawMode & DrawModeFlags::SettingsFill )
525 0 : aTextFillColor = GetSettings().GetStyleSettings().GetWindowColor();
526 0 : else if ( mnDrawMode & DrawModeFlags::NoFill )
527 : {
528 0 : aTextFillColor = Color( COL_TRANSPARENT );
529 0 : bTransFill = true;
530 : }
531 :
532 0 : if ( !bTransFill && (mnDrawMode & DrawModeFlags::GhostedFill) )
533 : {
534 0 : aTextFillColor = Color( (aTextFillColor.GetRed() >> 1) | 0x80,
535 0 : (aTextFillColor.GetGreen() >> 1) | 0x80,
536 0 : (aTextFillColor.GetBlue() >> 1) | 0x80 );
537 : }
538 :
539 0 : aFont.SetFillColor( aTextFillColor );
540 : }
541 : }
542 :
543 1391535 : if ( mpMetaFile )
544 : {
545 53915 : mpMetaFile->AddAction( new MetaFontAction( aFont ) );
546 : // the color and alignment actions don't belong here
547 : // TODO: get rid of them without breaking anything...
548 53915 : mpMetaFile->AddAction( new MetaTextAlignAction( aFont.GetAlign() ) );
549 53915 : mpMetaFile->AddAction( new MetaTextFillColorAction( aFont.GetFillColor(), !aFont.IsTransparent() ) );
550 : }
551 :
552 1391535 : if ( !maFont.IsSameInstance( aFont ) )
553 : {
554 : // Optimization MT/HDU: COL_TRANSPARENT means SetFont should ignore the font color,
555 : // because SetTextColor() is used for this.
556 : // #i28759# maTextColor might have been changed behind our back, commit then, too.
557 3757296 : if( aFont.GetColor() != COL_TRANSPARENT
558 3757296 : && (aFont.GetColor() != maFont.GetColor() || aFont.GetColor() != maTextColor ) )
559 : {
560 103563 : maTextColor = aFont.GetColor();
561 103563 : mbInitTextColor = true;
562 103563 : if( mpMetaFile )
563 1264 : mpMetaFile->AddAction( new MetaTextColorAction( aFont.GetColor() ) );
564 : }
565 1252432 : maFont = aFont;
566 1252432 : mbNewFont = true;
567 :
568 1252432 : if( mpAlphaVDev )
569 : {
570 : // #i30463#
571 : // Since SetFont might change the text color, apply that only
572 : // selectively to alpha vdev (which normally paints opaque text
573 : // with COL_BLACK)
574 27027 : if( aFont.GetColor() != COL_TRANSPARENT )
575 : {
576 226 : mpAlphaVDev->SetTextColor( COL_BLACK );
577 226 : aFont.SetColor( COL_TRANSPARENT );
578 : }
579 :
580 27027 : mpAlphaVDev->SetFont( aFont );
581 : }
582 1391535 : }
583 1391535 : }
584 :
585 :
586 1078999 : void OutputDevice::InitLineColor()
587 : {
588 : DBG_TESTSOLARMUTEX();
589 :
590 1078999 : if( mbLineColor )
591 : {
592 577232 : if( ROP_0 == meRasterOp )
593 0 : mpGraphics->SetROPLineColor( SAL_ROP_0 );
594 577232 : else if( ROP_1 == meRasterOp )
595 0 : mpGraphics->SetROPLineColor( SAL_ROP_1 );
596 577232 : else if( ROP_INVERT == meRasterOp )
597 0 : mpGraphics->SetROPLineColor( SAL_ROP_INVERT );
598 : else
599 577232 : mpGraphics->SetLineColor( ImplColorToSal( maLineColor ) );
600 : }
601 : else
602 501767 : mpGraphics->SetLineColor();
603 :
604 1078999 : mbInitLineColor = false;
605 1078999 : }
606 :
607 :
608 809291 : void OutputDevice::InitFillColor()
609 : {
610 : DBG_TESTSOLARMUTEX();
611 :
612 809291 : if( mbFillColor )
613 : {
614 804562 : if( ROP_0 == meRasterOp )
615 0 : mpGraphics->SetROPFillColor( SAL_ROP_0 );
616 804562 : else if( ROP_1 == meRasterOp )
617 0 : mpGraphics->SetROPFillColor( SAL_ROP_1 );
618 804562 : else if( ROP_INVERT == meRasterOp )
619 0 : mpGraphics->SetROPFillColor( SAL_ROP_INVERT );
620 : else
621 804562 : mpGraphics->SetFillColor( ImplColorToSal( maFillColor ) );
622 : }
623 : else
624 4729 : mpGraphics->SetFillColor();
625 :
626 809291 : mbInitFillColor = false;
627 809291 : }
628 :
629 410096 : void OutputDevice::ImplReleaseFonts()
630 : {
631 410096 : mpGraphics->ReleaseFonts();
632 :
633 410096 : mbNewFont = true;
634 410096 : mbInitFont = true;
635 :
636 410096 : if ( mpFontEntry )
637 : {
638 101695 : mpFontCache->Release( mpFontEntry );
639 101695 : mpFontEntry = NULL;
640 : }
641 :
642 410096 : if ( mpGetDevFontList )
643 : {
644 4534 : delete mpGetDevFontList;
645 4534 : mpGetDevFontList = NULL;
646 : }
647 :
648 410096 : if ( mpGetDevSizeList )
649 : {
650 981 : delete mpGetDevSizeList;
651 981 : mpGetDevSizeList = NULL;
652 : }
653 410897 : }
654 :
655 :
656 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|