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() )
302  {
305  }
306  }
307 
308  if( mpAlphaVDev )
309  mpAlphaVDev->SetRasterOp( eRasterOp );
310 }
311 
312 
314 {
315 
316  if ( mpMetaFile )
317  mpMetaFile->AddAction( new MetaFillColorAction( Color(), false ) );
318 
319  if ( mbFillColor )
320  {
321  mbInitFillColor = true;
322  mbFillColor = false;
324  }
325 
326  if( mpAlphaVDev )
328 }
329 
330 void OutputDevice::SetFillColor( const Color& rColor )
331 {
332 
333  Color aColor( rColor );
334 
338  {
339  if( !aColor.IsTransparent() )
340  {
342  {
343  aColor = COL_BLACK;
344  }
346  {
347  aColor = COL_WHITE;
348  }
350  {
351  const sal_uInt8 cLum = aColor.GetLuminance();
352  aColor = Color( cLum, cLum, cLum );
353  }
354  else if( mnDrawMode & DrawModeFlags::NoFill )
355  {
356  aColor = COL_TRANSPARENT;
357  }
359  {
361  }
362  }
363  }
364 
365  if ( mpMetaFile )
366  mpMetaFile->AddAction( new MetaFillColorAction( aColor, true ) );
367 
368  if ( aColor.IsTransparent() )
369  {
370  if ( mbFillColor )
371  {
372  mbInitFillColor = true;
373  mbFillColor = false;
375  }
376  }
377  else
378  {
379  if ( maFillColor != aColor )
380  {
381  mbInitFillColor = true;
382  mbFillColor = true;
383  maFillColor = aColor;
384  }
385  }
386 
387  if( mpAlphaVDev )
389 }
390 
392 {
393 
394  if ( mpMetaFile )
395  mpMetaFile->AddAction( new MetaLineColorAction( Color(), false ) );
396 
397  if ( mbLineColor )
398  {
399  mbInitLineColor = true;
400  mbLineColor = false;
402  }
403 
404  if( mpAlphaVDev )
406 }
407 
408 void OutputDevice::SetLineColor( const Color& rColor )
409 {
410 
411  Color aColor = ImplDrawModeToColor( rColor );
412 
413  if( mpMetaFile )
414  mpMetaFile->AddAction( new MetaLineColorAction( aColor, true ) );
415 
416  if( aColor.IsTransparent() )
417  {
418  if ( mbLineColor )
419  {
420  mbInitLineColor = true;
421  mbLineColor = false;
423  }
424  }
425  else
426  {
427  if( maLineColor != aColor )
428  {
429  mbInitLineColor = true;
430  mbLineColor = true;
431  maLineColor = aColor;
432  }
433  }
434 
435  if( mpAlphaVDev )
437 }
438 
440 {
441 
443  mbBackground = false;
444 
445  if( mpAlphaVDev )
447 }
448 
449 void OutputDevice::SetBackground( const Wallpaper& rBackground )
450 {
451 
452  maBackground = rBackground;
453 
454  if( rBackground.GetStyle() == WallpaperStyle::NONE )
455  mbBackground = false;
456  else
457  mbBackground = true;
458 
459  if( mpAlphaVDev )
460  {
461  // Some of these are probably wrong (e.g. if the gradient has transparency),
462  // but hopefully nobody uses that. If you do, feel free to implement it properly.
463  if( rBackground.GetStyle() == WallpaperStyle::NONE )
464  mpAlphaVDev->SetBackground( rBackground );
465  else if( rBackground.IsBitmap())
466  {
467  BitmapEx bitmap = rBackground.GetBitmap();
468  if( bitmap.IsAlpha())
470  else
471  {
472  switch( bitmap.GetTransparentType())
473  {
476  break;
479  break;
480  }
481  }
482  }
483  else if( rBackground.IsGradient())
485  else
486  {
487  // Color background.
488  int transparency = 255 - rBackground.GetColor().GetAlpha();
489  mpAlphaVDev->SetBackground( Wallpaper( Color( transparency, transparency, transparency )));
490  }
491  }
492 }
493 
494 void OutputDevice::SetFont( const vcl::Font& rNewFont )
495 {
496 
497  vcl::Font aFont( rNewFont );
501  {
502  Color aTextColor( aFont.GetColor() );
503 
505  aTextColor = COL_BLACK;
507  aTextColor = COL_WHITE;
508  else if ( mnDrawMode & DrawModeFlags::GrayText )
509  {
510  const sal_uInt8 cLum = aTextColor.GetLuminance();
511  aTextColor = Color( cLum, cLum, cLum );
512  }
514  aTextColor = GetSettings().GetStyleSettings().GetFontColor();
515 
516  aFont.SetColor( aTextColor );
517 
518  bool bTransFill = aFont.IsTransparent();
519  if ( !bTransFill )
520  {
521  Color aTextFillColor( aFont.GetFillColor() );
522 
524  aTextFillColor = COL_BLACK;
526  aTextFillColor = COL_WHITE;
527  else if ( mnDrawMode & DrawModeFlags::GrayFill )
528  {
529  const sal_uInt8 cLum = aTextFillColor.GetLuminance();
530  aTextFillColor = Color( cLum, cLum, cLum );
531  }
533  aTextFillColor = GetSettings().GetStyleSettings().GetWindowColor();
534  else if ( mnDrawMode & DrawModeFlags::NoFill )
535  {
536  aTextFillColor = COL_TRANSPARENT;
537  }
538 
539  aFont.SetFillColor( aTextFillColor );
540  }
541  }
542 
543  if ( mpMetaFile )
544  {
545  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  mpMetaFile->AddAction( new MetaTextAlignAction( aFont.GetAlignment() ) );
549  mpMetaFile->AddAction( new MetaTextFillColorAction( aFont.GetFillColor(), !aFont.IsTransparent() ) );
550  }
551 
552  if ( maFont.IsSameInstance( aFont ) )
553  return;
554 
555  // Optimization MT/HDU: COL_TRANSPARENT means SetFont should ignore the font color,
556  // because SetTextColor() is used for this.
557  // #i28759# maTextColor might have been changed behind our back, commit then, too.
558  if( aFont.GetColor() != COL_TRANSPARENT
559  && (aFont.GetColor() != maFont.GetColor() || aFont.GetColor() != maTextColor ) )
560  {
561  maTextColor = aFont.GetColor();
562  mbInitTextColor = true;
563  if( mpMetaFile )
564  mpMetaFile->AddAction( new MetaTextColorAction( aFont.GetColor() ) );
565  }
566  maFont = aFont;
567  mbNewFont = true;
568 
569  if( !mpAlphaVDev )
570  return;
571 
572  // #i30463#
573  // Since SetFont might change the text color, apply that only
574  // selectively to alpha vdev (which normally paints opaque text
575  // with COL_BLACK)
576  if( aFont.GetColor() != COL_TRANSPARENT )
577  {
579  aFont.SetColor( COL_TRANSPARENT );
580  }
581 
582  mpAlphaVDev->SetFont( aFont );
583 }
584 
585 
587 {
589 
590  if( mbLineColor )
591  {
592  if( RasterOp::N0 == meRasterOp )
594  else if( RasterOp::N1 == meRasterOp )
596  else if( RasterOp::Invert == meRasterOp )
598  else
600  }
601  else
603 
604  mbInitLineColor = false;
605 }
606 
607 
609 {
611 
612  if( mbFillColor )
613  {
614  if( RasterOp::N0 == meRasterOp )
616  else if( RasterOp::N1 == meRasterOp )
618  else if( RasterOp::Invert == meRasterOp )
620  else
622  }
623  else
625 
626  mbInitFillColor = false;
627 }
628 
630 {
632 
633  mbNewFont = true;
634  mbInitFont = true;
635 
636  mpFontInstance.clear();
637  mpDeviceFontList.reset();
638  mpDeviceFontSizeList.reset();
639 }
640 
641 
642 /* 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:246
void SetFillColor(const Color &)
Definition: font/font.cxx:96
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:516
FontAlign GetAlignment() const
Definition: font/font.cxx:825
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:219
PushFlags mnFlags
Definition: outdevstate.hxx:99
const BorderLinePrimitive2D *pCandidateB assert(pCandidateA)
RasterOp
Definition: vclenum.hxx:192
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:281
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:73
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:822
void ReleaseFonts()
Definition: salgdi.hxx:141
bool mbRefPoint
Definition: outdev.hxx:391
void SetColor(const Color &)
Definition: font/font.cxx:88
virtual void SetXORMode(bool bSet, bool bInvertOnly)=0
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:821
bool IsGradient() const
Definition: wall.cxx:278
AlphaMask GetAlpha() const
Definition: BitmapEx.cxx:256
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:823
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:872
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()
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