OLD | NEW |
1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
6 | 6 |
7 #include "../../../include/fxge/fx_ge.h" | 7 #include "../../../include/fxge/fx_ge.h" |
8 #if _FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN64_DESKTOP_ | 8 #if _FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN64_DESKTOP_ |
9 #include "../../../include/fxge/fx_ge_win32.h" | 9 #include "../../../include/fxge/fx_ge_win32.h" |
10 #include "dwrite_int.h" | 10 #include "dwrite_int.h" |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
126 } | 126 } |
127 CDWriteExt::~CDWriteExt() | 127 CDWriteExt::~CDWriteExt() |
128 { | 128 { |
129 Unload(); | 129 Unload(); |
130 } | 130 } |
131 LPVOID CDWriteExt::DwCreateFontFaceFromStream(uint8_t* pData, FX_DWORD size, in
t simulation_style) | 131 LPVOID CDWriteExt::DwCreateFontFaceFromStream(uint8_t* pData, FX_DWORD size, in
t simulation_style) |
132 { | 132 { |
133 IDWriteFactory* pDwFactory = (IDWriteFactory*)m_pDWriteFactory; | 133 IDWriteFactory* pDwFactory = (IDWriteFactory*)m_pDWriteFactory; |
134 IDWriteFontFile* pDwFontFile = NULL; | 134 IDWriteFontFile* pDwFontFile = NULL; |
135 IDWriteFontFace* pDwFontFace = NULL; | 135 IDWriteFontFace* pDwFontFace = NULL; |
136 BOOL isSupportedFontType = FALSE; | 136 BOOL isSupportedFontType = false; |
137 DWRITE_FONT_FILE_TYPE fontFileType; | 137 DWRITE_FONT_FILE_TYPE fontFileType; |
138 DWRITE_FONT_FACE_TYPE fontFaceType; | 138 DWRITE_FONT_FACE_TYPE fontFaceType; |
139 UINT32 numberOfFaces; | 139 UINT32 numberOfFaces; |
140 DWRITE_FONT_SIMULATIONS fontStyle = (DWRITE_FONT_SIMULATIONS)(simulation_sty
le & 3); | 140 DWRITE_FONT_SIMULATIONS fontStyle = (DWRITE_FONT_SIMULATIONS)(simulation_sty
le & 3); |
141 HRESULT hr = S_OK; | 141 HRESULT hr = S_OK; |
142 hr = pDwFactory->CreateCustomFontFileReference( | 142 hr = pDwFactory->CreateCustomFontFileReference( |
143 (void const*)pData, | 143 (void const*)pData, |
144 (UINT32)size, | 144 (UINT32)size, |
145 CDwFontFileLoader::GetLoader(), | 145 CDwFontFileLoader::GetLoader(), |
146 &pDwFontFile | 146 &pDwFontFile |
(...skipping 20 matching lines...) Expand all Loading... |
167 ); | 167 ); |
168 if (FAILED(hr)) { | 168 if (FAILED(hr)) { |
169 goto failed; | 169 goto failed; |
170 } | 170 } |
171 SafeRelease(&pDwFontFile); | 171 SafeRelease(&pDwFontFile); |
172 return pDwFontFace; | 172 return pDwFontFace; |
173 failed: | 173 failed: |
174 SafeRelease(&pDwFontFile); | 174 SafeRelease(&pDwFontFile); |
175 return NULL; | 175 return NULL; |
176 } | 176 } |
177 FX_BOOL CDWriteExt::DwCreateRenderingTarget(CFX_DIBitmap* pBitmap, void** render
Target) | 177 bool CDWriteExt::DwCreateRenderingTarget(CFX_DIBitmap* pBitmap, void** renderTar
get) |
178 { | 178 { |
179 if (pBitmap->GetFormat() > FXDIB_Argb) { | 179 if (pBitmap->GetFormat() > FXDIB_Argb) { |
180 return FALSE; | 180 return false; |
181 } | 181 } |
182 IDWriteFactory* pDwFactory = (IDWriteFactory*)m_pDWriteFactory; | 182 IDWriteFactory* pDwFactory = (IDWriteFactory*)m_pDWriteFactory; |
183 IDWriteGdiInterop* pGdiInterop = NULL; | 183 IDWriteGdiInterop* pGdiInterop = NULL; |
184 IDWriteBitmapRenderTarget* pBitmapRenderTarget = NULL; | 184 IDWriteBitmapRenderTarget* pBitmapRenderTarget = NULL; |
185 IDWriteRenderingParams* pRenderingParams = NULL; | 185 IDWriteRenderingParams* pRenderingParams = NULL; |
186 HRESULT hr = S_OK; | 186 HRESULT hr = S_OK; |
187 hr = pDwFactory->GetGdiInterop(&pGdiInterop); | 187 hr = pDwFactory->GetGdiInterop(&pGdiInterop); |
188 if (FAILED(hr)) { | 188 if (FAILED(hr)) { |
189 goto failed; | 189 goto failed; |
190 } | 190 } |
(...skipping 14 matching lines...) Expand all Loading... |
205 goto failed; | 205 goto failed; |
206 } | 206 } |
207 hr = pBitmapRenderTarget->SetPixelsPerDip(1.0f); | 207 hr = pBitmapRenderTarget->SetPixelsPerDip(1.0f); |
208 if (FAILED(hr)) { | 208 if (FAILED(hr)) { |
209 goto failed; | 209 goto failed; |
210 } | 210 } |
211 *(CDwGdiTextRenderer**)renderTarget = new CDwGdiTextRenderer(pBitmap, pBitma
pRenderTarget, pRenderingParams); | 211 *(CDwGdiTextRenderer**)renderTarget = new CDwGdiTextRenderer(pBitmap, pBitma
pRenderTarget, pRenderingParams); |
212 SafeRelease(&pGdiInterop); | 212 SafeRelease(&pGdiInterop); |
213 SafeRelease(&pBitmapRenderTarget); | 213 SafeRelease(&pBitmapRenderTarget); |
214 SafeRelease(&pRenderingParams); | 214 SafeRelease(&pRenderingParams); |
215 return TRUE; | 215 return true; |
216 failed: | 216 failed: |
217 SafeRelease(&pGdiInterop); | 217 SafeRelease(&pGdiInterop); |
218 SafeRelease(&pBitmapRenderTarget); | 218 SafeRelease(&pBitmapRenderTarget); |
219 SafeRelease(&pRenderingParams); | 219 SafeRelease(&pRenderingParams); |
220 return FALSE; | 220 return false; |
221 } | 221 } |
222 FX_BOOL»CDWriteExt::DwRendingString(void* renderTarget, CFX_ClipRgn* pClipRgn, F
X_RECT& stringRect, CFX_AffineMatrix* pMatrix, | 222 bool» CDWriteExt::DwRendingString(void* renderTarget, CFX_ClipRgn* pClipRgn, F
X_RECT& stringRect, CFX_AffineMatrix* pMatrix, |
223 void *font, FX_FLOAT font_size, FX_ARGB text
_color, | 223 void *font, FX_FLOAT font_size, FX_ARGB text
_color, |
224 int glyph_count, unsigned short* glyph_indic
es, | 224 int glyph_count, unsigned short* glyph_indic
es, |
225 FX_FLOAT baselineOriginX, FX_FLOAT baselineO
riginY, | 225 FX_FLOAT baselineOriginX, FX_FLOAT baselineO
riginY, |
226 void* glyph_offsets, | 226 void* glyph_offsets, |
227 FX_FLOAT* glyph_advances) | 227 FX_FLOAT* glyph_advances) |
228 { | 228 { |
229 if (renderTarget == NULL) { | 229 if (renderTarget == NULL) { |
230 return TRUE; | 230 return true; |
231 } | 231 } |
232 CDwGdiTextRenderer* pTextRenderer = (CDwGdiTextRenderer*)renderTarget; | 232 CDwGdiTextRenderer* pTextRenderer = (CDwGdiTextRenderer*)renderTarget; |
233 DWRITE_MATRIX transform; | 233 DWRITE_MATRIX transform; |
234 DWRITE_GLYPH_RUN glyphRun; | 234 DWRITE_GLYPH_RUN glyphRun; |
235 HRESULT hr = S_OK; | 235 HRESULT hr = S_OK; |
236 if (pMatrix) { | 236 if (pMatrix) { |
237 transform.m11 = pMatrix->a; | 237 transform.m11 = pMatrix->a; |
238 transform.m12 = pMatrix->b; | 238 transform.m12 = pMatrix->b; |
239 transform.m21 = pMatrix->c; | 239 transform.m21 = pMatrix->c; |
240 transform.m22 = pMatrix->d; | 240 transform.m22 = pMatrix->d; |
241 transform.dx = pMatrix->e; | 241 transform.dx = pMatrix->e; |
242 transform.dy = pMatrix->f; | 242 transform.dy = pMatrix->f; |
243 } | 243 } |
244 glyphRun.fontFace = (IDWriteFontFace*)font; | 244 glyphRun.fontFace = (IDWriteFontFace*)font; |
245 glyphRun.fontEmSize = font_size; | 245 glyphRun.fontEmSize = font_size; |
246 glyphRun.glyphCount = glyph_count; | 246 glyphRun.glyphCount = glyph_count; |
247 glyphRun.glyphIndices = glyph_indices; | 247 glyphRun.glyphIndices = glyph_indices; |
248 glyphRun.glyphAdvances = glyph_advances; | 248 glyphRun.glyphAdvances = glyph_advances; |
249 glyphRun.glyphOffsets = (DWRITE_GLYPH_OFFSET*)glyph_offsets; | 249 glyphRun.glyphOffsets = (DWRITE_GLYPH_OFFSET*)glyph_offsets; |
250 glyphRun.isSideways = FALSE; | 250 glyphRun.isSideways = false; |
251 glyphRun.bidiLevel = 0; | 251 glyphRun.bidiLevel = 0; |
252 hr = pTextRenderer->DrawGlyphRun( | 252 hr = pTextRenderer->DrawGlyphRun( |
253 stringRect, | 253 stringRect, |
254 pClipRgn, | 254 pClipRgn, |
255 pMatrix ? &transform : NULL, | 255 pMatrix ? &transform : NULL, |
256 baselineOriginX, baselineOriginY, | 256 baselineOriginX, baselineOriginY, |
257 DWRITE_MEASURING_MODE_NATURAL, | 257 DWRITE_MEASURING_MODE_NATURAL, |
258 &glyphRun, | 258 &glyphRun, |
259 RGB(FXARGB_R(text_color), FXARGB_G(text_color), FXARGB_B(text_color
)) | 259 RGB(FXARGB_R(text_color), FXARGB_G(text_color), FXARGB_B(text_color
)) |
260 ); | 260 ); |
261 return SUCCEEDED(hr) ? TRUE : FALSE; | 261 return SUCCEEDED(hr) ? true : false; |
262 } | 262 } |
263 void CDWriteExt::DwDeleteRenderingTarget(void* renderTarget) | 263 void CDWriteExt::DwDeleteRenderingTarget(void* renderTarget) |
264 { | 264 { |
265 delete (CDwGdiTextRenderer*)renderTarget; | 265 delete (CDwGdiTextRenderer*)renderTarget; |
266 } | 266 } |
267 void CDWriteExt::DwDeleteFont(void* pFont) | 267 void CDWriteExt::DwDeleteFont(void* pFont) |
268 { | 268 { |
269 if (pFont) { | 269 if (pFont) { |
270 SafeRelease((IDWriteFontFace**)&pFont); | 270 SafeRelease((IDWriteFontFace**)&pFont); |
271 } | 271 } |
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
462 text_bbox.Height(), | 462 text_bbox.Height(), |
463 &dib, | 463 &dib, |
464 text_bbox.left, | 464 text_bbox.left, |
465 text_bbox.top, | 465 text_bbox.top, |
466 FXDIB_BLEND_NORMAL, | 466 FXDIB_BLEND_NORMAL, |
467 pClipRgn | 467 pClipRgn |
468 ); | 468 ); |
469 return hr; | 469 return hr; |
470 } | 470 } |
471 #endif | 471 #endif |
OLD | NEW |