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