| 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 "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_type3char.h" | 9 #include "core/fpdfapi/fpdf_font/cpdf_type3char.h" | 
| 10 #include "core/fpdfapi/fpdf_font/cpdf_type3font.h" | 10 #include "core/fpdfapi/fpdf_font/cpdf_type3font.h" | 
| (...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 201                                       const CPDF_PageObject* pStopObj, | 201                                       const CPDF_PageObject* pStopObj, | 
| 202                                       const CPDF_RenderStatus* pParentState, | 202                                       const CPDF_RenderStatus* pParentState, | 
| 203                                       const CPDF_GraphicStates* pInitialStates, | 203                                       const CPDF_GraphicStates* pInitialStates, | 
| 204                                       const CPDF_RenderOptions* pOptions, | 204                                       const CPDF_RenderOptions* pOptions, | 
| 205                                       int transparency, | 205                                       int transparency, | 
| 206                                       FX_BOOL bDropObjects, | 206                                       FX_BOOL bDropObjects, | 
| 207                                       CPDF_Dictionary* pFormResource, | 207                                       CPDF_Dictionary* pFormResource, | 
| 208                                       FX_BOOL bStdCS, | 208                                       FX_BOOL bStdCS, | 
| 209                                       CPDF_Type3Char* pType3Char, | 209                                       CPDF_Type3Char* pType3Char, | 
| 210                                       FX_ARGB fill_color, | 210                                       FX_ARGB fill_color, | 
| 211                                       FX_DWORD GroupFamily, | 211                                       uint32_t GroupFamily, | 
| 212                                       FX_BOOL bLoadMask) { | 212                                       FX_BOOL bLoadMask) { | 
| 213   m_pContext = pContext; | 213   m_pContext = pContext; | 
| 214   m_pDevice = pDevice; | 214   m_pDevice = pDevice; | 
| 215   m_DitherBits = pDevice->GetDeviceCaps(FXDC_DITHER_BITS); | 215   m_DitherBits = pDevice->GetDeviceCaps(FXDC_DITHER_BITS); | 
| 216   m_bPrint = m_pDevice->GetDeviceClass() != FXDC_DISPLAY; | 216   m_bPrint = m_pDevice->GetDeviceClass() != FXDC_DISPLAY; | 
| 217   if (pDeviceMatrix) { | 217   if (pDeviceMatrix) { | 
| 218     m_DeviceMatrix = *pDeviceMatrix; | 218     m_DeviceMatrix = *pDeviceMatrix; | 
| 219   } | 219   } | 
| 220   m_pStopObj = pStopObj; | 220   m_pStopObj = pStopObj; | 
| 221   if (pOptions) { | 221   if (pOptions) { | 
| (...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 501   return TRUE; | 501   return TRUE; | 
| 502 } | 502 } | 
| 503 FX_BOOL CPDF_RenderStatus::ProcessPath(const CPDF_PathObject* pPathObj, | 503 FX_BOOL CPDF_RenderStatus::ProcessPath(const CPDF_PathObject* pPathObj, | 
| 504                                        const CFX_Matrix* pObj2Device) { | 504                                        const CFX_Matrix* pObj2Device) { | 
| 505   int FillType = pPathObj->m_FillType; | 505   int FillType = pPathObj->m_FillType; | 
| 506   FX_BOOL bStroke = pPathObj->m_bStroke; | 506   FX_BOOL bStroke = pPathObj->m_bStroke; | 
| 507   ProcessPathPattern(pPathObj, pObj2Device, FillType, bStroke); | 507   ProcessPathPattern(pPathObj, pObj2Device, FillType, bStroke); | 
| 508   if (FillType == 0 && !bStroke) { | 508   if (FillType == 0 && !bStroke) { | 
| 509     return TRUE; | 509     return TRUE; | 
| 510   } | 510   } | 
| 511   FX_DWORD fill_argb = 0; | 511   uint32_t fill_argb = 0; | 
| 512   if (FillType) { | 512   if (FillType) { | 
| 513     fill_argb = GetFillArgb(pPathObj); | 513     fill_argb = GetFillArgb(pPathObj); | 
| 514   } | 514   } | 
| 515   FX_DWORD stroke_argb = 0; | 515   uint32_t stroke_argb = 0; | 
| 516   if (bStroke) { | 516   if (bStroke) { | 
| 517     stroke_argb = GetStrokeArgb(pPathObj); | 517     stroke_argb = GetStrokeArgb(pPathObj); | 
| 518   } | 518   } | 
| 519   CFX_Matrix path_matrix = pPathObj->m_Matrix; | 519   CFX_Matrix path_matrix = pPathObj->m_Matrix; | 
| 520   path_matrix.Concat(*pObj2Device); | 520   path_matrix.Concat(*pObj2Device); | 
| 521   if (!IsAvailableMatrix(path_matrix)) { | 521   if (!IsAvailableMatrix(path_matrix)) { | 
| 522     return TRUE; | 522     return TRUE; | 
| 523   } | 523   } | 
| 524   if (FillType && (m_Options.m_Flags & RENDER_RECT_AA)) { | 524   if (FillType && (m_Options.m_Flags & RENDER_RECT_AA)) { | 
| 525     FillType |= FXFILL_RECT_AA; | 525     FillType |= FXFILL_RECT_AA; | 
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 562       (!m_pType3Char->m_bColored || | 562       (!m_pType3Char->m_bColored || | 
| 563        (m_pType3Char->m_bColored && | 563        (m_pType3Char->m_bColored && | 
| 564         (!pColorData || pColorData->m_FillColor.IsNull())))) { | 564         (!pColorData || pColorData->m_FillColor.IsNull())))) { | 
| 565     return m_T3FillColor; | 565     return m_T3FillColor; | 
| 566   } | 566   } | 
| 567   if (!pColorData || pColorData->m_FillColor.IsNull()) { | 567   if (!pColorData || pColorData->m_FillColor.IsNull()) { | 
| 568     pColorData = (CPDF_ColorStateData*)(const CPDF_ColorStateData*) | 568     pColorData = (CPDF_ColorStateData*)(const CPDF_ColorStateData*) | 
| 569                      m_InitialStates.m_ColorState; | 569                      m_InitialStates.m_ColorState; | 
| 570   } | 570   } | 
| 571   FX_COLORREF rgb = pColorData->m_FillRGB; | 571   FX_COLORREF rgb = pColorData->m_FillRGB; | 
| 572   if (rgb == (FX_DWORD)-1) { | 572   if (rgb == (uint32_t)-1) { | 
| 573     return 0; | 573     return 0; | 
| 574   } | 574   } | 
| 575   const CPDF_GeneralStateData* pGeneralData = pObj->m_GeneralState; | 575   const CPDF_GeneralStateData* pGeneralData = pObj->m_GeneralState; | 
| 576   int alpha; | 576   int alpha; | 
| 577   if (pGeneralData) { | 577   if (pGeneralData) { | 
| 578     alpha = (int32_t)(pGeneralData->m_FillAlpha * 255); | 578     alpha = (int32_t)(pGeneralData->m_FillAlpha * 255); | 
| 579     if (pGeneralData->m_pTR) { | 579     if (pGeneralData->m_pTR) { | 
| 580       if (!pGeneralData->m_pTransferFunc) { | 580       if (!pGeneralData->m_pTransferFunc) { | 
| 581         ((CPDF_GeneralStateData*)pGeneralData)->m_pTransferFunc = | 581         ((CPDF_GeneralStateData*)pGeneralData)->m_pTransferFunc = | 
| 582             GetTransferFunc(pGeneralData->m_pTR); | 582             GetTransferFunc(pGeneralData->m_pTR); | 
| (...skipping 13 matching lines...) Expand all  Loading... | 
| 596   if (m_pType3Char && (!m_pType3Char->m_bColored || | 596   if (m_pType3Char && (!m_pType3Char->m_bColored || | 
| 597                        (m_pType3Char->m_bColored && | 597                        (m_pType3Char->m_bColored && | 
| 598                         (!pColorData || pColorData->m_StrokeColor.IsNull())))) { | 598                         (!pColorData || pColorData->m_StrokeColor.IsNull())))) { | 
| 599     return m_T3FillColor; | 599     return m_T3FillColor; | 
| 600   } | 600   } | 
| 601   if (!pColorData || pColorData->m_StrokeColor.IsNull()) { | 601   if (!pColorData || pColorData->m_StrokeColor.IsNull()) { | 
| 602     pColorData = (CPDF_ColorStateData*)(const CPDF_ColorStateData*) | 602     pColorData = (CPDF_ColorStateData*)(const CPDF_ColorStateData*) | 
| 603                      m_InitialStates.m_ColorState; | 603                      m_InitialStates.m_ColorState; | 
| 604   } | 604   } | 
| 605   FX_COLORREF rgb = pColorData->m_StrokeRGB; | 605   FX_COLORREF rgb = pColorData->m_StrokeRGB; | 
| 606   if (rgb == (FX_DWORD)-1) { | 606   if (rgb == (uint32_t)-1) { | 
| 607     return 0; | 607     return 0; | 
| 608   } | 608   } | 
| 609   const CPDF_GeneralStateData* pGeneralData = pObj->m_GeneralState; | 609   const CPDF_GeneralStateData* pGeneralData = pObj->m_GeneralState; | 
| 610   int alpha; | 610   int alpha; | 
| 611   if (pGeneralData) { | 611   if (pGeneralData) { | 
| 612     alpha = (int32_t)(pGeneralData->m_StrokeAlpha * 255); | 612     alpha = (int32_t)(pGeneralData->m_StrokeAlpha * 255); | 
| 613     if (pGeneralData->m_pTR) { | 613     if (pGeneralData->m_pTR) { | 
| 614       if (!pGeneralData->m_pTransferFunc) { | 614       if (!pGeneralData->m_pTransferFunc) { | 
| 615         ((CPDF_GeneralStateData*)pGeneralData)->m_pTransferFunc = | 615         ((CPDF_GeneralStateData*)pGeneralData)->m_pTransferFunc = | 
| 616             GetTransferFunc(pGeneralData->m_pTR); | 616             GetTransferFunc(pGeneralData->m_pTR); | 
| (...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 840   new_matrix.Scale(scaleX, scaleY); | 840   new_matrix.Scale(scaleX, scaleY); | 
| 841   std::unique_ptr<CFX_DIBitmap> pTextMask; | 841   std::unique_ptr<CFX_DIBitmap> pTextMask; | 
| 842   if (bTextClip) { | 842   if (bTextClip) { | 
| 843     pTextMask.reset(new CFX_DIBitmap); | 843     pTextMask.reset(new CFX_DIBitmap); | 
| 844     if (!pTextMask->Create(width, height, FXDIB_8bppMask)) | 844     if (!pTextMask->Create(width, height, FXDIB_8bppMask)) | 
| 845       return TRUE; | 845       return TRUE; | 
| 846 | 846 | 
| 847     pTextMask->Clear(0); | 847     pTextMask->Clear(0); | 
| 848     CFX_FxgeDevice text_device; | 848     CFX_FxgeDevice text_device; | 
| 849     text_device.Attach(pTextMask.get()); | 849     text_device.Attach(pTextMask.get()); | 
| 850     for (FX_DWORD i = 0; i < pPageObj->m_ClipPath.GetTextCount(); i++) { | 850     for (uint32_t i = 0; i < pPageObj->m_ClipPath.GetTextCount(); i++) { | 
| 851       CPDF_TextObject* textobj = pPageObj->m_ClipPath.GetText(i); | 851       CPDF_TextObject* textobj = pPageObj->m_ClipPath.GetText(i); | 
| 852       if (!textobj) { | 852       if (!textobj) { | 
| 853         break; | 853         break; | 
| 854       } | 854       } | 
| 855       CFX_Matrix text_matrix; | 855       CFX_Matrix text_matrix; | 
| 856       textobj->GetTextMatrix(&text_matrix); | 856       textobj->GetTextMatrix(&text_matrix); | 
| 857       CPDF_TextRenderer::DrawTextPath( | 857       CPDF_TextRenderer::DrawTextPath( | 
| 858           &text_device, textobj->m_nChars, textobj->m_pCharCodes, | 858           &text_device, textobj->m_nChars, textobj->m_pCharCodes, | 
| 859           textobj->m_pCharPos, textobj->m_TextState.GetFont(), | 859           textobj->m_pCharPos, textobj->m_TextState.GetFont(), | 
| 860           textobj->m_TextState.GetFontSize(), &text_matrix, &new_matrix, | 860           textobj->m_TextState.GetFontSize(), &text_matrix, &new_matrix, | 
| (...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1149   } | 1149   } | 
| 1150 | 1150 | 
| 1151   std::unique_ptr<CPDF_Function> pFuncs[3]; | 1151   std::unique_ptr<CPDF_Function> pFuncs[3]; | 
| 1152   FX_BOOL bUniTransfer = TRUE; | 1152   FX_BOOL bUniTransfer = TRUE; | 
| 1153   FX_BOOL bIdentity = TRUE; | 1153   FX_BOOL bIdentity = TRUE; | 
| 1154   if (CPDF_Array* pArray = pObj->AsArray()) { | 1154   if (CPDF_Array* pArray = pObj->AsArray()) { | 
| 1155     bUniTransfer = FALSE; | 1155     bUniTransfer = FALSE; | 
| 1156     if (pArray->GetCount() < 3) | 1156     if (pArray->GetCount() < 3) | 
| 1157       return nullptr; | 1157       return nullptr; | 
| 1158 | 1158 | 
| 1159     for (FX_DWORD i = 0; i < 3; ++i) { | 1159     for (uint32_t i = 0; i < 3; ++i) { | 
| 1160       pFuncs[2 - i].reset(CPDF_Function::Load(pArray->GetElementValue(i))); | 1160       pFuncs[2 - i].reset(CPDF_Function::Load(pArray->GetElementValue(i))); | 
| 1161       if (!pFuncs[2 - i]) | 1161       if (!pFuncs[2 - i]) | 
| 1162         return nullptr; | 1162         return nullptr; | 
| 1163     } | 1163     } | 
| 1164   } else { | 1164   } else { | 
| 1165     pFuncs[0].reset(CPDF_Function::Load(pObj)); | 1165     pFuncs[0].reset(CPDF_Function::Load(pObj)); | 
| 1166     if (!pFuncs[0]) | 1166     if (!pFuncs[0]) | 
| 1167       return nullptr; | 1167       return nullptr; | 
| 1168   } | 1168   } | 
| 1169   CPDF_TransferFunc* pTransfer = new CPDF_TransferFunc(m_pPDFDoc); | 1169   CPDF_TransferFunc* pTransfer = new CPDF_TransferFunc(m_pPDFDoc); | 
| (...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1332   m_pContext->GetBackground(m_pBitmapDevice->GetBitmap(), m_pObject, pOptions, | 1332   m_pContext->GetBackground(m_pBitmapDevice->GetBitmap(), m_pObject, pOptions, | 
| 1333                             &m_Matrix); | 1333                             &m_Matrix); | 
| 1334   return TRUE; | 1334   return TRUE; | 
| 1335 } | 1335 } | 
| 1336 void CPDF_ScaledRenderBuffer::OutputToDevice() { | 1336 void CPDF_ScaledRenderBuffer::OutputToDevice() { | 
| 1337   if (m_pBitmapDevice) { | 1337   if (m_pBitmapDevice) { | 
| 1338     m_pDevice->StretchDIBits(m_pBitmapDevice->GetBitmap(), m_Rect.left, | 1338     m_pDevice->StretchDIBits(m_pBitmapDevice->GetBitmap(), m_Rect.left, | 
| 1339                              m_Rect.top, m_Rect.Width(), m_Rect.Height()); | 1339                              m_Rect.top, m_Rect.Width(), m_Rect.Height()); | 
| 1340   } | 1340   } | 
| 1341 } | 1341 } | 
| OLD | NEW | 
|---|