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