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 "render_int.h" | 7 #include "render_int.h" |
8 | 8 |
9 #include "core/include/fpdfapi/fpdf_module.h" | 9 #include "core/include/fpdfapi/fpdf_module.h" |
10 #include "core/include/fpdfapi/fpdf_pageobj.h" | 10 #include "core/include/fpdfapi/fpdf_pageobj.h" |
(...skipping 11 matching lines...) Expand all Loading... |
22 } | 22 } |
23 return render.m_Result; | 23 return render.m_Result; |
24 } | 24 } |
25 void CPDF_RenderStatus::CompositeDIBitmap(CFX_DIBitmap* pDIBitmap, | 25 void CPDF_RenderStatus::CompositeDIBitmap(CFX_DIBitmap* pDIBitmap, |
26 int left, | 26 int left, |
27 int top, | 27 int top, |
28 FX_ARGB mask_argb, | 28 FX_ARGB mask_argb, |
29 int bitmap_alpha, | 29 int bitmap_alpha, |
30 int blend_mode, | 30 int blend_mode, |
31 int Transparency) { | 31 int Transparency) { |
32 if (pDIBitmap == NULL) { | 32 if (!pDIBitmap) { |
33 return; | 33 return; |
34 } | 34 } |
35 FX_BOOL bIsolated = Transparency & PDFTRANS_ISOLATED; | 35 FX_BOOL bIsolated = Transparency & PDFTRANS_ISOLATED; |
36 FX_BOOL bGroup = Transparency & PDFTRANS_GROUP; | 36 FX_BOOL bGroup = Transparency & PDFTRANS_GROUP; |
37 if (blend_mode == FXDIB_BLEND_NORMAL) { | 37 if (blend_mode == FXDIB_BLEND_NORMAL) { |
38 if (!pDIBitmap->IsAlphaMask()) { | 38 if (!pDIBitmap->IsAlphaMask()) { |
39 if (bitmap_alpha < 255) { | 39 if (bitmap_alpha < 255) { |
40 pDIBitmap->MultiplyAlpha(bitmap_alpha); | 40 pDIBitmap->MultiplyAlpha(bitmap_alpha); |
41 } | 41 } |
42 if (m_pDevice->SetDIBits(pDIBitmap, left, top)) { | 42 if (m_pDevice->SetDIBits(pDIBitmap, left, top)) { |
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
346 dest_height)) { | 346 dest_height)) { |
347 if (m_LoadHandle) { | 347 if (m_LoadHandle) { |
348 m_Status = 4; | 348 m_Status = 4; |
349 return TRUE; | 349 return TRUE; |
350 } | 350 } |
351 return FALSE; | 351 return FALSE; |
352 } | 352 } |
353 return FALSE; | 353 return FALSE; |
354 } | 354 } |
355 FX_BOOL CPDF_ImageRenderer::StartRenderDIBSource() { | 355 FX_BOOL CPDF_ImageRenderer::StartRenderDIBSource() { |
356 if (m_Loader.m_pBitmap == NULL) { | 356 if (!m_Loader.m_pBitmap) { |
357 return FALSE; | 357 return FALSE; |
358 } | 358 } |
359 m_BitmapAlpha = 255; | 359 m_BitmapAlpha = 255; |
360 const CPDF_GeneralStateData* pGeneralState = m_pImageObject->m_GeneralState; | 360 const CPDF_GeneralStateData* pGeneralState = m_pImageObject->m_GeneralState; |
361 if (pGeneralState) { | 361 if (pGeneralState) { |
362 m_BitmapAlpha = FXSYS_round(pGeneralState->m_FillAlpha * 255); | 362 m_BitmapAlpha = FXSYS_round(pGeneralState->m_FillAlpha * 255); |
363 } | 363 } |
364 m_pDIBSource = m_Loader.m_pBitmap; | 364 m_pDIBSource = m_Loader.m_pBitmap; |
365 if (m_pRenderStatus->m_Options.m_ColorMode == RENDER_COLOR_ALPHA && | 365 if (m_pRenderStatus->m_Options.m_ColorMode == RENDER_COLOR_ALPHA && |
366 m_Loader.m_pMask == NULL) { | 366 !m_Loader.m_pMask) { |
367 return StartBitmapAlpha(); | 367 return StartBitmapAlpha(); |
368 } | 368 } |
369 if (pGeneralState && pGeneralState->m_pTR) { | 369 if (pGeneralState && pGeneralState->m_pTR) { |
370 if (!pGeneralState->m_pTransferFunc) { | 370 if (!pGeneralState->m_pTransferFunc) { |
371 ((CPDF_GeneralStateData*)pGeneralState)->m_pTransferFunc = | 371 ((CPDF_GeneralStateData*)pGeneralState)->m_pTransferFunc = |
372 m_pRenderStatus->GetTransferFunc(pGeneralState->m_pTR); | 372 m_pRenderStatus->GetTransferFunc(pGeneralState->m_pTR); |
373 } | 373 } |
374 if (pGeneralState->m_pTransferFunc && | 374 if (pGeneralState->m_pTransferFunc && |
375 !pGeneralState->m_pTransferFunc->m_bIdentity) { | 375 !pGeneralState->m_pTransferFunc->m_bIdentity) { |
376 m_pDIBSource = m_Loader.m_pBitmap = | 376 m_pDIBSource = m_Loader.m_pBitmap = |
(...skipping 460 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
837 m_pRenderStatus->m_pDevice->SetDIBits( | 837 m_pRenderStatus->m_pDevice->SetDIBits( |
838 m_pQuickStretcher->m_pBitmap, m_pQuickStretcher->m_ResultLeft, | 838 m_pQuickStretcher->m_pBitmap, m_pQuickStretcher->m_ResultLeft, |
839 m_pQuickStretcher->m_ResultTop, m_BlendType); | 839 m_pQuickStretcher->m_ResultTop, m_BlendType); |
840 return FALSE; | 840 return FALSE; |
841 } | 841 } |
842 if (m_Status == 2) { | 842 if (m_Status == 2) { |
843 if (m_pTransformer->Continue(pPause)) { | 843 if (m_pTransformer->Continue(pPause)) { |
844 return TRUE; | 844 return TRUE; |
845 } | 845 } |
846 CFX_DIBitmap* pBitmap = m_pTransformer->m_Storer.Detach(); | 846 CFX_DIBitmap* pBitmap = m_pTransformer->m_Storer.Detach(); |
847 if (pBitmap == NULL) { | 847 if (!pBitmap) { |
848 return FALSE; | 848 return FALSE; |
849 } | 849 } |
850 if (pBitmap->IsAlphaMask()) { | 850 if (pBitmap->IsAlphaMask()) { |
851 if (m_BitmapAlpha != 255) { | 851 if (m_BitmapAlpha != 255) { |
852 m_FillArgb = FXARGB_MUL_ALPHA(m_FillArgb, m_BitmapAlpha); | 852 m_FillArgb = FXARGB_MUL_ALPHA(m_FillArgb, m_BitmapAlpha); |
853 } | 853 } |
854 m_Result = m_pRenderStatus->m_pDevice->SetBitMask( | 854 m_Result = m_pRenderStatus->m_pDevice->SetBitMask( |
855 pBitmap, m_pTransformer->m_ResultLeft, m_pTransformer->m_ResultTop, | 855 pBitmap, m_pTransformer->m_ResultLeft, m_pTransformer->m_ResultTop, |
856 m_FillArgb); | 856 m_FillArgb); |
857 } else { | 857 } else { |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
927 return FALSE; | 927 return FALSE; |
928 } | 928 } |
929 if (pDict->KeyExist("SMask") || pDict->KeyExist("Mask")) { | 929 if (pDict->KeyExist("SMask") || pDict->KeyExist("Mask")) { |
930 return FALSE; | 930 return FALSE; |
931 } | 931 } |
932 m_SrcWidth = pDict->GetInteger("Width"); | 932 m_SrcWidth = pDict->GetInteger("Width"); |
933 m_SrcHeight = pDict->GetInteger("Height"); | 933 m_SrcHeight = pDict->GetInteger("Height"); |
934 m_pCS = NULL; | 934 m_pCS = NULL; |
935 m_Bpp = 3; | 935 m_Bpp = 3; |
936 CPDF_Object* pCSObj = pDict->GetElementValue("ColorSpace"); | 936 CPDF_Object* pCSObj = pDict->GetElementValue("ColorSpace"); |
937 if (pCSObj == NULL) { | 937 if (!pCSObj) { |
938 return FALSE; | 938 return FALSE; |
939 } | 939 } |
940 m_pCS = CPDF_ColorSpace::Load(pImageObj->m_pImage->GetDocument(), pCSObj); | 940 m_pCS = CPDF_ColorSpace::Load(pImageObj->m_pImage->GetDocument(), pCSObj); |
941 if (m_pCS == NULL) { | 941 if (!m_pCS) { |
942 return FALSE; | 942 return FALSE; |
943 } | 943 } |
944 if (!_IsSupported(m_pCS)) { | 944 if (!_IsSupported(m_pCS)) { |
945 return FALSE; | 945 return FALSE; |
946 } | 946 } |
947 m_Bpp = m_pCS->CountComponents(); | 947 m_Bpp = m_pCS->CountComponents(); |
948 if (m_pCS->sRGB()) { | 948 if (m_pCS->sRGB()) { |
949 m_pCS->ReleaseCS(); | 949 m_pCS->ReleaseCS(); |
950 m_pCS = NULL; | 950 m_pCS = NULL; |
951 } | 951 } |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
988 dest_y = m_ResultHeight - m_LineIndex - 1; | 988 dest_y = m_ResultHeight - m_LineIndex - 1; |
989 src_y = | 989 src_y = |
990 (m_DestHeight - (dest_y + m_ClipTop) - 1) * src_height / m_DestHeight; | 990 (m_DestHeight - (dest_y + m_ClipTop) - 1) * src_height / m_DestHeight; |
991 } else { | 991 } else { |
992 dest_y = m_LineIndex; | 992 dest_y = m_LineIndex; |
993 src_y = (dest_y + m_ClipTop) * src_height / m_DestHeight; | 993 src_y = (dest_y + m_ClipTop) * src_height / m_DestHeight; |
994 } | 994 } |
995 const uint8_t* src_scan; | 995 const uint8_t* src_scan; |
996 if (m_pDecoder) { | 996 if (m_pDecoder) { |
997 src_scan = m_pDecoder->GetScanline(src_y); | 997 src_scan = m_pDecoder->GetScanline(src_y); |
998 if (src_scan == NULL) { | 998 if (!src_scan) { |
999 break; | 999 break; |
1000 } | 1000 } |
1001 } else { | 1001 } else { |
1002 src_scan = m_StreamAcc.GetData(); | 1002 src_scan = m_StreamAcc.GetData(); |
1003 if (src_scan == NULL) { | 1003 if (!src_scan) { |
1004 break; | 1004 break; |
1005 } | 1005 } |
1006 src_scan += src_y * src_pitch; | 1006 src_scan += src_y * src_pitch; |
1007 } | 1007 } |
1008 uint8_t* result_scan = result_buf + dest_y * m_pBitmap->GetPitch(); | 1008 uint8_t* result_scan = result_buf + dest_y * m_pBitmap->GetPitch(); |
1009 for (int x = 0; x < m_ResultWidth; x++) { | 1009 for (int x = 0; x < m_ResultWidth; x++) { |
1010 int dest_x = m_ClipLeft + x; | 1010 int dest_x = m_ClipLeft + x; |
1011 int src_x = (m_bFlipX ? (m_DestWidth - dest_x - 1) : dest_x) * src_width / | 1011 int src_x = (m_bFlipX ? (m_DestWidth - dest_x - 1) : dest_x) * src_width / |
1012 m_DestWidth; | 1012 m_DestWidth; |
1013 const uint8_t* src_pixel = src_scan + src_x * m_Bpp; | 1013 const uint8_t* src_pixel = src_scan + src_x * m_Bpp; |
1014 if (m_pCS == NULL) { | 1014 if (!m_pCS) { |
1015 *result_scan = src_pixel[2]; | 1015 *result_scan = src_pixel[2]; |
1016 result_scan++; | 1016 result_scan++; |
1017 *result_scan = src_pixel[1]; | 1017 *result_scan = src_pixel[1]; |
1018 result_scan++; | 1018 result_scan++; |
1019 *result_scan = src_pixel[0]; | 1019 *result_scan = src_pixel[0]; |
1020 result_scan++; | 1020 result_scan++; |
1021 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ | 1021 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ |
1022 result_scan++; | 1022 result_scan++; |
1023 #endif | 1023 #endif |
1024 } else { | 1024 } else { |
1025 m_pCS->TranslateImageLine(result_scan, src_pixel, 1, 0, 0); | 1025 m_pCS->TranslateImageLine(result_scan, src_pixel, 1, 0, 0); |
1026 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ | 1026 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ |
1027 result_scan += 4; | 1027 result_scan += 4; |
1028 #else | 1028 #else |
1029 result_scan += 3; | 1029 result_scan += 3; |
1030 #endif | 1030 #endif |
1031 } | 1031 } |
1032 } | 1032 } |
1033 m_LineIndex++; | 1033 m_LineIndex++; |
1034 if (pPause && pPause->NeedToPauseNow()) { | 1034 if (pPause && pPause->NeedToPauseNow()) { |
1035 return TRUE; | 1035 return TRUE; |
1036 } | 1036 } |
1037 } | 1037 } |
1038 return FALSE; | 1038 return FALSE; |
1039 } | 1039 } |
1040 CFX_DIBitmap* CPDF_RenderStatus::LoadSMask(CPDF_Dictionary* pSMaskDict, | 1040 CFX_DIBitmap* CPDF_RenderStatus::LoadSMask(CPDF_Dictionary* pSMaskDict, |
1041 FX_RECT* pClipRect, | 1041 FX_RECT* pClipRect, |
1042 const CFX_Matrix* pMatrix) { | 1042 const CFX_Matrix* pMatrix) { |
1043 if (pSMaskDict == NULL) { | 1043 if (!pSMaskDict) { |
1044 return NULL; | 1044 return NULL; |
1045 } | 1045 } |
1046 int width = pClipRect->right - pClipRect->left; | 1046 int width = pClipRect->right - pClipRect->left; |
1047 int height = pClipRect->bottom - pClipRect->top; | 1047 int height = pClipRect->bottom - pClipRect->top; |
1048 FX_BOOL bLuminosity = FALSE; | 1048 FX_BOOL bLuminosity = FALSE; |
1049 bLuminosity = pSMaskDict->GetConstString("S") != "Alpha"; | 1049 bLuminosity = pSMaskDict->GetConstString("S") != "Alpha"; |
1050 CPDF_Stream* pGroup = pSMaskDict->GetStream("G"); | 1050 CPDF_Stream* pGroup = pSMaskDict->GetStream("G"); |
1051 if (pGroup == NULL) { | 1051 if (!pGroup) { |
1052 return NULL; | 1052 return NULL; |
1053 } | 1053 } |
1054 nonstd::unique_ptr<CPDF_Function> pFunc; | 1054 nonstd::unique_ptr<CPDF_Function> pFunc; |
1055 CPDF_Object* pFuncObj = pSMaskDict->GetElementValue("TR"); | 1055 CPDF_Object* pFuncObj = pSMaskDict->GetElementValue("TR"); |
1056 if (pFuncObj && (pFuncObj->IsDictionary() || pFuncObj->IsStream())) | 1056 if (pFuncObj && (pFuncObj->IsDictionary() || pFuncObj->IsStream())) |
1057 pFunc.reset(CPDF_Function::Load(pFuncObj)); | 1057 pFunc.reset(CPDF_Function::Load(pFuncObj)); |
1058 | 1058 |
1059 CFX_Matrix matrix = *pMatrix; | 1059 CFX_Matrix matrix = *pMatrix; |
1060 matrix.TranslateI(-pClipRect->left, -pClipRect->top); | 1060 matrix.TranslateI(-pClipRect->left, -pClipRect->top); |
1061 CPDF_Form form(m_pContext->m_pDocument, m_pContext->m_pPageResources, pGroup); | 1061 CPDF_Form form(m_pContext->m_pDocument, m_pContext->m_pPageResources, pGroup); |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1159 } else if (pFunc) { | 1159 } else if (pFunc) { |
1160 int size = dest_pitch * height; | 1160 int size = dest_pitch * height; |
1161 for (int i = 0; i < size; i++) { | 1161 for (int i = 0; i < size; i++) { |
1162 dest_buf[i] = transfers[src_buf[i]]; | 1162 dest_buf[i] = transfers[src_buf[i]]; |
1163 } | 1163 } |
1164 } else { | 1164 } else { |
1165 FXSYS_memcpy(dest_buf, src_buf, dest_pitch * height); | 1165 FXSYS_memcpy(dest_buf, src_buf, dest_pitch * height); |
1166 } | 1166 } |
1167 return pMask.release(); | 1167 return pMask.release(); |
1168 } | 1168 } |
OLD | NEW |