Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(87)

Side by Side Diff: core/fpdfapi/fpdf_render/fpdf_render_text.cpp

Issue 1832173003: Remove FX_DWORD from core/ and delete definition (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 "core/fpdfapi/fpdf_render/render_int.h" 7 #include "core/fpdfapi/fpdf_render/render_int.h"
8 8
9 #include "core/fpdfapi/fpdf_font/cpdf_cidfont.h" 9 #include "core/fpdfapi/fpdf_font/cpdf_cidfont.h"
10 #include "core/fpdfapi/fpdf_font/cpdf_type3char.h" 10 #include "core/fpdfapi/fpdf_font/cpdf_type3char.h"
(...skipping 11 matching lines...) Expand all
22 #include "core/fpdfapi/fpdf_render/include/cpdf_renderoptions.h" 22 #include "core/fpdfapi/fpdf_render/include/cpdf_renderoptions.h"
23 #include "core/fpdfapi/fpdf_render/include/cpdf_textrenderer.h" 23 #include "core/fpdfapi/fpdf_render/include/cpdf_textrenderer.h"
24 #include "core/include/fxge/fx_ge.h" 24 #include "core/include/fxge/fx_ge.h"
25 25
26 CPDF_Type3Cache::~CPDF_Type3Cache() { 26 CPDF_Type3Cache::~CPDF_Type3Cache() {
27 for (const auto& pair : m_SizeMap) { 27 for (const auto& pair : m_SizeMap) {
28 delete pair.second; 28 delete pair.second;
29 } 29 }
30 m_SizeMap.clear(); 30 m_SizeMap.clear();
31 } 31 }
32 CFX_GlyphBitmap* CPDF_Type3Cache::LoadGlyph(FX_DWORD charcode, 32 CFX_GlyphBitmap* CPDF_Type3Cache::LoadGlyph(uint32_t charcode,
33 const CFX_Matrix* pMatrix, 33 const CFX_Matrix* pMatrix,
34 FX_FLOAT retinaScaleX, 34 FX_FLOAT retinaScaleX,
35 FX_FLOAT retinaScaleY) { 35 FX_FLOAT retinaScaleY) {
36 _CPDF_UniqueKeyGen keygen; 36 _CPDF_UniqueKeyGen keygen;
37 keygen.Generate( 37 keygen.Generate(
38 4, FXSYS_round(pMatrix->a * 10000), FXSYS_round(pMatrix->b * 10000), 38 4, FXSYS_round(pMatrix->a * 10000), FXSYS_round(pMatrix->b * 10000),
39 FXSYS_round(pMatrix->c * 10000), FXSYS_round(pMatrix->d * 10000)); 39 FXSYS_round(pMatrix->c * 10000), FXSYS_round(pMatrix->d * 10000));
40 CFX_ByteStringC FaceGlyphsKey(keygen.m_Key, keygen.m_KeyLen); 40 CFX_ByteStringC FaceGlyphsKey(keygen.m_Key, keygen.m_KeyLen);
41 CPDF_Type3Glyphs* pSizeCache; 41 CPDF_Type3Glyphs* pSizeCache;
42 auto it = m_SizeMap.find(FaceGlyphsKey); 42 auto it = m_SizeMap.find(FaceGlyphsKey);
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
123 } else { 123 } else {
124 if (_IsScanLine8bpp(pBuf + line * pitch, width)) { 124 if (_IsScanLine8bpp(pBuf + line * pitch, width)) {
125 return line; 125 return line;
126 } 126 }
127 } 127 }
128 line += line_step; 128 line += line_step;
129 } 129 }
130 return -1; 130 return -1;
131 } 131 }
132 CFX_GlyphBitmap* CPDF_Type3Cache::RenderGlyph(CPDF_Type3Glyphs* pSize, 132 CFX_GlyphBitmap* CPDF_Type3Cache::RenderGlyph(CPDF_Type3Glyphs* pSize,
133 FX_DWORD charcode, 133 uint32_t charcode,
134 const CFX_Matrix* pMatrix, 134 const CFX_Matrix* pMatrix,
135 FX_FLOAT retinaScaleX, 135 FX_FLOAT retinaScaleX,
136 FX_FLOAT retinaScaleY) { 136 FX_FLOAT retinaScaleY) {
137 const CPDF_Type3Char* pChar = m_pFont->LoadChar(charcode); 137 const CPDF_Type3Char* pChar = m_pFont->LoadChar(charcode);
138 if (!pChar || !pChar->m_pBitmap) 138 if (!pChar || !pChar->m_pBitmap)
139 return nullptr; 139 return nullptr;
140 140
141 CFX_DIBitmap* pBitmap = pChar->m_pBitmap; 141 CFX_DIBitmap* pBitmap = pChar->m_pBitmap;
142 CFX_Matrix image_matrix, text_matrix; 142 CFX_Matrix image_matrix, text_matrix;
143 image_matrix = pChar->m_ImageMatrix; 143 image_matrix = pChar->m_ImageMatrix;
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
185 pGlyph->m_Top = -top; 185 pGlyph->m_Top = -top;
186 pGlyph->m_Bitmap.TakeOver(pResBitmap); 186 pGlyph->m_Bitmap.TakeOver(pResBitmap);
187 delete pResBitmap; 187 delete pResBitmap;
188 return pGlyph; 188 return pGlyph;
189 } 189 }
190 void _CPDF_UniqueKeyGen::Generate(int count, ...) { 190 void _CPDF_UniqueKeyGen::Generate(int count, ...) {
191 va_list argList; 191 va_list argList;
192 va_start(argList, count); 192 va_start(argList, count);
193 for (int i = 0; i < count; i++) { 193 for (int i = 0; i < count; i++) {
194 int p = va_arg(argList, int); 194 int p = va_arg(argList, int);
195 ((FX_DWORD*)m_Key)[i] = p; 195 ((uint32_t*)m_Key)[i] = p;
196 } 196 }
197 va_end(argList); 197 va_end(argList);
198 m_KeyLen = count * sizeof(FX_DWORD); 198 m_KeyLen = count * sizeof(uint32_t);
199 } 199 }
200 FX_BOOL CPDF_RenderStatus::ProcessText(const CPDF_TextObject* textobj, 200 FX_BOOL CPDF_RenderStatus::ProcessText(const CPDF_TextObject* textobj,
201 const CFX_Matrix* pObj2Device, 201 const CFX_Matrix* pObj2Device,
202 CFX_PathData* pClippingPath) { 202 CFX_PathData* pClippingPath) {
203 if (textobj->m_nChars == 0) { 203 if (textobj->m_nChars == 0) {
204 return TRUE; 204 return TRUE;
205 } 205 }
206 int text_render_mode = textobj->m_TextState.GetObject()->m_TextMode; 206 int text_render_mode = textobj->m_TextState.GetObject()->m_TextMode;
207 if (text_render_mode == 3) { 207 if (text_render_mode == 3) {
208 return TRUE; 208 return TRUE;
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
327 public: 327 public:
328 CPDF_RefType3Cache(CPDF_Type3Font* pType3Font) { 328 CPDF_RefType3Cache(CPDF_Type3Font* pType3Font) {
329 m_dwCount = 0; 329 m_dwCount = 0;
330 m_pType3Font = pType3Font; 330 m_pType3Font = pType3Font;
331 } 331 }
332 ~CPDF_RefType3Cache() { 332 ~CPDF_RefType3Cache() {
333 while (m_dwCount--) { 333 while (m_dwCount--) {
334 ReleaseCachedType3(m_pType3Font); 334 ReleaseCachedType3(m_pType3Font);
335 } 335 }
336 } 336 }
337 FX_DWORD m_dwCount; 337 uint32_t m_dwCount;
338 CPDF_Type3Font* m_pType3Font; 338 CPDF_Type3Font* m_pType3Font;
339 }; 339 };
340 FX_BOOL CPDF_RenderStatus::ProcessType3Text(const CPDF_TextObject* textobj, 340 FX_BOOL CPDF_RenderStatus::ProcessType3Text(const CPDF_TextObject* textobj,
341 const CFX_Matrix* pObj2Device) { 341 const CFX_Matrix* pObj2Device) {
342 CPDF_Type3Font* pType3Font = textobj->m_TextState.GetFont()->AsType3Font(); 342 CPDF_Type3Font* pType3Font = textobj->m_TextState.GetFont()->AsType3Font();
343 for (int j = 0; j < m_Type3FontCache.GetSize(); j++) { 343 for (int j = 0; j < m_Type3FontCache.GetSize(); j++) {
344 if (m_Type3FontCache.GetAt(j) == pType3Font) 344 if (m_Type3FontCache.GetAt(j) == pType3Font)
345 return TRUE; 345 return TRUE;
346 } 346 }
347 CFX_Matrix dCTM = m_pDevice->GetCTM(); 347 CFX_Matrix dCTM = m_pDevice->GetCTM();
348 FX_FLOAT sa = FXSYS_fabs(dCTM.a); 348 FX_FLOAT sa = FXSYS_fabs(dCTM.a);
349 FX_FLOAT sd = FXSYS_fabs(dCTM.d); 349 FX_FLOAT sd = FXSYS_fabs(dCTM.d);
350 CFX_Matrix text_matrix; 350 CFX_Matrix text_matrix;
351 textobj->GetTextMatrix(&text_matrix); 351 textobj->GetTextMatrix(&text_matrix);
352 CFX_Matrix char_matrix = pType3Font->GetFontMatrix(); 352 CFX_Matrix char_matrix = pType3Font->GetFontMatrix();
353 FX_FLOAT font_size = textobj->m_TextState.GetFontSize(); 353 FX_FLOAT font_size = textobj->m_TextState.GetFontSize();
354 char_matrix.Scale(font_size, font_size); 354 char_matrix.Scale(font_size, font_size);
355 FX_ARGB fill_argb = GetFillArgb(textobj, TRUE); 355 FX_ARGB fill_argb = GetFillArgb(textobj, TRUE);
356 int fill_alpha = FXARGB_A(fill_argb); 356 int fill_alpha = FXARGB_A(fill_argb);
357 int device_class = m_pDevice->GetDeviceClass(); 357 int device_class = m_pDevice->GetDeviceClass();
358 FXTEXT_GLYPHPOS* pGlyphAndPos = NULL; 358 FXTEXT_GLYPHPOS* pGlyphAndPos = NULL;
359 if (device_class == FXDC_DISPLAY) { 359 if (device_class == FXDC_DISPLAY) {
360 pGlyphAndPos = FX_Alloc(FXTEXT_GLYPHPOS, textobj->m_nChars); 360 pGlyphAndPos = FX_Alloc(FXTEXT_GLYPHPOS, textobj->m_nChars);
361 } else if (fill_alpha < 255) { 361 } else if (fill_alpha < 255) {
362 return FALSE; 362 return FALSE;
363 } 363 }
364 CPDF_RefType3Cache refTypeCache(pType3Font); 364 CPDF_RefType3Cache refTypeCache(pType3Font);
365 FX_DWORD* pChars = textobj->m_pCharCodes; 365 uint32_t* pChars = textobj->m_pCharCodes;
366 if (textobj->m_nChars == 1) { 366 if (textobj->m_nChars == 1) {
367 pChars = (FX_DWORD*)(&textobj->m_pCharCodes); 367 pChars = (uint32_t*)(&textobj->m_pCharCodes);
368 } 368 }
369 for (int iChar = 0; iChar < textobj->m_nChars; iChar++) { 369 for (int iChar = 0; iChar < textobj->m_nChars; iChar++) {
370 FX_DWORD charcode = pChars[iChar]; 370 uint32_t charcode = pChars[iChar];
371 if (charcode == (FX_DWORD)-1) { 371 if (charcode == (uint32_t)-1) {
372 continue; 372 continue;
373 } 373 }
374 CPDF_Type3Char* pType3Char = pType3Font->LoadChar(charcode); 374 CPDF_Type3Char* pType3Char = pType3Font->LoadChar(charcode);
375 if (!pType3Char) { 375 if (!pType3Char) {
376 continue; 376 continue;
377 } 377 }
378 CFX_Matrix matrix = char_matrix; 378 CFX_Matrix matrix = char_matrix;
379 matrix.e += iChar ? textobj->m_pCharPos[iChar - 1] : 0; 379 matrix.e += iChar ? textobj->m_pCharPos[iChar - 1] : 0;
380 matrix.Concat(text_matrix); 380 matrix.Concat(text_matrix);
381 matrix.Concat(*pObj2Device); 381 matrix.Concat(*pObj2Device);
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
494 m_pDevice->SetBitMask(&bitmap, rect.left, rect.top, fill_argb); 494 m_pDevice->SetBitMask(&bitmap, rect.left, rect.top, fill_argb);
495 FX_Free(pGlyphAndPos); 495 FX_Free(pGlyphAndPos);
496 } 496 }
497 return TRUE; 497 return TRUE;
498 } 498 }
499 class CPDF_CharPosList { 499 class CPDF_CharPosList {
500 public: 500 public:
501 CPDF_CharPosList(); 501 CPDF_CharPosList();
502 ~CPDF_CharPosList(); 502 ~CPDF_CharPosList();
503 void Load(int nChars, 503 void Load(int nChars,
504 FX_DWORD* pCharCodes, 504 uint32_t* pCharCodes,
505 FX_FLOAT* pCharPos, 505 FX_FLOAT* pCharPos,
506 CPDF_Font* pFont, 506 CPDF_Font* pFont,
507 FX_FLOAT font_size); 507 FX_FLOAT font_size);
508 FXTEXT_CHARPOS* m_pCharPos; 508 FXTEXT_CHARPOS* m_pCharPos;
509 FX_DWORD m_nChars; 509 uint32_t m_nChars;
510 }; 510 };
511 511
512 CPDF_CharPosList::CPDF_CharPosList() { 512 CPDF_CharPosList::CPDF_CharPosList() {
513 m_pCharPos = NULL; 513 m_pCharPos = NULL;
514 } 514 }
515 CPDF_CharPosList::~CPDF_CharPosList() { 515 CPDF_CharPosList::~CPDF_CharPosList() {
516 FX_Free(m_pCharPos); 516 FX_Free(m_pCharPos);
517 } 517 }
518 void CPDF_CharPosList::Load(int nChars, 518 void CPDF_CharPosList::Load(int nChars,
519 FX_DWORD* pCharCodes, 519 uint32_t* pCharCodes,
520 FX_FLOAT* pCharPos, 520 FX_FLOAT* pCharPos,
521 CPDF_Font* pFont, 521 CPDF_Font* pFont,
522 FX_FLOAT FontSize) { 522 FX_FLOAT FontSize) {
523 m_pCharPos = FX_Alloc(FXTEXT_CHARPOS, nChars); 523 m_pCharPos = FX_Alloc(FXTEXT_CHARPOS, nChars);
524 m_nChars = 0; 524 m_nChars = 0;
525 CPDF_CIDFont* pCIDFont = pFont->AsCIDFont(); 525 CPDF_CIDFont* pCIDFont = pFont->AsCIDFont();
526 FX_BOOL bVertWriting = pCIDFont && pCIDFont->IsVertWriting(); 526 FX_BOOL bVertWriting = pCIDFont && pCIDFont->IsVertWriting();
527 for (int iChar = 0; iChar < nChars; iChar++) { 527 for (int iChar = 0; iChar < nChars; iChar++) {
528 FX_DWORD CharCode = 528 uint32_t CharCode =
529 nChars == 1 ? (FX_DWORD)(uintptr_t)pCharCodes : pCharCodes[iChar]; 529 nChars == 1 ? (uint32_t)(uintptr_t)pCharCodes : pCharCodes[iChar];
530 if (CharCode == (FX_DWORD)-1) { 530 if (CharCode == (uint32_t)-1) {
531 continue; 531 continue;
532 } 532 }
533 FX_BOOL bVert = FALSE; 533 FX_BOOL bVert = FALSE;
534 FXTEXT_CHARPOS& charpos = m_pCharPos[m_nChars++]; 534 FXTEXT_CHARPOS& charpos = m_pCharPos[m_nChars++];
535 if (pCIDFont) { 535 if (pCIDFont) {
536 charpos.m_bFontStyle = pCIDFont->IsFontStyleFromCharCode(CharCode); 536 charpos.m_bFontStyle = pCIDFont->IsFontStyleFromCharCode(CharCode);
537 } 537 }
538 charpos.m_GlyphIndex = pFont->GlyphFromCharCode(CharCode, &bVert); 538 charpos.m_GlyphIndex = pFont->GlyphFromCharCode(CharCode, &bVert);
539 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ 539 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
540 charpos.m_ExtGID = pFont->GlyphFromCharCodeExt(CharCode); 540 charpos.m_ExtGID = pFont->GlyphFromCharCodeExt(CharCode);
(...skipping 27 matching lines...) Expand all
568 charpos.m_OriginX += 568 charpos.m_OriginX +=
569 pCIDFont->CIDTransformToFloat(pTransform[4]) * FontSize; 569 pCIDFont->CIDTransformToFloat(pTransform[4]) * FontSize;
570 charpos.m_OriginY += 570 charpos.m_OriginY +=
571 pCIDFont->CIDTransformToFloat(pTransform[5]) * FontSize; 571 pCIDFont->CIDTransformToFloat(pTransform[5]) * FontSize;
572 charpos.m_bGlyphAdjust = TRUE; 572 charpos.m_bGlyphAdjust = TRUE;
573 } 573 }
574 } 574 }
575 } 575 }
576 FX_BOOL CPDF_TextRenderer::DrawTextPath(CFX_RenderDevice* pDevice, 576 FX_BOOL CPDF_TextRenderer::DrawTextPath(CFX_RenderDevice* pDevice,
577 int nChars, 577 int nChars,
578 FX_DWORD* pCharCodes, 578 uint32_t* pCharCodes,
579 FX_FLOAT* pCharPos, 579 FX_FLOAT* pCharPos,
580 CPDF_Font* pFont, 580 CPDF_Font* pFont,
581 FX_FLOAT font_size, 581 FX_FLOAT font_size,
582 const CFX_Matrix* pText2User, 582 const CFX_Matrix* pText2User,
583 const CFX_Matrix* pUser2Device, 583 const CFX_Matrix* pUser2Device,
584 const CFX_GraphStateData* pGraphState, 584 const CFX_GraphStateData* pGraphState,
585 FX_ARGB fill_argb, 585 FX_ARGB fill_argb,
586 FX_ARGB stroke_argb, 586 FX_ARGB stroke_argb,
587 CFX_PathData* pClippingPath, 587 CFX_PathData* pClippingPath,
588 int nFlag) { 588 int nFlag) {
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
622 const CFX_Matrix* pMatrix, 622 const CFX_Matrix* pMatrix,
623 const CFX_ByteString& str, 623 const CFX_ByteString& str,
624 FX_ARGB fill_argb, 624 FX_ARGB fill_argb,
625 FX_ARGB stroke_argb, 625 FX_ARGB stroke_argb,
626 const CFX_GraphStateData* pGraphState, 626 const CFX_GraphStateData* pGraphState,
627 const CPDF_RenderOptions* pOptions) { 627 const CPDF_RenderOptions* pOptions) {
628 int nChars = pFont->CountChar(str, str.GetLength()); 628 int nChars = pFont->CountChar(str, str.GetLength());
629 if (nChars == 0) { 629 if (nChars == 0) {
630 return; 630 return;
631 } 631 }
632 FX_DWORD charcode; 632 uint32_t charcode;
633 int offset = 0; 633 int offset = 0;
634 FX_DWORD* pCharCodes; 634 uint32_t* pCharCodes;
635 FX_FLOAT* pCharPos; 635 FX_FLOAT* pCharPos;
636 if (nChars == 1) { 636 if (nChars == 1) {
637 charcode = pFont->GetNextChar(str, str.GetLength(), offset); 637 charcode = pFont->GetNextChar(str, str.GetLength(), offset);
638 pCharCodes = (FX_DWORD*)(uintptr_t)charcode; 638 pCharCodes = (uint32_t*)(uintptr_t)charcode;
639 pCharPos = NULL; 639 pCharPos = NULL;
640 } else { 640 } else {
641 pCharCodes = FX_Alloc(FX_DWORD, nChars); 641 pCharCodes = FX_Alloc(uint32_t, nChars);
642 pCharPos = FX_Alloc(FX_FLOAT, nChars - 1); 642 pCharPos = FX_Alloc(FX_FLOAT, nChars - 1);
643 FX_FLOAT cur_pos = 0; 643 FX_FLOAT cur_pos = 0;
644 for (int i = 0; i < nChars; i++) { 644 for (int i = 0; i < nChars; i++) {
645 pCharCodes[i] = pFont->GetNextChar(str, str.GetLength(), offset); 645 pCharCodes[i] = pFont->GetNextChar(str, str.GetLength(), offset);
646 if (i) { 646 if (i) {
647 pCharPos[i - 1] = cur_pos; 647 pCharPos[i - 1] = cur_pos;
648 } 648 }
649 cur_pos += pFont->GetCharWidthF(pCharCodes[i]) * font_size / 1000; 649 cur_pos += pFont->GetCharWidthF(pCharCodes[i]) * font_size / 1000;
650 } 650 }
651 } 651 }
(...skipping 14 matching lines...) Expand all
666 } 666 }
667 } 667 }
668 668
669 if (nChars > 1) { 669 if (nChars > 1) {
670 FX_Free(pCharCodes); 670 FX_Free(pCharCodes);
671 FX_Free(pCharPos); 671 FX_Free(pCharPos);
672 } 672 }
673 } 673 }
674 FX_BOOL CPDF_TextRenderer::DrawNormalText(CFX_RenderDevice* pDevice, 674 FX_BOOL CPDF_TextRenderer::DrawNormalText(CFX_RenderDevice* pDevice,
675 int nChars, 675 int nChars,
676 FX_DWORD* pCharCodes, 676 uint32_t* pCharCodes,
677 FX_FLOAT* pCharPos, 677 FX_FLOAT* pCharPos,
678 CPDF_Font* pFont, 678 CPDF_Font* pFont,
679 FX_FLOAT font_size, 679 FX_FLOAT font_size,
680 const CFX_Matrix* pText2Device, 680 const CFX_Matrix* pText2Device,
681 FX_ARGB fill_argb, 681 FX_ARGB fill_argb,
682 const CPDF_RenderOptions* pOptions) { 682 const CPDF_RenderOptions* pOptions) {
683 CFX_FontCache* pCache = 683 CFX_FontCache* pCache =
684 pFont->m_pDocument ? pFont->m_pDocument->GetRenderData()->GetFontCache() 684 pFont->m_pDocument ? pFont->m_pDocument->GetRenderData()->GetFontCache()
685 : NULL; 685 : NULL;
686 CPDF_CharPosList CharPosList; 686 CPDF_CharPosList CharPosList;
687 CharPosList.Load(nChars, pCharCodes, pCharPos, pFont, font_size); 687 CharPosList.Load(nChars, pCharCodes, pCharPos, pFont, font_size);
688 int FXGE_flags = 0; 688 int FXGE_flags = 0;
689 if (pOptions) { 689 if (pOptions) {
690 FX_DWORD dwFlags = pOptions->m_Flags; 690 uint32_t dwFlags = pOptions->m_Flags;
691 if (dwFlags & RENDER_CLEARTYPE) { 691 if (dwFlags & RENDER_CLEARTYPE) {
692 FXGE_flags |= FXTEXT_CLEARTYPE; 692 FXGE_flags |= FXTEXT_CLEARTYPE;
693 if (dwFlags & RENDER_BGR_STRIPE) { 693 if (dwFlags & RENDER_BGR_STRIPE) {
694 FXGE_flags |= FXTEXT_BGR_STRIPE; 694 FXGE_flags |= FXTEXT_BGR_STRIPE;
695 } 695 }
696 } 696 }
697 if (dwFlags & RENDER_NOTEXTSMOOTH) { 697 if (dwFlags & RENDER_NOTEXTSMOOTH) {
698 FXGE_flags |= FXTEXT_NOSMOOTH; 698 FXGE_flags |= FXTEXT_NOSMOOTH;
699 } 699 }
700 if (dwFlags & RENDER_PRINTGRAPHICTEXT) { 700 if (dwFlags & RENDER_PRINTGRAPHICTEXT) {
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
743 if (pFont->m_pDocument) { 743 if (pFont->m_pDocument) {
744 pCache = pFont->m_pDocument->GetRenderData()->GetFontCache(); 744 pCache = pFont->m_pDocument->GetRenderData()->GetFontCache();
745 } else { 745 } else {
746 pCache = CFX_GEModule::Get()->GetFontCache(); 746 pCache = CFX_GEModule::Get()->GetFontCache();
747 } 747 }
748 CFX_FaceCache* pFaceCache = pCache->GetCachedFace(&pFont->m_Font); 748 CFX_FaceCache* pFaceCache = pCache->GetCachedFace(&pFont->m_Font);
749 FX_FONTCACHE_DEFINE(pCache, &pFont->m_Font); 749 FX_FONTCACHE_DEFINE(pCache, &pFont->m_Font);
750 CPDF_CharPosList CharPosList; 750 CPDF_CharPosList CharPosList;
751 CharPosList.Load(textobj->m_nChars, textobj->m_pCharCodes, 751 CharPosList.Load(textobj->m_nChars, textobj->m_pCharCodes,
752 textobj->m_pCharPos, pFont, font_size); 752 textobj->m_pCharPos, pFont, font_size);
753 for (FX_DWORD i = 0; i < CharPosList.m_nChars; i++) { 753 for (uint32_t i = 0; i < CharPosList.m_nChars; i++) {
754 FXTEXT_CHARPOS& charpos = CharPosList.m_pCharPos[i]; 754 FXTEXT_CHARPOS& charpos = CharPosList.m_pCharPos[i];
755 const CFX_PathData* pPath = pFaceCache->LoadGlyphPath( 755 const CFX_PathData* pPath = pFaceCache->LoadGlyphPath(
756 &pFont->m_Font, charpos.m_GlyphIndex, charpos.m_FontCharWidth); 756 &pFont->m_Font, charpos.m_GlyphIndex, charpos.m_FontCharWidth);
757 if (!pPath) { 757 if (!pPath) {
758 continue; 758 continue;
759 } 759 }
760 CPDF_PathObject path; 760 CPDF_PathObject path;
761 path.m_GraphState = textobj->m_GraphState; 761 path.m_GraphState = textobj->m_GraphState;
762 path.m_ColorState = textobj->m_ColorState; 762 path.m_ColorState = textobj->m_ColorState;
763 CFX_Matrix matrix; 763 CFX_Matrix matrix;
764 if (charpos.m_bGlyphAdjust) 764 if (charpos.m_bGlyphAdjust)
765 matrix.Set(charpos.m_AdjustMatrix[0], charpos.m_AdjustMatrix[1], 765 matrix.Set(charpos.m_AdjustMatrix[0], charpos.m_AdjustMatrix[1],
766 charpos.m_AdjustMatrix[2], charpos.m_AdjustMatrix[3], 0, 0); 766 charpos.m_AdjustMatrix[2], charpos.m_AdjustMatrix[3], 0, 0);
767 matrix.Concat(font_size, 0, 0, font_size, charpos.m_OriginX, 767 matrix.Concat(font_size, 0, 0, font_size, charpos.m_OriginX,
768 charpos.m_OriginY); 768 charpos.m_OriginY);
769 path.m_Path.New()->Append(pPath, &matrix); 769 path.m_Path.New()->Append(pPath, &matrix);
770 path.m_Matrix = *pTextMatrix; 770 path.m_Matrix = *pTextMatrix;
771 path.m_bStroke = bStroke; 771 path.m_bStroke = bStroke;
772 path.m_FillType = bFill ? FXFILL_WINDING : 0; 772 path.m_FillType = bFill ? FXFILL_WINDING : 0;
773 path.CalcBoundingBox(); 773 path.CalcBoundingBox();
774 ProcessPath(&path, pObj2Device); 774 ProcessPath(&path, pObj2Device);
775 } 775 }
776 } 776 }
OLDNEW
« no previous file with comments | « core/fpdfapi/fpdf_render/fpdf_render_pattern.cpp ('k') | core/fpdfapi/fpdf_render/include/cpdf_progressiverenderer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698