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 "pageint.h" | 7 #include "pageint.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_page.h" | 10 #include "core/include/fpdfapi/fpdf_page.h" |
11 | 11 |
12 CPDF_PageObject* CPDF_PageObject::Create(int type) { | 12 CPDF_PageObject* CPDF_PageObject::Create(int type) { |
13 switch (type) { | 13 switch (type) { |
14 case PDFPAGE_TEXT: | 14 case TEXT: |
15 return new CPDF_TextObject; | 15 return new CPDF_TextObject; |
16 case PDFPAGE_IMAGE: | 16 case IMAGE: |
17 return new CPDF_ImageObject; | 17 return new CPDF_ImageObject; |
18 case PDFPAGE_PATH: | 18 case PATH: |
19 return new CPDF_PathObject; | 19 return new CPDF_PathObject; |
20 case PDFPAGE_SHADING: | 20 case SHADING: |
21 return new CPDF_ShadingObject; | 21 return new CPDF_ShadingObject; |
22 case PDFPAGE_FORM: | 22 case FORM: |
23 return new CPDF_FormObject; | 23 return new CPDF_FormObject; |
24 } | 24 } |
25 return NULL; | 25 return NULL; |
26 } | 26 } |
27 CPDF_PageObject::~CPDF_PageObject() {} | 27 CPDF_PageObject::~CPDF_PageObject() {} |
28 CPDF_PageObject* CPDF_PageObject::Clone() const { | 28 CPDF_PageObject* CPDF_PageObject::Clone() const { |
29 CPDF_PageObject* pObj = Create(m_Type); | 29 CPDF_PageObject* pObj = Create(m_Type); |
30 pObj->Copy(this); | 30 pObj->Copy(this); |
31 return pObj; | 31 return pObj; |
32 } | 32 } |
(...skipping 14 matching lines...) Expand all Loading... |
47 m_ClipPath.AppendPath(path, type, bAutoMerge); | 47 m_ClipPath.AppendPath(path, type, bAutoMerge); |
48 } | 48 } |
49 void CPDF_PageObject::CopyClipPath(CPDF_PageObject* pObj) { | 49 void CPDF_PageObject::CopyClipPath(CPDF_PageObject* pObj) { |
50 m_ClipPath = pObj->m_ClipPath; | 50 m_ClipPath = pObj->m_ClipPath; |
51 } | 51 } |
52 void CPDF_PageObject::RemoveClipPath() { | 52 void CPDF_PageObject::RemoveClipPath() { |
53 m_ClipPath.SetNull(); | 53 m_ClipPath.SetNull(); |
54 } | 54 } |
55 void CPDF_PageObject::RecalcBBox() { | 55 void CPDF_PageObject::RecalcBBox() { |
56 switch (m_Type) { | 56 switch (m_Type) { |
57 case PDFPAGE_TEXT: | 57 case TEXT: |
58 ((CPDF_TextObject*)this)->RecalcPositionData(); | 58 ((CPDF_TextObject*)this)->RecalcPositionData(); |
59 break; | 59 break; |
60 case PDFPAGE_PATH: | 60 case PATH: |
61 ((CPDF_PathObject*)this)->CalcBoundingBox(); | 61 ((CPDF_PathObject*)this)->CalcBoundingBox(); |
62 break; | 62 break; |
63 case PDFPAGE_SHADING: | 63 case SHADING: |
64 ((CPDF_ShadingObject*)this)->CalcBoundingBox(); | 64 ((CPDF_ShadingObject*)this)->CalcBoundingBox(); |
65 break; | 65 break; |
| 66 default: |
| 67 break; |
66 } | 68 } |
67 } | 69 } |
68 void CPDF_PageObject::TransformClipPath(CFX_Matrix& matrix) { | 70 void CPDF_PageObject::TransformClipPath(CFX_Matrix& matrix) { |
69 if (m_ClipPath.IsNull()) { | 71 if (m_ClipPath.IsNull()) { |
70 return; | 72 return; |
71 } | 73 } |
72 m_ClipPath.GetModify(); | 74 m_ClipPath.GetModify(); |
73 m_ClipPath.Transform(matrix); | 75 m_ClipPath.Transform(matrix); |
74 } | 76 } |
75 void CPDF_PageObject::TransformGeneralState(CFX_Matrix& matrix) { | 77 void CPDF_PageObject::TransformGeneralState(CFX_Matrix& matrix) { |
76 if (m_GeneralState.IsNull()) { | 78 if (m_GeneralState.IsNull()) { |
77 return; | 79 return; |
78 } | 80 } |
79 CPDF_GeneralStateData* pGS = m_GeneralState.GetModify(); | 81 CPDF_GeneralStateData* pGS = m_GeneralState.GetModify(); |
80 pGS->m_Matrix.Concat(matrix); | 82 pGS->m_Matrix.Concat(matrix); |
81 } | 83 } |
82 FX_RECT CPDF_PageObject::GetBBox(const CFX_Matrix* pMatrix) const { | 84 FX_RECT CPDF_PageObject::GetBBox(const CFX_Matrix* pMatrix) const { |
83 CFX_FloatRect rect(m_Left, m_Bottom, m_Right, m_Top); | 85 CFX_FloatRect rect(m_Left, m_Bottom, m_Right, m_Top); |
84 if (pMatrix) { | 86 if (pMatrix) { |
85 pMatrix->TransformRect(rect); | 87 pMatrix->TransformRect(rect); |
86 } | 88 } |
87 return rect.GetOutterRect(); | 89 return rect.GetOutterRect(); |
88 } | 90 } |
89 | 91 |
90 CPDF_TextObject::CPDF_TextObject() | 92 CPDF_TextObject::CPDF_TextObject() |
91 : m_PosX(0), | 93 : CPDF_PageObject(TEXT), |
| 94 m_PosX(0), |
92 m_PosY(0), | 95 m_PosY(0), |
93 m_nChars(0), | 96 m_nChars(0), |
94 m_pCharCodes(nullptr), | 97 m_pCharCodes(nullptr), |
95 m_pCharPos(nullptr) { | 98 m_pCharPos(nullptr) {} |
96 m_Type = PDFPAGE_TEXT; | |
97 } | |
98 | 99 |
99 CPDF_TextObject::~CPDF_TextObject() { | 100 CPDF_TextObject::~CPDF_TextObject() { |
100 if (m_nChars > 1) { | 101 if (m_nChars > 1) { |
101 FX_Free(m_pCharCodes); | 102 FX_Free(m_pCharCodes); |
102 } | 103 } |
103 FX_Free(m_pCharPos); | 104 FX_Free(m_pCharPos); |
104 } | 105 } |
105 | 106 |
106 void CPDF_TextObject::GetItemInfo(int index, CPDF_TextObjectItem* pInfo) const { | 107 void CPDF_TextObject::GetItemInfo(int index, CPDF_TextObjectItem* pInfo) const { |
107 pInfo->m_CharCode = | 108 pInfo->m_CharCode = |
(...skipping 492 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
600 FXSYS_memcpy(m_pCharPos, pCharPos, sizeof(FX_FLOAT) * (nChars - 1)); | 601 FXSYS_memcpy(m_pCharPos, pCharPos, sizeof(FX_FLOAT) * (nChars - 1)); |
601 } | 602 } |
602 RecalcPositionData(); | 603 RecalcPositionData(); |
603 } | 604 } |
604 | 605 |
605 void CPDF_TextObject::SetTextState(CPDF_TextState TextState) { | 606 void CPDF_TextObject::SetTextState(CPDF_TextState TextState) { |
606 m_TextState = TextState; | 607 m_TextState = TextState; |
607 CalcPositionData(nullptr, nullptr, 0); | 608 CalcPositionData(nullptr, nullptr, 0); |
608 } | 609 } |
609 | 610 |
610 CPDF_ShadingObject::CPDF_ShadingObject() { | 611 CPDF_ShadingObject::CPDF_ShadingObject() |
611 m_pShading = NULL; | 612 : CPDF_PageObject(SHADING), m_pShading(nullptr) {} |
612 m_Type = PDFPAGE_SHADING; | 613 |
613 } | |
614 CPDF_ShadingObject::~CPDF_ShadingObject() {} | 614 CPDF_ShadingObject::~CPDF_ShadingObject() {} |
| 615 |
615 void CPDF_ShadingObject::CopyData(const CPDF_PageObject* pSrc) { | 616 void CPDF_ShadingObject::CopyData(const CPDF_PageObject* pSrc) { |
616 CPDF_ShadingObject* pSrcObj = (CPDF_ShadingObject*)pSrc; | 617 CPDF_ShadingObject* pSrcObj = (CPDF_ShadingObject*)pSrc; |
617 m_pShading = pSrcObj->m_pShading; | 618 m_pShading = pSrcObj->m_pShading; |
618 if (m_pShading && m_pShading->m_pDocument) { | 619 if (m_pShading && m_pShading->m_pDocument) { |
619 CPDF_DocPageData* pDocPageData = m_pShading->m_pDocument->GetPageData(); | 620 CPDF_DocPageData* pDocPageData = m_pShading->m_pDocument->GetPageData(); |
620 m_pShading = (CPDF_ShadingPattern*)pDocPageData->GetPattern( | 621 m_pShading = (CPDF_ShadingPattern*)pDocPageData->GetPattern( |
621 m_pShading->m_pShadingObj, m_pShading->m_bShadingObj, | 622 m_pShading->m_pShadingObj, m_pShading->m_bShadingObj, |
622 &m_pShading->m_ParentMatrix); | 623 &m_pShading->m_ParentMatrix); |
623 } | 624 } |
624 m_Matrix = pSrcObj->m_Matrix; | 625 m_Matrix = pSrcObj->m_Matrix; |
625 } | 626 } |
| 627 |
626 void CPDF_ShadingObject::Transform(const CFX_Matrix& matrix) { | 628 void CPDF_ShadingObject::Transform(const CFX_Matrix& matrix) { |
627 if (!m_ClipPath.IsNull()) { | 629 if (!m_ClipPath.IsNull()) { |
628 m_ClipPath.GetModify(); | 630 m_ClipPath.GetModify(); |
629 m_ClipPath.Transform(matrix); | 631 m_ClipPath.Transform(matrix); |
630 } | 632 } |
631 m_Matrix.Concat(matrix); | 633 m_Matrix.Concat(matrix); |
632 if (!m_ClipPath.IsNull()) { | 634 if (!m_ClipPath.IsNull()) { |
633 CalcBoundingBox(); | 635 CalcBoundingBox(); |
634 } else { | 636 } else { |
635 matrix.TransformRect(m_Left, m_Right, m_Top, m_Bottom); | 637 matrix.TransformRect(m_Left, m_Right, m_Top, m_Bottom); |
636 } | 638 } |
637 } | 639 } |
| 640 |
638 void CPDF_ShadingObject::CalcBoundingBox() { | 641 void CPDF_ShadingObject::CalcBoundingBox() { |
639 if (m_ClipPath.IsNull()) { | 642 if (m_ClipPath.IsNull()) { |
640 return; | 643 return; |
641 } | 644 } |
642 CFX_FloatRect rect = m_ClipPath.GetClipBox(); | 645 CFX_FloatRect rect = m_ClipPath.GetClipBox(); |
643 m_Left = rect.left; | 646 m_Left = rect.left; |
644 m_Bottom = rect.bottom; | 647 m_Bottom = rect.bottom; |
645 m_Right = rect.right; | 648 m_Right = rect.right; |
646 m_Top = rect.top; | 649 m_Top = rect.top; |
647 } | 650 } |
| 651 |
648 CPDF_FormObject::~CPDF_FormObject() { | 652 CPDF_FormObject::~CPDF_FormObject() { |
649 delete m_pForm; | 653 delete m_pForm; |
650 } | 654 } |
651 void CPDF_FormObject::Transform(const CFX_Matrix& matrix) { | 655 void CPDF_FormObject::Transform(const CFX_Matrix& matrix) { |
652 m_FormMatrix.Concat(matrix); | 656 m_FormMatrix.Concat(matrix); |
653 CalcBoundingBox(); | 657 CalcBoundingBox(); |
654 } | 658 } |
655 void CPDF_FormObject::CopyData(const CPDF_PageObject* pSrc) { | 659 void CPDF_FormObject::CopyData(const CPDF_PageObject* pSrc) { |
656 const CPDF_FormObject* pSrcObj = (const CPDF_FormObject*)pSrc; | 660 const CPDF_FormObject* pSrcObj = (const CPDF_FormObject*)pSrc; |
657 delete m_pForm; | 661 delete m_pForm; |
(...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
982 (FX_FLOAT)y0); | 986 (FX_FLOAT)y0); |
983 matrix = m_PageMatrix; | 987 matrix = m_PageMatrix; |
984 matrix.Concat(display_matrix); | 988 matrix.Concat(display_matrix); |
985 } | 989 } |
986 CPDF_ParseOptions::CPDF_ParseOptions() { | 990 CPDF_ParseOptions::CPDF_ParseOptions() { |
987 m_bTextOnly = FALSE; | 991 m_bTextOnly = FALSE; |
988 m_bMarkedContent = TRUE; | 992 m_bMarkedContent = TRUE; |
989 m_bSeparateForm = TRUE; | 993 m_bSeparateForm = TRUE; |
990 m_bDecodeInlineImage = FALSE; | 994 m_bDecodeInlineImage = FALSE; |
991 } | 995 } |
OLD | NEW |