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 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6 7 #ifndef CORE_FXGE_AGG_FX_AGG_DRIVER_H_ 8 #define CORE_FXGE_AGG_FX_AGG_DRIVER_H_ 9 10 #include <memory> 11 #include <vector> 12 13 #include "build/build_config.h" 14 #include "core/fxge/renderdevicedriver_iface.h" 15 #include "third_party/agg23/agg_clip_liang_barsky.h" 16 #include "third_party/agg23/agg_path_storage.h" 17 #include "third_party/agg23/agg_rasterizer_scanline_aa.h" 18 19 class CFX_ClipRgn; 20 class CFX_GraphStateData; 21 class CFX_Matrix; 22 class CFX_PathData; 23 24 class CAgg_PathData { 25 public: CAgg_PathData()26 CAgg_PathData() {} ~CAgg_PathData()27 ~CAgg_PathData() {} 28 void BuildPath(const CFX_PathData* pPathData, 29 const CFX_Matrix* pObject2Device); 30 31 agg::path_storage m_PathData; 32 }; 33 34 class CFX_AggDeviceDriver final : public RenderDeviceDriverIface { 35 public: 36 CFX_AggDeviceDriver(const RetainPtr<CFX_DIBitmap>& pBitmap, 37 bool bRgbByteOrder, 38 const RetainPtr<CFX_DIBitmap>& pBackdropBitmap, 39 bool bGroupKnockout); 40 ~CFX_AggDeviceDriver() override; 41 42 void InitPlatform(); 43 void DestroyPlatform(); 44 45 // RenderDeviceDriverIface: 46 DeviceType GetDeviceType() const override; 47 int GetDeviceCaps(int caps_id) const override; 48 void SaveState() override; 49 void RestoreState(bool bKeepSaved) override; 50 bool SetClip_PathFill(const CFX_PathData* pPathData, 51 const CFX_Matrix* pObject2Device, 52 int fill_mode) override; 53 bool SetClip_PathStroke(const CFX_PathData* pPathData, 54 const CFX_Matrix* pObject2Device, 55 const CFX_GraphStateData* pGraphState) override; 56 bool DrawPath(const CFX_PathData* pPathData, 57 const CFX_Matrix* pObject2Device, 58 const CFX_GraphStateData* pGraphState, 59 uint32_t fill_color, 60 uint32_t stroke_color, 61 int fill_mode, 62 BlendMode blend_type) override; 63 bool SetPixel(int x, int y, uint32_t color) override; 64 bool FillRectWithBlend(const FX_RECT& rect, 65 uint32_t fill_color, 66 BlendMode blend_type) override; 67 bool GetClipBox(FX_RECT* pRect) override; 68 bool GetDIBits(const RetainPtr<CFX_DIBitmap>& pBitmap, 69 int left, 70 int top) override; 71 RetainPtr<CFX_DIBitmap> GetBackDrop() override; 72 bool SetDIBits(const RetainPtr<CFX_DIBBase>& pBitmap, 73 uint32_t argb, 74 const FX_RECT& src_rect, 75 int left, 76 int top, 77 BlendMode blend_type) override; 78 bool StretchDIBits(const RetainPtr<CFX_DIBBase>& pSource, 79 uint32_t argb, 80 int dest_left, 81 int dest_top, 82 int dest_width, 83 int dest_height, 84 const FX_RECT* pClipRect, 85 const FXDIB_ResampleOptions& options, 86 BlendMode blend_type) override; 87 bool StartDIBits(const RetainPtr<CFX_DIBBase>& pSource, 88 int bitmap_alpha, 89 uint32_t argb, 90 const CFX_Matrix& matrix, 91 const FXDIB_ResampleOptions& options, 92 std::unique_ptr<CFX_ImageRenderer>* handle, 93 BlendMode blend_type) override; 94 bool ContinueDIBits(CFX_ImageRenderer* handle, 95 PauseIndicatorIface* pPause) override; 96 bool DrawDeviceText(int nChars, 97 const TextCharPos* pCharPos, 98 CFX_Font* pFont, 99 const CFX_Matrix& mtObject2Device, 100 float font_size, 101 uint32_t color) override; 102 int GetDriverType() const override; 103 104 bool RenderRasterizer(agg::rasterizer_scanline_aa& rasterizer, 105 uint32_t color, 106 bool bFullCover, 107 bool bGroupKnockout); 108 109 void SetClipMask(agg::rasterizer_scanline_aa& rasterizer); 110 111 virtual uint8_t* GetBuffer() const; 112 113 private: 114 RetainPtr<CFX_DIBitmap> const m_pBitmap; 115 std::unique_ptr<CFX_ClipRgn> m_pClipRgn; 116 std::vector<std::unique_ptr<CFX_ClipRgn>> m_StateStack; 117 #if defined(OS_MACOSX) 118 void* m_pPlatformGraphics = nullptr; 119 #endif 120 int m_FillFlags = 0; 121 const bool m_bRgbByteOrder; 122 const bool m_bGroupKnockout; 123 RetainPtr<CFX_DIBitmap> m_pBackdropBitmap; 124 }; 125 126 #endif // CORE_FXGE_AGG_FX_AGG_DRIVER_H_ 127