LibreOffice Module vcl (master)  1
outdevstate.cxx
Go to the documentation of this file.
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/config.h>
21 #include <sal/log.hxx>
22 
23 #include <tools/debug.hxx>
24 #include <vcl/gdimtf.hxx>
25 #include <vcl/metaact.hxx>
26 #include <vcl/outdevstate.hxx>
27 #include <vcl/virdev.hxx>
28 #include <vcl/settings.hxx>
29 
30 #include <outdev.h>
31 #include <salgdi.hxx>
32 
34  : mbMapActive(false)
35  , meTextAlign(ALIGN_TOP)
36  , meRasterOp(RasterOp::OverPaint)
37  , mnTextLayoutMode(ComplexTextLayoutFlags::Default)
38  , meTextLanguage(0)
40 {
41 }
42 
44 
46 {
47  mpLineColor.reset();
48  mpFillColor.reset();
49  mpFont.reset();
50  mpTextColor.reset();
51  mpTextFillColor.reset();
52  mpTextLineColor.reset();
53  mpOverlineColor.reset();
54  mpMapMode.reset();
55  mpClipRegion.reset();
56  mpRefPoint.reset();
57 }
58 
60 {
61 
62  if ( mpMetaFile )
63  mpMetaFile->AddAction( new MetaPushAction( nFlags ) );
64 
65  maOutDevStateStack.emplace_back();
66  OutDevState& rState = maOutDevStateStack.back();
67 
68  rState.mnFlags = nFlags;
69 
70  if (nFlags & PushFlags::LINECOLOR && mbLineColor)
71  {
72  rState.mpLineColor = maLineColor;
73  }
74  if (nFlags & PushFlags::FILLCOLOR && mbFillColor)
75  {
76  rState.mpFillColor = maFillColor;
77  }
78  if ( nFlags & PushFlags::FONT )
79  rState.mpFont.reset( new vcl::Font( maFont ) );
80  if ( nFlags & PushFlags::TEXTCOLOR )
81  rState.mpTextColor = GetTextColor();
82  if (nFlags & PushFlags::TEXTFILLCOLOR && IsTextFillColor())
83  {
85  }
86  if (nFlags & PushFlags::TEXTLINECOLOR && IsTextLineColor())
87  {
89  }
90  if (nFlags & PushFlags::OVERLINECOLOR && IsOverlineColor())
91  {
93  }
94  if ( nFlags & PushFlags::TEXTALIGN )
95  rState.meTextAlign = GetTextAlign();
96  if( nFlags & PushFlags::TEXTLAYOUTMODE )
98  if( nFlags & PushFlags::TEXTLANGUAGE )
100  if ( nFlags & PushFlags::RASTEROP )
101  rState.meRasterOp = GetRasterOp();
102  if ( nFlags & PushFlags::MAPMODE )
103  {
104  rState.mpMapMode = maMapMode;
105  rState.mbMapActive = mbMap;
106  }
107  if (nFlags & PushFlags::CLIPREGION && mbClipRegion)
108  {
109  rState.mpClipRegion.reset( new vcl::Region( maRegion ) );
110  }
111  if (nFlags & PushFlags::REFPOINT && mbRefPoint)
112  {
113  rState.mpRefPoint = maRefPoint;
114  }
115 
116  if( mpAlphaVDev )
117  mpAlphaVDev->Push();
118 }
119 
121 {
122 
123  if( mpMetaFile )
124  mpMetaFile->AddAction( new MetaPopAction() );
125 
126  GDIMetaFile* pOldMetaFile = mpMetaFile;
127  mpMetaFile = nullptr;
128 
129  if ( maOutDevStateStack.empty() )
130  {
131  SAL_WARN( "vcl.gdi", "OutputDevice::Pop() without OutputDevice::Push()" );
132  return;
133  }
134  const OutDevState& rState = maOutDevStateStack.back();
135 
136  if( mpAlphaVDev )
137  mpAlphaVDev->Pop();
138 
139  if ( rState.mnFlags & PushFlags::LINECOLOR )
140  {
141  if ( rState.mpLineColor )
142  SetLineColor( *rState.mpLineColor );
143  else
144  SetLineColor();
145  }
146 
147  if ( rState.mnFlags & PushFlags::FILLCOLOR )
148  {
149  if ( rState.mpFillColor )
150  SetFillColor( *rState.mpFillColor );
151  else
152  SetFillColor();
153  }
154 
155  if ( rState.mnFlags & PushFlags::FONT )
156  SetFont( *rState.mpFont );
157 
158  if ( rState.mnFlags & PushFlags::TEXTCOLOR )
159  SetTextColor( *rState.mpTextColor );
160 
161  if ( rState.mnFlags & PushFlags::TEXTFILLCOLOR )
162  {
163  if ( rState.mpTextFillColor )
165  else
167  }
168 
169  if ( rState.mnFlags & PushFlags::TEXTLINECOLOR )
170  {
171  if ( rState.mpTextLineColor )
173  else
175  }
176 
177  if ( rState.mnFlags & PushFlags::OVERLINECOLOR )
178  {
179  if ( rState.mpOverlineColor )
181  else
183  }
184 
185  if ( rState.mnFlags & PushFlags::TEXTALIGN )
186  SetTextAlign( rState.meTextAlign );
187 
188  if( rState.mnFlags & PushFlags::TEXTLAYOUTMODE )
190 
191  if( rState.mnFlags & PushFlags::TEXTLANGUAGE )
193 
194  if ( rState.mnFlags & PushFlags::RASTEROP )
195  SetRasterOp( rState.meRasterOp );
196 
197  if ( rState.mnFlags & PushFlags::MAPMODE )
198  {
199  if ( rState.mpMapMode )
200  SetMapMode( *rState.mpMapMode );
201  else
202  SetMapMode();
203  mbMap = rState.mbMapActive;
204  }
205 
206  if ( rState.mnFlags & PushFlags::CLIPREGION )
207  SetDeviceClipRegion( rState.mpClipRegion.get() );
208 
209  if ( rState.mnFlags & PushFlags::REFPOINT )
210  {
211  if ( rState.mpRefPoint )
212  SetRefPoint( *rState.mpRefPoint );
213  else
214  SetRefPoint();
215  }
216 
217  maOutDevStateStack.pop_back();
218 
219  mpMetaFile = pOldMetaFile;
220 }
221 
223 {
224  return maOutDevStateStack.size();
225 }
226 
228 {
229  sal_uInt32 nCount = GetGCStackDepth();
230  while( nCount-- )
231  Pop();
232 }
233 
234 void OutputDevice::EnableOutput( bool bEnable )
235 {
236  mbOutput = bEnable;
237 
238  if( mpAlphaVDev )
239  mpAlphaVDev->EnableOutput( bEnable );
240 }
241 
243 {
244  if ( mnAntialiasing != nMode )
245  {
246  mnAntialiasing = nMode;
247  mbInitFont = true;
248 
249  if(mpGraphics)
250  {
252  }
253  }
254 
255  if( mpAlphaVDev )
256  mpAlphaVDev->SetAntialiasing( nMode );
257 }
258 
260 {
261 
262  mnDrawMode = nDrawMode;
263 
264  if( mpAlphaVDev )
265  mpAlphaVDev->SetDrawMode( nDrawMode );
266 }
267 
269 {
270  if( mpMetaFile )
271  mpMetaFile->AddAction( new MetaLayoutModeAction( nTextLayoutMode ) );
272 
273  mnTextLayoutMode = nTextLayoutMode;
274 
275  if( mpAlphaVDev )
276  mpAlphaVDev->SetLayoutMode( nTextLayoutMode );
277 }
278 
280 {
281  if( mpMetaFile )
282  mpMetaFile->AddAction( new MetaTextLanguageAction( eTextLanguage ) );
283 
284  meTextLanguage = eTextLanguage;
285 
286  if( mpAlphaVDev )
287  mpAlphaVDev->SetDigitLanguage( eTextLanguage );
288 }
289 
291 {
292 
293  if ( mpMetaFile )
294  mpMetaFile->AddAction( new MetaRasterOpAction( eRasterOp ) );
295 
296  if ( meRasterOp != eRasterOp )
297  {
298  meRasterOp = eRasterOp;
300 
301  if( mpGraphics || AcquireGraphics() )
303  }
304 
305  if( mpAlphaVDev )
306  mpAlphaVDev->SetRasterOp( eRasterOp );
307 }
308 
309 
311 {
312 
313  if ( mpMetaFile )
314  mpMetaFile->AddAction( new MetaFillColorAction( Color(), false ) );
315 
316  if ( mbFillColor )
317  {
318  mbInitFillColor = true;
319  mbFillColor = false;
321  }
322 
323  if( mpAlphaVDev )
325 }
326 
327 void OutputDevice::SetFillColor( const Color& rColor )
328 {
329 
330  Color aColor( rColor );
331 
335  {
336  if( !aColor.IsTransparent() )
337  {
339  {
340  aColor = COL_BLACK;
341  }
343  {
344  aColor = COL_WHITE;
345  }
347  {
348  const sal_uInt8 cLum = aColor.GetLuminance();
349  aColor = Color( cLum, cLum, cLum );
350  }
351  else if( mnDrawMode & DrawModeFlags::NoFill )
352  {
353  aColor = COL_TRANSPARENT;
354  }
356  {
358  }
359  }
360  }
361 
362  if ( mpMetaFile )
363  mpMetaFile->AddAction( new MetaFillColorAction( aColor, true ) );
364 
365  if ( aColor.IsTransparent() )
366  {
367  if ( mbFillColor )
368  {
369  mbInitFillColor = true;
370  mbFillColor = false;
372  }
373  }
374  else
375  {
376  if ( maFillColor != aColor )
377  {
378  mbInitFillColor = true;
379  mbFillColor = true;
380  maFillColor = aColor;
381  }
382  }
383 
384  if( mpAlphaVDev )
386 }
387 
389 {
390 
391  if ( mpMetaFile )
392  mpMetaFile->AddAction( new MetaLineColorAction( Color(), false ) );
393 
394  if ( mbLineColor )
395  {
396  mbInitLineColor = true;
397  mbLineColor = false;
399  }
400 
401  if( mpAlphaVDev )
403 }
404 
405 void OutputDevice::SetLineColor( const Color& rColor )
406 {
407 
408  Color aColor = ImplDrawModeToColor( rColor );
409 
410  if( mpMetaFile )
411  mpMetaFile->AddAction( new MetaLineColorAction( aColor, true ) );
412 
413  if( aColor.IsTransparent() )
414  {
415  if ( mbLineColor )
416  {
417  mbInitLineColor = true;
418  mbLineColor = false;
420  }
421  }
422  else
423  {
424  if( maLineColor != aColor )
425  {
426  mbInitLineColor = true;
427  mbLineColor = true;
428  maLineColor = aColor;
429  }
430  }
431 
432  if( mpAlphaVDev )
434 }
435 
437 {
438 
440  mbBackground = false;
441 
442  if( mpAlphaVDev )
444 }
445 
446 void OutputDevice::SetBackground( const Wallpaper& rBackground )
447 {
448 
449  maBackground = rBackground;
450 
451  if( rBackground.GetStyle() == WallpaperStyle::NONE )
452  mbBackground = false;
453  else
454  mbBackground = true;
455 
456  if( mpAlphaVDev )
457  {
458  // Some of these are probably wrong (e.g. if the gradient has transparency),
459  // but hopefully nobody uses that. If you do, feel free to implement it properly.
460  if( rBackground.GetStyle() == WallpaperStyle::NONE )
461  mpAlphaVDev->SetBackground( rBackground );
462  else if( rBackground.IsBitmap())
463  {
464  BitmapEx bitmap = rBackground.GetBitmap();
465  if( bitmap.IsAlpha())
467  else
468  {
469  switch( bitmap.GetTransparentType())
470  {
473  break;
475  {
476  AlphaMask mask( bitmap.GetBitmap().CreateMask( bitmap.GetTransparentColor()));
477  mpAlphaVDev->SetBackground( Wallpaper( BitmapEx( bitmap.GetBitmap(), mask )));
478  break;
479  }
482  break;
483  }
484  }
485  }
486  else if( rBackground.IsGradient())
488  else
489  {
490  // Color background.
491  int transparency = 255 - rBackground.GetColor().GetAlpha();
492  mpAlphaVDev->SetBackground( Wallpaper( Color( transparency, transparency, transparency )));
493  }
494  }
495 }
496 
497 void OutputDevice::SetFont( const vcl::Font& rNewFont )
498 {
499 
500  vcl::Font aFont( rNewFont );
504  {
505  Color aTextColor( aFont.GetColor() );
506 
508  aTextColor = COL_BLACK;
510  aTextColor = COL_WHITE;
511  else if ( mnDrawMode & DrawModeFlags::GrayText )
512  {
513  const sal_uInt8 cLum = aTextColor.GetLuminance();
514  aTextColor = Color( cLum, cLum, cLum );
515  }
517  aTextColor = GetSettings().GetStyleSettings().GetFontColor();
518 
519  aFont.SetColor( aTextColor );
520 
521  bool bTransFill = aFont.IsTransparent();
522  if ( !bTransFill )
523  {
524  Color aTextFillColor( aFont.GetFillColor() );
525 
527  aTextFillColor = COL_BLACK;
529  aTextFillColor = COL_WHITE;
530  else if ( mnDrawMode & DrawModeFlags::GrayFill )
531  {
532  const sal_uInt8 cLum = aTextFillColor.GetLuminance();
533  aTextFillColor = Color( cLum, cLum, cLum );
534  }
536  aTextFillColor = GetSettings().GetStyleSettings().GetWindowColor();
537  else if ( mnDrawMode & DrawModeFlags::NoFill )
538  {
539  aTextFillColor = COL_TRANSPARENT;
540  }
541 
542  aFont.SetFillColor( aTextFillColor );
543  }
544  }
545 
546  if ( mpMetaFile )
547  {
548  mpMetaFile->AddAction( new MetaFontAction( aFont ) );
549  // the color and alignment actions don't belong here
550  // TODO: get rid of them without breaking anything...
551  mpMetaFile->AddAction( new MetaTextAlignAction( aFont.GetAlignment() ) );
552  mpMetaFile->AddAction( new MetaTextFillColorAction( aFont.GetFillColor(), !aFont.IsTransparent() ) );
553  }
554 
555  if ( maFont.IsSameInstance( aFont ) )
556  return;
557 
558  // Optimization MT/HDU: COL_TRANSPARENT means SetFont should ignore the font color,
559  // because SetTextColor() is used for this.
560  // #i28759# maTextColor might have been changed behind our back, commit then, too.
561  if( aFont.GetColor() != COL_TRANSPARENT
562  && (aFont.GetColor() != maFont.GetColor() || aFont.GetColor() != maTextColor ) )
563  {
564  maTextColor = aFont.GetColor();
565  mbInitTextColor = true;
566  if( mpMetaFile )
567  mpMetaFile->AddAction( new MetaTextColorAction( aFont.GetColor() ) );
568  }
569  maFont = aFont;
570  mbNewFont = true;
571 
572  if( !mpAlphaVDev )
573  return;
574 
575  // #i30463#
576  // Since SetFont might change the text color, apply that only
577  // selectively to alpha vdev (which normally paints opaque text
578  // with COL_BLACK)
579  if( aFont.GetColor() != COL_TRANSPARENT )
580  {
582  aFont.SetColor( COL_TRANSPARENT );
583  }
584 
585  mpAlphaVDev->SetFont( aFont );
586 }
587 
588 
590 {
592 
593  if( mbLineColor )
594  {
595  if( RasterOp::N0 == meRasterOp )
597  else if( RasterOp::N1 == meRasterOp )
599  else if( RasterOp::Invert == meRasterOp )
601  else
603  }
604  else
606 
607  mbInitLineColor = false;
608 }
609 
610 
612 {
614 
615  if( mbFillColor )
616  {
617  if( RasterOp::N0 == meRasterOp )
619  else if( RasterOp::N1 == meRasterOp )
621  else if( RasterOp::Invert == meRasterOp )
623  else
625  }
626  else
628 
629  mbInitFillColor = false;
630 }
631 
633 {
635 
636  mbNewFont = true;
637  mbInitFont = true;
638 
639  mpFontInstance.clear();
640  mpDeviceFontList.reset();
641  mpDeviceFontSizeList.reset();
642 }
643 
644 
645 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
void EnableOutput(bool bEnable=true)
const Color & GetTextColor() const
Definition: outdev.hxx:1136
void SetDigitLanguage(LanguageType)
Bitmap GetMask() const
Definition: BitmapEx.cxx:253
void SetFillColor(const Color &)
Definition: font/font.cxx:89
sal_uInt8 GetAlpha() const
std::optional< Color > mpTextColor
Definition: outdevstate.hxx:90
void SetAntialiasing(AntialiasingFlags nMode)
sal_uInt32 GetGCStackDepth() const
bool mbOutput
Definition: outdev.hxx:377
Color maTextColor
Definition: outdev.hxx:363
DrawModeFlags
Definition: outdev.hxx:199
SAL_DLLPRIVATE void SetDeviceClipRegion(const vcl::Region *pRegion)
bool IsTransparent() const
const Color & GetTextLineColor() const
Definition: outdev.hxx:1145
DrawModeFlags mnDrawMode
Definition: outdev.hxx:354
Color maLineColor
Definition: outdev.hxx:360
constexpr::Color COL_TRANSPARENT(ColorTransparency, 0xFF, 0xFF, 0xFF, 0xFF)
const StyleSettings & GetStyleSettings() const
TextAlign GetTextAlign() const
Definition: outdev.hxx:1154
sal_uInt8 GetLuminance() const
bool IsTextLineColor() const
Definition: outdev.hxx:1146
vcl::Region maRegion
Definition: outdev.hxx:359
ComplexTextLayoutFlags mnTextLayoutMode
Definition: outdevstate.hxx:97
ComplexTextLayoutFlags GetLayoutMode() const
Definition: outdev.hxx:614
void SetTextFillColor()
Definition: text.cxx:697
SAL_DLLPRIVATE Color ImplDrawModeToColor(const Color &rColor) const
Definition: transparent.cxx:77
void SetLayoutMode(ComplexTextLayoutFlags nTextLayoutMode)
std::unique_ptr< ImplDeviceFontSizeList > mpDeviceFontSizeList
Definition: outdev.hxx:323
WallpaperStyle GetStyle() const
Definition: wall.cxx:214
bool mbMap
Definition: outdev.hxx:374
void SetMapMode()
Definition: map.cxx:546
FontAlign GetAlignment() const
Definition: font/font.cxx:670
NONE
MapMode maMapMode
Definition: outdev.hxx:369
void SetDrawMode(DrawModeFlags nDrawMode)
std::optional< Color > mpLineColor
Definition: outdevstate.hxx:87
const Color & GetOverlineColor() const
Definition: outdev.hxx:1150
FuncFlags mnFlags
Color GetTextFillColor() const
Definition: text.cxx:755
SAL_DLLPRIVATE void InitLineColor()
void SetBackground()
bool IsAlpha() const
Definition: BitmapEx.cxx:221
PushFlags mnFlags
Definition: outdevstate.hxx:99
RasterOp
Definition: vclenum.hxx:194
virtual void SetROPLineColor(SalROPColor nROPColor)=0
int nCount
AntialiasingFlags mnAntialiasing
Definition: outdev.hxx:371
bool mbBackground
Definition: outdev.hxx:376
PushFlags
Definition: outdevstate.hxx:38
LanguageType meTextLanguage
Definition: outdevstate.hxx:98
void ClearStack()
Color maFillColor
Definition: outdev.hxx:361
std::optional< Color > mpFillColor
Definition: outdevstate.hxx:88
void SetTextLineColor()
Definition: textline.cxx:800
std::unique_ptr< vcl::Font > mpFont
Definition: outdevstate.hxx:89
SalGraphics * mpGraphics
Graphics context to draw on.
Definition: outdev.hxx:315
std::vector< OutDevState > maOutDevStateStack
Definition: outdev.hxx:324
bool IsTextFillColor() const
Definition: outdev.hxx:1141
virtual void SetFillColor()=0
void SetLineColor()
SAL_DLLPRIVATE void InitFillColor()
void SetRefPoint()
Definition: outdev.cxx:275
Wallpaper maBackground
Definition: outdev.hxx:367
virtual void SetLineColor()=0
std::optional< Color > mpOverlineColor
Definition: outdevstate.hxx:93
ComplexTextLayoutFlags
Definition: outdevstate.hxx:66
virtual bool AcquireGraphics() const =0
Acquire a graphics device that the output device uses to draw on.
std::unique_ptr< ImplDeviceFontList > mpDeviceFontList
Definition: outdev.hxx:322
const Color & GetColor() const
Definition: wall.cxx:199
std::unique_ptr< vcl::Region > mpClipRegion
Definition: outdevstate.hxx:86
bool mbInitLineColor
Definition: outdev.hxx:382
void SetFillColor()
bool mbNewFont
Definition: outdev.hxx:388
AntialiasingFlags
Definition: outdev.hxx:230
const Color & GetFontColor() const
TransparentType GetTransparentType() const
Definition: bitmapex.hxx:74
void SetTextColor(const Color &rColor)
Definition: text.cxx:662
TextAlign meTextAlign
Definition: outdevstate.hxx:95
vcl::Font maFont
Definition: outdev.hxx:362
bool mbLineColor
Definition: outdev.hxx:380
void SetOverlineColor()
Definition: textline.cxx:849
RasterOp meRasterOp
Definition: outdev.hxx:366
const AllSettings & GetSettings() const
Definition: outdev.hxx:418
bool mbInitTextColor
Definition: outdev.hxx:385
const Color & GetFillColor() const
Definition: font/font.cxx:667
void ReleaseFonts()
Definition: salgdi.hxx:130
bool mbRefPoint
Definition: outdev.hxx:391
void SetColor(const Color &)
Definition: font/font.cxx:81
Bitmap GetBitmap(Color aTransparentReplaceColor) const
Definition: BitmapEx.cxx:231
virtual void SetXORMode(bool bSet, bool bInvertOnly)=0
const Color & GetTransparentColor() const
Definition: bitmapex.hxx:93
void setAntiAlias(bool bNew)
Definition: salgdi.hxx:83
bool mbFillColor
Definition: outdev.hxx:381
VclPtr< VirtualDevice > mpAlphaVDev
Definition: outdev.hxx:330
ALIGN_TOP
BitmapEx GetBitmap() const
Definition: wall.cxx:242
RasterOp meRasterOp
Definition: outdevstate.hxx:96
const Color & GetColor() const
Definition: font/font.cxx:666
bool IsGradient() const
Definition: wall.cxx:278
AlphaMask GetAlpha() const
Definition: BitmapEx.cxx:263
bool mbClipRegion
Definition: outdev.hxx:375
std::optional< MapMode > mpMapMode
Definition: outdevstate.hxx:84
unsigned char sal_uInt8
void SetFont(const vcl::Font &rNewFont)
void AddAction(const rtl::Reference< MetaAction > &pAction)
Definition: gdimtf.cxx:564
LanguageType GetDigitLanguage() const
Definition: outdev.hxx:617
const ::std::vector< Color > ImpSvNumberformatScan::StandardColor COL_WHITE
virtual void SetROPFillColor(SalROPColor nROPColor)=0
bool IsTransparent() const
Definition: font/font.cxx:668
void SetRasterOp(RasterOp eRasterOp)
std::optional< Color > mpTextFillColor
Definition: outdevstate.hxx:91
const ::std::vector< Color > ImpSvNumberformatScan::StandardColor COL_BLACK
const Color & GetWindowColor() const
bool mbInitFont
Definition: outdev.hxx:384
RasterOp GetRasterOp() const
Definition: outdev.hxx:620
rtl::Reference< LogicalFontInstance > mpFontInstance
Definition: outdev.hxx:319
std::optional< Color > mpTextLineColor
Definition: outdevstate.hxx:92
bool mbInitFillColor
Definition: outdev.hxx:383
bool IsSameInstance(const Font &) const
Definition: font/font.cxx:717
bool IsBitmap() const
Definition: wall.cxx:250
ComplexTextLayoutFlags mnTextLayoutMode
Definition: outdev.hxx:355
#define SAL_WARN(area, stream)
#define DBG_TESTSOLARMUTEX()
bool IsOverlineColor() const
Definition: outdev.hxx:1151
void Push(PushFlags nFlags=PushFlags::ALL)
Definition: outdevstate.cxx:59
Point maRefPoint
Definition: outdev.hxx:370
std::optional< Point > mpRefPoint
Definition: outdevstate.hxx:94
virtual void ImplReleaseFonts()
Bitmap CreateMask(const Color &rTransColor, sal_uInt8 nTol=0) const
Create on-off mask from bitmap.
void SetTextAlign(TextAlign eAlign)
Definition: text.cxx:763
GDIMetaFile * mpMetaFile
Definition: outdev.hxx:318
bool mbMapActive
Definition: outdevstate.hxx:85
LanguageType meTextLanguage
Definition: outdev.hxx:372