LibreOffice Module vcl (master)  1
outdev.hxx
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 #pragma once
21 
22 #include <sal/config.h>
23 
24 #include <tools/gen.hxx>
25 #include <tools/ref.hxx>
26 #include <tools/solar.h>
27 #include <tools/color.hxx>
28 #include <tools/poly.hxx>
29 #include <vcl/bitmap.hxx>
30 #include <vcl/cairo.hxx>
31 #include <vcl/devicecoordinate.hxx>
32 #include <vcl/dllapi.h>
33 #include <vcl/font.hxx>
34 #include <vcl/region.hxx>
48 #include <vcl/mapmod.hxx>
49 #include <vcl/wall.hxx>
50 #include <vcl/metaactiontypes.hxx>
51 #include <vcl/salnativewidgets.hxx>
52 #include <vcl/vclreferencebase.hxx>
53 
57 
58 #include <unotools/fontdefs.hxx>
59 #include <cppuhelper/weakref.hxx>
60 
61 #include <com/sun/star/drawing/LineCap.hpp>
62 #include <com/sun/star/uno/Reference.h>
63 #include <com/sun/star/awt/DeviceInfo.hpp>
64 
65 #include <memory>
66 #include <string_view>
67 #include <vector>
68 
69 struct ImplOutDevData;
71 struct SystemGraphicsData;
72 class ImplFontCache;
74 class SalGraphics;
75 class Gradient;
76 class Hatch;
77 class AllSettings;
78 class BitmapReadAccess;
79 class BitmapEx;
80 class Image;
81 class TextRectInfo;
82 class FontMetric;
83 class GDIMetaFile;
84 class GfxLink;
85 namespace tools {
86  class Line;
87 }
88 class LineInfo;
89 class AlphaMask;
90 class FontCharMap;
91 class SalLayout;
92 class VirtualDevice;
93 struct SalTwoRect;
94 class Printer;
95 class VCLXGraphics;
96 class OutDevStateStack;
97 class SalLayoutGlyphs;
98 
99 namespace vcl
100 {
101  class ExtOutDevData;
102  class ITextLayout;
103  struct FontCapabilities;
104  class Window;
105  class WindowOutputDevice;
106  namespace font {
107  struct Feature;
108  class PhysicalFontCollection;
109  class PhysicalFontFaceCollection;
110  }
111 
112  namespace text {
113  class ImplLayoutArgs;
114  class TextLayoutCache;
115  }
116 }
117 
118 namespace basegfx {
119  class B2DHomMatrix;
120  class B2DPolygon;
121  class B2IVector;
122  typedef B2IVector B2ISize;
123 }
124 
125 namespace com::sun::star::awt {
126  class XGraphics;
127 }
128 
129 namespace com::sun::star::rendering {
130  class XCanvas;
131  class XSpriteCanvas;
132 }
133 
134 #if defined UNX
135 #define GLYPH_FONT_HEIGHT 128
136 #else
137 #define GLYPH_FONT_HEIGHT 256
138 #endif
139 
140 // OutputDevice-Types
141 
143 
145 
146 // OutputDevice
147 
149 
150 BmpMirrorFlags AdjustTwoRect( SalTwoRect& rTwoRect, const Size& rSizePix );
151 void AdjustTwoRect( SalTwoRect& rTwoRect, const tools::Rectangle& rValidSrcRect );
152 
153 class OutputDevice;
154 
155 namespace vcl {
157 }
158 
159 VCL_DLLPUBLIC void InvertFocusRect(vcl::RenderContext& rRenderContext, const tools::Rectangle& rRect);
160 
161 typedef struct _cairo_surface cairo_surface_t;
162 
169 {
170  friend class Printer;
171  friend class VirtualDevice;
172  friend class vcl::Window;
174  friend class WorkWindow;
175  friend void ImplHandleResize( vcl::Window* pWindow, tools::Long nNewWidth, tools::Long nNewHeight );
176 
177 private:
178  OutputDevice(const OutputDevice&) = delete;
179  OutputDevice& operator=(const OutputDevice&) = delete;
180 
186  mutable std::unique_ptr<vcl::font::PhysicalFontFaceCollection> mpFontFaceCollection;
187  std::vector<vcl::State> maOutDevStateStack;
188  std::unique_ptr<ImplOutDevData> mpOutDevData;
189  std::vector< VCLXGraphics* >* mpUnoGraphicsList;
191  // The canvas interface for this output device. Is persistent after the first GetCanvas() call
192  mutable css::uno::WeakReference< css::rendering::XCanvas > mxCanvas;
193 
194  // TEMP TEMP TEMP
196 
211  sal_Int32 mnDPIX;
212  sal_Int32 mnDPIY;
214  mutable tools::Long mnTextOffX;
224  vcl::Region maRegion; // contains the clip region, see SetClipRegion(...)
233  std::unique_ptr<AllSettings> mxSettings;
238 
239  mutable bool mbMap : 1;
240  mutable bool mbClipRegion : 1;
241  mutable bool mbBackground : 1;
242  mutable bool mbOutput : 1;
243  mutable bool mbDevOutput : 1;
244  mutable bool mbOutputClipped : 1;
245  mutable bool mbLineColor : 1;
246  mutable bool mbFillColor : 1;
247  mutable bool mbInitLineColor : 1;
248  mutable bool mbInitFillColor : 1;
249  mutable bool mbInitFont : 1;
250  mutable bool mbInitTextColor : 1;
251  mutable bool mbInitClipRegion : 1;
252  mutable bool mbClipRegionSet : 1;
253  mutable bool mbNewFont : 1;
254  mutable bool mbTextLines : 1;
255  mutable bool mbTextSpecial : 1;
256  mutable bool mbRefPoint : 1;
257  mutable bool mbEnableRTL : 1;
258 
259 protected:
260  mutable std::shared_ptr<vcl::font::PhysicalFontCollection> mxFontCollection;
261  mutable std::shared_ptr<ImplFontCache> mxFontCache;
262 
265 
267 protected:
268  OutputDevice(OutDevType eOutDevType);
269  virtual ~OutputDevice() override;
270  virtual void dispose() override;
271 
272 public:
273 
280  SalGraphics const *GetGraphics() const;
281  SalGraphics* GetGraphics();
282 
283  void SetConnectMetaFile( GDIMetaFile* pMtf );
284  GDIMetaFile* GetConnectMetaFile() const { return mpMetaFile; }
285 
286  virtual void SetSettings( const AllSettings& rSettings );
287  const AllSettings& GetSettings() const { return *mxSettings; }
288 
289  SystemGraphicsData GetSystemGfxData() const;
290  bool SupportsCairo() const;
292  cairo::SurfaceSharedPtr CreateSurface(const cairo::CairoSurfaceSharedPtr& rSurface) const;
294  cairo::SurfaceSharedPtr CreateSurface(int x, int y, int width, int height) const;
296  cairo::SurfaceSharedPtr CreateBitmapSurface(const BitmapSystemData& rData, const Size& rSize) const;
298  css::uno::Any GetNativeSurfaceHandle(cairo::SurfaceSharedPtr& rSurface, const basegfx::B2ISize& rSize) const;
299  css::uno::Any GetSystemGfxDataAny() const;
300 
301  void SetRefPoint();
302  void SetRefPoint( const Point& rRefPoint );
303  const Point& GetRefPoint() const { return maRefPoint; }
304  bool IsRefPoint() const { return mbRefPoint; }
305 
306  virtual bool IsScreenComp() const { return true; }
307 
308  virtual sal_uInt16 GetBitCount() const;
309 
311  { return Size( mnOutWidth, mnOutHeight ); }
312  tools::Long GetOutputWidthPixel() const { return mnOutWidth; }
313  tools::Long GetOutputHeightPixel() const { return mnOutHeight; }
314  tools::Long GetOutOffXPixel() const { return mnOutOffX; }
315  tools::Long GetOutOffYPixel() const { return mnOutOffY; }
316  void SetOutOffXPixel(tools::Long nOutOffX);
317  void SetOutOffYPixel(tools::Long nOutOffY);
319  { return Point( mnOutOffX, mnOutOffY ); }
321  { return tools::Rectangle(GetOutputOffPixel(), GetOutputSizePixel() ); }
322 
324  { return PixelToLogic( GetOutputSizePixel() ); }
325 
326  css::uno::Reference< css::awt::XGraphics >
327  CreateUnoGraphics();
328  std::vector< VCLXGraphics* > *GetUnoGraphicsList() const { return mpUnoGraphicsList; }
329  std::vector< VCLXGraphics* > *CreateUnoGraphicsList();
330 
331  virtual size_t GetSyncCount() const { return 0xffffffff; }
332 
334  css::uno::Reference< css::rendering::XCanvas > GetCanvas() const;
336  css::uno::Reference< css::rendering::XSpriteCanvas > GetSpriteCanvas() const;
337 
338 protected:
339 
359  virtual bool AcquireGraphics() const = 0;
360 
367  virtual void ReleaseGraphics( bool bRelease = true ) = 0;
369 
370 
373 
375 public:
376 
381  SAL_DLLPRIVATE sal_Int32 GetDPIX() const { return mnDPIX; }
382 
387  SAL_DLLPRIVATE sal_Int32 GetDPIY() const { return mnDPIY; }
388 
389  SAL_DLLPRIVATE void SetDPIX( sal_Int32 nDPIX ) { mnDPIX = nDPIX; }
390  SAL_DLLPRIVATE void SetDPIY( sal_Int32 nDPIY ) { mnDPIY = nDPIY; }
391 
392  float GetDPIScaleFactor() const
393  {
394  return mnDPIScalePercentage / 100.0f;
395  }
396 
397  sal_Int32 GetDPIScalePercentage() const
398  {
399  return mnDPIScalePercentage;
400  }
401 
402  OutDevType GetOutDevType() const { return meOutDevType; }
403  virtual bool IsVirtual() const;
404 
409  bool SupportsOperation( OutDevSupportType ) const;
410 
411  void SetExtOutDevData( vcl::ExtOutDevData* pExtOutDevData ) { mpExtOutDevData = pExtOutDevData; }
412  vcl::ExtOutDevData* GetExtOutDevData() const { return mpExtOutDevData; }
413 
415 
416 public:
417  virtual Size GetButtonBorderSize() { return Size(1, 1); };
419 
422 
424 public:
425  virtual void Flush() {}
426 
427  virtual void DrawOutDev(
428  const Point& rDestPt, const Size& rDestSize,
429  const Point& rSrcPt, const Size& rSrcSize );
430 
431  virtual void DrawOutDev(
432  const Point& rDestPt, const Size& rDestSize,
433  const Point& rSrcPt, const Size& rSrcSize,
434  const OutputDevice& rOutDev );
435 
436  virtual void CopyArea(
437  const Point& rDestPt,
438  const Point& rSrcPt, const Size& rSrcSize,
439  bool bWindowInvalidate = false );
440 
441 protected:
442 
443  virtual void CopyDeviceArea( SalTwoRect& aPosAry, bool bWindowInvalidate);
444 
445  virtual tools::Rectangle GetBackgroundComponentBounds() const;
446 
447  virtual const OutputDevice* DrawOutDevDirectCheck(const OutputDevice& rSrcDev) const;
448 
449  virtual void DrawOutDevDirectProcess(const OutputDevice& rSrcDev, SalTwoRect& rPosAry, SalGraphics* pSrcGraphics);
450 
451  SAL_DLLPRIVATE void drawOutDevDirect(const OutputDevice& rSrcDev, SalTwoRect& rPosAry);
452 
453  SAL_DLLPRIVATE bool is_double_buffered_window() const;
454 
455  virtual css::uno::Reference< css::rendering::XCanvas > ImplGetCanvas( bool bSpriteCanvas ) const;
456  SAL_DLLPRIVATE void ImplDisposeCanvas();
457 
458 private:
459 
460  // not implemented; to detect misuses of DrawOutDev(...OutputDevice&);
461  SAL_DLLPRIVATE void DrawOutDev( const Point&, const Size&, const Point&, const Size&, const Printer&) = delete;
463 
464 
467 
469 public:
470 
471  void Push( vcl::PushFlags nFlags = vcl::PushFlags::ALL );
472  void Pop();
473  void ClearStack();
474 
475  void EnableOutput( bool bEnable = true );
476  bool IsOutputEnabled() const { return mbOutput; }
477  bool IsDeviceOutputNecessary() const { return (mbOutput && mbDevOutput); }
478 
479  void SetAntialiasing( AntialiasingFlags nMode );
480  AntialiasingFlags GetAntialiasing() const { return mnAntialiasing; }
481 
482  void SetDrawMode( DrawModeFlags nDrawMode );
483  DrawModeFlags GetDrawMode() const { return mnDrawMode; }
484 
485  void SetLayoutMode( vcl::text::ComplexTextLayoutFlags nTextLayoutMode );
486  vcl::text::ComplexTextLayoutFlags GetLayoutMode() const { return mnTextLayoutMode; }
487 
488  void SetDigitLanguage( LanguageType );
489  LanguageType GetDigitLanguage() const { return meTextLanguage; }
490 
491  void SetRasterOp( RasterOp eRasterOp );
492  RasterOp GetRasterOp() const { return meRasterOp; }
493 
501  void SetOutDevViewType( OutDevViewType eOutDevViewType ) { meOutDevViewType=eOutDevViewType; }
502  OutDevViewType GetOutDevViewType() const { return meOutDevViewType; }
503 
504  void SetLineColor();
505  void SetLineColor( const Color& rColor );
506  const Color& GetLineColor() const { return maLineColor; }
507  bool IsLineColor() const { return mbLineColor; }
508 
509  void SetFillColor();
510  void SetFillColor( const Color& rColor );
511  const Color& GetFillColor() const { return maFillColor; }
512  bool IsFillColor() const { return mbFillColor; }
513 
514  void SetBackground();
515  void SetBackground( const Wallpaper& rBackground );
516  virtual void SaveBackground(VirtualDevice& rSaveDevice,
517  const Point& rPos, const Size& rSize, const Size& rBackgroundSize) const;
518 
519  const Wallpaper& GetBackground() const { return maBackground; }
520  virtual Color GetBackgroundColor() const;
521  virtual Color GetReadableFontColor(const Color& rFontColor, const Color& rBgColor) const;
522  bool IsBackground() const { return mbBackground; }
523 
524  void SetFont( const vcl::Font& rNewFont );
525  const vcl::Font& GetFont() const { return maFont; }
526 
527 protected:
528 
529  virtual void ImplReleaseFonts();
530 
531 private:
532 
533  SAL_DLLPRIVATE void InitLineColor();
534 
535  SAL_DLLPRIVATE void InitFillColor();
536 
538 
539 
542 
544 public:
545 
546  vcl::Region GetClipRegion() const;
547  void SetClipRegion();
548  void SetClipRegion( const vcl::Region& rRegion );
549  bool SelectClipRegion( const vcl::Region&, SalGraphics* pGraphics = nullptr );
550 
551  bool IsClipRegion() const { return mbClipRegion; }
552 
553  void MoveClipRegion( tools::Long nHorzMove, tools::Long nVertMove );
554  void IntersectClipRegion( const tools::Rectangle& rRect );
555  void IntersectClipRegion( const vcl::Region& rRegion );
556 
557  virtual vcl::Region GetActiveClipRegion() const;
558  virtual vcl::Region GetOutputBoundsClipRegion() const;
559 
560 protected:
561 
562  virtual void InitClipRegion();
563 
570  virtual vcl::Region ClipToDeviceBounds(vcl::Region aRegion) const;
571  virtual void ClipToPaintRegion ( tools::Rectangle& rDstRect );
572 
573 private:
574 
575  SAL_DLLPRIVATE void SetDeviceClipRegion( const vcl::Region* pRegion );
577 
578 public:
579  virtual void DrawBorder(tools::Rectangle aBorderRect);
580 
581 
584 
586 public:
587 
588  void DrawPixel( const Point& rPt );
589  void DrawPixel( const Point& rPt, const Color& rColor );
590 
591  Color GetPixel( const Point& rPt ) const;
593 
594 
597 
599 public:
600 
601  void DrawRect( const tools::Rectangle& rRect );
602  void DrawRect( const tools::Rectangle& rRect,
603  sal_uLong nHorzRount, sal_uLong nVertRound );
604 
606  void DrawCheckered(
607  const Point& rPos,
608  const Size& rSize,
609  sal_uInt32 nLen = 8,
610  Color aStart = COL_WHITE,
611  Color aEnd = COL_BLACK);
612 
613  void DrawGrid( const tools::Rectangle& rRect, const Size& rDist, DrawGridFlags nFlags );
614 
616 
619 public:
621  void Invert( const tools::Rectangle& rRect, InvertFlags nFlags = InvertFlags::NONE );
622  void Invert( const tools::Polygon& rPoly, InvertFlags nFlags = InvertFlags::NONE );
624 
627 
629 public:
630 
631  void DrawLine( const Point& rStartPt, const Point& rEndPt );
632 
633  void DrawLine( const Point& rStartPt, const Point& rEndPt,
634  const LineInfo& rLineInfo );
635 
636 protected:
637  virtual void DrawHatchLine_DrawLine(const Point& rStartPoint, const Point& rEndPoint);
638 
639 private:
640 
643  SAL_DLLPRIVATE void drawLine( basegfx::B2DPolyPolygon aLinePolyPolygon, const LineInfo& rInfo );
645 
646 
649 
651 public:
652 
661  void DrawPolyLine( const tools::Polygon& rPoly );
662 
663  void DrawPolyLine(
664  const basegfx::B2DPolygon&,
665  double fLineWidth = 0.0,
667  css::drawing::LineCap eLineCap = css::drawing::LineCap_BUTT,
668  double fMiterMinimumAngle = basegfx::deg2rad(15.0));
669 
680  void DrawPolyLine( const tools::Polygon& rPoly,
681  const LineInfo& rLineInfo );
682 
683  // #i101491#
684  // Helper who tries to use SalGDI's DrawPolyLine direct and returns it's bool.
685  bool DrawPolyLineDirect(
686  const basegfx::B2DHomMatrix& rObjectTransform,
687  const basegfx::B2DPolygon& rB2DPolygon,
688  double fLineWidth = 0.0,
689  double fTransparency = 0.0,
690  const std::vector< double >* = nullptr, // MM01
692  css::drawing::LineCap eLineCap = css::drawing::LineCap_BUTT,
693  double fMiterMinimumAngle = basegfx::deg2rad(15.0));
694 
695 private:
696 
697  // #i101491#
698  // Helper which holds the old line geometry creation and is extended to use AA when
699  // switched on. Advantage is that line geometry is only temporarily used for paint
700  SAL_DLLPRIVATE void drawPolyLine(const tools::Polygon& rPoly, const LineInfo& rLineInfo);
701 
703 
704  bool DrawPolyLineDirectInternal(
705  const basegfx::B2DHomMatrix& rObjectTransform,
706  const basegfx::B2DPolygon& rB2DPolygon,
707  double fLineWidth = 0.0,
708  double fTransparency = 0.0,
709  const std::vector< double >* = nullptr, // MM01
711  css::drawing::LineCap eLineCap = css::drawing::LineCap_BUTT,
712  double fMiterMinimumAngle = basegfx::deg2rad(15.0));
713 
716 
718 public:
719 
730  void DrawPolygon( const tools::Polygon& rPoly );
731  void DrawPolygon( const basegfx::B2DPolygon& );
732 
743  void DrawPolyPolygon( const tools::PolyPolygon& rPolyPoly );
744  void DrawPolyPolygon( const basegfx::B2DPolyPolygon& );
745 
746 private:
747 
748  SAL_DLLPRIVATE void ImplDrawPolygon( const tools::Polygon& rPoly, const tools::PolyPolygon* pClipPolyPoly = nullptr );
749  SAL_DLLPRIVATE void ImplDrawPolyPolygon( const tools::PolyPolygon& rPolyPoly, const tools::PolyPolygon* pClipPolyPoly );
750  SAL_DLLPRIVATE void ImplDrawPolyPolygon( sal_uInt16 nPoly, const tools::PolyPolygon& rPolyPoly );
751  // #i101491#
752  // Helper who implements the DrawPolyPolygon functionality for basegfx::B2DPolyPolygon
753  // without MetaFile processing
754  SAL_DLLPRIVATE void ImplDrawPolyPolygonWithB2DPolyPolygon(const basegfx::B2DPolyPolygon& rB2DPolyPoly);
756 
757  SAL_DLLPRIVATE void ImplDrawWaveLineBezier(tools::Long nStartX, tools::Long nStartY, tools::Long nEndX, tools::Long nEndY, tools::Long nWaveHeight, double fOrientation, tools::Long nLineWidth);
758 
759 
762 
764 public:
765 
766  void DrawEllipse( const tools::Rectangle& rRect );
767 
768  void DrawArc(
769  const tools::Rectangle& rRect,
770  const Point& rStartPt, const Point& rEndPt );
771 
772  void DrawPie(
773  const tools::Rectangle& rRect,
774  const Point& rStartPt, const Point& rEndPt );
775 
776  void DrawChord(
777  const tools::Rectangle& rRect,
778  const Point& rStartPt, const Point& rEndPt );
779 
781 
782 
785 
787 public:
788  void DrawGradient( const tools::Rectangle& rRect, const Gradient& rGradient );
789  void DrawGradient( const tools::PolyPolygon& rPolyPoly, const Gradient& rGradient );
790 
791  void AddGradientActions(
792  const tools::Rectangle& rRect,
793  const Gradient& rGradient,
794  GDIMetaFile& rMtf );
795 
796 protected:
797 
798  virtual bool UsePolyPolygonForComplexGradient() = 0;
799 
800  virtual tools::Long GetGradientStepCount( tools::Long nMinRect );
801 
802 private:
803 
804  SAL_DLLPRIVATE void DrawLinearGradient( const tools::Rectangle& rRect, const Gradient& rGradient, const tools::PolyPolygon* pClipPolyPoly );
805  SAL_DLLPRIVATE void DrawComplexGradient( const tools::Rectangle& rRect, const Gradient& rGradient, const tools::PolyPolygon* pClipPolyPoly );
806 
807  SAL_DLLPRIVATE void DrawGradientToMetafile( const tools::PolyPolygon& rPolyPoly, const Gradient& rGradient );
808  SAL_DLLPRIVATE void DrawLinearGradientToMetafile( const tools::Rectangle& rRect, const Gradient& rGradient );
809  SAL_DLLPRIVATE void DrawComplexGradientToMetafile( const tools::Rectangle& rRect, const Gradient& rGradient );
810 
811  SAL_DLLPRIVATE tools::Long GetGradientSteps( const Gradient& rGradient, const tools::Rectangle& rRect, bool bMtf, bool bComplex=false );
812 
813  SAL_DLLPRIVATE Color GetSingleColorGradientFill();
815 
816 
819 
821 public:
822 
823 #ifdef _MSC_VER
824  void DrawHatch( const tools::PolyPolygon& rPolyPoly, const ::Hatch& rHatch );
825  void AddHatchActions( const tools::PolyPolygon& rPolyPoly,
826  const ::Hatch& rHatch,
827  GDIMetaFile& rMtf );
828 #else
829  void DrawHatch( const tools::PolyPolygon& rPolyPoly, const Hatch& rHatch );
830  void AddHatchActions( const tools::PolyPolygon& rPolyPoly,
831  const Hatch& rHatch,
832  GDIMetaFile& rMtf );
833 #endif
834 
835  void DrawHatch( const tools::PolyPolygon& rPolyPoly, const Hatch& rHatch, bool bMtf );
836 
837 private:
838 
839  SAL_DLLPRIVATE void CalcHatchValues( const tools::Rectangle& rRect, tools::Long nDist, Degree10 nAngle10, Point& rPt1, Point& rPt2, Size& rInc, Point& rEndPt1 );
840  SAL_DLLPRIVATE void DrawHatchLine( const tools::Line& rLine, const tools::PolyPolygon& rPolyPoly, Point* pPtBuffer, bool bMtf );
842 
843 
846 
848 public:
849  void DrawWallpaper( const tools::Rectangle& rRect, const Wallpaper& rWallpaper );
850 
851  void Erase();
852  void Erase(const tools::Rectangle& rRect);
853 
854 protected:
855  void DrawGradientWallpaper( tools::Long nX, tools::Long nY, tools::Long nWidth, tools::Long nHeight, const Wallpaper& rWallpaper );
856 
857 private:
858  SAL_DLLPRIVATE void DrawWallpaper( tools::Long nX, tools::Long nY, tools::Long nWidth, tools::Long nHeight, const Wallpaper& rWallpaper );
859  SAL_DLLPRIVATE void DrawColorWallpaper( tools::Long nX, tools::Long nY, tools::Long nWidth, tools::Long nHeight, const Wallpaper& rWallpaper );
860  SAL_DLLPRIVATE void DrawBitmapWallpaper( tools::Long nX, tools::Long nY, tools::Long nWidth, tools::Long nHeight, const Wallpaper& rWallpaper );
862 
863 
866 
868 public:
869 
870  void DrawText( const Point& rStartPt, const OUString& rStr,
871  sal_Int32 nIndex = 0, sal_Int32 nLen = -1,
872  std::vector< tools::Rectangle >* pVector = nullptr, OUString* pDisplayText = nullptr,
873  const SalLayoutGlyphs* pLayoutCache = nullptr );
874 
875  void DrawText( const tools::Rectangle& rRect,
876  const OUString& rStr, DrawTextFlags nStyle = DrawTextFlags::NONE,
877  std::vector< tools::Rectangle >* pVector = nullptr, OUString* pDisplayText = nullptr,
878  vcl::ITextLayout* _pTextLayout = nullptr );
879 
880  static void ImplDrawText( OutputDevice& rTargetDevice, const tools::Rectangle& rRect,
881  const OUString& rOrigStr, DrawTextFlags nStyle,
882  std::vector< tools::Rectangle >* pVector, OUString* pDisplayText, vcl::ITextLayout& _rLayout );
883 
884  void ImplDrawText( SalLayout& );
885 
886  void ImplDrawTextBackground( const SalLayout& );
887 
888  void DrawCtrlText( const Point& rPos, const OUString& rStr,
889  sal_Int32 nIndex = 0, sal_Int32 nLen = -1,
890  DrawTextFlags nStyle = DrawTextFlags::Mnemonic, std::vector< tools::Rectangle >* pVector = nullptr, OUString* pDisplayText = nullptr,
891  const SalLayoutGlyphs* pGlyphs = nullptr);
892 
893  void DrawTextLine( const Point& rPos, tools::Long nWidth,
894  FontStrikeout eStrikeout,
895  FontLineStyle eUnderline,
896  FontLineStyle eOverline,
897  bool bUnderlineAbove = false );
898 
899  void ImplDrawTextLine( tools::Long nBaseX, tools::Long nX, tools::Long nY, DeviceCoordinate nWidth,
900  FontStrikeout eStrikeout, FontLineStyle eUnderline,
901  FontLineStyle eOverline, bool bUnderlineAbove );
902 
903  void ImplDrawTextLines( SalLayout&, FontStrikeout eStrikeout, FontLineStyle eUnderline,
904  FontLineStyle eOverline, bool bWordLine, bool bUnderlineAbove );
905 
906  void DrawWaveLine( const Point& rStartPos, const Point& rEndPos, tools::Long nLineWidth = 1 );
907 
908  bool ImplDrawRotateText( SalLayout& );
909 
911  const OUString& rStr, DrawTextFlags nStyle = DrawTextFlags::WordBreak,
912  TextRectInfo* pInfo = nullptr,
913  const vcl::ITextLayout* _pTextLayout = nullptr ) const;
914 
964  bool GetTextBoundRect( tools::Rectangle& rRect,
965  const OUString& rStr, sal_Int32 nBase = 0, sal_Int32 nIndex = 0, sal_Int32 nLen = -1,
966  sal_uLong nLayoutWidth = 0, const tools::Long* pDXArray = nullptr,
967  const SalLayoutGlyphs* pGlyphs = nullptr ) const;
968 
969  tools::Rectangle ImplGetTextBoundRect( const SalLayout& ) const;
970 
971  bool GetTextOutline( tools::PolyPolygon&,
972  const OUString& rStr ) const;
973 
974  bool GetTextOutlines( PolyPolyVector&,
975  const OUString& rStr, sal_Int32 nBase = 0, sal_Int32 nIndex = 0,
976  sal_Int32 nLen = -1,
977  sal_uLong nLayoutWidth = 0, const tools::Long* pDXArray = nullptr ) const;
978 
979  bool GetTextOutlines( basegfx::B2DPolyPolygonVector &rVector,
980  const OUString& rStr, sal_Int32 nBase, sal_Int32 nIndex = 0,
981  sal_Int32 nLen = -1,
982  sal_uLong nLayoutWidth = 0, const tools::Long* pDXArray = nullptr ) const;
983 
984 
985  OUString GetEllipsisString( const OUString& rStr, tools::Long nMaxWidth,
986  DrawTextFlags nStyle = DrawTextFlags::EndEllipsis ) const;
987 
988  tools::Long GetCtrlTextWidth( const OUString& rStr,
989  const SalLayoutGlyphs* pLayoutCache = nullptr ) const;
990 
991  static OUString GetNonMnemonicString( const OUString& rStr, sal_Int32& rMnemonicPos );
992 
993  static OUString GetNonMnemonicString( const OUString& rStr )
994  { sal_Int32 nDummy; return GetNonMnemonicString( rStr, nDummy ); }
995 
1004  void AddTextRectActions( const tools::Rectangle& rRect,
1005  const OUString& rOrigStr,
1006  DrawTextFlags nStyle,
1007  GDIMetaFile& rMtf );
1008 
1009  void SetTextColor( const Color& rColor );
1010  virtual void SetSystemTextColor(SystemTextColorFlags nFlags, bool bEnabled);
1011  const Color& GetTextColor() const { return maTextColor; }
1012 
1013  void SetTextFillColor();
1014  void SetTextFillColor( const Color& rColor );
1015  Color GetTextFillColor() const;
1016  bool IsTextFillColor() const { return !maFont.IsTransparent(); }
1017 
1018  void SetTextLineColor();
1019  void SetTextLineColor( const Color& rColor );
1020  const Color& GetTextLineColor() const { return maTextLineColor; }
1021  bool IsTextLineColor() const { return !maTextLineColor.IsTransparent(); }
1022 
1023  void SetOverlineColor();
1024  void SetOverlineColor( const Color& rColor );
1025  const Color& GetOverlineColor() const { return maOverlineColor; }
1026  bool IsOverlineColor() const { return !maOverlineColor.IsTransparent(); }
1027 
1028  void SetTextAlign( TextAlign eAlign );
1029  TextAlign GetTextAlign() const { return maFont.GetAlignment(); }
1030 
1035  tools::Long GetTextWidth( const OUString& rStr, sal_Int32 nIndex = 0, sal_Int32 nLen = -1,
1036  vcl::text::TextLayoutCache const* = nullptr,
1037  SalLayoutGlyphs const*const pLayoutCache = nullptr) const;
1038 
1043  tools::Long GetTextHeight() const;
1044  float approximate_digit_width() const;
1045 
1046  void DrawTextArray( const Point& rStartPt, const OUString& rStr,
1047  const tools::Long* pDXAry,
1048  sal_Int32 nIndex = 0,
1049  sal_Int32 nLen = -1,
1051  const SalLayoutGlyphs* pLayoutCache = nullptr);
1052  tools::Long GetTextArray( const OUString& rStr, std::vector<tools::Long>* pDXAry,
1053  sal_Int32 nIndex = 0, sal_Int32 nLen = -1,
1054  vcl::text::TextLayoutCache const* = nullptr,
1055  SalLayoutGlyphs const*const pLayoutCache = nullptr) const;
1056 
1057  void GetCaretPositions( const OUString&, tools::Long* pCaretXArray,
1058  sal_Int32 nIndex, sal_Int32 nLen,
1059  const SalLayoutGlyphs* pGlyphs = nullptr ) const;
1060  void DrawStretchText( const Point& rStartPt, sal_uLong nWidth,
1061  const OUString& rStr,
1062  sal_Int32 nIndex = 0, sal_Int32 nLen = -1);
1063  sal_Int32 GetTextBreak( const OUString& rStr, tools::Long nTextWidth,
1064  sal_Int32 nIndex, sal_Int32 nLen = -1,
1065  tools::Long nCharExtra = 0,
1066  vcl::text::TextLayoutCache const* = nullptr,
1067  const SalLayoutGlyphs* pGlyphs = nullptr) const;
1068  sal_Int32 GetTextBreak( const OUString& rStr, tools::Long nTextWidth,
1069  sal_Unicode nExtraChar, sal_Int32& rExtraCharPos,
1070  sal_Int32 nIndex, sal_Int32 nLen,
1071  tools::Long nCharExtra,
1072  vcl::text::TextLayoutCache const* = nullptr) const;
1073  static std::shared_ptr<vcl::text::TextLayoutCache> CreateTextLayoutCache(OUString const&);
1074 
1075 protected:
1076  SAL_DLLPRIVATE void ImplInitTextLineSize();
1077  SAL_DLLPRIVATE void ImplInitAboveTextLineSize();
1078  static
1079  SAL_DLLPRIVATE tools::Long ImplGetTextLines( ImplMultiTextLineInfo& rLineInfo, tools::Long nWidth, const OUString& rStr, DrawTextFlags nStyle, const vcl::ITextLayout& _rLayout );
1080  SAL_DLLPRIVATE float approximate_char_width() const;
1081 
1082  virtual bool shouldDrawWavePixelAsRect(tools::Long nLineWidth) const;
1083  virtual void SetWaveLineColors(Color const& rColor, tools::Long nLineWidth);
1084  virtual Size GetWaveLineSize(tools::Long nLineWidth) const;
1085 
1086 private:
1087  SAL_DLLPRIVATE void ImplInitTextColor();
1088 
1089  SAL_DLLPRIVATE void ImplDrawTextDirect( SalLayout&, bool bTextLines);
1090  SAL_DLLPRIVATE void ImplDrawSpecialText( SalLayout& );
1091  SAL_DLLPRIVATE void ImplDrawTextRect( tools::Long nBaseX, tools::Long nBaseY, tools::Long nX, tools::Long nY, tools::Long nWidth, tools::Long nHeight );
1092 
1093  SAL_DLLPRIVATE void ImplDrawWavePixel( tools::Long nOriginX, tools::Long nOriginY, tools::Long nCurX, tools::Long nCurY, tools::Long nWidth, Degree10 nOrientation, SalGraphics* pGraphics, const OutputDevice& rOutDev, tools::Long nPixWidth, tools::Long nPixHeight );
1094 
1095  SAL_DLLPRIVATE void ImplDrawWaveLine( tools::Long nBaseX, tools::Long nBaseY, tools::Long nStartX, tools::Long nStartY, tools::Long nWidth, tools::Long nHeight, tools::Long nLineWidth, Degree10 nOrientation, const Color& rColor );
1096  SAL_DLLPRIVATE void ImplDrawWaveTextLine( tools::Long nBaseX, tools::Long nBaseY, tools::Long nX, tools::Long nY, tools::Long nWidth, FontLineStyle eTextLine, Color aColor, bool bIsAbove );
1097  SAL_DLLPRIVATE void ImplDrawStraightTextLine( tools::Long nBaseX, tools::Long nBaseY, tools::Long nX, tools::Long nY, tools::Long nWidth, FontLineStyle eTextLine, Color aColor, bool bIsAbove );
1098  SAL_DLLPRIVATE void ImplDrawStrikeoutLine( tools::Long nBaseX, tools::Long nBaseY, tools::Long nX, tools::Long nY, tools::Long nWidth, FontStrikeout eStrikeout, Color aColor );
1099  SAL_DLLPRIVATE void ImplDrawStrikeoutChar( tools::Long nBaseX, tools::Long nBaseY, tools::Long nX, tools::Long nY, tools::Long nWidth, FontStrikeout eStrikeout, Color aColor );
1100  SAL_DLLPRIVATE void ImplDrawMnemonicLine( tools::Long nX, tools::Long nY, tools::Long nWidth );
1101 
1102 
1104 
1105 
1108 
1110 public:
1111 
1112  FontMetric GetFontMetricFromCollection( int nDevFontIndex ) const;
1113  int GetFontFaceCollectionCount() const;
1114 
1115  bool IsFontAvailable( std::u16string_view rFontName ) const;
1116 
1117  bool AddTempDevFont( const OUString& rFileURL, const OUString& rFontName );
1118  void RefreshFontData( const bool bNewFontLists );
1119 
1120  FontMetric GetFontMetric() const;
1121  FontMetric GetFontMetric( const vcl::Font& rFont ) const;
1122 
1123  bool GetFontCharMap( FontCharMapRef& rxFontCharMap ) const;
1124  bool GetFontCapabilities( vcl::FontCapabilities& rFontCapabilities ) const;
1125 
1126  bool GetFontFeatures(std::vector<vcl::font::Feature>& rFontFeatures) const;
1127 
1128  SAL_DLLPRIVATE void ImplGetEmphasisMark( tools::PolyPolygon& rPolyPoly, bool& rPolyLine, tools::Rectangle& rRect1, tools::Rectangle& rRect2,
1129  tools::Long& rYOff, tools::Long& rWidth, FontEmphasisMark eEmphasis, tools::Long nHeight );
1130  SAL_DLLPRIVATE static FontEmphasisMark
1131  ImplGetEmphasisMarkStyle( const vcl::Font& rFont );
1132 
1133  bool GetGlyphBoundRects( const Point& rOrigin, const OUString& rStr, int nIndex,
1134  int nLen, std::vector< tools::Rectangle >& rVector ) const;
1135 
1136  sal_Int32 HasGlyphs( const vcl::Font& rFont, const OUString& rStr,
1137  sal_Int32 nIndex = 0, sal_Int32 nLen = -1 ) const;
1138 
1139  tools::Long GetMinKashida() const;
1140 
1141  // i60594
1142  // validate kashida positions against the current font
1143  // returns count of invalid kashida positions
1144  sal_Int32 ValidateKashidas( const OUString& rTxt, sal_Int32 nIdx, sal_Int32 nLen,
1145  sal_Int32 nKashCount, // number of suggested kashida positions (in)
1146  const sal_Int32* pKashidaPos, // suggested kashida positions (in)
1147  sal_Int32* pKashidaPosDropped // invalid kashida positions (out)
1148  ) const;
1149 
1150  static void BeginFontSubstitution();
1151  static void EndFontSubstitution();
1152  static void AddFontSubstitute( const OUString& rFontName,
1153  const OUString& rReplaceFontName,
1154  AddFontSubstituteFlags nFlags );
1155  static void RemoveFontsSubstitute();
1156 
1157  static vcl::Font GetDefaultFont( DefaultFontType nType,
1158  LanguageType eLang,
1159  GetDefaultFontFlags nFlags,
1160  const OutputDevice* pOutDev = nullptr );
1161 
1162  SAL_DLLPRIVATE void ImplInitFontList() const;
1163  SAL_DLLPRIVATE void ImplUpdateFontData();
1164 
1165  //drop font data for all outputdevices.
1166  //If bNewFontLists is true then empty lists of system fonts
1167  SAL_DLLPRIVATE static void ImplClearAllFontData( bool bNewFontLists );
1168  //fetch font data for all outputdevices
1169  //If bNewFontLists is true then fetch lists of system fonts
1170  SAL_DLLPRIVATE static void ImplRefreshAllFontData( bool bNewFontLists );
1171  //drop and fetch font data for all outputdevices
1172  //If bNewFontLists is true then drop and refetch lists of system fonts
1173  SAL_DLLPRIVATE static void ImplUpdateAllFontData( bool bNewFontLists );
1174 
1175 protected:
1176  SAL_DLLPRIVATE const LogicalFontInstance* GetFontInstance() const;
1177  SAL_DLLPRIVATE tools::Long GetEmphasisAscent() const { return mnEmphasisAscent; }
1178  SAL_DLLPRIVATE tools::Long GetEmphasisDescent() const { return mnEmphasisDescent; }
1179 
1180  SAL_DLLPRIVATE bool InitFont() const;
1181  virtual void SetFontOrientation( LogicalFontInstance* const pFontInstance ) const;
1182  virtual tools::Long GetFontExtLeading() const;
1183 
1184  virtual void ImplClearFontData(bool bNewFontLists);
1185  virtual void ImplRefreshFontData(bool bNewFontLists);
1186  void ReleaseFontCache();
1187  void ReleaseFontCollection();
1188  void SetFontCollectionFromSVData();
1189  void ResetNewFontCache();
1190 
1191  virtual bool ImplNewFont() const;
1192 
1193 private:
1194 
1195  typedef void ( OutputDevice::* FontUpdateHandler_t )( bool );
1196 
1197  SAL_DLLPRIVATE static void ImplUpdateFontDataForAllFrames( FontUpdateHandler_t pHdl, bool bNewFontLists );
1198 
1199  static
1200  SAL_DLLPRIVATE OUString ImplGetEllipsisString( const OutputDevice& rTargetDevice, const OUString& rStr,
1201  tools::Long nMaxWidth, DrawTextFlags nStyle, const vcl::ITextLayout& _rLayout );
1202 
1203  SAL_DLLPRIVATE void ImplDrawEmphasisMark( tools::Long nBaseX, tools::Long nX, tools::Long nY, const tools::PolyPolygon& rPolyPoly, bool bPolyLine, const tools::Rectangle& rRect1, const tools::Rectangle& rRect2 );
1204  SAL_DLLPRIVATE void ImplDrawEmphasisMarks( SalLayout& );
1206 
1207 
1210 
1212 public:
1213 
1214  // tells whether this output device is RTL in an LTR UI or LTR in a RTL UI
1215  SAL_DLLPRIVATE bool ImplIsAntiparallel() const ;
1216  SAL_DLLPRIVATE void ReMirror( Point &rPoint ) const;
1217  SAL_DLLPRIVATE void ReMirror( tools::Rectangle &rRect ) const;
1218  SAL_DLLPRIVATE void ReMirror( vcl::Region &rRegion ) const;
1219  SAL_DLLPRIVATE bool ImplIsRecordLayout() const;
1220  virtual bool HasMirroredGraphics() const;
1221  std::unique_ptr<SalLayout>
1222  ImplLayout( const OUString&, sal_Int32 nIndex, sal_Int32 nLen,
1223  const Point& rLogicPos = Point(0,0), tools::Long nLogicWidth=0,
1224  const tools::Long* pLogicDXArray=nullptr, SalLayoutFlags flags = SalLayoutFlags::NONE,
1225  vcl::text::TextLayoutCache const* = nullptr,
1226  const SalLayoutGlyphs* pGlyphs = nullptr) const;
1227  SAL_DLLPRIVATE vcl::text::ImplLayoutArgs ImplPrepareLayoutArgs( OUString&, const sal_Int32 nIndex, const sal_Int32 nLen,
1228  DeviceCoordinate nPixelWidth, const DeviceCoordinate* pPixelDXArray,
1230  vcl::text::TextLayoutCache const* = nullptr) const;
1231  SAL_DLLPRIVATE std::unique_ptr<SalLayout>
1232  ImplGlyphFallbackLayout( std::unique_ptr<SalLayout>,
1234  const SalLayoutGlyphs* ) const;
1235  SAL_DLLPRIVATE std::unique_ptr<SalLayout>
1236  getFallbackLayout(
1237  LogicalFontInstance* pLogicalFont, int nFallbackLevel,
1238  vcl::text::ImplLayoutArgs& rLayoutArgs, const SalLayoutGlyphs* ) const;
1239 
1240 
1241  // Enabling/disabling RTL only makes sense for OutputDevices that use a mirroring SalGraphicsLayout
1242  virtual void EnableRTL( bool bEnable = true);
1243  bool IsRTLEnabled() const { return mbEnableRTL; }
1244 
1245  bool GetTextIsRTL( const OUString&, sal_Int32 nIndex, sal_Int32 nLen ) const;
1246 
1248 
1249 
1252 
1254 public:
1255  void DrawBitmap(
1256  const Point& rDestPt,
1257  const Bitmap& rBitmap );
1258 
1259  void DrawBitmap(
1260  const Point& rDestPt,
1261  const Size& rDestSize,
1262  const Bitmap& rBitmap );
1263 
1264  void DrawBitmap(
1265  const Point& rDestPt,
1266  const Size& rDestSize,
1267  const Point& rSrcPtPixel,
1268  const Size& rSrcSizePixel,
1269  const Bitmap& rBitmap);
1270 
1271  void DrawBitmap(
1272  const Point& rDestPt,
1273  const Size& rDestSize,
1274  const Point& rSrcPtPixel,
1275  const Size& rSrcSizePixel,
1276  const Bitmap& rBitmap,
1277  MetaActionType nAction );
1278 
1279  void DrawBitmapEx(
1280  const Point& rDestPt,
1281  const BitmapEx& rBitmapEx );
1282 
1283 
1284  void DrawBitmapEx(
1285  const Point& rDestPt,
1286  const Size& rDestSize,
1287  const BitmapEx& rBitmapEx );
1288 
1289  void DrawBitmapEx(
1290  const Point& rDestPt,
1291  const Size& rDestSize,
1292  const Point& rSrcPtPixel,
1293  const Size& rSrcSizePixel,
1294  const BitmapEx& rBitmapEx);
1295 
1296  void DrawBitmapEx(
1297  const Point& rDestPt,
1298  const Size& rDestSize,
1299  const Point& rSrcPtPixel,
1300  const Size& rSrcSizePixel,
1301  const BitmapEx& rBitmapEx,
1302  MetaActionType nAction );
1303 
1311  void DrawImage(
1312  const Point& rPos,
1313  const Image& rImage,
1315 
1316  void DrawImage(
1317  const Point& rPos,
1318  const Size& rSize,
1319  const Image& rImage,
1321 
1322 
1323  virtual Bitmap GetBitmap( const Point& rSrcPt, const Size& rSize ) const;
1324 
1327  BitmapEx GetBitmapEx( const Point& rSrcPt, const Size& rSize ) const;
1328 
1329 
1343  void DrawTransformedBitmapEx(
1344  const basegfx::B2DHomMatrix& rTransformation,
1345  const BitmapEx& rBitmapEx,
1346  double fAlpha = 1.0);
1347 
1352  bool HasFastDrawTransformedBitmap() const;
1353 
1354 protected:
1355 
1356  virtual void DrawDeviceBitmapEx(
1357  const Point& rDestPt, const Size& rDestSize,
1358  const Point& rSrcPtPixel, const Size& rSrcSizePixel,
1359  BitmapEx& rBitmapEx );
1360 
1361  virtual bool CanSubsampleBitmap() const { return true; }
1362 
1370  virtual bool DrawTransformBitmapExDirect(
1371  const basegfx::B2DHomMatrix& aFullTransform,
1372  const BitmapEx& rBitmapEx,
1373  double fAlpha = 1.0);
1374 
1386  virtual bool TransformAndReduceBitmapExToTargetRange(
1387  const basegfx::B2DHomMatrix& aFullTransform,
1388  basegfx::B2DRange &aVisibleRange,
1389  double &fMaximumArea);
1390 
1391 private:
1392 
1393  SAL_DLLPRIVATE void DrawDeviceAlphaBitmap(
1394  const Bitmap& rBmp,
1395  const AlphaMask& rAlpha,
1396  const Point& rDestPt,
1397  const Size& rDestSize,
1398  const Point& rSrcPtPixel,
1399  const Size& rSrcSizePixel );
1400 
1401  SAL_DLLPRIVATE void DrawDeviceAlphaBitmapSlowPath(
1402  const Bitmap& rBitmap, const AlphaMask& rAlpha,
1403  tools::Rectangle aDstRect, tools::Rectangle aBmpRect,
1404  Size const & aOutSz, Point const & aOutPt);
1405 
1406 
1407  SAL_DLLPRIVATE void BlendBitmap(
1408  const SalTwoRect& rPosAry,
1409  const Bitmap& rBmp );
1410 
1411  SAL_DLLPRIVATE Bitmap BlendBitmap(
1412  Bitmap& aBmp,
1413  BitmapReadAccess const * pP,
1414  BitmapReadAccess const * pA,
1415  const sal_Int32 nOffY,
1416  const sal_Int32 nDstHeight,
1417  const sal_Int32 nOffX,
1418  const sal_Int32 nDstWidth,
1419  const tools::Rectangle& aBmpRect,
1420  const Size& aOutSz,
1421  const bool bHMirr,
1422  const bool bVMirr,
1423  const tools::Long* pMapX,
1424  const tools::Long* pMapY );
1425 
1426  SAL_DLLPRIVATE Bitmap BlendBitmapWithAlpha(
1427  Bitmap& aBmp,
1428  BitmapReadAccess const * pP,
1429  BitmapReadAccess const * pA,
1430  const tools::Rectangle& aDstRect,
1431  const sal_Int32 nOffY,
1432  const sal_Int32 nDstHeight,
1433  const sal_Int32 nOffX,
1434  const sal_Int32 nDstWidth,
1435  const tools::Long* pMapX,
1436  const tools::Long* pMapY );
1437 
1439 
1440 
1443 
1445 public:
1446 
1457  bool RemoveTransparenciesFromMetaFile(
1458  const GDIMetaFile& rInMtf, GDIMetaFile& rOutMtf,
1459  tools::Long nMaxBmpDPIX, tools::Long nMaxBmpDPIY,
1460  bool bReduceTransparency,
1461  bool bTransparencyAutoMode,
1462  bool bDownsampleBitmaps,
1463  const Color& rBackground = COL_TRANSPARENT );
1464 
1465  void DrawTransparent( const tools::PolyPolygon& rPolyPoly, sal_uInt16 nTransparencePercent );
1466 
1467  void DrawTransparent(
1468  const basegfx::B2DHomMatrix& rObjectTransform,
1469  const basegfx::B2DPolyPolygon& rB2DPolyPoly,
1470  double fTransparency);
1471 
1472  void DrawTransparent(
1473  const GDIMetaFile& rMtf, const Point& rPos, const Size& rSize,
1474  const Gradient& rTransparenceGradient );
1475 
1476 protected:
1477 
1478  virtual void EmulateDrawTransparent( const tools::PolyPolygon& rPolyPoly, sal_uInt16 nTransparencePercent );
1479  void DrawInvisiblePolygon( const tools::PolyPolygon& rPolyPoly );
1480 
1481  virtual void ClipAndDrawGradientMetafile ( const Gradient &rGradient, const tools::PolyPolygon &rPolyPoly );
1482 
1483 private:
1484 
1485  SAL_DLLPRIVATE bool DrawTransparentNatively( const tools::PolyPolygon& rPolyPoly, sal_uInt16 nTransparencePercent );
1487 
1488 
1491 
1493 public:
1494 
1495  void DrawMask( const Point& rDestPt,
1496  const Bitmap& rBitmap, const Color& rMaskColor );
1497 
1498  void DrawMask( const Point& rDestPt, const Size& rDestSize,
1499  const Bitmap& rBitmap, const Color& rMaskColor );
1500 
1501  void DrawMask( const Point& rDestPt, const Size& rDestSize,
1502  const Point& rSrcPtPixel, const Size& rSrcSizePixel,
1503  const Bitmap& rBitmap, const Color& rMaskColor);
1504 
1505  void DrawMask( const Point& rDestPt, const Size& rDestSize,
1506  const Point& rSrcPtPixel, const Size& rSrcSizePixel,
1507  const Bitmap& rBitmap, const Color& rMaskColor,
1508  MetaActionType nAction );
1509 
1510 protected:
1511 
1512  virtual void DrawDeviceMask (
1513  const Bitmap& rMask, const Color& rMaskColor,
1514  const Point& rDestPt, const Size& rDestSize,
1515  const Point& rSrcPtPixel, const Size& rSrcSizePixel );
1517 
1518 
1521 
1523 public:
1524 
1525  void EnableMapMode( bool bEnable = true );
1526  bool IsMapModeEnabled() const { return mbMap; }
1527 
1528  void SetMapMode();
1529  void SetMapMode( const MapMode& rNewMapMode );
1530  void SetRelativeMapMode( const MapMode& rNewMapMode );
1531  virtual void SetMetafileMapMode(const MapMode& rNewMapMode, bool bIsRecord);
1532  const MapMode& GetMapMode() const { return maMapMode; }
1533 
1534 protected:
1535  virtual void ImplInitMapModeObjects();
1536 
1537 public:
1538  // #i75163#
1539  basegfx::B2DHomMatrix GetViewTransformation() const;
1540  basegfx::B2DHomMatrix GetInverseViewTransformation() const;
1541 
1542  basegfx::B2DHomMatrix GetViewTransformation( const MapMode& rMapMode ) const;
1543  basegfx::B2DHomMatrix GetInverseViewTransformation( const MapMode& rMapMode ) const;
1544 
1545 
1568  void SetPixelOffset( const Size& rOffset );
1569 
1576  SAL_WARN_UNUSED_RESULT Size GetPixelOffset() const { return Size(mnOutOffOrigX, mnOutOffOrigY);}
1577 
1578  SAL_WARN_UNUSED_RESULT Point LogicToPixel(const Point& rLogicPt) const;
1579  SAL_WARN_UNUSED_RESULT Size LogicToPixel(const Size& rLogicSize) const;
1584  SAL_WARN_UNUSED_RESULT vcl::Region LogicToPixel(const vcl::Region& rLogicRegion)const;
1585  SAL_WARN_UNUSED_RESULT Point LogicToPixel(const Point& rLogicPt, const MapMode& rMapMode) const;
1586  SAL_WARN_UNUSED_RESULT Size LogicToPixel(const Size& rLogicSize, const MapMode& rMapMode) const;
1588  const MapMode& rMapMode) const;
1590  const MapMode& rMapMode) const;
1592  const MapMode& rMapMode) const;
1593 
1594  SAL_WARN_UNUSED_RESULT Point PixelToLogic(const Point& rDevicePt) const;
1595  SAL_WARN_UNUSED_RESULT Size PixelToLogic(const Size& rDeviceSize) const;
1600  SAL_WARN_UNUSED_RESULT vcl::Region PixelToLogic(const vcl::Region& rDeviceRegion) const;
1601  SAL_WARN_UNUSED_RESULT Point PixelToLogic(const Point& rDevicePt, const MapMode& rMapMode) const;
1602  SAL_WARN_UNUSED_RESULT Size PixelToLogic(const Size& rDeviceSize, const MapMode& rMapMode) const;
1604  const MapMode& rMapMode) const;
1606  const MapMode& rMapMode) const;
1608  const MapMode& rMapMode) const;
1610  const MapMode& rMapMode) const;
1611 
1612  SAL_WARN_UNUSED_RESULT Point LogicToLogic(const Point& rPtSource,
1613  const MapMode* pMapModeSource,
1614  const MapMode* pMapModeDest) const;
1615  SAL_WARN_UNUSED_RESULT Size LogicToLogic(const Size& rSzSource,
1616  const MapMode* pMapModeSource,
1617  const MapMode* pMapModeDest) const;
1619  const MapMode* pMapModeSource,
1620  const MapMode* pMapModeDest) const;
1621  SAL_WARN_UNUSED_RESULT static Point LogicToLogic(const Point& rPtSource,
1622  const MapMode& rMapModeSource,
1623  const MapMode& rMapModeDest);
1624  SAL_WARN_UNUSED_RESULT static Size LogicToLogic(const Size& rSzSource,
1625  const MapMode& rMapModeSource,
1626  const MapMode& rMapModeDest);
1628  const MapMode& rMapModeSource,
1629  const MapMode& rMapModeDest);
1631  MapUnit eUnitSource,
1632  MapUnit eUnitDest);
1633 
1635  const MapMode& rMapModeSource,
1636  const MapMode& rMapModeDest);
1637 
1638  // create a mapping transformation from rMapModeSource to rMapModeDest (the above methods
1639  // for B2DPoly/Polygons use this internally anyway to transform the B2DPolygon)
1641  const MapMode& rMapModeDest);
1642 
1649  SAL_DLLPRIVATE tools::Rectangle ImplLogicToDevicePixel( const tools::Rectangle& rLogicRect ) const;
1650 
1657  SAL_DLLPRIVATE Point ImplLogicToDevicePixel( const Point& rLogicPt ) const;
1658 
1669  SAL_DLLPRIVATE tools::Long ImplLogicWidthToDevicePixel( tools::Long nWidth ) const;
1670 
1671  SAL_DLLPRIVATE DeviceCoordinate LogicWidthToDeviceCoordinate( tools::Long nWidth ) const;
1672 
1684  SAL_DLLPRIVATE tools::Long ImplLogicXToDevicePixel( tools::Long nX ) const;
1685 
1697  SAL_DLLPRIVATE tools::Long ImplLogicYToDevicePixel( tools::Long nY ) const;
1698 
1709  SAL_DLLPRIVATE tools::Long ImplLogicHeightToDevicePixel( tools::Long nHeight ) const;
1710 
1720  SAL_DLLPRIVATE tools::Long ImplDevicePixelToLogicWidth( tools::Long nWidth ) const;
1721 
1731  SAL_DLLPRIVATE tools::Long ImplDevicePixelToLogicHeight( tools::Long nHeight ) const;
1732 
1742  SAL_DLLPRIVATE float ImplFloatLogicHeightToDevicePixel( float fLogicHeight ) const;
1743 
1750  SAL_DLLPRIVATE Size ImplLogicToDevicePixel( const Size& rLogicSize ) const;
1751 
1758  SAL_DLLPRIVATE tools::Rectangle ImplDevicePixelToLogic( const tools::Rectangle& rPixelRect ) const;
1759 
1766  SAL_DLLPRIVATE tools::Polygon ImplLogicToDevicePixel( const tools::Polygon& rLogicPoly ) const;
1767 
1774  SAL_DLLPRIVATE ::basegfx::B2DPolygon ImplLogicToDevicePixel( const ::basegfx::B2DPolygon& rLogicPoly ) const;
1775 
1782  SAL_DLLPRIVATE tools::PolyPolygon ImplLogicToDevicePixel( const tools::PolyPolygon& rLogicPolyPoly ) const;
1783 
1790  SAL_DLLPRIVATE LineInfo ImplLogicToDevicePixel( const LineInfo& rLineInfo ) const;
1791 
1798  SAL_DLLPRIVATE vcl::Region ImplPixelToDevicePixel( const vcl::Region& rRegion ) const;
1799 
1804  SAL_DLLPRIVATE void ImplInvalidateViewTransform();
1805 
1810  SAL_DLLPRIVATE basegfx::B2DHomMatrix ImplGetDeviceTransformation() const;
1812 
1813 
1818 
1820 public:
1821 
1824  virtual bool CanEnableNativeWidget() const { return false; }
1825 
1828  bool IsNativeControlSupported( ControlType nType, ControlPart nPart ) const;
1829 
1832  bool HitTestNativeScrollbar(
1833  ControlPart nPart,
1834  const tools::Rectangle& rControlRegion,
1835  const Point& aPos,
1836  bool& rIsInside ) const;
1837 
1840  bool DrawNativeControl(
1841  ControlType nType,
1842  ControlPart nPart,
1843  const tools::Rectangle& rControlRegion,
1844  ControlState nState,
1845  const ImplControlValue& aValue,
1846  const OUString& aCaption,
1847  const Color& rBackgroundColor = COL_AUTO );
1848 
1852  ControlType nType,
1853  ControlPart nPart,
1854  const tools::Rectangle& rControlRegion,
1855  ControlState nState,
1856  const ImplControlValue& aValue,
1857  tools::Rectangle &rNativeBoundingRegion,
1858  tools::Rectangle &rNativeContentRegion ) const;
1860 
1863 
1865 public:
1866 
1872  bool DrawEPS(
1873  const Point& rPt, const Size& rSz,
1874  const GfxLink& rGfxLink, GDIMetaFile* pSubst = nullptr );
1876 
1877 public:
1878  virtual css::awt::DeviceInfo GetDeviceInfo() const;
1879 
1881  virtual vcl::Window* GetOwnerWindow() const { return nullptr; }
1882 
1883 protected:
1884  css::awt::DeviceInfo GetCommonDeviceInfo(Size const& aDevSize) const;
1885 
1886 };
1887 
1888 /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
BitmapEx GetBitmapEx(BitmapEx const &rBitmapEx, DrawModeFlags nDrawMode)
Definition: drawmode.cxx:224
#define SAL_WARN_UNUSED_RESULT
tools::Long GetTextHeight() const
Height where any character of the current font fits; in logic coordinates.
Definition: window3.cxx:65
VclReferenceBase & operator=(const VclReferenceBase &)=delete
const Color & GetTextColor() const
Definition: outdev.hxx:1011
OutDevType GetOutDevType() const
Definition: outdev.hxx:402
sal_Int32 mnDPIScalePercentage
For HiDPI displays, we want to draw elements for a percentage larger.
Definition: outdev.hxx:213
virtual void Flush()
Definition: outdev.hxx:425
void SetBackground()
Definition: window3.cxx:100
VclPtr< OutputDevice > mpNextGraphics
Next output device in list.
Definition: outdev.hxx:183
tools::SvRef< FontCharMap > FontCharMapRef
Definition: outdev.hxx:148
virtual Color GetMonochromeButtonColor()
Definition: outdev.hxx:418
const Wallpaper & GetBackground() const
Definition: outdev.hxx:519
Definition: hatch.hxx:46
B2IVector B2ISize
tools::Long mnOutOffLogicX
Additional output offset in logical coordinates, applied in PixelToLogic (used by SetPixelOffset/GetP...
Definition: outdev.hxx:200
SAL_DLLPRIVATE tools::Long GetEmphasisAscent() const
Definition: outdev.hxx:1177
tools::Long mnOutOffOrigY
Additional output pixel offset, applied in LogicToPixel (used by SetPixelOffset/GetPixelOffset) ...
Definition: outdev.hxx:202
AntialiasingFlags
Color maTextColor
Definition: outdev.hxx:228
const Point & GetRefPoint() const
Definition: outdev.hxx:303
void ImplHandleResize(vcl::Window *pWindow, tools::Long nNewWidth, tools::Long nNewHeight)
Definition: winproc.cxx:1639
virtual void EnableRTL(bool bEnable=true)
Definition: window3.cxx:216
bool IsTransparent() const
const Color & GetTextLineColor() const
Definition: outdev.hxx:1020
SAL_DLLPRIVATE float approximate_char_width() const
Definition: window3.cxx:61
void SetOverlineColor()
Definition: window3.cxx:95
void SetSettings(const AllSettings &rSettings)
Definition: window3.cxx:208
bool IsBackground() const
Definition: outdev.hxx:522
#define VCL_DLLPUBLIC
Definition: dllapi.h:29
DrawModeFlags mnDrawMode
Definition: outdev.hxx:219
Color maLineColor
Definition: outdev.hxx:225
sal_uIntPtr sal_uLong
long Long
TextAlign GetTextAlign() const
Definition: outdev.hxx:1029
bool IsOutputEnabled() const
Definition: outdev.hxx:476
FontEmphasisMark
SAL_DLLPRIVATE void SetDPIX(sal_Int32 nDPIX)
Definition: outdev.hxx:389
float approximate_digit_width() const
Definition: window3.cxx:72
bool IsMapModeEnabled() const
Definition: outdev.hxx:1526
bool IsTextLineColor() const
Definition: outdev.hxx:1021
tools::Long GetOutOffXPixel() const
Definition: outdev.hxx:314
vcl::Region maRegion
Definition: outdev.hxx:224
tools::Long mnOutOffY
Output offset for device output in pixel (pseudo window offset within window system's frames) ...
Definition: outdev.hxx:208
const MapMode & GetMapMode() const
Definition: outdev.hxx:1532
sal_Int32 mnDPIY
Definition: outdev.hxx:212
std::vector< VCLXGraphics * > * mpUnoGraphicsList
Definition: outdev.hxx:189
std::shared_ptr< vcl::font::PhysicalFontCollection > mxFontCollection
Definition: outdev.hxx:260
GDIMetaFile * GetConnectMetaFile() const
Definition: outdev.hxx:284
sal_Int32 mnDPIX
Definition: outdev.hxx:211
vcl::text::ComplexTextLayoutFlags GetLayoutMode() const
Definition: outdev.hxx:486
static OUString GetNonMnemonicString(const OUString &rStr)
Definition: window.hxx:1561
AntialiasingFlags GetAntialiasing() const
Definition: outdev.hxx:480
tools::Long mnEmphasisDescent
Definition: outdev.hxx:218
DrawTextFlags
void SetTextColor(const Color &rColor)
Definition: window3.cxx:108
tools::Long mnOutOffOrigX
Additional output pixel offset, applied in LogicToPixel (used by SetPixelOffset/GetPixelOffset) ...
Definition: outdev.hxx:198
OutDevSupportType
Definition: vclenum.hxx:194
void SetTextLineColor()
Definition: window3.cxx:93
MapMode maMapMode
Definition: outdev.hxx:234
std::unique_ptr< vcl::font::PhysicalFontFaceCollection > mpFontFaceCollection
Definition: outdev.hxx:186
const Color & GetOverlineColor() const
Definition: outdev.hxx:1025
sal_uInt16 sal_Unicode
static OUString GetNonMnemonicString(const OUString &rStr)
Definition: outdev.hxx:993
Color maOverlineColor
Definition: outdev.hxx:230
const vcl::Font & GetFont() const
Definition: outdev.hxx:525
DrawImageFlags
OutDevViewType meOutDevViewType
Definition: outdev.hxx:223
void EnableMapMode(bool bEnable=true)
Definition: window3.cxx:105
virtual bool CanSubsampleBitmap() const
Definition: outdev.hxx:1361
vcl::text::ComplexTextLayoutFlags mnTextLayoutMode
Definition: outdev.hxx:220
TextAlign GetAlignment() const
Definition: font/font.cxx:827
AntialiasingFlags mnAntialiasing
Definition: outdev.hxx:236
SystemTextColorFlags
MetaActionType
Color maFillColor
Definition: outdev.hxx:226
void SetTextFillColor()
Definition: window3.cxx:97
std::unique_ptr< AllSettings > mxSettings
Definition: outdev.hxx:233
std::vector< vcl::State > maOutDevStateStack
Definition: outdev.hxx:187
SalGraphics * mpGraphics
Graphics context to draw on.
Definition: outdev.hxx:181
exports com.sun.star. text
std::shared_ptr< Surface > SurfaceSharedPtr
Definition: cairo.hxx:36
bool IsTextFillColor() const
Definition: outdev.hxx:1016
bool IsRTLEnabled() const
Definition: outdev.hxx:1243
Point LogicToPixel(const Point &rLogicPt) const
Definition: window3.cxx:131
Wallpaper maBackground
Definition: outdev.hxx:232
ComplexTextLayoutFlags
Definition: State.hxx:76
bool IsClipRegion() const
Definition: outdev.hxx:551
tools::Long GetOutputHeightPixel() const
Definition: outdev.hxx:313
OutDevType
Definition: outdev.hxx:142
bool IsLineColor() const
Definition: outdev.hxx:507
void drawLine(VirtualDevice *dev, Point const &orig, Point const &dest, Size const &pSize)
draws a line from orig to dest knowing penSize
Definition: shape.cxx:111
Size GetOutputSize() const
Definition: outdev.hxx:323
const OutDevType meOutDevType
Definition: outdev.hxx:222
tools::Long mnOutHeight
Definition: outdev.hxx:210
Some things multiple-inherit from VclAbstractDialog and OutputDevice, so we need to use virtual inher...
Definition: outdev.hxx:168
const Color & GetLineColor() const
Definition: outdev.hxx:506
bool GetNativeControlRegion(ControlType nType, ControlPart nPart, const tools::Rectangle &rControlRegion, ControlState nState, const ImplControlValue &aValue, tools::Rectangle &rNativeBoundingRegion, tools::Rectangle &rNativeContentRegion) const
Query the native control's actual drawing region (including adornment)
Definition: window3.cxx:79
tools::Long DeviceCoordinate
css::uno::WeakReference< css::rendering::XCanvas > mxCanvas
Definition: outdev.hxx:192
std::vector< tools::PolyPolygon > PolyPolyVector
vcl::Font maFont
Definition: outdev.hxx:227
constexpr double deg2rad(double v)
std::shared_ptr< cairo_surface_t > CairoSurfaceSharedPtr
Definition: cairo.hxx:34
RasterOp meRasterOp
Definition: outdev.hxx:231
const AllSettings & GetSettings() const
Definition: outdev.hxx:287
Size GetOutputSizePixel() const
Definition: outdev.hxx:310
Color maTextLineColor
Definition: outdev.hxx:229
PushFlags
Definition: State.hxx:40
Point PixelToLogic(const Point &rDevicePt) const
Definition: window3.cxx:161
void SetTextAlign(TextAlign eAlign)
Definition: window3.cxx:120
DrawModeFlags GetDrawMode() const
Definition: outdev.hxx:483
RasterOp
Definition: RasterOp.hxx:22
VCL_DLLPUBLIC void InvertFocusRect(vcl::RenderContext &rRenderContext, const tools::Rectangle &rRect)
Definition: window2.cxx:1991
tools::Long mnEmphasisAscent
Definition: outdev.hxx:217
Size LogicToLogic(const Size &rSzSource, const MapMode *pMapModeSource, const MapMode *pMapModeDest) const
Definition: window3.cxx:195
TextAlign
float GetDPIScaleFactor() const
Definition: outdev.hxx:392
tools::Long GetOutOffYPixel() const
Definition: outdev.hxx:315
virtual void dispose()
std::vector< VCLXGraphics * > * GetUnoGraphicsList() const
Definition: outdev.hxx:328
ControlType
These types are all based on the supported variants vcl/salnativewidgets.hxx and must be kept in-sync...
#define SAL_WARN_UNUSED
VclPtr< OutputDevice > mpPrevGraphics
Previous output device in list.
Definition: outdev.hxx:182
GetDefaultFontFlags
VclPtr< VirtualDevice > mpAlphaVDev
Definition: outdev.hxx:195
SAL_DLLPRIVATE tools::Long GetEmphasisDescent() const
Definition: outdev.hxx:1178
bool IsRefPoint() const
Definition: outdev.hxx:304
ImplMapRes maMapRes
Definition: outdev.hxx:221
Color GetBackgroundColor() const
Definition: window3.cxx:214
SAL_WARN_UNUSED_RESULT Size GetPixelOffset() const
Get the offset in pixel.
Definition: outdev.hxx:1576
void SetExtOutDevData(vcl::ExtOutDevData *pExtOutDevData)
Definition: outdev.hxx:411
OutputDevice RenderContext
Definition: outdev.hxx:156
tools::Rectangle GetOutputRectPixel() const
Definition: outdev.hxx:320
LanguageType GetDigitLanguage() const
Definition: outdev.hxx:489
OutDevViewType GetOutDevViewType() const
Definition: outdev.hxx:502
const ::std::vector< Color > ImpSvNumberformatScan::StandardColor COL_WHITE
Point GetOutputOffPixel() const
Definition: outdev.hxx:318
bool IsTransparent() const
Definition: font/font.cxx:825
Definition: image.hxx:39
tools::Rectangle GetTextRect(const tools::Rectangle &rRect, const OUString &rStr, DrawTextFlags nStyle=DrawTextFlags::WordBreak, TextRectInfo *pInfo=nullptr, const vcl::ITextLayout *_pTextLayout=nullptr) const
Definition: window3.cxx:201
DrawGridFlags
sal_Int32 GetDPIScalePercentage() const
Definition: outdev.hxx:397
virtual Size GetButtonBorderSize()
Definition: outdev.hxx:417
SAL_DLLPRIVATE void SetDPIY(sal_Int32 nDPIY)
Definition: outdev.hxx:390
RasterOp GetRasterOp() const
Definition: outdev.hxx:492
rtl::Reference< LogicalFontInstance > mpFontInstance
Definition: outdev.hxx:185
BmpMirrorFlags AdjustTwoRect(SalTwoRect &rTwoRect, const Size &rSizePix)
Definition: rect.cxx:341
DefaultFontType
Color GetTextFillColor() const
Definition: window3.cxx:114
tools::Long mnOutWidth
Definition: outdev.hxx:209
Size GetOutputSizePixel() const
Definition: window3.cxx:89
tools::Long GetTextWidth(const OUString &rStr, sal_Int32 nIndex=0, sal_Int32 nLen=-1, vcl::text::TextLayoutCache const *=nullptr, SalLayoutGlyphs const *const pLayoutCache=nullptr) const
Width of the text.
Definition: window3.cxx:66
void SetOutDevViewType(OutDevViewType eOutDevViewType)
If this OutputDevice is used for displaying a Print Preview the OutDevViewType should be set to 'OutD...
Definition: outdev.hxx:501
std::shared_ptr< ImplFontCache > mxFontCache
Definition: outdev.hxx:261
MapUnit
tools::Long mnOutOffX
Output offset for device output in pixel (pseudo window offset within window system's frames) ...
Definition: outdev.hxx:206
std::unique_ptr< ImplOutDevData > mpOutDevData
Definition: outdev.hxx:188
vcl::ExtOutDevData * GetExtOutDevData() const
Definition: outdev.hxx:412
void SetFont(const vcl::Font &rNewFont)
Definition: window3.cxx:59
void SetLineColor(const css::uno::Reference< css::beans::XPropertySet > &xGridProperties, sal_Int32 nColor)
vcl::ExtOutDevData * mpExtOutDevData
Definition: outdev.hxx:190
bool IsFillColor() const
Definition: outdev.hxx:512
bool IsNativeControlSupported(ControlType nType, ControlPart nPart) const
Query the platform layer for control support.
Definition: window3.cxx:74
tools::Long mnOutOffLogicY
Additional output offset in logical coordinates, applied in PixelToLogic (used by SetPixelOffset/GetP...
Definition: outdev.hxx:204
bool IsOverlineColor() const
Definition: outdev.hxx:1026
virtual size_t GetSyncCount() const
Definition: outdev.hxx:331
OutDevViewType
Definition: outdev.hxx:144
InvertFlags
Definition: InvertFlags.hxx:24
FontLineStyle
struct _cairo_surface cairo_surface_t
Definition: svpgdi.hxx:72
bool IsDeviceOutputNecessary() const
Definition: outdev.hxx:477
Point maRefPoint
Definition: outdev.hxx:235
AddFontSubstituteFlags
SAL_DLLPRIVATE sal_Int32 GetDPIY() const
Get the output device's DPI y-axis value.
Definition: outdev.hxx:387
virtual vcl::Window * GetOwnerWindow() const
Get the vcl::Window that this OutputDevice belongs to, if any.
Definition: outdev.hxx:1881
void SetMapMode()
Definition: window3.cxx:125
tools::Long GetOutputWidthPixel() const
Definition: outdev.hxx:312
tools::Long mnTextOffY
Definition: outdev.hxx:216
FontStrikeout
DrawModeFlags
SAL_DLLPRIVATE sal_Int32 GetDPIX() const
Get the output device's DPI x-axis value.
Definition: outdev.hxx:381
virtual bool IsScreenComp() const
Definition: outdev.hxx:306
const Color & GetFillColor() const
Definition: outdev.hxx:511
GDIMetaFile * mpMetaFile
Definition: outdev.hxx:184
::std::vector< B2DPolyPolygon > B2DPolyPolygonVector
SalLayoutFlags
BmpMirrorFlags
LanguageType meTextLanguage
Definition: outdev.hxx:237
virtual bool CanEnableNativeWidget() const
Determine if native widgets can be enabled.
Definition: outdev.hxx:1824
typedef void(CALLTYPE *GetFuncDataPtr)(sal_uInt16 &nNo