1e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Copyright 2014 PDFium Authors. All rights reserved.
2e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Use of this source code is governed by a BSD-style license that can be
3e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// found in the LICENSE file.
4e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
5e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#ifndef CORE_SRC_FXGE_SKIA_FX_SKIA_DEVICE_H_
6e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define CORE_SRC_FXGE_SKIA_FX_SKIA_DEVICE_H_
7e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
8e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#if defined(_SKIA_SUPPORT_)
9ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CFX_SkiaDeviceDriver : public IFX_RenderDeviceDriver {
10ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public:
11ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_SkiaDeviceDriver(CFX_DIBitmap* pBitmap,
12ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                       int dither_bits,
13ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                       FX_BOOL bRgbByteOrder,
14ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                       CFX_DIBitmap* pOriDevice,
15ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                       FX_BOOL bGroupKnockout);
16ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ~CFX_SkiaDeviceDriver() override;
17ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
18ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  /** Options */
19ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual int GetDeviceCaps(int caps_id);
20ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
21ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  /** Save and restore all graphic states */
22ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual void SaveState();
23ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual void RestoreState(FX_BOOL bKeepSaved);
24ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
25ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  /** Set clipping path using filled region */
26ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_BOOL SetClip_PathFill(
27ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      const CFX_PathData* pPathData,     // path info
28ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      const CFX_Matrix* pObject2Device,  // optional transformation
29ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      int fill_mode                      // fill mode, WINDING or ALTERNATE
30ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      );
31ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
32ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  /** Set clipping path using stroked region */
33ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_BOOL SetClip_PathStroke(
34ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      const CFX_PathData* pPathData,     // path info
35ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      const CFX_Matrix* pObject2Device,  // optional transformation
36ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      const CFX_GraphStateData*
37ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          pGraphState  // graphic state, for pen attributes
38ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      );
39ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
40ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  /** Draw a path */
41ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_BOOL DrawPath(const CFX_PathData* pPathData,
42ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                           const CFX_Matrix* pObject2Device,
43ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                           const CFX_GraphStateData* pGraphState,
44ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                           FX_DWORD fill_color,
45ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                           FX_DWORD stroke_color,
46ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                           int fill_mode,
47ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                           int alpha_flag = 0,
48ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                           void* pIccTransform = NULL);
49ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
50ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_BOOL SetPixel(int x,
51ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                           int y,
52ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                           FX_DWORD color,
53ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                           int alpha_flag = 0,
54ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                           void* pIccTransform = NULL);
55ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
56ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_BOOL FillRect(const FX_RECT* pRect,
57ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                           FX_DWORD fill_color,
58ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                           int alpha_flag = 0,
59ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                           void* pIccTransform = NULL);
60ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
61ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  /** Draw a single pixel (device dependant) line */
62ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_BOOL DrawCosmeticLine(FX_FIXFLOAT x1,
63ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                   FX_FIXFLOAT y1,
64ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                   FX_FIXFLOAT x2,
65ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                   FX_FIXFLOAT y2,
66ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                   FX_DWORD color,
67ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                   int alpha_flag,
68ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                   void* pIccTransform,
69ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                   int blend_type) {
70ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return FALSE;
71ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
72ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
73ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_BOOL GetClipBox(FX_RECT* pRect);
74ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
75ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  /** Load device buffer into a DIB */
76ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_BOOL GetDIBits(CFX_DIBitmap* pBitmap,
77ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                            int left,
78ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                            int top,
79ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                            void* pIccTransform = NULL,
80ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                            FX_BOOL bDEdge = FALSE);
81ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
82ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual CFX_DIBitmap* GetBackDrop() { return m_pAggDriver->GetBackDrop(); }
83ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
84ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_BOOL SetDIBits(const CFX_DIBSource* pBitmap,
85ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                            FX_DWORD color,
86ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                            const FX_RECT* pSrcRect,
87ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                            int dest_left,
88ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                            int dest_top,
89ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                            int blend_type,
90ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                            int alpha_flag = 0,
91ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                            void* pIccTransform = NULL);
92ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_BOOL StretchDIBits(const CFX_DIBSource* pBitmap,
93ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                FX_DWORD color,
94ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                int dest_left,
95ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                int dest_top,
96ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                int dest_width,
97ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                int dest_height,
98ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                const FX_RECT* pClipRect,
99ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                FX_DWORD flags,
100ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                int alpha_flag = 0,
101ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                void* pIccTransform = NULL);
102ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
103ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_BOOL StartDIBits(const CFX_DIBSource* pBitmap,
104ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                              int bitmap_alpha,
105ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                              FX_DWORD color,
106ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                              const CFX_Matrix* pMatrix,
107ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                              FX_DWORD flags,
108ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                              void*& handle,
109ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                              int alpha_flag = 0,
110ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                              void* pIccTransform = NULL);
111ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_BOOL ContinueDIBits(void* handle, IFX_Pause* pPause);
112ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual void CancelDIBits(void* handle);
113ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
114ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_BOOL DrawDeviceText(int nChars,
115ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                 const FXTEXT_CHARPOS* pCharPos,
116ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                 CFX_Font* pFont,
117ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                 CFX_FontCache* pCache,
118ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                 const CFX_Matrix* pObject2Device,
119ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                 FX_FIXFLOAT font_size,
120ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                 FX_DWORD color,
121ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                 int alpha_flag = 0,
122ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                 void* pIccTransform = NULL);
123ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
124ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_BOOL RenderRasterizer(rasterizer_scanline_aa& rasterizer,
125ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                   FX_DWORD color,
126ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                   FX_BOOL bFullCover,
127ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                   FX_BOOL bGroupKnockout,
128ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                   int alpha_flag,
129ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                   void* pIccTransform);
130ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual FX_BOOL RenderRasterizerSkia(SkPath& skPath,
131ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                       const SkPaint& origPaint,
132ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                       SkIRect& rect,
133ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                       FX_DWORD color,
134ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                       FX_BOOL bFullCover,
135ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                       FX_BOOL bGroupKnockout,
136ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                       int alpha_flag,
137ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                       void* pIccTransform,
138ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                       FX_BOOL bFill = TRUE);
139ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void SetClipMask(rasterizer_scanline_aa& rasterizer);
140ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  void SetClipMask(SkPath& skPath, SkPaint* spaint);
141ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  virtual uint8_t* GetBuffer() const { return m_pAggDriver->GetBuffer(); }
142ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
143ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_AggDeviceDriver* m_pAggDriver;
144e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
145e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#endif  // defined(_SKIA_SUPPORT_)
146e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
147e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#endif  // CORE_SRC_FXGE_SKIA_FX_SKIA_DEVICE_H_
148