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

Side by Side Diff: core/src/fpdfapi/fpdf_render/fpdf_render_image.cpp

Issue 893493002: Merge to XFA: Fix infinite recursion in CPDF_RenderStatus::RenderSingleObject(). (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@xfa
Patch Set: Created 5 years, 10 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 "../../../include/fxge/fx_ge.h" 7 #include "../../../include/fxge/fx_ge.h"
8 #include "../../../include/fxcodec/fx_codec.h" 8 #include "../../../include/fxcodec/fx_codec.h"
9 #include "../../../include/fpdfapi/fpdf_module.h" 9 #include "../../../include/fpdfapi/fpdf_module.h"
10 #include "../../../include/fpdfapi/fpdf_render.h" 10 #include "../../../include/fpdfapi/fpdf_render.h"
(...skipping 471 matching lines...) Expand 10 before | Expand all | Expand 10 after
482 new_matrix.TranslateI(-rect.left, -rect.top); 482 new_matrix.TranslateI(-rect.left, -rect.top);
483 int width = rect.Width(); 483 int width = rect.Width();
484 int height = rect.Height(); 484 int height = rect.Height();
485 CFX_FxgeDevice bitmap_device1; 485 CFX_FxgeDevice bitmap_device1;
486 if (!bitmap_device1.Create(rect.Width(), rect.Height(), FXDIB_Rgb32)) { 486 if (!bitmap_device1.Create(rect.Width(), rect.Height(), FXDIB_Rgb32)) {
487 return TRUE; 487 return TRUE;
488 } 488 }
489 bitmap_device1.GetBitmap()->Clear(0xffffff); 489 bitmap_device1.GetBitmap()->Clear(0xffffff);
490 { 490 {
491 CPDF_RenderStatus bitmap_render; 491 CPDF_RenderStatus bitmap_render;
492 bitmap_render.Initialize(m_pRenderStatus->m_Level + 1, m_pRenderStatus-> m_pContext, &bitmap_device1, NULL, NULL, 492 bitmap_render.Initialize(m_pRenderStatus->m_pContext, &bitmap_device1, N ULL, NULL,
493 NULL, NULL, &m_pRenderStatus->m_Options, 0, m_p RenderStatus->m_bDropObjects, NULL, TRUE); 493 NULL, NULL, &m_pRenderStatus->m_Options, 0, m_p RenderStatus->m_bDropObjects, NULL, TRUE);
494 CFX_Matrix patternDevice = *pObj2Device; 494 CFX_Matrix patternDevice = *pObj2Device;
495 patternDevice.Translate((FX_FLOAT) - rect.left, (FX_FLOAT) - rect.top); 495 patternDevice.Translate((FX_FLOAT) - rect.left, (FX_FLOAT) - rect.top);
496 if(m_pPattern->m_PatternType == PATTERN_TILING) { 496 if(m_pPattern->m_PatternType == PATTERN_TILING) {
497 bitmap_render.DrawTilingPattern((CPDF_TilingPattern*)m_pPattern, m_p ImageObject, &patternDevice, FALSE); 497 bitmap_render.DrawTilingPattern((CPDF_TilingPattern*)m_pPattern, m_p ImageObject, &patternDevice, FALSE);
498 } else { 498 } else {
499 bitmap_render.DrawShadingPattern((CPDF_ShadingPattern*)m_pPattern, m _pImageObject, &patternDevice, FALSE); 499 bitmap_render.DrawShadingPattern((CPDF_ShadingPattern*)m_pPattern, m _pImageObject, &patternDevice, FALSE);
500 } 500 }
501 } 501 }
502 { 502 {
503 CFX_FxgeDevice bitmap_device2; 503 CFX_FxgeDevice bitmap_device2;
504 if (!bitmap_device2.Create(rect.Width(), rect.Height(), FXDIB_8bppRgb)) { 504 if (!bitmap_device2.Create(rect.Width(), rect.Height(), FXDIB_8bppRgb)) {
505 return TRUE; 505 return TRUE;
506 } 506 }
507 bitmap_device2.GetBitmap()->Clear(0); 507 bitmap_device2.GetBitmap()->Clear(0);
508 CPDF_RenderStatus bitmap_render; 508 CPDF_RenderStatus bitmap_render;
509 bitmap_render.Initialize(m_pRenderStatus->m_Level + 1, m_pRenderStatus-> m_pContext, &bitmap_device2, NULL, NULL, 509 bitmap_render.Initialize(m_pRenderStatus->m_pContext, &bitmap_device2, N ULL, NULL,
510 NULL, NULL, NULL, 0, m_pRenderStatus->m_bDropOb jects, NULL, TRUE); 510 NULL, NULL, NULL, 0, m_pRenderStatus->m_bDropOb jects, NULL, TRUE);
511 CPDF_ImageRenderer image_render; 511 CPDF_ImageRenderer image_render;
512 if (image_render.Start(&bitmap_render, m_pDIBSource, 0xffffffff, 255, &n ew_matrix, m_Flags, TRUE)) { 512 if (image_render.Start(&bitmap_render, m_pDIBSource, 0xffffffff, 255, &n ew_matrix, m_Flags, TRUE)) {
513 image_render.Continue(NULL); 513 image_render.Continue(NULL);
514 } 514 }
515 if (m_Loader.m_MatteColor != 0xffffffff) { 515 if (m_Loader.m_MatteColor != 0xffffffff) {
516 int matte_r = FXARGB_R(m_Loader.m_MatteColor); 516 int matte_r = FXARGB_R(m_Loader.m_MatteColor);
517 int matte_g = FXARGB_G(m_Loader.m_MatteColor); 517 int matte_g = FXARGB_G(m_Loader.m_MatteColor);
518 int matte_b = FXARGB_B(m_Loader.m_MatteColor); 518 int matte_b = FXARGB_B(m_Loader.m_MatteColor);
519 for (int row = 0; row < height; row ++) { 519 for (int row = 0; row < height; row ++) {
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
572 new_matrix.TranslateI(-rect.left, -rect.top); 572 new_matrix.TranslateI(-rect.left, -rect.top);
573 int width = rect.Width(); 573 int width = rect.Width();
574 int height = rect.Height(); 574 int height = rect.Height();
575 CFX_FxgeDevice bitmap_device1; 575 CFX_FxgeDevice bitmap_device1;
576 if (!bitmap_device1.Create(width, height, FXDIB_Rgb32)) { 576 if (!bitmap_device1.Create(width, height, FXDIB_Rgb32)) {
577 return TRUE; 577 return TRUE;
578 } 578 }
579 bitmap_device1.GetBitmap()->Clear(0xffffff); 579 bitmap_device1.GetBitmap()->Clear(0xffffff);
580 { 580 {
581 CPDF_RenderStatus bitmap_render; 581 CPDF_RenderStatus bitmap_render;
582 bitmap_render.Initialize(m_pRenderStatus->m_Level + 1, m_pRenderStatus-> m_pContext, &bitmap_device1, NULL, NULL, 582 bitmap_render.Initialize(m_pRenderStatus->m_pContext, &bitmap_device1, N ULL, NULL,
583 NULL, NULL, NULL, 0, m_pRenderStatus->m_bDropOb jects, NULL, TRUE); 583 NULL, NULL, NULL, 0, m_pRenderStatus->m_bDropOb jects, NULL, TRUE);
584 CPDF_ImageRenderer image_render; 584 CPDF_ImageRenderer image_render;
585 if (image_render.Start(&bitmap_render, m_pDIBSource, 0, 255, &new_matrix , m_Flags, TRUE)) { 585 if (image_render.Start(&bitmap_render, m_pDIBSource, 0, 255, &new_matrix , m_Flags, TRUE)) {
586 image_render.Continue(NULL); 586 image_render.Continue(NULL);
587 } 587 }
588 } 588 }
589 { 589 {
590 CFX_FxgeDevice bitmap_device2; 590 CFX_FxgeDevice bitmap_device2;
591 if (!bitmap_device2.Create(width, height, FXDIB_8bppRgb)) { 591 if (!bitmap_device2.Create(width, height, FXDIB_8bppRgb)) {
592 return TRUE; 592 return TRUE;
593 } 593 }
594 bitmap_device2.GetBitmap()->Clear(0); 594 bitmap_device2.GetBitmap()->Clear(0);
595 CPDF_RenderStatus bitmap_render; 595 CPDF_RenderStatus bitmap_render;
596 bitmap_render.Initialize(m_pRenderStatus->m_Level + 1, m_pRenderStatus-> m_pContext, &bitmap_device2, NULL, NULL, 596 bitmap_render.Initialize(m_pRenderStatus->m_pContext, &bitmap_device2, N ULL, NULL,
597 NULL, NULL, NULL, 0, m_pRenderStatus->m_bDropOb jects, NULL, TRUE); 597 NULL, NULL, NULL, 0, m_pRenderStatus->m_bDropOb jects, NULL, TRUE);
598 CPDF_ImageRenderer image_render; 598 CPDF_ImageRenderer image_render;
599 if (image_render.Start(&bitmap_render, m_Loader.m_pMask, 0xffffffff, 255 , &new_matrix, m_Flags, TRUE)) { 599 if (image_render.Start(&bitmap_render, m_Loader.m_pMask, 0xffffffff, 255 , &new_matrix, m_Flags, TRUE)) {
600 image_render.Continue(NULL); 600 image_render.Continue(NULL);
601 } 601 }
602 if (m_Loader.m_MatteColor != 0xffffffff) { 602 if (m_Loader.m_MatteColor != 0xffffffff) {
603 int matte_r = FXARGB_R(m_Loader.m_MatteColor); 603 int matte_r = FXARGB_R(m_Loader.m_MatteColor);
604 int matte_g = FXARGB_G(m_Loader.m_MatteColor); 604 int matte_g = FXARGB_G(m_Loader.m_MatteColor);
605 int matte_b = FXARGB_B(m_Loader.m_MatteColor); 605 int matte_b = FXARGB_B(m_Loader.m_MatteColor);
606 for (int row = 0; row < height; row ++) { 606 for (int row = 0; row < height; row ++) {
(...skipping 420 matching lines...) Expand 10 before | Expand all | Expand 10 after
1027 } else { 1027 } else {
1028 bitmap.Clear(0); 1028 bitmap.Clear(0);
1029 } 1029 }
1030 CPDF_Dictionary* pFormResource = NULL; 1030 CPDF_Dictionary* pFormResource = NULL;
1031 if (form.m_pFormDict) { 1031 if (form.m_pFormDict) {
1032 pFormResource = form.m_pFormDict->GetDict(FX_BSTRC("Resources")); 1032 pFormResource = form.m_pFormDict->GetDict(FX_BSTRC("Resources"));
1033 } 1033 }
1034 CPDF_RenderOptions options; 1034 CPDF_RenderOptions options;
1035 options.m_ColorMode = bLuminosity ? RENDER_COLOR_NORMAL : RENDER_COLOR_ALPHA ; 1035 options.m_ColorMode = bLuminosity ? RENDER_COLOR_NORMAL : RENDER_COLOR_ALPHA ;
1036 CPDF_RenderStatus status; 1036 CPDF_RenderStatus status;
1037 status.Initialize(m_Level + 1, m_pContext, &bitmap_device, NULL, NULL, NULL, NULL, 1037 status.Initialize(m_pContext, &bitmap_device, NULL, NULL, NULL, NULL,
1038 &options, 0, m_bDropObjects, pFormResource, TRUE, NULL, 0, pCS ? pCS->GetFamily() : 0, bLuminosity); 1038 &options, 0, m_bDropObjects, pFormResource, TRUE, NULL, 0, pCS ? pCS->GetFamily() : 0, bLuminosity);
1039 status.RenderObjectList(&form, &matrix); 1039 status.RenderObjectList(&form, &matrix);
1040 pMask = FX_NEW CFX_DIBitmap; 1040 pMask = FX_NEW CFX_DIBitmap;
1041 if (!pMask->Create(width, height, FXDIB_8bppMask)) { 1041 if (!pMask->Create(width, height, FXDIB_8bppMask)) {
1042 delete pMask; 1042 delete pMask;
1043 return NULL; 1043 return NULL;
1044 } 1044 }
1045 FX_LPBYTE dest_buf = pMask->GetBuffer(); 1045 FX_LPBYTE dest_buf = pMask->GetBuffer();
1046 int dest_pitch = pMask->GetPitch(); 1046 int dest_pitch = pMask->GetPitch();
1047 FX_LPBYTE src_buf = bitmap.GetBuffer(); 1047 FX_LPBYTE src_buf = bitmap.GetBuffer();
(...skipping 29 matching lines...) Expand all
1077 } 1077 }
1078 } else { 1078 } else {
1079 FXSYS_memcpy32(dest_buf, src_buf, dest_pitch * height); 1079 FXSYS_memcpy32(dest_buf, src_buf, dest_pitch * height);
1080 } 1080 }
1081 if (pFunc) { 1081 if (pFunc) {
1082 delete pFunc; 1082 delete pFunc;
1083 } 1083 }
1084 FX_Free(pTransfer); 1084 FX_Free(pTransfer);
1085 return pMask; 1085 return pMask;
1086 } 1086 }
OLDNEW
« no previous file with comments | « core/src/fpdfapi/fpdf_render/fpdf_render.cpp ('k') | core/src/fpdfapi/fpdf_render/fpdf_render_pattern.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698