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