LibreOffice Module vcl (master)  1
virdev.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/log.hxx>
21 #include <tools/debug.hxx>
22 
23 #include <vcl/pdfextoutdevdata.hxx>
24 #include <vcl/virdev.hxx>
25 
26 #include <outdev.h>
28 #include <salinst.hxx>
29 #include <salgdi.hxx>
30 #include <salvd.hxx>
31 #include <svdata.hxx>
32 
33 using namespace ::com::sun::star::uno;
34 
36 {
37  const vcl::ExtOutDevData* pOutDevData(GetExtOutDevData());
38  const vcl::PDFExtOutDevData* pPDFData(dynamic_cast<const vcl::PDFExtOutDevData*>(pOutDevData));
39  return pPDFData == nullptr;
40 }
41 
43 {
45 
46  if ( mpGraphics )
47  return true;
48 
49  mbInitLineColor = true;
50  mbInitFillColor = true;
51  mbInitFont = true;
52  mbInitTextColor = true;
53  mbInitClipRegion = true;
54 
55  ImplSVData* pSVData = ImplGetSVData();
56 
57  if ( mpVirDev )
58  {
59  mpGraphics = mpVirDev->AcquireGraphics();
60  // if needed retry after releasing least recently used virtual device graphics
61  while ( !mpGraphics )
62  {
63  if ( !pSVData->maGDIData.mpLastVirGraphics )
64  break;
66  mpGraphics = mpVirDev->AcquireGraphics();
67  }
68  // update global LRU list of virtual device graphics
69  if ( mpGraphics )
70  {
72  pSVData->maGDIData.mpFirstVirGraphics = const_cast<VirtualDevice*>(this);
73  if ( mpNextGraphics )
74  mpNextGraphics->mpPrevGraphics = const_cast<VirtualDevice*>(this);
75  if ( !pSVData->maGDIData.mpLastVirGraphics )
76  pSVData->maGDIData.mpLastVirGraphics = const_cast<VirtualDevice*>(this);
77  }
78  }
79 
80  if ( mpGraphics )
81  {
84  }
85 
86  return mpGraphics != nullptr;
87 }
88 
89 void VirtualDevice::ReleaseGraphics( bool bRelease )
90 {
92 
93  if ( !mpGraphics )
94  return;
95 
96  // release the fonts of the physically released graphics device
97  if ( bRelease )
99 
100  ImplSVData* pSVData = ImplGetSVData();
101 
102  VirtualDevice* pVirDev = this;
103 
104  if ( bRelease )
105  pVirDev->mpVirDev->ReleaseGraphics( mpGraphics );
106  // remove from global LRU list of virtual device graphics
107  if ( mpPrevGraphics )
109  else
111  if ( mpNextGraphics )
113  else
115 
116  mpGraphics = nullptr;
117  mpPrevGraphics = nullptr;
118  mpNextGraphics = nullptr;
119 }
120 
122  tools::Long nDX, tools::Long nDY, const SystemGraphicsData *pData )
123 {
124  SAL_INFO( "vcl.virdev", "ImplInitVirDev(" << nDX << "," << nDY << ")" );
125 
127  mbForceZeroExtleadBug = false;
128 
129  bool bErase = nDX > 0 && nDY > 0;
130 
131  if ( nDX < 1 )
132  nDX = 1;
133 
134  if ( nDY < 1 )
135  nDY = 1;
136 
137  ImplSVData* pSVData = ImplGetSVData();
138 
139  if ( !pOutDev )
140  pOutDev = ImplGetDefaultWindow();
141  if( !pOutDev )
142  return;
143 
144  SalGraphics* pGraphics;
145  if ( !pOutDev->mpGraphics )
146  (void)pOutDev->AcquireGraphics();
147  pGraphics = pOutDev->mpGraphics;
148  if ( pGraphics )
149  mpVirDev = pSVData->mpDefInst->CreateVirtualDevice(pGraphics, nDX, nDY, meFormat, pData);
150  else
151  mpVirDev = nullptr;
152  if ( !mpVirDev )
153  {
154  // do not abort but throw an exception, may be the current thread terminates anyway (plugin-scenario)
155  throw css::uno::RuntimeException(
156  "Could not create system bitmap!",
157  css::uno::Reference< css::uno::XInterface >() );
158  }
159 
160  switch (meFormat)
161  {
163  mnBitCount = 1;
164  break;
165  default:
166  mnBitCount = pOutDev->GetBitCount();
167  break;
168  }
169  mnOutWidth = nDX;
170  mnOutHeight = nDY;
171 
174 
175  mbScreenComp = pOutDev->IsScreenComp();
176 
177  mbDevOutput = true;
180  mnDPIX = pOutDev->mnDPIX;
181  mnDPIY = pOutDev->mnDPIY;
183  maFont = pOutDev->maFont;
184 
185  if( maTextColor != pOutDev->maTextColor )
186  {
187  maTextColor = pOutDev->maTextColor;
188  mbInitTextColor = true;
189  }
190 
191  // virtual devices have white background by default
193 
194  // #i59283# don't erase user-provided surface
195  if( !pData && bErase)
196  Erase();
197 
198  // register VirDev in the list
199  mpNext = pSVData->maGDIData.mpFirstVirDev;
200  mpPrev = nullptr;
201  if ( mpNext )
202  mpNext->mpPrev = this;
203  pSVData->maGDIData.mpFirstVirDev = this;
204 }
205 
207  DeviceFormat eAlphaFormat, OutDevType eOutDevType)
208  : OutputDevice(eOutDevType)
209  , meFormat(eFormat)
210  , meAlphaFormat(eAlphaFormat)
211 {
212  SAL_INFO( "vcl.virdev", "VirtualDevice::VirtualDevice( " << static_cast<int>(eFormat)
213  << ", " << static_cast<int>(eAlphaFormat)
214  << ", " << static_cast<int>(eOutDevType) << " )" );
215 
216  ImplInitVirDev(pCompDev ? pCompDev : Application::GetDefaultDevice(), 0, 0);
217 }
218 
220  DeviceFormat eFormat)
222  , meFormat(eFormat)
223  , meAlphaFormat(DeviceFormat::NONE)
224 {
225  SAL_INFO( "vcl.virdev", "VirtualDevice::VirtualDevice( " << static_cast<int>(eFormat) << " )" );
226 
227  ImplInitVirDev(Application::GetDefaultDevice(), rSize.Width(), rSize.Height(), &rData);
228 }
229 
231 {
232  SAL_INFO( "vcl.virdev", "VirtualDevice::~VirtualDevice()" );
233  disposeOnce();
234 }
235 
237 {
238  SAL_INFO( "vcl.virdev", "VirtualDevice::dispose()" );
239 
240  ImplSVData* pSVData = ImplGetSVData();
241 
242  ReleaseGraphics();
243 
244  mpVirDev.reset();
245 
246  // remove this VirtualDevice from the double-linked global list
247  if( mpPrev )
248  mpPrev->mpNext = mpNext;
249  else
250  pSVData->maGDIData.mpFirstVirDev = mpNext;
251 
252  if( mpNext )
253  mpNext->mpPrev = mpPrev;
254 
256 }
257 
258 bool VirtualDevice::InnerImplSetOutputSizePixel( const Size& rNewSize, bool bErase,
259  sal_uInt8 *const pBuffer)
260 {
261  SAL_INFO( "vcl.virdev",
262  "VirtualDevice::InnerImplSetOutputSizePixel( " << rNewSize.Width() << ", "
263  << rNewSize.Height() << ", " << int(bErase) << " )" );
264 
265  if ( !mpVirDev )
266  return false;
267  else if ( rNewSize == GetOutputSizePixel() )
268  {
269  if ( bErase )
270  Erase();
271  SAL_INFO( "vcl.virdev", "Trying to re-use a VirtualDevice but this time using a pre-allocated buffer");
272  return true;
273  }
274 
275  bool bRet;
276  tools::Long nNewWidth = rNewSize.Width(), nNewHeight = rNewSize.Height();
277 
278  if ( nNewWidth < 1 )
279  nNewWidth = 1;
280 
281  if ( nNewHeight < 1 )
282  nNewHeight = 1;
283 
284  if ( bErase )
285  {
286  if ( pBuffer )
287  bRet = mpVirDev->SetSizeUsingBuffer( nNewWidth, nNewHeight, pBuffer );
288  else
289  bRet = mpVirDev->SetSize( nNewWidth, nNewHeight );
290 
291  if ( bRet )
292  {
293  mnOutWidth = rNewSize.Width();
294  mnOutHeight = rNewSize.Height();
295  Erase();
296  }
297  }
298  else
299  {
300  std::unique_ptr<SalVirtualDevice> pNewVirDev;
301  ImplSVData* pSVData = ImplGetSVData();
302 
303  // we need a graphics
304  if ( !mpGraphics && !AcquireGraphics() )
305  return false;
306 
308 
309  pNewVirDev = pSVData->mpDefInst->CreateVirtualDevice(mpGraphics, nNewWidth, nNewHeight, meFormat);
310  if ( pNewVirDev )
311  {
312  SalGraphics* pGraphics = pNewVirDev->AcquireGraphics();
313  if ( pGraphics )
314  {
315  tools::Long nWidth;
316  tools::Long nHeight;
317  if ( mnOutWidth < nNewWidth )
318  nWidth = mnOutWidth;
319  else
320  nWidth = nNewWidth;
321  if ( mnOutHeight < nNewHeight )
322  nHeight = mnOutHeight;
323  else
324  nHeight = nNewHeight;
325  SalTwoRect aPosAry(0, 0, nWidth, nHeight, 0, 0, nWidth, nHeight);
326  pGraphics->CopyBits( aPosAry, *mpGraphics, *this, *this );
327  pNewVirDev->ReleaseGraphics( pGraphics );
328  ReleaseGraphics();
329  mpVirDev = std::move(pNewVirDev);
330  mnOutWidth = rNewSize.Width();
331  mnOutHeight = rNewSize.Height();
332  bRet = true;
333  }
334  else
335  {
336  bRet = false;
337  }
338  }
339  else
340  bRet = false;
341  }
342 
343  return bRet;
344 }
345 
346 // #i32109#: Fill opaque areas correctly (without relying on
347 // fill/linecolor state)
349 {
350  // Set line and fill color to black (->opaque),
351  // fill rect with that (linecolor, too, because of
352  // those pesky missing pixel problems)
356  DrawRect( rRect );
357  Pop();
358 }
359 
360 bool VirtualDevice::ImplSetOutputSizePixel( const Size& rNewSize, bool bErase,
361  sal_uInt8 *const pBuffer)
362 {
363  if( InnerImplSetOutputSizePixel(rNewSize, bErase, pBuffer) )
364  {
366  {
367  // #110958# Setup alpha bitmap
368  if(mpAlphaVDev && mpAlphaVDev->GetOutputSizePixel() != rNewSize)
369  {
371  }
372 
373  if( !mpAlphaVDev )
374  {
376  mpAlphaVDev->InnerImplSetOutputSizePixel(rNewSize, bErase, nullptr);
377  }
378 
379  // TODO: copy full outdev state to new one, here. Also needed in outdev2.cxx:DrawOutDev
380  if( GetLineColor() != COL_TRANSPARENT )
382 
383  if( GetFillColor() != COL_TRANSPARENT )
385 
387  }
388 
389  return true;
390  }
391 
392  return false;
393 }
394 
395 void VirtualDevice::EnableRTL( bool bEnable )
396 {
397  // virdevs default to not mirroring, they will only be set to mirroring
398  // under rare circumstances in the UI, eg the valueset control
399  // because each virdev has its own SalGraphics we can safely switch the SalGraphics here
400  // ...hopefully
401  if( AcquireGraphics() )
403 
404  OutputDevice::EnableRTL(bEnable);
405 }
406 
407 bool VirtualDevice::SetOutputSizePixel( const Size& rNewSize, bool bErase )
408 {
409  return ImplSetOutputSizePixel(rNewSize, bErase, nullptr);
410 }
411 
413  const Size& rNewSize, const Fraction& rScale, const Point& rNewOffset,
414  sal_uInt8 *const pBuffer)
415 {
416  if (pBuffer) {
417  MapMode mm = GetMapMode();
418  mm.SetOrigin( rNewOffset );
419  mm.SetScaleX( rScale );
420  mm.SetScaleY( rScale );
421  SetMapMode( mm );
422  }
423  return ImplSetOutputSizePixel(rNewSize, true, pBuffer);
424 }
425 
427 {
428  sal_Int32 nDPIX = 600, nDPIY = 600;
429  switch( i_eRefDevMode )
430  {
431  case RefDevMode::NONE:
432  default:
433  SAL_WARN( "vcl.virdev", "VDev::SetRefDev illegal argument!" );
434  break;
435  case RefDevMode::Dpi600:
436  nDPIX = nDPIY = 600;
437  break;
438  case RefDevMode::MSO1:
439  nDPIX = nDPIY = 6*1440;
440  break;
441  case RefDevMode::PDF1:
442  nDPIX = nDPIY = 720;
443  break;
444  }
445  ImplSetReferenceDevice( i_eRefDevMode, nDPIX, nDPIY );
446 }
447 
448 void VirtualDevice::SetReferenceDevice( sal_Int32 i_nDPIX, sal_Int32 i_nDPIY )
449 {
450  ImplSetReferenceDevice( RefDevMode::Custom, i_nDPIX, i_nDPIY );
451 }
452 
454 {
455  return true;
456 }
457 
458 void VirtualDevice::ImplSetReferenceDevice( RefDevMode i_eRefDevMode, sal_Int32 i_nDPIX, sal_Int32 i_nDPIY )
459 {
460  mnDPIX = i_nDPIX;
461  mnDPIY = i_nDPIY;
462  mnDPIScalePercentage = 100;
463 
464  EnableOutput( false ); // prevent output on reference device
465  mbScreenComp = false;
466 
467  // invalidate currently selected fonts
468  mbInitFont = true;
469  mbNewFont = true;
470 
471  // avoid adjusting font lists when already in refdev mode
472  RefDevMode nOldRefDevMode = meRefDevMode;
473  meRefDevMode = i_eRefDevMode;
474  if( nOldRefDevMode != RefDevMode::NONE )
475  return;
476 
477  // the reference device should have only scalable fonts
478  // => clean up the original font lists before getting new ones
479  mpFontInstance.clear();
480  mpDeviceFontList.reset();
481  mpDeviceFontSizeList.reset();
482 
483  // preserve global font lists
484  ImplSVData* pSVData = ImplGetSVData();
485  mxFontCollection.reset();
486  mxFontCache.reset();
487 
488  // get font list with scalable fonts only
490  mxFontCollection = pSVData->maGDIData.mxScreenFontList->Clone();
491 
492  // prepare to use new font lists
493  mxFontCache = std::make_shared<ImplFontCache>();
494 }
495 
496 sal_uInt16 VirtualDevice::GetBitCount() const
497 {
498  return mnBitCount;
499 }
500 
502 {
503  return true;
504 }
505 
507 {
508  mbForceZeroExtleadBug = true;
509 }
510 
512 {
513 #ifdef UNX
514  // backwards compatible line metrics after fixing #i60945#
515  if ( mbForceZeroExtleadBug )
516  return 0;
517 #endif
518 
519  return mpFontInstance->mxFontMetric->GetExternalLeading();
520 }
521 
522 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
void EnableOutput(bool bEnable=true)
sal_Int32 mnDPIScalePercentage
For HiDPI displays, we want to draw elements for a percentage larger.
Definition: outdev.hxx:348
void Compat_ZeroExtleadBug()
Definition: virdev.cxx:506
const DeviceFormat meFormat
Definition: virdev.hxx:53
VclPtr< OutputDevice > mpNextGraphics
Next output device in list.
Definition: outdev.hxx:317
virtual bool UsePolyPolygonForComplexGradient() override
Definition: virdev.cxx:501
void SetReferenceDevice(RefDevMode)
Definition: virdev.cxx:426
virtual ~VirtualDevice() override
Definition: virdev.cxx:230
void SetAntialiasing(AntialiasingFlags nMode)
Color maTextColor
Definition: outdev.hxx:363
VclPtr< VirtualDevice > mpNext
Definition: virdev.hxx:50
long Long
constexpr::Color COL_TRANSPARENT(ColorTransparency, 0xFF, 0xFF, 0xFF, 0xFF)
void disposeAndClear()
Definition: vclptr.hxx:200
VclPtr< OutputDevice > mpLastVirGraphics
Definition: svdata.hxx:215
const wchar_t *typedef int(__stdcall *DllNativeUnregProc)(int
virtual bool AcquireGraphics() const override
Acquire a graphics device that the output device uses to draw on.
Definition: virdev.cxx:42
void CopyBits(const SalTwoRect &rPosAry, const OutputDevice &rOutDev)
std::shared_ptr< PhysicalFontCollection > mxFontCollection
Definition: outdev.hxx:321
const MapMode & GetMapMode() const
Definition: outdev.hxx:1688
sal_Int32 mnDPIY
Definition: outdev.hxx:347
std::unique_ptr< ImplDeviceFontSizeList > mpDeviceFontSizeList
Definition: outdev.hxx:323
sal_Int32 mnDPIX
Definition: outdev.hxx:346
const DeviceFormat meAlphaFormat
Definition: virdev.hxx:54
void SetMapMode()
Definition: map.cxx:516
ImplSVGDIData maGDIData
Definition: svdata.hxx:392
NONE
virtual void dispose() override
Definition: virdev.cxx:236
static OutputDevice * GetDefaultDevice()
Get the default "device" (in this case the default window).
Definition: svapp.cxx:1068
void SetBackground()
const BorderLinePrimitive2D *pCandidateB assert(pCandidateA)
VirtualDevice(const VirtualDevice &)=delete
AntialiasingFlags mnAntialiasing
Definition: outdev.hxx:371
bool mbScreenComp
Definition: virdev.hxx:52
VclPtr< VirtualDevice > mpFirstVirDev
Definition: svdata.hxx:218
virtual void EnableRTL(bool bEnable=true)
Definition: outdev.cxx:571
virtual tools::Long GetFontExtLeading() const override
Definition: virdev.cxx:511
void DrawRect(const tools::Rectangle &rRect)
Definition: rect.cxx:51
SalGraphics * mpGraphics
Graphics context to draw on.
Definition: outdev.hxx:315
ImplSVData * ImplGetSVData()
Definition: svdata.cxx:74
void SetLineColor()
void SetScaleX(const Fraction &rScaleX)
Definition: mapmod.cxx:108
OutDevType
Definition: outdev.hxx:277
virtual void dispose() override
Definition: outdev.cxx:138
SAL_DLLPRIVATE bool ImplSetOutputSizePixel(const Size &rNewSize, bool bErase, sal_uInt8 *pBuffer)
Definition: virdev.cxx:360
SAL_DLLPRIVATE void ImplInitVirDev(const OutputDevice *pOutDev, tools::Long nDX, tools::Long nDY, const SystemGraphicsData *pData=nullptr)
Definition: virdev.cxx:121
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
virtual void EnableRTL(bool bEnable=true) override
Definition: virdev.cxx:395
bool SetOutputSizePixel(const Size &rNewSize, bool bErase=true)
Definition: virdev.cxx:407
void SetOrigin(const Point &rOrigin)
Definition: mapmod.cxx:102
bool mbInitLineColor
Definition: outdev.hxx:382
void SetFillColor()
tools::Long mnOutHeight
Definition: outdev.hxx:345
bool mbNewFont
Definition: outdev.hxx:388
tools::Long Width() const
Some things multiple-inherit from VclAbstractDialog and OutputDevice, so we need to use virtual inher...
Definition: outdev.hxx:303
const Color & GetLineColor() const
Definition: outdev.hxx:634
SAL_DLLPRIVATE void ImplFillOpaqueRectangle(const tools::Rectangle &rRect)
Used for alpha VDev, to set areas to opaque.
Definition: virdev.cxx:348
std::unique_ptr< SalVirtualDevice > mpVirDev
Definition: virdev.hxx:48
void SetScaleY(const Fraction &rScaleY)
Definition: mapmod.cxx:115
vcl::Font maFont
Definition: outdev.hxx:362
RasterOp meRasterOp
Definition: outdev.hxx:366
virtual sal_uInt16 GetBitCount() const override
Definition: virdev.cxx:496
Size GetOutputSizePixel() const
Definition: outdev.hxx:441
sal_uInt16 mnBitCount
Definition: virdev.hxx:51
bool mbInitTextColor
Definition: outdev.hxx:385
bool mbForceZeroExtleadBug
Definition: virdev.hxx:56
virtual sal_uInt16 GetBitCount() const
Definition: outdev.cxx:302
SAL_DLLPRIVATE bool InnerImplSetOutputSizePixel(const Size &rNewSize, bool bErase, sal_uInt8 *pBuffer)
Definition: virdev.cxx:258
virtual void ReleaseGraphics(bool bRelease=true) override
Release the graphics device, and remove it from the graphics device list.
Definition: virdev.cxx:89
RefDevMode meRefDevMode
Definition: virdev.hxx:55
virtual void SetXORMode(bool bSet, bool bInvertOnly)=0
VclPtr< OutputDevice > mpPrevGraphics
Previous output device in list.
Definition: outdev.hxx:316
DeviceFormat
Definition: salgtype.hxx:28
void setAntiAlias(bool bNew)
Definition: salgdi.hxx:83
VclPtr< VirtualDevice > mpPrev
Definition: virdev.hxx:49
VclPtr< VirtualDevice > mpAlphaVDev
Definition: outdev.hxx:330
void Erase()
Definition: wallpaper.cxx:103
virtual std::unique_ptr< SalVirtualDevice > CreateVirtualDevice(SalGraphics *pGraphics, tools::Long &rDX, tools::Long &rDY, DeviceFormat eFormat, const SystemGraphicsData *pData=nullptr)=0
virtual void ReleaseGraphics(bool bRelease=true)=0
Release the graphics device, and remove it from the graphics device list.
unsigned char sal_uInt8
bool mbInitClipRegion
Definition: outdev.hxx:386
const ::std::vector< Color > ImpSvNumberformatScan::StandardColor COL_WHITE
#define SAL_INFO(area, stream)
VclPtr< OutputDevice > mpFirstVirGraphics
Definition: svdata.hxx:214
static VclPtr< reference_type > Create(Arg &&...arg)
A construction helper for VclPtr.
Definition: vclptr.hxx:127
std::shared_ptr< ImplFontCache > mxScreenFontCache
Definition: svdata.hxx:223
bool IsVirtual() const override
Definition: virdev.cxx:453
tools::Long Height() const
const ::std::vector< Color > ImpSvNumberformatScan::StandardColor COL_BLACK
bool mbInitFont
Definition: outdev.hxx:384
rtl::Reference< LogicalFontInstance > mpFontInstance
Definition: outdev.hxx:319
bool mbInitFillColor
Definition: outdev.hxx:383
tools::Long mnOutWidth
Definition: outdev.hxx:344
SAL_DLLPRIVATE void ImplSetReferenceDevice(RefDevMode, sal_Int32 i_nDPIX, sal_Int32 i_nDPIY)
Definition: virdev.cxx:458
bool mbDevOutput
Definition: outdev.hxx:378
bool SetOutputSizePixelScaleOffsetAndBuffer(const Size &rNewSize, const Fraction &rScale, const Point &rNewOffset, sal_uInt8 *pBuffer)
Definition: virdev.cxx:412
void SetLayout(SalLayoutFlags aLayout)
Definition: salgdi.hxx:200
std::shared_ptr< ImplFontCache > mxFontCache
Definition: outdev.hxx:320
#define SAL_WARN(area, stream)
vcl::ExtOutDevData * GetExtOutDevData() const
Definition: outdev.hxx:538
#define DBG_TESTSOLARMUTEX()
bool CanEnableNativeWidget() const override
Determine if native widgets can be enabled.
Definition: virdev.cxx:35
vcl::Window * ImplGetDefaultWindow()
Returns either the application window, or the default GL context window.
Definition: svdata.cxx:209
void Push(PushFlags nFlags=PushFlags::ALL)
Definition: outdevstate.cxx:59
virtual void ImplReleaseFonts()
std::shared_ptr< PhysicalFontCollection > mxScreenFontList
Definition: svdata.hxx:222
SalInstance * mpDefInst
Definition: svdata.hxx:383
virtual bool IsScreenComp() const
Definition: outdev.hxx:437
const Color & GetFillColor() const
Definition: outdev.hxx:639
typedef void(CALLTYPE *GetFuncDataPtr)(sal_uInt16 &nNo