OLD | NEW |
| (Empty) |
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_SRC_FXGE_WIN32_WIN32_INT_H_ | |
8 #define CORE_SRC_FXGE_WIN32_WIN32_INT_H_ | |
9 | |
10 #include "core/include/fxge/fx_ge.h" | |
11 #include "core/src/fxge/win32/dwrite_int.h" | |
12 | |
13 struct WINDIB_Open_Args_; | |
14 class CGdiplusExt { | |
15 public: | |
16 CGdiplusExt(); | |
17 ~CGdiplusExt(); | |
18 void Load(); | |
19 FX_BOOL IsAvailable() { return m_hModule != NULL; } | |
20 FX_BOOL StretchBitMask(HDC hDC, | |
21 BOOL bMonoDevice, | |
22 const CFX_DIBitmap* pBitmap, | |
23 int dest_left, | |
24 int dest_top, | |
25 int dest_width, | |
26 int dest_height, | |
27 FX_DWORD argb, | |
28 const FX_RECT* pClipRect, | |
29 int flags); | |
30 FX_BOOL StretchDIBits(HDC hDC, | |
31 const CFX_DIBitmap* pBitmap, | |
32 int dest_left, | |
33 int dest_top, | |
34 int dest_width, | |
35 int dest_height, | |
36 const FX_RECT* pClipRect, | |
37 int flags); | |
38 FX_BOOL DrawPath(HDC hDC, | |
39 const CFX_PathData* pPathData, | |
40 const CFX_Matrix* pObject2Device, | |
41 const CFX_GraphStateData* pGraphState, | |
42 FX_DWORD fill_argb, | |
43 FX_DWORD stroke_argb, | |
44 int fill_mode); | |
45 | |
46 void* LoadMemFont(uint8_t* pData, FX_DWORD size); | |
47 void DeleteMemFont(void* pFontCollection); | |
48 FX_BOOL GdipCreateFromImage(void* bitmap, void** graphics); | |
49 void GdipDeleteGraphics(void* graphics); | |
50 void GdipSetTextRenderingHint(void* graphics, int mode); | |
51 void GdipSetPageUnit(void* graphics, FX_DWORD unit); | |
52 void GdipSetWorldTransform(void* graphics, void* pMatrix); | |
53 FX_BOOL GdipDrawDriverString(void* graphics, | |
54 unsigned short* text, | |
55 int length, | |
56 void* font, | |
57 void* brush, | |
58 void* positions, | |
59 int flags, | |
60 const void* matrix); | |
61 void GdipCreateBrush(FX_DWORD fill_argb, void** pBrush); | |
62 void GdipDeleteBrush(void* pBrush); | |
63 void GdipCreateMatrix(FX_FLOAT a, | |
64 FX_FLOAT b, | |
65 FX_FLOAT c, | |
66 FX_FLOAT d, | |
67 FX_FLOAT e, | |
68 FX_FLOAT f, | |
69 void** matrix); | |
70 void GdipDeleteMatrix(void* matrix); | |
71 FX_BOOL GdipCreateFontFamilyFromName(const FX_WCHAR* name, | |
72 void* pFontCollection, | |
73 void** pFamily); | |
74 void GdipDeleteFontFamily(void* pFamily); | |
75 FX_BOOL GdipCreateFontFromFamily(void* pFamily, | |
76 FX_FLOAT font_size, | |
77 int fontstyle, | |
78 int flag, | |
79 void** pFont); | |
80 void* GdipCreateFontFromCollection(void* pFontCollection, | |
81 FX_FLOAT font_size, | |
82 int fontstyle); | |
83 void GdipDeleteFont(void* pFont); | |
84 FX_BOOL GdipCreateBitmap(CFX_DIBitmap* pBitmap, void** bitmap); | |
85 void GdipDisposeImage(void* bitmap); | |
86 void GdipGetFontSize(void* pFont, FX_FLOAT* size); | |
87 void* GdiAddFontMemResourceEx(void* pFontdata, | |
88 FX_DWORD size, | |
89 void* pdv, | |
90 FX_DWORD* num_face); | |
91 FX_BOOL GdiRemoveFontMemResourceEx(void* handle); | |
92 void* m_Functions[100]; | |
93 void* m_pGdiAddFontMemResourceEx; | |
94 void* m_pGdiRemoveFontMemResourseEx; | |
95 CFX_DIBitmap* LoadDIBitmap(WINDIB_Open_Args_ args); | |
96 | |
97 protected: | |
98 HMODULE m_hModule; | |
99 HMODULE m_GdiModule; | |
100 }; | |
101 class CWin32Platform { | |
102 public: | |
103 FX_BOOL m_bHalfTone; | |
104 CGdiplusExt m_GdiplusExt; | |
105 CDWriteExt m_DWriteExt; | |
106 }; | |
107 | |
108 class CGdiDeviceDriver : public IFX_RenderDeviceDriver { | |
109 protected: | |
110 // IFX_RenderDeviceDriver | |
111 int GetDeviceCaps(int caps_id) override; | |
112 void SaveState() override { SaveDC(m_hDC); } | |
113 void RestoreState(FX_BOOL bKeepSaved = FALSE) override { | |
114 RestoreDC(m_hDC, -1); | |
115 if (bKeepSaved) { | |
116 SaveDC(m_hDC); | |
117 } | |
118 } | |
119 FX_BOOL SetClip_PathFill(const CFX_PathData* pPathData, | |
120 const CFX_Matrix* pObject2Device, | |
121 int fill_mode) override; | |
122 FX_BOOL SetClip_PathStroke(const CFX_PathData* pPathData, | |
123 const CFX_Matrix* pObject2Device, | |
124 const CFX_GraphStateData* pGraphState) override; | |
125 FX_BOOL DrawPath(const CFX_PathData* pPathData, | |
126 const CFX_Matrix* pObject2Device, | |
127 const CFX_GraphStateData* pGraphState, | |
128 FX_DWORD fill_color, | |
129 FX_DWORD stroke_color, | |
130 int fill_mode, | |
131 int alpha_flag, | |
132 void* pIccTransform, | |
133 int blend_type) override; | |
134 FX_BOOL FillRect(const FX_RECT* pRect, | |
135 FX_DWORD fill_color, | |
136 int alpha_flag, | |
137 void* pIccTransform, | |
138 int blend_type) override; | |
139 FX_BOOL DrawCosmeticLine(FX_FLOAT x1, | |
140 FX_FLOAT y1, | |
141 FX_FLOAT x2, | |
142 FX_FLOAT y2, | |
143 FX_DWORD color, | |
144 int alpha_flag, | |
145 void* pIccTransform, | |
146 int blend_type) override; | |
147 FX_BOOL GetClipBox(FX_RECT* pRect) override; | |
148 void* GetPlatformSurface() override { return (void*)m_hDC; } | |
149 | |
150 virtual void* GetClipRgn(); | |
151 virtual FX_BOOL SetClipRgn(void* pRgn); | |
152 virtual FX_BOOL DeleteDeviceRgn(void* pRgn); | |
153 virtual void DrawLine(FX_FLOAT x1, FX_FLOAT y1, FX_FLOAT x2, FX_FLOAT y2); | |
154 | |
155 FX_BOOL GDI_SetDIBits(const CFX_DIBitmap* pBitmap, | |
156 const FX_RECT* pSrcRect, | |
157 int left, | |
158 int top, | |
159 void* pIccTransform); | |
160 FX_BOOL GDI_StretchDIBits(const CFX_DIBitmap* pBitmap, | |
161 int dest_left, | |
162 int dest_top, | |
163 int dest_width, | |
164 int dest_height, | |
165 FX_DWORD flags, | |
166 void* pIccTransform); | |
167 FX_BOOL GDI_StretchBitMask(const CFX_DIBitmap* pBitmap, | |
168 int dest_left, | |
169 int dest_top, | |
170 int dest_width, | |
171 int dest_height, | |
172 FX_DWORD bitmap_color, | |
173 FX_DWORD flags, | |
174 int alpha_flag, | |
175 void* pIccTransform); | |
176 HDC m_hDC; | |
177 int m_Width, m_Height, m_nBitsPerPixel; | |
178 int m_DeviceClass, m_RenderCaps; | |
179 CGdiDeviceDriver(HDC hDC, int device_class); | |
180 ~CGdiDeviceDriver() override {} | |
181 }; | |
182 | |
183 class CGdiDisplayDriver : public CGdiDeviceDriver { | |
184 public: | |
185 CGdiDisplayDriver(HDC hDC); | |
186 | |
187 protected: | |
188 virtual FX_BOOL GetDIBits(CFX_DIBitmap* pBitmap, | |
189 int left, | |
190 int top, | |
191 void* pIccTransform = NULL, | |
192 FX_BOOL bDEdge = FALSE); | |
193 virtual FX_BOOL SetDIBits(const CFX_DIBSource* pBitmap, | |
194 FX_DWORD color, | |
195 const FX_RECT* pSrcRect, | |
196 int left, | |
197 int top, | |
198 int blend_type, | |
199 int alpha_flag, | |
200 void* pIccTransform); | |
201 virtual FX_BOOL StretchDIBits(const CFX_DIBSource* pBitmap, | |
202 FX_DWORD color, | |
203 int dest_left, | |
204 int dest_top, | |
205 int dest_width, | |
206 int dest_height, | |
207 const FX_RECT* pClipRect, | |
208 FX_DWORD flags, | |
209 int alpha_flag, | |
210 void* pIccTransform, | |
211 int blend_type); | |
212 virtual FX_BOOL StartDIBits(const CFX_DIBSource* pBitmap, | |
213 int bitmap_alpha, | |
214 FX_DWORD color, | |
215 const CFX_Matrix* pMatrix, | |
216 FX_DWORD render_flags, | |
217 void*& handle, | |
218 int alpha_flag, | |
219 void* pIccTransform, | |
220 int blend_type) { | |
221 return FALSE; | |
222 } | |
223 FX_BOOL UseFoxitStretchEngine(const CFX_DIBSource* pSource, | |
224 FX_DWORD color, | |
225 int dest_left, | |
226 int dest_top, | |
227 int dest_width, | |
228 int dest_height, | |
229 const FX_RECT* pClipRect, | |
230 int render_flags, | |
231 int alpha_flag = 0, | |
232 void* pIccTransform = NULL, | |
233 int blend_type = FXDIB_BLEND_NORMAL); | |
234 }; | |
235 class CGdiPrinterDriver : public CGdiDeviceDriver { | |
236 public: | |
237 CGdiPrinterDriver(HDC hDC); | |
238 | |
239 protected: | |
240 virtual int GetDeviceCaps(int caps_id); | |
241 virtual FX_BOOL SetDIBits(const CFX_DIBSource* pBitmap, | |
242 FX_DWORD color, | |
243 const FX_RECT* pSrcRect, | |
244 int left, | |
245 int top, | |
246 int blend_type, | |
247 int alpha_flag, | |
248 void* pIccTransform); | |
249 virtual FX_BOOL StretchDIBits(const CFX_DIBSource* pBitmap, | |
250 FX_DWORD color, | |
251 int dest_left, | |
252 int dest_top, | |
253 int dest_width, | |
254 int dest_height, | |
255 const FX_RECT* pClipRect, | |
256 FX_DWORD flags, | |
257 int alpha_flag, | |
258 void* pIccTransform, | |
259 int blend_type); | |
260 virtual FX_BOOL StartDIBits(const CFX_DIBSource* pBitmap, | |
261 int bitmap_alpha, | |
262 FX_DWORD color, | |
263 const CFX_Matrix* pMatrix, | |
264 FX_DWORD render_flags, | |
265 void*& handle, | |
266 int alpha_flag, | |
267 void* pIccTransform, | |
268 int blend_type); | |
269 int m_HorzSize, m_VertSize; | |
270 FX_BOOL m_bSupportROP; | |
271 }; | |
272 | |
273 class CPSOutput : public IFX_PSOutput { | |
274 public: | |
275 explicit CPSOutput(HDC hDC); | |
276 ~CPSOutput() override; | |
277 | |
278 // IFX_PSOutput | |
279 void Release() override { delete this; } | |
280 void OutputPS(const FX_CHAR* str, int len) override; | |
281 | |
282 void Init(); | |
283 | |
284 HDC m_hDC; | |
285 FX_CHAR* m_pBuf; | |
286 }; | |
287 | |
288 class CPSPrinterDriver : public IFX_RenderDeviceDriver { | |
289 public: | |
290 CPSPrinterDriver(); | |
291 FX_BOOL Init(HDC hDC, int ps_level, FX_BOOL bCmykOutput); | |
292 ~CPSPrinterDriver() override; | |
293 | |
294 protected: | |
295 // IFX_RenderDeviceDriver | |
296 int GetDeviceCaps(int caps_id); | |
297 FX_BOOL IsPSPrintDriver() override { return TRUE; } | |
298 FX_BOOL StartRendering() override; | |
299 void EndRendering() override; | |
300 void SaveState() override; | |
301 void RestoreState(FX_BOOL bKeepSaved = FALSE) override; | |
302 FX_BOOL SetClip_PathFill(const CFX_PathData* pPathData, | |
303 const CFX_Matrix* pObject2Device, | |
304 int fill_mode) override; | |
305 FX_BOOL SetClip_PathStroke(const CFX_PathData* pPathData, | |
306 const CFX_Matrix* pObject2Device, | |
307 const CFX_GraphStateData* pGraphState) override; | |
308 FX_BOOL DrawPath(const CFX_PathData* pPathData, | |
309 const CFX_Matrix* pObject2Device, | |
310 const CFX_GraphStateData* pGraphState, | |
311 FX_DWORD fill_color, | |
312 FX_DWORD stroke_color, | |
313 int fill_mode, | |
314 int alpha_flag, | |
315 void* pIccTransform, | |
316 int blend_type) override; | |
317 FX_BOOL GetClipBox(FX_RECT* pRect) override; | |
318 FX_BOOL SetDIBits(const CFX_DIBSource* pBitmap, | |
319 FX_DWORD color, | |
320 const FX_RECT* pSrcRect, | |
321 int left, | |
322 int top, | |
323 int blend_type, | |
324 int alpha_flag, | |
325 void* pIccTransform) override; | |
326 FX_BOOL StretchDIBits(const CFX_DIBSource* pBitmap, | |
327 FX_DWORD color, | |
328 int dest_left, | |
329 int dest_top, | |
330 int dest_width, | |
331 int dest_height, | |
332 const FX_RECT* pClipRect, | |
333 FX_DWORD flags, | |
334 int alpha_flag, | |
335 void* pIccTransform, | |
336 int blend_type) override; | |
337 FX_BOOL StartDIBits(const CFX_DIBSource* pBitmap, | |
338 int bitmap_alpha, | |
339 FX_DWORD color, | |
340 const CFX_Matrix* pMatrix, | |
341 FX_DWORD render_flags, | |
342 void*& handle, | |
343 int alpha_flag, | |
344 void* pIccTransform, | |
345 int blend_type) override; | |
346 FX_BOOL DrawDeviceText(int nChars, | |
347 const FXTEXT_CHARPOS* pCharPos, | |
348 CFX_Font* pFont, | |
349 CFX_FontCache* pCache, | |
350 const CFX_Matrix* pObject2Device, | |
351 FX_FLOAT font_size, | |
352 FX_DWORD color, | |
353 int alpha_flag, | |
354 void* pIccTransform) override; | |
355 void* GetPlatformSurface() override { return (void*)m_hDC; } | |
356 | |
357 HDC m_hDC; | |
358 FX_BOOL m_bCmykOutput; | |
359 int m_Width, m_Height, m_nBitsPerPixel; | |
360 int m_HorzSize, m_VertSize; | |
361 CPSOutput* m_pPSOutput; | |
362 CFX_PSRenderer m_PSRenderer; | |
363 }; | |
364 void _Color2Argb(FX_ARGB& argb, | |
365 FX_DWORD color, | |
366 int alpha_flag, | |
367 void* pIccTransform); | |
368 | |
369 #endif // CORE_SRC_FXGE_WIN32_WIN32_INT_H_ | |
OLD | NEW |