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 #ifndef INCLUDED_VCL_OUTDEV_HXX
21 #define INCLUDED_VCL_OUTDEV_HXX
22 
23 #include <tools/gen.hxx>
24 #include <tools/ref.hxx>
25 #include <tools/solar.h>
26 #include <tools/color.hxx>
27 #include <tools/poly.hxx>
28 #include <vcl/bitmap.hxx>
29 #include <vcl/cairo.hxx>
30 #include <vcl/devicecoordinate.hxx>
31 #include <vcl/dllapi.h>
32 #include <vcl/font.hxx>
33 #include <vcl/region.hxx>
44 #include <vcl/mapmod.hxx>
45 #include <vcl/wall.hxx>
46 #include <vcl/metaactiontypes.hxx>
47 #include <vcl/salnativewidgets.hxx>
48 #include <vcl/outdevstate.hxx>
49 #include <vcl/vclreferencebase.hxx>
50 
54 
55 #include <unotools/fontdefs.hxx>
56 #include <cppuhelper/weakref.hxx>
57 
58 #include <com/sun/star/drawing/LineCap.hpp>
59 #include <com/sun/star/uno/Reference.h>
60 #include <com/sun/star/awt/DeviceInfo.hpp>
61 
62 #include <memory>
63 #include <vector>
64 
65 struct ImplOutDevData;
67 struct SystemGraphicsData;
68 class ImplFontCache;
70 class ImplDeviceFontList;
73 class SalGraphics;
74 class Gradient;
75 class Hatch;
76 class AllSettings;
77 class BitmapReadAccess;
78 class BitmapEx;
79 class Image;
80 class TextRectInfo;
81 class FontMetric;
82 class GDIMetaFile;
83 class GfxLink;
84 namespace tools {
85  class Line;
86 }
87 class LineInfo;
88 class AlphaMask;
89 class FontCharMap;
90 class SalLayout;
91 class ImplLayoutArgs;
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 TextLayoutCache;
105  class Window;
106  class WindowOutputDevice;
107  namespace font {
108  struct Feature;
109  }
110 }
111 
112 namespace basegfx {
113  class B2DHomMatrix;
114  class B2DPolygon;
115  class B2IVector;
116  typedef B2IVector B2ISize;
117 }
118 
119 namespace com::sun::star::awt {
120  class XGraphics;
121 }
122 
123 namespace com::sun::star::rendering {
124  class XCanvas;
125  class XSpriteCanvas;
126 }
127 
128 #if defined UNX
129 #define GLYPH_FONT_HEIGHT 128
130 #else
131 #define GLYPH_FONT_HEIGHT 256
132 #endif
133 
134 // OutputDevice-Types
135 
137 
139 
140 // OutputDevice
141 
143 
144 BmpMirrorFlags AdjustTwoRect( SalTwoRect& rTwoRect, const Size& rSizePix );
145 void AdjustTwoRect( SalTwoRect& rTwoRect, const tools::Rectangle& rValidSrcRect );
146 
147 class OutputDevice;
148 
149 namespace vcl {
151 }
152 
153 VCL_DLLPUBLIC void InvertFocusRect(vcl::RenderContext& rRenderContext, const tools::Rectangle& rRect);
154 
155 typedef struct _cairo_surface cairo_surface_t;
156 
163 {
164  friend class Printer;
165  friend class VirtualDevice;
166  friend class vcl::Window;
168  friend class WorkWindow;
169  friend void ImplHandleResize( vcl::Window* pWindow, tools::Long nNewWidth, tools::Long nNewHeight );
170 
171 private:
172  OutputDevice(const OutputDevice&) = delete;
173  OutputDevice& operator=(const OutputDevice&) = delete;
174 
180  mutable std::shared_ptr<ImplFontCache> mxFontCache;
181  mutable std::shared_ptr<PhysicalFontCollection> mxFontCollection;
182  mutable std::unique_ptr<ImplDeviceFontList> mpDeviceFontList;
183  mutable std::unique_ptr<ImplDeviceFontSizeList> mpDeviceFontSizeList;
184  std::vector<OutDevState> maOutDevStateStack;
185  std::unique_ptr<ImplOutDevData> mpOutDevData;
186  std::vector< VCLXGraphics* >* mpUnoGraphicsList;
188  // The canvas interface for this output device. Is persistent after the first GetCanvas() call
189  mutable css::uno::WeakReference< css::rendering::XCanvas > mxCanvas;
190 
191  // TEMP TEMP TEMP
193 
208  sal_Int32 mnDPIX;
209  sal_Int32 mnDPIY;
211  mutable tools::Long mnTextOffX;
221  vcl::Region maRegion; // contains the clip region, see SetClipRegion(...)
230  std::unique_ptr<AllSettings> mxSettings;
235 
236  mutable bool mbMap : 1;
237  mutable bool mbClipRegion : 1;
238  mutable bool mbBackground : 1;
239  mutable bool mbOutput : 1;
240  mutable bool mbDevOutput : 1;
241  mutable bool mbOutputClipped : 1;
242  mutable bool mbLineColor : 1;
243  mutable bool mbFillColor : 1;
244  mutable bool mbInitLineColor : 1;
245  mutable bool mbInitFillColor : 1;
246  mutable bool mbInitFont : 1;
247  mutable bool mbInitTextColor : 1;
248  mutable bool mbInitClipRegion : 1;
249  mutable bool mbClipRegionSet : 1;
250  mutable bool mbNewFont : 1;
251  mutable bool mbTextLines : 1;
252  mutable bool mbTextSpecial : 1;
253  mutable bool mbRefPoint : 1;
254  mutable bool mbEnableRTL : 1;
255 
258 
260 protected:
261  OutputDevice(OutDevType eOutDevType);
262  virtual ~OutputDevice() override;
263  virtual void dispose() override;
264 
265 public:
266 
273  SalGraphics const *GetGraphics() const;
274  SalGraphics* GetGraphics();
275 
276  void SetConnectMetaFile( GDIMetaFile* pMtf );
277  GDIMetaFile* GetConnectMetaFile() const { return mpMetaFile; }
278 
279  virtual void SetSettings( const AllSettings& rSettings );
280  const AllSettings& GetSettings() const { return *mxSettings; }
281 
282  SystemGraphicsData GetSystemGfxData() const;
283  bool SupportsCairo() const;
285  cairo::SurfaceSharedPtr CreateSurface(const cairo::CairoSurfaceSharedPtr& rSurface) const;
287  cairo::SurfaceSharedPtr CreateSurface(int x, int y, int width, int height) const;
289  cairo::SurfaceSharedPtr CreateBitmapSurface(const BitmapSystemData& rData, const Size& rSize) const;
291  css::uno::Any GetNativeSurfaceHandle(cairo::SurfaceSharedPtr& rSurface, const basegfx::B2ISize& rSize) const;
292  css::uno::Any GetSystemGfxDataAny() const;
293 
294  void SetRefPoint();
295  void SetRefPoint( const Point& rRefPoint );
296  const Point& GetRefPoint() const { return maRefPoint; }
297  bool IsRefPoint() const { return mbRefPoint; }
298 
299  virtual bool IsScreenComp() const { return true; }
300 
301  virtual sal_uInt16 GetBitCount() const;
302 
304  { return Size( mnOutWidth, mnOutHeight ); }
305  tools::Long GetOutputWidthPixel() const { return mnOutWidth; }
306  tools::Long GetOutputHeightPixel() const { return mnOutHeight; }
307  tools::Long GetOutOffXPixel() const { return mnOutOffX; }
308  tools::Long GetOutOffYPixel() const { return mnOutOffY; }
309  void SetOutOffXPixel(tools::Long nOutOffX);
310  void SetOutOffYPixel(tools::Long nOutOffY);
312  { return Point( mnOutOffX, mnOutOffY ); }
314  { return tools::Rectangle(GetOutputOffPixel(), GetOutputSizePixel() ); }
315 
317  { return PixelToLogic( GetOutputSizePixel() ); }
318 
319  css::uno::Reference< css::awt::XGraphics >
320  CreateUnoGraphics();
321  std::vector< VCLXGraphics* > *GetUnoGraphicsList() const { return mpUnoGraphicsList; }
322  std::vector< VCLXGraphics* > *CreateUnoGraphicsList();
323 
324  virtual size_t GetSyncCount() const { return 0xffffffff; }
325 
327  css::uno::Reference< css::rendering::XCanvas > GetCanvas() const;
329  css::uno::Reference< css::rendering::XSpriteCanvas > GetSpriteCanvas() const;
330 
331 protected:
332 
352  virtual bool AcquireGraphics() const = 0;
353 
360  virtual void ReleaseGraphics( bool bRelease = true ) = 0;
362 
363 
366 
368 public:
369 
374  SAL_DLLPRIVATE sal_Int32 GetDPIX() const { return mnDPIX; }
375 
380  SAL_DLLPRIVATE sal_Int32 GetDPIY() const { return mnDPIY; }
381 
382  SAL_DLLPRIVATE void SetDPIX( sal_Int32 nDPIX ) { mnDPIX = nDPIX; }
383  SAL_DLLPRIVATE void SetDPIY( sal_Int32 nDPIY ) { mnDPIY = nDPIY; }
384 
385  float GetDPIScaleFactor() const
386  {
387  return mnDPIScalePercentage / 100.0f;
388  }
389 
390  sal_Int32 GetDPIScalePercentage() const
391  {
392  return mnDPIScalePercentage;
393  }
394 
395  OutDevType GetOutDevType() const { return meOutDevType; }
396  virtual bool IsVirtual() const;
397 
402  bool SupportsOperation( OutDevSupportType ) const;
403 
404  void SetExtOutDevData( vcl::ExtOutDevData* pExtOutDevData ) { mpExtOutDevData = pExtOutDevData; }
405  vcl::ExtOutDevData* GetExtOutDevData() const { return mpExtOutDevData; }
406 
408 
409 public:
410  virtual Size GetButtonBorderSize() { return Size(1, 1); };
412 
415 
417 public:
418  virtual void Flush() {}
419 
420  virtual void DrawOutDev(
421  const Point& rDestPt, const Size& rDestSize,
422  const Point& rSrcPt, const Size& rSrcSize );
423 
424  virtual void DrawOutDev(
425  const Point& rDestPt, const Size& rDestSize,
426  const Point& rSrcPt, const Size& rSrcSize,
427  const OutputDevice& rOutDev );
428 
429  virtual void CopyArea(
430  const Point& rDestPt,
431  const Point& rSrcPt, const Size& rSrcSize,
432  bool bWindowInvalidate = false );
433 
434 protected:
435 
436  virtual void CopyDeviceArea( SalTwoRect& aPosAry, bool bWindowInvalidate);
437 
438  virtual tools::Rectangle GetBackgroundComponentBounds() const;
439 
440  virtual const OutputDevice* DrawOutDevDirectCheck(const OutputDevice& rSrcDev) const;
441 
442  virtual void DrawOutDevDirectProcess(const OutputDevice& rSrcDev, SalTwoRect& rPosAry, SalGraphics* pSrcGraphics);
443 
444  SAL_DLLPRIVATE void drawOutDevDirect(const OutputDevice& rSrcDev, SalTwoRect& rPosAry);
445 
446  SAL_DLLPRIVATE bool is_double_buffered_window() const;
447 
448  virtual css::uno::Reference< css::rendering::XCanvas > ImplGetCanvas( bool bSpriteCanvas ) const;
449  SAL_DLLPRIVATE void ImplDisposeCanvas();
450 
451 private:
452 
453  // not implemented; to detect misuses of DrawOutDev(...OutputDevice&);
454  SAL_DLLPRIVATE void DrawOutDev( const Point&, const Size&, const Point&, const Size&, const Printer&) = delete;
456 
457 
460 
462 public:
463 
464  void Push( PushFlags nFlags = PushFlags::ALL );
465  void Pop();
466 
467  // returns the current stack depth; that is the number of Push() calls minus the number of Pop() calls
468  // this should not normally be used since Push and Pop must always be used symmetrically
469  // however this may be e.g. a help when debugging code in which this somehow is not the case
470  sal_uInt32 GetGCStackDepth() const;
471  void ClearStack();
472 
473  void EnableOutput( bool bEnable = true );
474  bool IsOutputEnabled() const { return mbOutput; }
475  bool IsDeviceOutputNecessary() const { return (mbOutput && mbDevOutput); }
476 
477  void SetAntialiasing( AntialiasingFlags nMode );
478  AntialiasingFlags GetAntialiasing() const { return mnAntialiasing; }
479 
480  void SetDrawMode( DrawModeFlags nDrawMode );
481  DrawModeFlags GetDrawMode() const { return mnDrawMode; }
482 
483  void SetLayoutMode( ComplexTextLayoutFlags nTextLayoutMode );
484  ComplexTextLayoutFlags GetLayoutMode() const { return mnTextLayoutMode; }
485 
486  void SetDigitLanguage( LanguageType );
487  LanguageType GetDigitLanguage() const { return meTextLanguage; }
488 
489  void SetRasterOp( RasterOp eRasterOp );
490  RasterOp GetRasterOp() const { return meRasterOp; }
491 
499  void SetOutDevViewType( OutDevViewType eOutDevViewType ) { meOutDevViewType=eOutDevViewType; }
500  OutDevViewType GetOutDevViewType() const { return meOutDevViewType; }
501 
502  void SetLineColor();
503  void SetLineColor( const Color& rColor );
504  const Color& GetLineColor() const { return maLineColor; }
505  bool IsLineColor() const { return mbLineColor; }
506 
507  void SetFillColor();
508  void SetFillColor( const Color& rColor );
509  const Color& GetFillColor() const { return maFillColor; }
510  bool IsFillColor() const { return mbFillColor; }
511 
512  void SetBackground();
513  void SetBackground( const Wallpaper& rBackground );
514  virtual void SaveBackground(VirtualDevice& rSaveDevice,
515  const Point& rPos, const Size& rSize, const Size& rBackgroundSize) const;
516 
517  const Wallpaper& GetBackground() const { return maBackground; }
518  virtual Color GetBackgroundColor() const;
519  virtual Color GetReadableFontColor(const Color& rFontColor, const Color& rBgColor) const;
520  bool IsBackground() const { return mbBackground; }
521 
522  void SetFont( const vcl::Font& rNewFont );
523  const vcl::Font& GetFont() const { return maFont; }
524 
525 protected:
526 
527  virtual void ImplReleaseFonts();
528 
529 private:
530 
531  SAL_DLLPRIVATE void InitLineColor();
532 
533  SAL_DLLPRIVATE void InitFillColor();
534 
536 
537 
540 
542 public:
543 
544  vcl::Region GetClipRegion() const;
545  void SetClipRegion();
546  void SetClipRegion( const vcl::Region& rRegion );
547  bool SelectClipRegion( const vcl::Region&, SalGraphics* pGraphics = nullptr );
548 
549  bool IsClipRegion() const { return mbClipRegion; }
550 
551  void MoveClipRegion( tools::Long nHorzMove, tools::Long nVertMove );
552  void IntersectClipRegion( const tools::Rectangle& rRect );
553  void IntersectClipRegion( const vcl::Region& rRegion );
554 
555  virtual vcl::Region GetActiveClipRegion() const;
556  virtual vcl::Region GetOutputBoundsClipRegion() const;
557 
558 protected:
559 
560  virtual void InitClipRegion();
561 
568  virtual vcl::Region ClipToDeviceBounds(vcl::Region aRegion) const;
569  virtual void ClipToPaintRegion ( tools::Rectangle& rDstRect );
570 
571 private:
572 
573  SAL_DLLPRIVATE void SetDeviceClipRegion( const vcl::Region* pRegion );
575 
576 public:
577  virtual void DrawBorder(tools::Rectangle aBorderRect);
578 
579 
582 
584 public:
585 
586  void DrawPixel( const Point& rPt );
587  void DrawPixel( const Point& rPt, const Color& rColor );
588 
589  Color GetPixel( const Point& rPt ) const;
591 
592 
595 
597 public:
598 
599  void DrawRect( const tools::Rectangle& rRect );
600  void DrawRect( const tools::Rectangle& rRect,
601  sal_uLong nHorzRount, sal_uLong nVertRound );
602 
604  void DrawCheckered(
605  const Point& rPos,
606  const Size& rSize,
607  sal_uInt32 nLen = 8,
608  Color aStart = COL_WHITE,
609  Color aEnd = COL_BLACK);
610 
611  void DrawGrid( const tools::Rectangle& rRect, const Size& rDist, DrawGridFlags nFlags );
612 
614 
617 public:
619  void Invert( const tools::Rectangle& rRect, InvertFlags nFlags = InvertFlags::NONE );
620  void Invert( const tools::Polygon& rPoly, InvertFlags nFlags = InvertFlags::NONE );
622 
625 
627 public:
628 
629  void DrawLine( const Point& rStartPt, const Point& rEndPt );
630 
631  void DrawLine( const Point& rStartPt, const Point& rEndPt,
632  const LineInfo& rLineInfo );
633 
634 protected:
635  virtual void DrawHatchLine_DrawLine(const Point& rStartPoint, const Point& rEndPoint);
636 
637 private:
638 
641  SAL_DLLPRIVATE void drawLine( basegfx::B2DPolyPolygon aLinePolyPolygon, const LineInfo& rInfo );
643 
644 
647 
649 public:
650 
659  void DrawPolyLine( const tools::Polygon& rPoly );
660 
661  void DrawPolyLine(
662  const basegfx::B2DPolygon&,
663  double fLineWidth = 0.0,
665  css::drawing::LineCap eLineCap = css::drawing::LineCap_BUTT,
666  double fMiterMinimumAngle = basegfx::deg2rad(15.0));
667 
678  void DrawPolyLine( const tools::Polygon& rPoly,
679  const LineInfo& rLineInfo );
680 
681  // #i101491#
682  // Helper who tries to use SalGDI's DrawPolyLine direct and returns it's bool.
683  bool DrawPolyLineDirect(
684  const basegfx::B2DHomMatrix& rObjectTransform,
685  const basegfx::B2DPolygon& rB2DPolygon,
686  double fLineWidth = 0.0,
687  double fTransparency = 0.0,
688  const std::vector< double >* = nullptr, // MM01
690  css::drawing::LineCap eLineCap = css::drawing::LineCap_BUTT,
691  double fMiterMinimumAngle = basegfx::deg2rad(15.0));
692 
693 private:
694 
695  // #i101491#
696  // Helper which holds the old line geometry creation and is extended to use AA when
697  // switched on. Advantage is that line geometry is only temporarily used for paint
698  SAL_DLLPRIVATE void drawPolyLine(const tools::Polygon& rPoly, const LineInfo& rLineInfo);
699 
701 
702  bool DrawPolyLineDirectInternal(
703  const basegfx::B2DHomMatrix& rObjectTransform,
704  const basegfx::B2DPolygon& rB2DPolygon,
705  double fLineWidth = 0.0,
706  double fTransparency = 0.0,
707  const std::vector< double >* = nullptr, // MM01
709  css::drawing::LineCap eLineCap = css::drawing::LineCap_BUTT,
710  double fMiterMinimumAngle = basegfx::deg2rad(15.0));
711 
714 
716 public:
717 
728  void DrawPolygon( const tools::Polygon& rPoly );
729  void DrawPolygon( const basegfx::B2DPolygon& );
730 
741  void DrawPolyPolygon( const tools::PolyPolygon& rPolyPoly );
742  void DrawPolyPolygon( const basegfx::B2DPolyPolygon& );
743 
744 private:
745 
746  SAL_DLLPRIVATE void ImplDrawPolygon( const tools::Polygon& rPoly, const tools::PolyPolygon* pClipPolyPoly = nullptr );
747  SAL_DLLPRIVATE void ImplDrawPolyPolygon( const tools::PolyPolygon& rPolyPoly, const tools::PolyPolygon* pClipPolyPoly );
748  SAL_DLLPRIVATE void ImplDrawPolyPolygon( sal_uInt16 nPoly, const tools::PolyPolygon& rPolyPoly );
749  // #i101491#
750  // Helper who implements the DrawPolyPolygon functionality for basegfx::B2DPolyPolygon
751  // without MetaFile processing
752  SAL_DLLPRIVATE void ImplDrawPolyPolygonWithB2DPolyPolygon(const basegfx::B2DPolyPolygon& rB2DPolyPoly);
754 
755  SAL_DLLPRIVATE void ImplDrawWaveLineBezier(tools::Long nStartX, tools::Long nStartY, tools::Long nEndX, tools::Long nEndY, tools::Long nWaveHeight, double fOrientation, tools::Long nLineWidth);
756 
757 
760 
762 public:
763 
764  void DrawEllipse( const tools::Rectangle& rRect );
765 
766  void DrawArc(
767  const tools::Rectangle& rRect,
768  const Point& rStartPt, const Point& rEndPt );
769 
770  void DrawPie(
771  const tools::Rectangle& rRect,
772  const Point& rStartPt, const Point& rEndPt );
773 
774  void DrawChord(
775  const tools::Rectangle& rRect,
776  const Point& rStartPt, const Point& rEndPt );
777 
779 
780 
783 
785 public:
786  void DrawGradient( const tools::Rectangle& rRect, const Gradient& rGradient );
787  void DrawGradient( const tools::PolyPolygon& rPolyPoly, const Gradient& rGradient );
788 
789  void AddGradientActions(
790  const tools::Rectangle& rRect,
791  const Gradient& rGradient,
792  GDIMetaFile& rMtf );
793 
794 protected:
795 
796  virtual bool UsePolyPolygonForComplexGradient() = 0;
797 
798  virtual tools::Long GetGradientStepCount( tools::Long nMinRect );
799 
800 private:
801 
802  SAL_DLLPRIVATE void DrawLinearGradient( const tools::Rectangle& rRect, const Gradient& rGradient, const tools::PolyPolygon* pClipPolyPoly );
803  SAL_DLLPRIVATE void DrawComplexGradient( const tools::Rectangle& rRect, const Gradient& rGradient, const tools::PolyPolygon* pClipPolyPoly );
804 
805  SAL_DLLPRIVATE void DrawGradientToMetafile( const tools::PolyPolygon& rPolyPoly, const Gradient& rGradient );
806  SAL_DLLPRIVATE void DrawLinearGradientToMetafile( const tools::Rectangle& rRect, const Gradient& rGradient );
807  SAL_DLLPRIVATE void DrawComplexGradientToMetafile( const tools::Rectangle& rRect, const Gradient& rGradient );
808 
809  SAL_DLLPRIVATE tools::Long GetGradientSteps( const Gradient& rGradient, const tools::Rectangle& rRect, bool bMtf, bool bComplex=false );
810 
811  SAL_DLLPRIVATE Color GetSingleColorGradientFill();
813 
814 
817 
819 public:
820 
821 #ifdef _MSC_VER
822  void DrawHatch( const tools::PolyPolygon& rPolyPoly, const ::Hatch& rHatch );
823  void AddHatchActions( const tools::PolyPolygon& rPolyPoly,
824  const ::Hatch& rHatch,
825  GDIMetaFile& rMtf );
826 #else
827  void DrawHatch( const tools::PolyPolygon& rPolyPoly, const Hatch& rHatch );
828  void AddHatchActions( const tools::PolyPolygon& rPolyPoly,
829  const Hatch& rHatch,
830  GDIMetaFile& rMtf );
831 #endif
832 
833  void DrawHatch( const tools::PolyPolygon& rPolyPoly, const Hatch& rHatch, bool bMtf );
834 
835 private:
836 
837  SAL_DLLPRIVATE void CalcHatchValues( const tools::Rectangle& rRect, tools::Long nDist, Degree10 nAngle10, Point& rPt1, Point& rPt2, Size& rInc, Point& rEndPt1 );
838  SAL_DLLPRIVATE void DrawHatchLine( const tools::Line& rLine, const tools::PolyPolygon& rPolyPoly, Point* pPtBuffer, bool bMtf );
840 
841 
844 
846 public:
847  void DrawWallpaper( const tools::Rectangle& rRect, const Wallpaper& rWallpaper );
848 
849  void Erase();
850  void Erase(const tools::Rectangle& rRect);
851 
852 protected:
853  void DrawGradientWallpaper( tools::Long nX, tools::Long nY, tools::Long nWidth, tools::Long nHeight, const Wallpaper& rWallpaper );
854 
855 private:
856  SAL_DLLPRIVATE void DrawWallpaper( tools::Long nX, tools::Long nY, tools::Long nWidth, tools::Long nHeight, const Wallpaper& rWallpaper );
857  SAL_DLLPRIVATE void DrawColorWallpaper( tools::Long nX, tools::Long nY, tools::Long nWidth, tools::Long nHeight, const Wallpaper& rWallpaper );
858  SAL_DLLPRIVATE void DrawBitmapWallpaper( tools::Long nX, tools::Long nY, tools::Long nWidth, tools::Long nHeight, const Wallpaper& rWallpaper );
860 
861 
864 
866 public:
867 
868  void DrawText( const Point& rStartPt, const OUString& rStr,
869  sal_Int32 nIndex = 0, sal_Int32 nLen = -1,
870  std::vector< tools::Rectangle >* pVector = nullptr, OUString* pDisplayText = nullptr,
871  const SalLayoutGlyphs* pLayoutCache = nullptr );
872 
873  void DrawText( const tools::Rectangle& rRect,
874  const OUString& rStr, DrawTextFlags nStyle = DrawTextFlags::NONE,
875  std::vector< tools::Rectangle >* pVector = nullptr, OUString* pDisplayText = nullptr,
876  vcl::ITextLayout* _pTextLayout = nullptr );
877 
878  static void ImplDrawText( OutputDevice& rTargetDevice, const tools::Rectangle& rRect,
879  const OUString& rOrigStr, DrawTextFlags nStyle,
880  std::vector< tools::Rectangle >* pVector, OUString* pDisplayText, vcl::ITextLayout& _rLayout );
881 
882  void ImplDrawText( SalLayout& );
883 
884  void ImplDrawTextBackground( const SalLayout& );
885 
886  void DrawCtrlText( const Point& rPos, const OUString& rStr,
887  sal_Int32 nIndex = 0, sal_Int32 nLen = -1,
888  DrawTextFlags nStyle = DrawTextFlags::Mnemonic, std::vector< tools::Rectangle >* pVector = nullptr, OUString* pDisplayText = nullptr,
889  const SalLayoutGlyphs* pGlyphs = nullptr);
890 
891  void DrawTextLine( const Point& rPos, tools::Long nWidth,
892  FontStrikeout eStrikeout,
893  FontLineStyle eUnderline,
894  FontLineStyle eOverline,
895  bool bUnderlineAbove = false );
896 
897  void ImplDrawTextLine( tools::Long nBaseX, tools::Long nX, tools::Long nY, DeviceCoordinate nWidth,
898  FontStrikeout eStrikeout, FontLineStyle eUnderline,
899  FontLineStyle eOverline, bool bUnderlineAbove );
900 
901  void ImplDrawTextLines( SalLayout&, FontStrikeout eStrikeout, FontLineStyle eUnderline,
902  FontLineStyle eOverline, bool bWordLine, bool bUnderlineAbove );
903 
904  void DrawWaveLine( const Point& rStartPos, const Point& rEndPos, tools::Long nLineWidth = 1 );
905 
906  bool ImplDrawRotateText( SalLayout& );
907 
909  const OUString& rStr, DrawTextFlags nStyle = DrawTextFlags::WordBreak,
910  TextRectInfo* pInfo = nullptr,
911  const vcl::ITextLayout* _pTextLayout = nullptr ) const;
912 
962  bool GetTextBoundRect( tools::Rectangle& rRect,
963  const OUString& rStr, sal_Int32 nBase = 0, sal_Int32 nIndex = 0, sal_Int32 nLen = -1,
964  sal_uLong nLayoutWidth = 0, const tools::Long* pDXArray = nullptr,
965  const SalLayoutGlyphs* pGlyphs = nullptr ) const;
966 
967  tools::Rectangle ImplGetTextBoundRect( const SalLayout& );
968 
969  bool GetTextOutline( tools::PolyPolygon&,
970  const OUString& rStr ) const;
971 
972  bool GetTextOutlines( PolyPolyVector&,
973  const OUString& rStr, sal_Int32 nBase = 0, sal_Int32 nIndex = 0,
974  sal_Int32 nLen = -1,
975  sal_uLong nLayoutWidth = 0, const tools::Long* pDXArray = nullptr ) const;
976 
977  bool GetTextOutlines( basegfx::B2DPolyPolygonVector &rVector,
978  const OUString& rStr, sal_Int32 nBase, sal_Int32 nIndex = 0,
979  sal_Int32 nLen = -1,
980  sal_uLong nLayoutWidth = 0, const tools::Long* pDXArray = nullptr ) const;
981 
982 
983  OUString GetEllipsisString( const OUString& rStr, tools::Long nMaxWidth,
984  DrawTextFlags nStyle = DrawTextFlags::EndEllipsis ) const;
985 
986  tools::Long GetCtrlTextWidth( const OUString& rStr,
987  const SalLayoutGlyphs* pLayoutCache = nullptr ) const;
988 
989  static OUString GetNonMnemonicString( const OUString& rStr, sal_Int32& rMnemonicPos );
990 
991  static OUString GetNonMnemonicString( const OUString& rStr )
992  { sal_Int32 nDummy; return GetNonMnemonicString( rStr, nDummy ); }
993 
1002  void AddTextRectActions( const tools::Rectangle& rRect,
1003  const OUString& rOrigStr,
1004  DrawTextFlags nStyle,
1005  GDIMetaFile& rMtf );
1006 
1007  void SetTextColor( const Color& rColor );
1008  const Color& GetTextColor() const { return maTextColor; }
1009 
1010  void SetTextFillColor();
1011  void SetTextFillColor( const Color& rColor );
1012  Color GetTextFillColor() const;
1013  bool IsTextFillColor() const { return !maFont.IsTransparent(); }
1014 
1015  void SetTextLineColor();
1016  void SetTextLineColor( const Color& rColor );
1017  const Color& GetTextLineColor() const { return maTextLineColor; }
1018  bool IsTextLineColor() const { return !maTextLineColor.IsTransparent(); }
1019 
1020  void SetOverlineColor();
1021  void SetOverlineColor( const Color& rColor );
1022  const Color& GetOverlineColor() const { return maOverlineColor; }
1023  bool IsOverlineColor() const { return !maOverlineColor.IsTransparent(); }
1024 
1025  void SetTextAlign( TextAlign eAlign );
1026  TextAlign GetTextAlign() const { return maFont.GetAlignment(); }
1027 
1032  tools::Long GetTextWidth( const OUString& rStr, sal_Int32 nIndex = 0, sal_Int32 nLen = -1,
1033  vcl::TextLayoutCache const* = nullptr,
1034  SalLayoutGlyphs const*const pLayoutCache = nullptr) const;
1035 
1040  tools::Long GetTextHeight() const;
1041  float approximate_digit_width() const;
1042 
1043  void DrawTextArray( const Point& rStartPt, const OUString& rStr,
1044  const tools::Long* pDXAry,
1045  sal_Int32 nIndex = 0,
1046  sal_Int32 nLen = -1,
1048  const SalLayoutGlyphs* pLayoutCache = nullptr);
1049  tools::Long GetTextArray( const OUString& rStr, tools::Long* pDXAry,
1050  sal_Int32 nIndex = 0, sal_Int32 nLen = -1,
1051  vcl::TextLayoutCache const* = nullptr,
1052  SalLayoutGlyphs const*const pLayoutCache = nullptr) const;
1053 
1054  void GetCaretPositions( const OUString&, tools::Long* pCaretXArray,
1055  sal_Int32 nIndex, sal_Int32 nLen,
1056  const SalLayoutGlyphs* pGlyphs = nullptr ) const;
1057  void DrawStretchText( const Point& rStartPt, sal_uLong nWidth,
1058  const OUString& rStr,
1059  sal_Int32 nIndex = 0, sal_Int32 nLen = -1);
1060  sal_Int32 GetTextBreak( const OUString& rStr, tools::Long nTextWidth,
1061  sal_Int32 nIndex, sal_Int32 nLen = -1,
1062  tools::Long nCharExtra = 0,
1063  vcl::TextLayoutCache const* = nullptr,
1064  const SalLayoutGlyphs* pGlyphs = nullptr) const;
1065  sal_Int32 GetTextBreak( const OUString& rStr, tools::Long nTextWidth,
1066  sal_Unicode nExtraChar, sal_Int32& rExtraCharPos,
1067  sal_Int32 nIndex, sal_Int32 nLen,
1068  tools::Long nCharExtra,
1069  vcl::TextLayoutCache const* = nullptr) const;
1070  static std::shared_ptr<vcl::TextLayoutCache> CreateTextLayoutCache(OUString const&);
1071 
1072 protected:
1073  SAL_DLLPRIVATE void ImplInitTextLineSize();
1074  SAL_DLLPRIVATE void ImplInitAboveTextLineSize();
1075  static
1076  SAL_DLLPRIVATE tools::Long ImplGetTextLines( ImplMultiTextLineInfo& rLineInfo, tools::Long nWidth, const OUString& rStr, DrawTextFlags nStyle, const vcl::ITextLayout& _rLayout );
1077  SAL_DLLPRIVATE float approximate_char_width() const;
1078 private:
1079  SAL_DLLPRIVATE void ImplInitTextColor();
1080 
1081  SAL_DLLPRIVATE void ImplDrawTextDirect( SalLayout&, bool bTextLines);
1082  SAL_DLLPRIVATE void ImplDrawSpecialText( SalLayout& );
1083  SAL_DLLPRIVATE void ImplDrawTextRect( tools::Long nBaseX, tools::Long nBaseY, tools::Long nX, tools::Long nY, tools::Long nWidth, tools::Long nHeight );
1084 
1085  SAL_DLLPRIVATE static void ImplDrawWavePixel( tools::Long nOriginX, tools::Long nOriginY, tools::Long nCurX, tools::Long nCurY, Degree10 nOrientation, SalGraphics* pGraphics, const OutputDevice& rOutDev,
1086  bool bDrawPixAsRect, tools::Long nPixWidth, tools::Long nPixHeight );
1087  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 );
1088  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 );
1089  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 );
1090  SAL_DLLPRIVATE void ImplDrawStrikeoutLine( tools::Long nBaseX, tools::Long nBaseY, tools::Long nX, tools::Long nY, tools::Long nWidth, FontStrikeout eStrikeout, Color aColor );
1091  SAL_DLLPRIVATE void ImplDrawStrikeoutChar( tools::Long nBaseX, tools::Long nBaseY, tools::Long nX, tools::Long nY, tools::Long nWidth, FontStrikeout eStrikeout, Color aColor );
1092  SAL_DLLPRIVATE void ImplDrawMnemonicLine( tools::Long nX, tools::Long nY, tools::Long nWidth );
1093 
1094 
1096 
1097 
1100 
1102 public:
1103 
1104  FontMetric GetDevFont( int nDevFontIndex ) const;
1105  int GetDevFontCount() const;
1106 
1107  bool IsFontAvailable( const OUString& rFontName ) const;
1108 
1109  Size GetDevFontSize( const vcl::Font& rFont, int nSizeIndex ) const;
1110  int GetDevFontSizeCount( const vcl::Font& ) const;
1111 
1112  bool AddTempDevFont( const OUString& rFileURL, const OUString& rFontName );
1113  void RefreshFontData( const bool bNewFontLists );
1114 
1115  FontMetric GetFontMetric() const;
1116  FontMetric GetFontMetric( const vcl::Font& rFont ) const;
1117 
1118  bool GetFontCharMap( FontCharMapRef& rxFontCharMap ) const;
1119  bool GetFontCapabilities( vcl::FontCapabilities& rFontCapabilities ) const;
1120 
1121  bool GetFontFeatures(std::vector<vcl::font::Feature>& rFontFeatures) const;
1122 
1123  SAL_DLLPRIVATE void ImplGetEmphasisMark( tools::PolyPolygon& rPolyPoly, bool& rPolyLine, tools::Rectangle& rRect1, tools::Rectangle& rRect2,
1124  tools::Long& rYOff, tools::Long& rWidth, FontEmphasisMark eEmphasis, tools::Long nHeight );
1125  SAL_DLLPRIVATE static FontEmphasisMark
1126  ImplGetEmphasisMarkStyle( const vcl::Font& rFont );
1127 
1128  bool GetGlyphBoundRects( const Point& rOrigin, const OUString& rStr, int nIndex,
1129  int nLen, std::vector< tools::Rectangle >& rVector );
1130 
1131  sal_Int32 HasGlyphs( const vcl::Font& rFont, const OUString& rStr,
1132  sal_Int32 nIndex = 0, sal_Int32 nLen = -1 ) const;
1133 
1134  tools::Long GetMinKashida() const;
1135 
1136  // i60594
1137  // validate kashida positions against the current font
1138  // returns count of invalid kashida positions
1139  sal_Int32 ValidateKashidas( const OUString& rTxt, sal_Int32 nIdx, sal_Int32 nLen,
1140  sal_Int32 nKashCount, // number of suggested kashida positions (in)
1141  const sal_Int32* pKashidaPos, // suggested kashida positions (in)
1142  sal_Int32* pKashidaPosDropped // invalid kashida positions (out)
1143  ) const;
1144 
1145  static void BeginFontSubstitution();
1146  static void EndFontSubstitution();
1147  static void AddFontSubstitute( const OUString& rFontName,
1148  const OUString& rReplaceFontName,
1149  AddFontSubstituteFlags nFlags );
1150  static void RemoveFontsSubstitute();
1151 
1152  static vcl::Font GetDefaultFont( DefaultFontType nType,
1153  LanguageType eLang,
1154  GetDefaultFontFlags nFlags,
1155  const OutputDevice* pOutDev = nullptr );
1156 
1157  SAL_DLLPRIVATE void ImplInitFontList() const;
1158  SAL_DLLPRIVATE void ImplUpdateFontData();
1159 
1160  //drop font data for all outputdevices.
1161  //If bNewFontLists is true then empty lists of system fonts
1162  SAL_DLLPRIVATE static void ImplClearAllFontData( bool bNewFontLists );
1163  //fetch font data for all outputdevices
1164  //If bNewFontLists is true then fetch lists of system fonts
1165  SAL_DLLPRIVATE static void ImplRefreshAllFontData( bool bNewFontLists );
1166  //drop and fetch font data for all outputdevices
1167  //If bNewFontLists is true then drop and refetch lists of system fonts
1168  SAL_DLLPRIVATE static void ImplUpdateAllFontData( bool bNewFontLists );
1169 
1170 protected:
1171  SAL_DLLPRIVATE const LogicalFontInstance* GetFontInstance() const;
1172  SAL_DLLPRIVATE tools::Long GetEmphasisAscent() const { return mnEmphasisAscent; }
1173  SAL_DLLPRIVATE tools::Long GetEmphasisDescent() const { return mnEmphasisDescent; }
1174 
1175  SAL_DLLPRIVATE bool InitFont() const;
1176  virtual void SetFontOrientation( LogicalFontInstance* const pFontInstance ) const;
1177  virtual tools::Long GetFontExtLeading() const;
1178 
1179  virtual void ImplClearFontData(bool bNewFontLists);
1180  virtual void ImplRefreshFontData(bool bNewFontLists);
1181  void ReleaseFontCache();
1182  void ReleaseFontCollection();
1183  void SetFontCollectionFromSVData();
1184  void ResetNewFontCache();
1185 
1186 private:
1187 
1188  typedef void ( OutputDevice::* FontUpdateHandler_t )( bool );
1189 
1190  SAL_DLLPRIVATE bool ImplNewFont() const;
1191 
1192  SAL_DLLPRIVATE static void ImplUpdateFontDataForAllFrames( FontUpdateHandler_t pHdl, bool bNewFontLists );
1193 
1194  static
1195  SAL_DLLPRIVATE OUString ImplGetEllipsisString( const OutputDevice& rTargetDevice, const OUString& rStr,
1196  tools::Long nMaxWidth, DrawTextFlags nStyle, const vcl::ITextLayout& _rLayout );
1197 
1198  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 );
1199  SAL_DLLPRIVATE void ImplDrawEmphasisMarks( SalLayout& );
1201 
1202 
1205 
1207 public:
1208 
1209  // tells whether this output device is RTL in an LTR UI or LTR in a RTL UI
1210  SAL_DLLPRIVATE bool ImplIsAntiparallel() const ;
1211  SAL_DLLPRIVATE void ReMirror( Point &rPoint ) const;
1212  SAL_DLLPRIVATE void ReMirror( tools::Rectangle &rRect ) const;
1213  SAL_DLLPRIVATE void ReMirror( vcl::Region &rRegion ) const;
1214  SAL_DLLPRIVATE bool ImplIsRecordLayout() const;
1215  virtual bool HasMirroredGraphics() const;
1216  std::unique_ptr<SalLayout>
1217  ImplLayout( const OUString&, sal_Int32 nIndex, sal_Int32 nLen,
1218  const Point& rLogicPos = Point(0,0), tools::Long nLogicWidth=0,
1219  const tools::Long* pLogicDXArray=nullptr, SalLayoutFlags flags = SalLayoutFlags::NONE,
1220  vcl::TextLayoutCache const* = nullptr,
1221  const SalLayoutGlyphs* pGlyphs = nullptr) const;
1222  SAL_DLLPRIVATE ImplLayoutArgs ImplPrepareLayoutArgs( OUString&, const sal_Int32 nIndex, const sal_Int32 nLen,
1223  DeviceCoordinate nPixelWidth, const DeviceCoordinate* pPixelDXArray,
1225  vcl::TextLayoutCache const* = nullptr) const;
1226  SAL_DLLPRIVATE std::unique_ptr<SalLayout>
1227  ImplGlyphFallbackLayout( std::unique_ptr<SalLayout>,
1228  ImplLayoutArgs&,
1229  const SalLayoutGlyphs* ) const;
1230  SAL_DLLPRIVATE std::unique_ptr<SalLayout>
1231  getFallbackLayout(
1232  LogicalFontInstance* pLogicalFont, int nFallbackLevel,
1233  ImplLayoutArgs& rLayoutArgs, const SalLayoutGlyphs* ) const;
1234 
1235 
1236  // Enabling/disabling RTL only makes sense for OutputDevices that use a mirroring SalGraphicsLayout
1237  virtual void EnableRTL( bool bEnable = true);
1238  bool IsRTLEnabled() const { return mbEnableRTL; }
1239 
1240  bool GetTextIsRTL( const OUString&, sal_Int32 nIndex, sal_Int32 nLen ) const;
1241 
1243 
1244 
1247 
1249 public:
1250 
1260  void DrawBitmap(
1261  const Point& rDestPt,
1262  const Bitmap& rBitmap );
1263 
1273  void DrawBitmap(
1274  const Point& rDestPt,
1275  const Size& rDestSize,
1276  const Bitmap& rBitmap );
1277 
1278  void DrawBitmap(
1279  const Point& rDestPt,
1280  const Size& rDestSize,
1281  const Point& rSrcPtPixel,
1282  const Size& rSrcSizePixel,
1283  const Bitmap& rBitmap,
1285 
1295  void DrawBitmapEx(
1296  const Point& rDestPt,
1297  const BitmapEx& rBitmapEx );
1298 
1299 
1309  void DrawBitmapEx(
1310  const Point& rDestPt,
1311  const Size& rDestSize,
1312  const BitmapEx& rBitmapEx );
1313 
1314  void DrawBitmapEx(
1315  const Point& rDestPt,
1316  const Size& rDestSize,
1317  const Point& rSrcPtPixel,
1318  const Size& rSrcSizePixel,
1319  const BitmapEx& rBitmapEx,
1321 
1329  void DrawImage(
1330  const Point& rPos,
1331  const Image& rImage,
1333 
1334  void DrawImage(
1335  const Point& rPos,
1336  const Size& rSize,
1337  const Image& rImage,
1339 
1340 
1341  virtual Bitmap GetBitmap( const Point& rSrcPt, const Size& rSize ) const;
1342 
1345  BitmapEx GetBitmapEx( const Point& rSrcPt, const Size& rSize ) const;
1346 
1347 
1361  void DrawTransformedBitmapEx(
1362  const basegfx::B2DHomMatrix& rTransformation,
1363  const BitmapEx& rBitmapEx,
1364  double fAlpha = 1.0);
1365 
1370  bool HasFastDrawTransformedBitmap() const;
1371 
1372 protected:
1373 
1374  virtual void DrawDeviceBitmap(
1375  const Point& rDestPt, const Size& rDestSize,
1376  const Point& rSrcPtPixel, const Size& rSrcSizePixel,
1377  BitmapEx& rBitmapEx );
1378 
1379  virtual bool CanSubsampleBitmap() const { return true; }
1380 
1388  virtual bool DrawTransformBitmapExDirect(
1389  const basegfx::B2DHomMatrix& aFullTransform,
1390  const BitmapEx& rBitmapEx,
1391  double fAlpha = 1.0);
1392 
1404  virtual bool TransformAndReduceBitmapExToTargetRange(
1405  const basegfx::B2DHomMatrix& aFullTransform,
1406  basegfx::B2DRange &aVisibleRange,
1407  double &fMaximumArea);
1408 
1409 private:
1410 
1411  SAL_DLLPRIVATE void DrawDeviceAlphaBitmap(
1412  const Bitmap& rBmp,
1413  const AlphaMask& rAlpha,
1414  const Point& rDestPt,
1415  const Size& rDestSize,
1416  const Point& rSrcPtPixel,
1417  const Size& rSrcSizePixel );
1418 
1419  SAL_DLLPRIVATE void DrawDeviceAlphaBitmapSlowPath(
1420  const Bitmap& rBitmap, const AlphaMask& rAlpha,
1421  tools::Rectangle aDstRect, tools::Rectangle aBmpRect,
1422  Size const & aOutSz, Point const & aOutPt);
1423 
1424 
1425  SAL_DLLPRIVATE void BlendBitmap(
1426  const SalTwoRect& rPosAry,
1427  const Bitmap& rBmp );
1428 
1429  SAL_DLLPRIVATE Bitmap BlendBitmap(
1430  Bitmap& aBmp,
1431  BitmapReadAccess const * pP,
1432  BitmapReadAccess const * pA,
1433  const sal_Int32 nOffY,
1434  const sal_Int32 nDstHeight,
1435  const sal_Int32 nOffX,
1436  const sal_Int32 nDstWidth,
1437  const tools::Rectangle& aBmpRect,
1438  const Size& aOutSz,
1439  const bool bHMirr,
1440  const bool bVMirr,
1441  const tools::Long* pMapX,
1442  const tools::Long* pMapY );
1443 
1444  SAL_DLLPRIVATE Bitmap BlendBitmapWithAlpha(
1445  Bitmap& aBmp,
1446  BitmapReadAccess const * pP,
1447  BitmapReadAccess const * pA,
1448  const tools::Rectangle& aDstRect,
1449  const sal_Int32 nOffY,
1450  const sal_Int32 nDstHeight,
1451  const sal_Int32 nOffX,
1452  const sal_Int32 nDstWidth,
1453  const tools::Long* pMapX,
1454  const tools::Long* pMapY );
1455 
1461  SAL_DLLPRIVATE Bitmap GetDownsampledBitmap(
1462  const Size& rDstSz,
1463  const Point& rSrcPt,
1464  const Size& rSrcSz,
1465  const Bitmap& rBmp,
1466  tools::Long nMaxBmpDPIX,
1467  tools::Long nMaxBmpDPIY );
1468 
1470 
1471 
1474 
1476 public:
1477 
1488  bool RemoveTransparenciesFromMetaFile(
1489  const GDIMetaFile& rInMtf, GDIMetaFile& rOutMtf,
1490  tools::Long nMaxBmpDPIX, tools::Long nMaxBmpDPIY,
1491  bool bReduceTransparency,
1492  bool bTransparencyAutoMode,
1493  bool bDownsampleBitmaps,
1494  const Color& rBackground = COL_TRANSPARENT );
1495 
1496  SAL_DLLPRIVATE Color ImplDrawModeToColor ( const Color& rColor ) const;
1497 
1498 
1499  void DrawTransparent( const tools::PolyPolygon& rPolyPoly, sal_uInt16 nTransparencePercent );
1500 
1501  void DrawTransparent(
1502  const basegfx::B2DHomMatrix& rObjectTransform,
1503  const basegfx::B2DPolyPolygon& rB2DPolyPoly,
1504  double fTransparency);
1505 
1506  void DrawTransparent(
1507  const GDIMetaFile& rMtf, const Point& rPos, const Size& rSize,
1508  const Gradient& rTransparenceGradient );
1509 
1510 protected:
1511 
1512  virtual void EmulateDrawTransparent( const tools::PolyPolygon& rPolyPoly, sal_uInt16 nTransparencePercent );
1513  void DrawInvisiblePolygon( const tools::PolyPolygon& rPolyPoly );
1514 
1515  virtual void ClipAndDrawGradientMetafile ( const Gradient &rGradient, const tools::PolyPolygon &rPolyPoly );
1516 
1517 private:
1518 
1519  SAL_DLLPRIVATE bool DrawTransparentNatively( const tools::PolyPolygon& rPolyPoly, sal_uInt16 nTransparencePercent );
1521 
1522 
1525 
1527 public:
1528 
1529  void DrawMask( const Point& rDestPt,
1530  const Bitmap& rBitmap, const Color& rMaskColor );
1531 
1532  void DrawMask( const Point& rDestPt, const Size& rDestSize,
1533  const Bitmap& rBitmap, const Color& rMaskColor );
1534 
1535  void DrawMask( const Point& rDestPt, const Size& rDestSize,
1536  const Point& rSrcPtPixel, const Size& rSrcSizePixel,
1537  const Bitmap& rBitmap, const Color& rMaskColor,
1538  MetaActionType nAction );
1539 
1540 protected:
1541 
1542  virtual void DrawDeviceMask (
1543  const Bitmap& rMask, const Color& rMaskColor,
1544  const Point& rDestPt, const Size& rDestSize,
1545  const Point& rSrcPtPixel, const Size& rSrcSizePixel );
1547 
1548 
1551 
1553 public:
1554 
1555  void EnableMapMode( bool bEnable = true );
1556  bool IsMapModeEnabled() const { return mbMap; }
1557 
1558  void SetMapMode();
1559  void SetMapMode( const MapMode& rNewMapMode );
1560  void SetRelativeMapMode( const MapMode& rNewMapMode );
1561  virtual void SetMetafileMapMode(const MapMode& rNewMapMode, bool bIsRecord);
1562  const MapMode& GetMapMode() const { return maMapMode; }
1563 
1564 protected:
1565  virtual void ImplInitMapModeObjects();
1566 
1567 public:
1568  // #i75163#
1569  basegfx::B2DHomMatrix GetViewTransformation() const;
1570  basegfx::B2DHomMatrix GetInverseViewTransformation() const;
1571 
1572  basegfx::B2DHomMatrix GetViewTransformation( const MapMode& rMapMode ) const;
1573  basegfx::B2DHomMatrix GetInverseViewTransformation( const MapMode& rMapMode ) const;
1574 
1575 
1598  void SetPixelOffset( const Size& rOffset );
1599 
1606  SAL_WARN_UNUSED_RESULT Size GetPixelOffset() const { return Size(mnOutOffOrigX, mnOutOffOrigY);}
1607 
1608  SAL_WARN_UNUSED_RESULT Point LogicToPixel(const Point& rLogicPt) const;
1609  SAL_WARN_UNUSED_RESULT Size LogicToPixel(const Size& rLogicSize) const;
1614  SAL_WARN_UNUSED_RESULT vcl::Region LogicToPixel(const vcl::Region& rLogicRegion)const;
1615  SAL_WARN_UNUSED_RESULT Point LogicToPixel(const Point& rLogicPt, const MapMode& rMapMode) const;
1616  SAL_WARN_UNUSED_RESULT Size LogicToPixel(const Size& rLogicSize, const MapMode& rMapMode) const;
1618  const MapMode& rMapMode) const;
1620  const MapMode& rMapMode) const;
1622  const MapMode& rMapMode) const;
1623 
1624  SAL_WARN_UNUSED_RESULT Point PixelToLogic(const Point& rDevicePt) const;
1625  SAL_WARN_UNUSED_RESULT Size PixelToLogic(const Size& rDeviceSize) const;
1630  SAL_WARN_UNUSED_RESULT vcl::Region PixelToLogic(const vcl::Region& rDeviceRegion) const;
1631  SAL_WARN_UNUSED_RESULT Point PixelToLogic(const Point& rDevicePt, const MapMode& rMapMode) const;
1632  SAL_WARN_UNUSED_RESULT Size PixelToLogic(const Size& rDeviceSize, const MapMode& rMapMode) const;
1634  const MapMode& rMapMode) const;
1636  const MapMode& rMapMode) const;
1638  const MapMode& rMapMode) const;
1640  const MapMode& rMapMode) const;
1641 
1642  SAL_WARN_UNUSED_RESULT Point LogicToLogic(const Point& rPtSource,
1643  const MapMode* pMapModeSource,
1644  const MapMode* pMapModeDest) const;
1645  SAL_WARN_UNUSED_RESULT Size LogicToLogic(const Size& rSzSource,
1646  const MapMode* pMapModeSource,
1647  const MapMode* pMapModeDest) const;
1649  const MapMode* pMapModeSource,
1650  const MapMode* pMapModeDest) const;
1651  SAL_WARN_UNUSED_RESULT static Point LogicToLogic(const Point& rPtSource,
1652  const MapMode& rMapModeSource,
1653  const MapMode& rMapModeDest);
1654  SAL_WARN_UNUSED_RESULT static Size LogicToLogic(const Size& rSzSource,
1655  const MapMode& rMapModeSource,
1656  const MapMode& rMapModeDest);
1658  const MapMode& rMapModeSource,
1659  const MapMode& rMapModeDest);
1661  MapUnit eUnitSource,
1662  MapUnit eUnitDest);
1663 
1665  const MapMode& rMapModeSource,
1666  const MapMode& rMapModeDest);
1667 
1668  // create a mapping transformation from rMapModeSource to rMapModeDest (the above methods
1669  // for B2DPoly/Polygons use this internally anyway to transform the B2DPolygon)
1671  const MapMode& rMapModeDest);
1672 
1679  SAL_DLLPRIVATE tools::Rectangle ImplLogicToDevicePixel( const tools::Rectangle& rLogicRect ) const;
1680 
1687  SAL_DLLPRIVATE Point ImplLogicToDevicePixel( const Point& rLogicPt ) const;
1688 
1699  SAL_DLLPRIVATE tools::Long ImplLogicWidthToDevicePixel( tools::Long nWidth ) const;
1700 
1701  SAL_DLLPRIVATE DeviceCoordinate LogicWidthToDeviceCoordinate( tools::Long nWidth ) const;
1702 
1714  SAL_DLLPRIVATE tools::Long ImplLogicXToDevicePixel( tools::Long nX ) const;
1715 
1727  SAL_DLLPRIVATE tools::Long ImplLogicYToDevicePixel( tools::Long nY ) const;
1728 
1739  SAL_DLLPRIVATE tools::Long ImplLogicHeightToDevicePixel( tools::Long nHeight ) const;
1740 
1750  SAL_DLLPRIVATE tools::Long ImplDevicePixelToLogicWidth( tools::Long nWidth ) const;
1751 
1761  SAL_DLLPRIVATE tools::Long ImplDevicePixelToLogicHeight( tools::Long nHeight ) const;
1762 
1772  SAL_DLLPRIVATE float ImplFloatLogicHeightToDevicePixel( float fLogicHeight ) const;
1773 
1780  SAL_DLLPRIVATE Size ImplLogicToDevicePixel( const Size& rLogicSize ) const;
1781 
1788  SAL_DLLPRIVATE tools::Rectangle ImplDevicePixelToLogic( const tools::Rectangle& rPixelRect ) const;
1789 
1796  SAL_DLLPRIVATE tools::Polygon ImplLogicToDevicePixel( const tools::Polygon& rLogicPoly ) const;
1797 
1804  SAL_DLLPRIVATE tools::PolyPolygon ImplLogicToDevicePixel( const tools::PolyPolygon& rLogicPolyPoly ) const;
1805 
1812  SAL_DLLPRIVATE LineInfo ImplLogicToDevicePixel( const LineInfo& rLineInfo ) const;
1813 
1820  SAL_DLLPRIVATE vcl::Region ImplPixelToDevicePixel( const vcl::Region& rRegion ) const;
1821 
1826  SAL_DLLPRIVATE void ImplInvalidateViewTransform();
1827 
1832  SAL_DLLPRIVATE basegfx::B2DHomMatrix ImplGetDeviceTransformation() const;
1834 
1835 
1840 
1842 public:
1843 
1846  virtual bool CanEnableNativeWidget() const { return false; }
1847 
1850  bool IsNativeControlSupported( ControlType nType, ControlPart nPart ) const;
1851 
1854  bool HitTestNativeScrollbar(
1855  ControlPart nPart,
1856  const tools::Rectangle& rControlRegion,
1857  const Point& aPos,
1858  bool& rIsInside ) const;
1859 
1862  bool DrawNativeControl(
1863  ControlType nType,
1864  ControlPart nPart,
1865  const tools::Rectangle& rControlRegion,
1866  ControlState nState,
1867  const ImplControlValue& aValue,
1868  const OUString& aCaption,
1869  const Color& rBackgroundColor = COL_AUTO );
1870 
1874  ControlType nType,
1875  ControlPart nPart,
1876  const tools::Rectangle& rControlRegion,
1877  ControlState nState,
1878  const ImplControlValue& aValue,
1879  tools::Rectangle &rNativeBoundingRegion,
1880  tools::Rectangle &rNativeContentRegion ) const;
1882 
1885 
1887 public:
1888 
1894  bool DrawEPS(
1895  const Point& rPt, const Size& rSz,
1896  const GfxLink& rGfxLink, GDIMetaFile* pSubst = nullptr );
1898 
1899 public:
1900  virtual css::awt::DeviceInfo GetDeviceInfo() const;
1901 
1903  virtual vcl::Window* GetOwnerWindow() const { return nullptr; }
1904 
1905 protected:
1906  css::awt::DeviceInfo GetCommonDeviceInfo(Size const& aDevSize) const;
1907 
1908 };
1909 
1910 #endif // INCLUDED_VCL_OUTDEV_HXX
1911 
1912 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
#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:1008
OutDevType GetOutDevType() const
Definition: outdev.hxx:395
sal_Int32 mnDPIScalePercentage
For HiDPI displays, we want to draw elements for a percentage larger.
Definition: outdev.hxx:210
virtual void Flush()
Definition: outdev.hxx:418
void SetBackground()
Definition: window3.cxx:100
VclPtr< OutputDevice > mpNextGraphics
Next output device in list.
Definition: outdev.hxx:177
tools::SvRef< FontCharMap > FontCharMapRef
Definition: outdev.hxx:142
virtual Color GetMonochromeButtonColor()
Definition: outdev.hxx:411
const Wallpaper & GetBackground() const
Definition: outdev.hxx:517
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:197
SAL_DLLPRIVATE tools::Long GetEmphasisAscent() const
Definition: outdev.hxx:1172
tools::Long mnOutOffOrigY
Additional output pixel offset, applied in LogicToPixel (used by SetPixelOffset/GetPixelOffset) ...
Definition: outdev.hxx:199
AntialiasingFlags
Color maTextColor
Definition: outdev.hxx:225
const Point & GetRefPoint() const
Definition: outdev.hxx:296
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:1017
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:520
#define VCL_DLLPUBLIC
Definition: dllapi.h:29
DrawModeFlags mnDrawMode
Definition: outdev.hxx:216
Color maLineColor
Definition: outdev.hxx:222
sal_uIntPtr sal_uLong
long Long
TextAlign GetTextAlign() const
Definition: outdev.hxx:1026
bool IsOutputEnabled() const
Definition: outdev.hxx:474
FontEmphasisMark
SAL_DLLPRIVATE void SetDPIX(sal_Int32 nDPIX)
Definition: outdev.hxx:382
float approximate_digit_width() const
Definition: window3.cxx:72
bool IsMapModeEnabled() const
Definition: outdev.hxx:1556
bool IsTextLineColor() const
Definition: outdev.hxx:1018
tools::Long GetOutOffXPixel() const
Definition: outdev.hxx:307
vcl::Region maRegion
Definition: outdev.hxx:221
tools::Long mnOutOffY
Output offset for device output in pixel (pseudo window offset within window system's frames) ...
Definition: outdev.hxx:205
std::shared_ptr< PhysicalFontCollection > mxFontCollection
Definition: outdev.hxx:181
ComplexTextLayoutFlags GetLayoutMode() const
Definition: outdev.hxx:484
const MapMode & GetMapMode() const
Definition: outdev.hxx:1562
sal_Int32 mnDPIY
Definition: outdev.hxx:209
std::vector< VCLXGraphics * > * mpUnoGraphicsList
Definition: outdev.hxx:186
std::unique_ptr< ImplDeviceFontSizeList > mpDeviceFontSizeList
Definition: outdev.hxx:183
GDIMetaFile * GetConnectMetaFile() const
Definition: outdev.hxx:277
sal_Int32 mnDPIX
Definition: outdev.hxx:208
static OUString GetNonMnemonicString(const OUString &rStr)
Definition: window.hxx:1574
AntialiasingFlags GetAntialiasing() const
Definition: outdev.hxx:478
tools::Long mnEmphasisDescent
Definition: outdev.hxx:215
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:195
OutDevSupportType
Definition: vclenum.hxx:196
void SetTextLineColor()
Definition: window3.cxx:93
MapMode maMapMode
Definition: outdev.hxx:231
const Color & GetOverlineColor() const
Definition: outdev.hxx:1022
sal_uInt16 sal_Unicode
static OUString GetNonMnemonicString(const OUString &rStr)
Definition: outdev.hxx:991
Color maOverlineColor
Definition: outdev.hxx:227
const vcl::Font & GetFont() const
Definition: outdev.hxx:523
RasterOp
Definition: vclenum.hxx:192
DrawImageFlags
OutDevViewType meOutDevViewType
Definition: outdev.hxx:220
void EnableMapMode(bool bEnable=true)
Definition: window3.cxx:105
virtual bool CanSubsampleBitmap() const
Definition: outdev.hxx:1379
TextAlign GetAlignment() const
Definition: font/font.cxx:827
AntialiasingFlags mnAntialiasing
Definition: outdev.hxx:233
PushFlags
Definition: outdevstate.hxx:38
MetaActionType
Color maFillColor
Definition: outdev.hxx:223
void SetTextFillColor()
Definition: window3.cxx:97
std::unique_ptr< AllSettings > mxSettings
Definition: outdev.hxx:230
SalGraphics * mpGraphics
Graphics context to draw on.
Definition: outdev.hxx:175
std::shared_ptr< Surface > SurfaceSharedPtr
Definition: cairo.hxx:36
std::vector< OutDevState > maOutDevStateStack
Definition: outdev.hxx:184
bool IsTextFillColor() const
Definition: outdev.hxx:1013
bool IsRTLEnabled() const
Definition: outdev.hxx:1238
Point LogicToPixel(const Point &rLogicPt) const
Definition: window3.cxx:131
Wallpaper maBackground
Definition: outdev.hxx:229
bool IsClipRegion() const
Definition: outdev.hxx:549
tools::Long GetOutputHeightPixel() const
Definition: outdev.hxx:306
OutDevType
Definition: outdev.hxx:136
bool IsLineColor() const
Definition: outdev.hxx:505
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
ComplexTextLayoutFlags
Definition: outdevstate.hxx:66
std::unique_ptr< ImplDeviceFontList > mpDeviceFontList
Definition: outdev.hxx:182
Size GetOutputSize() const
Definition: outdev.hxx:316
const OutDevType meOutDevType
Definition: outdev.hxx:219
tools::Long mnOutHeight
Definition: outdev.hxx:207
Some things multiple-inherit from VclAbstractDialog and OutputDevice, so we need to use virtual inher...
Definition: outdev.hxx:162
const Color & GetLineColor() const
Definition: outdev.hxx:504
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:189
BmpMirrorFlags
Definition: bitmap.hxx:41
std::vector< tools::PolyPolygon > PolyPolyVector
vcl::Font maFont
Definition: outdev.hxx:224
constexpr double deg2rad(double v)
std::shared_ptr< cairo_surface_t > CairoSurfaceSharedPtr
Definition: cairo.hxx:34
RasterOp meRasterOp
Definition: outdev.hxx:228
const AllSettings & GetSettings() const
Definition: outdev.hxx:280
Size GetOutputSizePixel() const
Definition: outdev.hxx:303
Color maTextLineColor
Definition: outdev.hxx:226
Point PixelToLogic(const Point &rDevicePt) const
Definition: window3.cxx:161
void SetTextAlign(TextAlign eAlign)
Definition: window3.cxx:120
DrawModeFlags GetDrawMode() const
Definition: outdev.hxx:481
VCL_DLLPUBLIC void InvertFocusRect(vcl::RenderContext &rRenderContext, const tools::Rectangle &rRect)
Definition: window2.cxx:1996
tools::Long mnEmphasisAscent
Definition: outdev.hxx:214
Size LogicToLogic(const Size &rSzSource, const MapMode *pMapModeSource, const MapMode *pMapModeDest) const
Definition: window3.cxx:195
TextAlign
float GetDPIScaleFactor() const
Definition: outdev.hxx:385
tools::Long GetOutOffYPixel() const
Definition: outdev.hxx:308
virtual void dispose()
std::vector< VCLXGraphics * > * GetUnoGraphicsList() const
Definition: outdev.hxx:321
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:176
GetDefaultFontFlags
VclPtr< VirtualDevice > mpAlphaVDev
Definition: outdev.hxx:192
SAL_DLLPRIVATE tools::Long GetEmphasisDescent() const
Definition: outdev.hxx:1173
bool IsRefPoint() const
Definition: outdev.hxx:297
ImplMapRes maMapRes
Definition: outdev.hxx:218
Color GetBackgroundColor() const
Definition: window3.cxx:214
SAL_WARN_UNUSED_RESULT Size GetPixelOffset() const
Get the offset in pixel.
Definition: outdev.hxx:1606
void SetExtOutDevData(vcl::ExtOutDevData *pExtOutDevData)
Definition: outdev.hxx:404
OutputDevice RenderContext
Definition: outdev.hxx:150
tools::Rectangle GetOutputRectPixel() const
Definition: outdev.hxx:313
LanguageType GetDigitLanguage() const
Definition: outdev.hxx:487
OutDevViewType GetOutDevViewType() const
Definition: outdev.hxx:500
const ::std::vector< Color > ImpSvNumberformatScan::StandardColor COL_WHITE
Point GetOutputOffPixel() const
Definition: outdev.hxx:311
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
tools::Long GetTextWidth(const OUString &rStr, sal_Int32 nIndex=0, sal_Int32 nLen=-1, vcl::TextLayoutCache const *=nullptr, SalLayoutGlyphs const *const pLayoutCache=nullptr) const
Width of the text.
Definition: window3.cxx:66
DrawGridFlags
sal_Int32 GetDPIScalePercentage() const
Definition: outdev.hxx:390
virtual Size GetButtonBorderSize()
Definition: outdev.hxx:410
SAL_DLLPRIVATE void SetDPIY(sal_Int32 nDPIY)
Definition: outdev.hxx:383
RasterOp GetRasterOp() const
Definition: outdev.hxx:490
rtl::Reference< LogicalFontInstance > mpFontInstance
Definition: outdev.hxx:179
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:206
Size GetOutputSizePixel() const
Definition: window3.cxx:89
ComplexTextLayoutFlags mnTextLayoutMode
Definition: outdev.hxx:217
void SetOutDevViewType(OutDevViewType eOutDevViewType)
If this OutputDevice is used for displaying a Print Preview the OutDevViewType should be set to 'OutD...
Definition: outdev.hxx:499
std::shared_ptr< ImplFontCache > mxFontCache
Definition: outdev.hxx:180
MapUnit
tools::Long mnOutOffX
Output offset for device output in pixel (pseudo window offset within window system's frames) ...
Definition: outdev.hxx:203
std::unique_ptr< ImplOutDevData > mpOutDevData
Definition: outdev.hxx:185
vcl::ExtOutDevData * GetExtOutDevData() const
Definition: outdev.hxx:405
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:187
bool IsFillColor() const
Definition: outdev.hxx:510
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:201
bool IsOverlineColor() const
Definition: outdev.hxx:1023
virtual size_t GetSyncCount() const
Definition: outdev.hxx:324
OutDevViewType
Definition: outdev.hxx:138
InvertFlags
Definition: InvertFlags.hxx:24
FontLineStyle
struct _cairo_surface cairo_surface_t
Definition: svpgdi.hxx:71
bool IsDeviceOutputNecessary() const
Definition: outdev.hxx:475
Point maRefPoint
Definition: outdev.hxx:232
AddFontSubstituteFlags
SAL_DLLPRIVATE sal_Int32 GetDPIY() const
Get the output device's DPI y-axis value.
Definition: outdev.hxx:380
virtual vcl::Window * GetOwnerWindow() const
Get the vcl::Window that this OutputDevice belongs to, if any.
Definition: outdev.hxx:1903
void SetMapMode()
Definition: window3.cxx:125
tools::Long GetOutputWidthPixel() const
Definition: outdev.hxx:305
tools::Long mnTextOffY
Definition: outdev.hxx:213
FontStrikeout
DrawModeFlags
SAL_DLLPRIVATE sal_Int32 GetDPIX() const
Get the output device's DPI x-axis value.
Definition: outdev.hxx:374
virtual bool IsScreenComp() const
Definition: outdev.hxx:299
const Color & GetFillColor() const
Definition: outdev.hxx:509
GDIMetaFile * mpMetaFile
Definition: outdev.hxx:178
::std::vector< B2DPolyPolygon > B2DPolyPolygonVector
SalLayoutFlags
LanguageType meTextLanguage
Definition: outdev.hxx:234
virtual bool CanEnableNativeWidget() const
Determine if native widgets can be enabled.
Definition: outdev.hxx:1846
typedef void(CALLTYPE *GetFuncDataPtr)(sal_uInt16 &nNo