1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Copyright 2014 PDFium Authors. All rights reserved. 2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Use of this source code is governed by a BSD-style license that can be 3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// found in the LICENSE file. 4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovstruct WINDIB_Open_Args_; 8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CGdiplusExt 9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CGdiplusExt(); 12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ~CGdiplusExt(); 13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void Load(); 14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL IsAvailable() 15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_hModule != NULL; 17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL StretchBitMask(HDC hDC, BOOL bMonoDevice, const CFX_DIBitmap* pBitmap, int dest_left, int dest_top, 19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int dest_width, int dest_height, FX_DWORD argb, const FX_RECT* pClipRect, int flags); 20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL StretchDIBits(HDC hDC, const CFX_DIBitmap* pBitmap, int dest_left, int dest_top, 21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int dest_width, int dest_height, const FX_RECT* pClipRect, int flags); 22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL DrawPath(HDC hDC, const CFX_PathData* pPathData, 23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const CFX_AffineMatrix* pObject2Device, 24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const CFX_GraphStateData* pGraphState, 25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD fill_argb, 26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD stroke_argb, 27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int fill_mode 28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ); 29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void* LoadMemFont(FX_BYTE* pData, FX_DWORD size); 31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void DeleteMemFont(void* pFontCollection); 32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL GdipCreateFromImage(void* bitmap, void** graphics); 33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void GdipDeleteGraphics(void* graphics); 34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void GdipSetTextRenderingHint(void* graphics, int mode); 35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void GdipSetPageUnit(void* graphics, FX_DWORD unit); 36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void GdipSetWorldTransform(void* graphics, void* pMatrix); 37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL GdipDrawDriverString(void *graphics, unsigned short *text, int length, void *font, void* brush, void *positions, int flags, const void *matrix); 38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void GdipCreateBrush(FX_DWORD fill_argb, void** pBrush); 39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void GdipDeleteBrush(void* pBrush); 40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void GdipCreateMatrix(FX_FLOAT a, FX_FLOAT b, FX_FLOAT c, FX_FLOAT d, FX_FLOAT e, FX_FLOAT f, void** matrix); 41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void GdipDeleteMatrix(void* matrix); 42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL GdipCreateFontFamilyFromName(FX_LPCWSTR name, void* pFontCollection, void**pFamily); 43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void GdipDeleteFontFamily(void* pFamily); 44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL GdipCreateFontFromFamily(void* pFamily, FX_FLOAT font_size, int fontstyle, int flag, void** pFont); 45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void* GdipCreateFontFromCollection(void* pFontCollection, FX_FLOAT font_size, int fontstyle); 46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void GdipDeleteFont(void* pFont); 47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL GdipCreateBitmap(CFX_DIBitmap* pBitmap, void**bitmap); 48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void GdipDisposeImage(void* bitmap); 49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void GdipGetFontSize(void *pFont, FX_FLOAT *size); 50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void* GdiAddFontMemResourceEx(void *pFontdata, FX_DWORD size, void* pdv, FX_DWORD* num_face); 51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL GdiRemoveFontMemResourceEx(void* handle); 52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void* m_Functions[100]; 53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void* m_pGdiAddFontMemResourceEx; 54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void* m_pGdiRemoveFontMemResourseEx; 55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_DIBitmap* LoadDIBitmap(WINDIB_Open_Args_ args); 56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprotected: 57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov HMODULE m_hModule; 58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov HMODULE m_GdiModule; 59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "dwrite_int.h" 61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CWin32Platform : public CFX_Object 62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL m_bHalfTone; 65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CGdiplusExt m_GdiplusExt; 66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CDWriteExt m_DWriteExt; 67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CGdiDeviceDriver : public IFX_RenderDeviceDriver 69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprotected: 71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual int GetDeviceCaps(int caps_id); 72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void SaveState() 73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SaveDC(m_hDC); 75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void RestoreState(FX_BOOL bKeepSaved = FALSE) 77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov RestoreDC(m_hDC, -1); 79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (bKeepSaved) { 80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SaveDC(m_hDC); 81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL SetClip_PathFill(const CFX_PathData* pPathData, 84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const CFX_AffineMatrix* pObject2Device, 85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int fill_mode 86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ); 87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL SetClip_PathStroke(const CFX_PathData* pPathData, 88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const CFX_AffineMatrix* pObject2Device, 89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const CFX_GraphStateData* pGraphState 90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ); 91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL DrawPath(const CFX_PathData* pPathData, 92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const CFX_AffineMatrix* pObject2Device, 93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const CFX_GraphStateData* pGraphState, 94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD fill_color, 95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD stroke_color, 96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int fill_mode, 97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int alpha_flag, 98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void* pIccTransform, 99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int blend_type 100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ); 101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL FillRect(const FX_RECT* pRect, 102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD fill_color, 103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int alpha_flag, void* pIccTransform, int blend_type); 104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL DrawCosmeticLine(FX_FLOAT x1, FX_FLOAT y1, FX_FLOAT x2, FX_FLOAT y2, FX_DWORD color, 105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int alpha_flag, void* pIccTransform, int blend_type); 106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_LPVOID GetClipRgn() ; 107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL SetClipRgn(FX_LPVOID pRgn) ; 108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL GetClipBox(FX_RECT* pRect); 109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL DeleteDeviceRgn(FX_LPVOID pRgn); 110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void DrawLine(FX_FLOAT x1, FX_FLOAT y1, FX_FLOAT x2, FX_FLOAT y2); 111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void* GetPlatformSurface() 112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return (void*)m_hDC; 114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL GDI_SetDIBits(const CFX_DIBitmap* pBitmap, const FX_RECT* pSrcRect, int left, int top, 116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void* pIccTransform); 117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL GDI_StretchDIBits(const CFX_DIBitmap* pBitmap, int dest_left, int dest_top, 118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int dest_width, int dest_height, FX_DWORD flags, 119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void* pIccTransform); 120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL GDI_StretchBitMask(const CFX_DIBitmap* pBitmap, int dest_left, int dest_top, 121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int dest_width, int dest_height, FX_DWORD bitmap_color, FX_DWORD flags, 122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int alpha_flag, void* pIccTransform); 123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov HDC m_hDC; 124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int m_Width, m_Height, m_nBitsPerPixel; 125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int m_DeviceClass, m_RenderCaps; 126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CGdiDeviceDriver(HDC hDC, int device_class); 127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ~CGdiDeviceDriver() {} 128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CGdiDisplayDriver : public CGdiDeviceDriver 130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CGdiDisplayDriver(HDC hDC); 133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprotected: 134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL GetDIBits(CFX_DIBitmap* pBitmap, int left, int top, void* pIccTransform = NULL, FX_BOOL bDEdge = FALSE); 135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL SetDIBits(const CFX_DIBSource* pBitmap, FX_DWORD color, const FX_RECT* pSrcRect, int left, int top, int blend_type, 136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int alpha_flag, void* pIccTransform); 137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL StretchDIBits(const CFX_DIBSource* pBitmap, FX_DWORD color, int dest_left, int dest_top, 138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int dest_width, int dest_height, const FX_RECT* pClipRect, FX_DWORD flags, 139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int alpha_flag, void* pIccTransform, int blend_type); 140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL StartDIBits(const CFX_DIBSource* pBitmap, int bitmap_alpha, FX_DWORD color, 141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const CFX_AffineMatrix* pMatrix, FX_DWORD render_flags, FX_LPVOID& handle, 142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int alpha_flag, void* pIccTransform, int blend_type) 143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return FALSE; 145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL UseFoxitStretchEngine(const CFX_DIBSource* pSource, FX_DWORD color, int dest_left, int dest_top, 147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int dest_width, int dest_height, const FX_RECT* pClipRect, int render_flags, 148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int alpha_flag = 0, void* pIccTransform = NULL, int blend_type = FXDIB_BLEND_NORMAL); 149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CGdiPrinterDriver : public CGdiDeviceDriver 151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CGdiPrinterDriver(HDC hDC); 154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprotected: 155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual int GetDeviceCaps(int caps_id); 156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL SetDIBits(const CFX_DIBSource* pBitmap, FX_DWORD color, const FX_RECT* pSrcRect, int left, int top, int blend_type, 157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int alpha_flag, void* pIccTransform); 158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL StretchDIBits(const CFX_DIBSource* pBitmap, FX_DWORD color, int dest_left, int dest_top, 159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int dest_width, int dest_height, const FX_RECT* pClipRect, FX_DWORD flags, 160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int alpha_flag, void* pIccTransform, int blend_type); 161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL StartDIBits(const CFX_DIBSource* pBitmap, int bitmap_alpha, FX_DWORD color, 162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const CFX_AffineMatrix* pMatrix, FX_DWORD render_flags, FX_LPVOID& handle, 163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int alpha_flag, void* pIccTransform, int blend_type); 164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int m_HorzSize, m_VertSize; 165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL m_bSupportROP; 166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPSOutput : public IFX_PSOutput, public CFX_Object 168ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 169ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 170ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPSOutput(HDC hDC); 171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual ~CPSOutput(); 172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void Release() 173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov delete this; 175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void Init(); 177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void OutputPS(FX_LPCSTR string, int len); 178ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov HDC m_hDC; 179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_LPSTR m_pBuf; 180ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 181ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPSPrinterDriver : public IFX_RenderDeviceDriver 182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 183ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 184ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPSPrinterDriver(); 185ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL Init(HDC hDC, int ps_level, FX_BOOL bCmykOutput); 186ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ~CPSPrinterDriver(); 187ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprotected: 188ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL IsPSPrintDriver() 189ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 190ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return TRUE; 191ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 192ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual int GetDeviceCaps(int caps_id); 193ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL StartRendering(); 194ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void EndRendering(); 195ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void SaveState(); 196ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void RestoreState(FX_BOOL bKeepSaved = FALSE); 197ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL SetClip_PathFill(const CFX_PathData* pPathData, 198ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const CFX_AffineMatrix* pObject2Device, 199ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int fill_mode 200ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ); 201ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL SetClip_PathStroke(const CFX_PathData* pPathData, 202ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const CFX_AffineMatrix* pObject2Device, 203ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const CFX_GraphStateData* pGraphState 204ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ); 205ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL DrawPath(const CFX_PathData* pPathData, 206ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const CFX_AffineMatrix* pObject2Device, 207ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const CFX_GraphStateData* pGraphState, 208ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD fill_color, 209ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD stroke_color, 210ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int fill_mode, 211ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int alpha_flag, 212ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void* pIccTransform, 213ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int blend_type 214ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ); 215ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL GetClipBox(FX_RECT* pRect); 216ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL SetDIBits(const CFX_DIBSource* pBitmap, FX_DWORD color, const FX_RECT* pSrcRect, int left, int top, int blend_type, 217ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int alpha_flag, void* pIccTransform); 218ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL StretchDIBits(const CFX_DIBSource* pBitmap, FX_DWORD color, int dest_left, int dest_top, 219ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int dest_width, int dest_height, const FX_RECT* pClipRect, FX_DWORD flags, 220ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int alpha_flag, void* pIccTransform, int blend_type); 221ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL StartDIBits(const CFX_DIBSource* pBitmap, int bitmap_alpha, FX_DWORD color, 222ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const CFX_AffineMatrix* pMatrix, FX_DWORD render_flags, FX_LPVOID& handle, 223ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int alpha_flag, void* pIccTransform, int blend_type); 224ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL DrawDeviceText(int nChars, const FXTEXT_CHARPOS* pCharPos, CFX_Font* pFont, 225ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_FontCache* pCache, const CFX_AffineMatrix* pObject2Device, FX_FLOAT font_size, FX_DWORD color, 226ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int alpha_flag, void* pIccTransform); 227ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void* GetPlatformSurface() 228ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 229ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return (void*)m_hDC; 230ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 231ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov HDC m_hDC; 232ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL m_bCmykOutput; 233ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int m_Width, m_Height, m_nBitsPerPixel; 234ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int m_HorzSize, m_VertSize; 235ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPSOutput* m_pPSOutput; 236ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_PSRenderer m_PSRenderer; 237ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 238ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid _Color2Argb(FX_ARGB& argb, FX_DWORD color, int alpha_flag, void* pIccTransform); 239