| 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/src/fpdfapi/fpdf_page/pageint.h" | 7 #include "core/src/fpdfapi/fpdf_page/pageint.h" |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 | 10 |
| 11 #include "core/include/fpdfapi/fpdf_module.h" | 11 #include "core/include/fpdfapi/fpdf_module.h" |
| 12 #include "core/include/fpdfapi/fpdf_page.h" | 12 #include "core/include/fpdfapi/fpdf_page.h" |
| 13 #include "third_party/base/stl_util.h" | 13 #include "third_party/base/stl_util.h" |
| 14 | 14 |
| 15 CPDF_PageObject* CPDF_PageObject::Create(int type) { | 15 CPDF_PageObject* CPDF_PageObject::Create(Type type) { |
| 16 switch (type) { | 16 switch (type) { |
| 17 case TEXT: | 17 case TEXT: |
| 18 return new CPDF_TextObject; | 18 return new CPDF_TextObject; |
| 19 case IMAGE: | 19 case IMAGE: |
| 20 return new CPDF_ImageObject; | 20 return new CPDF_ImageObject; |
| 21 case PATH: | 21 case PATH: |
| 22 return new CPDF_PathObject; | 22 return new CPDF_PathObject; |
| 23 case SHADING: | 23 case SHADING: |
| 24 return new CPDF_ShadingObject; | 24 return new CPDF_ShadingObject; |
| 25 case FORM: | 25 case FORM: |
| 26 return new CPDF_FormObject; | 26 return new CPDF_FormObject; |
| 27 } | 27 } |
| 28 return NULL; | 28 return NULL; |
| 29 } | 29 } |
| 30 CPDF_PageObject::~CPDF_PageObject() {} | 30 CPDF_PageObject::~CPDF_PageObject() {} |
| 31 CPDF_PageObject* CPDF_PageObject::Clone() const { | 31 CPDF_PageObject* CPDF_PageObject::Clone() const { |
| 32 CPDF_PageObject* pObj = Create(m_Type); | 32 CPDF_PageObject* pObj = Create(GetType()); |
| 33 pObj->Copy(this); | 33 pObj->Copy(this); |
| 34 return pObj; | 34 return pObj; |
| 35 } | 35 } |
| 36 void CPDF_PageObject::Copy(const CPDF_PageObject* pSrc) { | 36 void CPDF_PageObject::Copy(const CPDF_PageObject* pSrc) { |
| 37 if (m_Type != pSrc->m_Type) { | 37 if (GetType() != pSrc->GetType()) { |
| 38 return; | 38 return; |
| 39 } | 39 } |
| 40 CopyData(pSrc); | 40 CopyData(pSrc); |
| 41 CopyStates(*pSrc); | 41 CopyStates(*pSrc); |
| 42 m_Left = pSrc->m_Left; | 42 m_Left = pSrc->m_Left; |
| 43 m_Right = pSrc->m_Right; | 43 m_Right = pSrc->m_Right; |
| 44 m_Top = pSrc->m_Top; | 44 m_Top = pSrc->m_Top; |
| 45 m_Bottom = pSrc->m_Bottom; | 45 m_Bottom = pSrc->m_Bottom; |
| 46 } | 46 } |
| 47 void CPDF_PageObject::AppendClipPath(CPDF_Path path, | 47 void CPDF_PageObject::AppendClipPath(CPDF_Path path, |
| 48 int type, | 48 int type, |
| 49 FX_BOOL bAutoMerge) { | 49 FX_BOOL bAutoMerge) { |
| 50 m_ClipPath.AppendPath(path, type, bAutoMerge); | 50 m_ClipPath.AppendPath(path, type, bAutoMerge); |
| 51 } | 51 } |
| 52 void CPDF_PageObject::CopyClipPath(CPDF_PageObject* pObj) { | 52 void CPDF_PageObject::CopyClipPath(CPDF_PageObject* pObj) { |
| 53 m_ClipPath = pObj->m_ClipPath; | 53 m_ClipPath = pObj->m_ClipPath; |
| 54 } | 54 } |
| 55 void CPDF_PageObject::RemoveClipPath() { | 55 void CPDF_PageObject::RemoveClipPath() { |
| 56 m_ClipPath.SetNull(); | 56 m_ClipPath.SetNull(); |
| 57 } | 57 } |
| 58 void CPDF_PageObject::RecalcBBox() { | 58 void CPDF_PageObject::RecalcBBox() { |
| 59 switch (m_Type) { | 59 switch (GetType()) { |
| 60 case TEXT: | 60 case TEXT: |
| 61 ((CPDF_TextObject*)this)->RecalcPositionData(); | 61 ((CPDF_TextObject*)this)->RecalcPositionData(); |
| 62 break; | 62 break; |
| 63 case PATH: | 63 case PATH: |
| 64 ((CPDF_PathObject*)this)->CalcBoundingBox(); | 64 ((CPDF_PathObject*)this)->CalcBoundingBox(); |
| 65 break; | 65 break; |
| 66 case SHADING: | 66 case SHADING: |
| 67 ((CPDF_ShadingObject*)this)->CalcBoundingBox(); | 67 ((CPDF_ShadingObject*)this)->CalcBoundingBox(); |
| 68 break; | 68 break; |
| 69 default: | 69 default: |
| (...skipping 16 matching lines...) Expand all Loading... |
| 86 } | 86 } |
| 87 FX_RECT CPDF_PageObject::GetBBox(const CFX_Matrix* pMatrix) const { | 87 FX_RECT CPDF_PageObject::GetBBox(const CFX_Matrix* pMatrix) const { |
| 88 CFX_FloatRect rect(m_Left, m_Bottom, m_Right, m_Top); | 88 CFX_FloatRect rect(m_Left, m_Bottom, m_Right, m_Top); |
| 89 if (pMatrix) { | 89 if (pMatrix) { |
| 90 pMatrix->TransformRect(rect); | 90 pMatrix->TransformRect(rect); |
| 91 } | 91 } |
| 92 return rect.GetOutterRect(); | 92 return rect.GetOutterRect(); |
| 93 } | 93 } |
| 94 | 94 |
| 95 CPDF_TextObject::CPDF_TextObject() | 95 CPDF_TextObject::CPDF_TextObject() |
| 96 : CPDF_PageObject(TEXT), | 96 : m_PosX(0), |
| 97 m_PosX(0), | |
| 98 m_PosY(0), | 97 m_PosY(0), |
| 99 m_nChars(0), | 98 m_nChars(0), |
| 100 m_pCharCodes(nullptr), | 99 m_pCharCodes(nullptr), |
| 101 m_pCharPos(nullptr) {} | 100 m_pCharPos(nullptr) {} |
| 102 | 101 |
| 103 CPDF_TextObject::~CPDF_TextObject() { | 102 CPDF_TextObject::~CPDF_TextObject() { |
| 104 if (m_nChars > 1) { | 103 if (m_nChars > 1) { |
| 105 FX_Free(m_pCharCodes); | 104 FX_Free(m_pCharCodes); |
| 106 } | 105 } |
| 107 FX_Free(m_pCharPos); | 106 FX_Free(m_pCharPos); |
| (...skipping 496 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 604 FXSYS_memcpy(m_pCharPos, pCharPos, sizeof(FX_FLOAT) * (nChars - 1)); | 603 FXSYS_memcpy(m_pCharPos, pCharPos, sizeof(FX_FLOAT) * (nChars - 1)); |
| 605 } | 604 } |
| 606 RecalcPositionData(); | 605 RecalcPositionData(); |
| 607 } | 606 } |
| 608 | 607 |
| 609 void CPDF_TextObject::SetTextState(CPDF_TextState TextState) { | 608 void CPDF_TextObject::SetTextState(CPDF_TextState TextState) { |
| 610 m_TextState = TextState; | 609 m_TextState = TextState; |
| 611 CalcPositionData(nullptr, nullptr, 0); | 610 CalcPositionData(nullptr, nullptr, 0); |
| 612 } | 611 } |
| 613 | 612 |
| 614 CPDF_ShadingObject::CPDF_ShadingObject() | 613 CPDF_ShadingObject::CPDF_ShadingObject() : m_pShading(nullptr) {} |
| 615 : CPDF_PageObject(SHADING), m_pShading(nullptr) {} | |
| 616 | 614 |
| 617 CPDF_ShadingObject::~CPDF_ShadingObject() {} | 615 CPDF_ShadingObject::~CPDF_ShadingObject() {} |
| 618 | 616 |
| 619 void CPDF_ShadingObject::CopyData(const CPDF_PageObject* pSrc) { | 617 void CPDF_ShadingObject::CopyData(const CPDF_PageObject* pSrc) { |
| 620 CPDF_ShadingObject* pSrcObj = (CPDF_ShadingObject*)pSrc; | 618 CPDF_ShadingObject* pSrcObj = (CPDF_ShadingObject*)pSrc; |
| 621 m_pShading = pSrcObj->m_pShading; | 619 m_pShading = pSrcObj->m_pShading; |
| 622 if (m_pShading && m_pShading->m_pDocument) { | 620 if (m_pShading && m_pShading->m_pDocument) { |
| 623 CPDF_DocPageData* pDocPageData = m_pShading->m_pDocument->GetPageData(); | 621 CPDF_DocPageData* pDocPageData = m_pShading->m_pDocument->GetPageData(); |
| 624 m_pShading = (CPDF_ShadingPattern*)pDocPageData->GetPattern( | 622 m_pShading = (CPDF_ShadingPattern*)pDocPageData->GetPattern( |
| 625 m_pShading->m_pShadingObj, m_pShading->m_bShadingObj, | 623 m_pShading->m_pShadingObj, m_pShading->m_bShadingObj, |
| (...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 967 (FX_FLOAT)y0); | 965 (FX_FLOAT)y0); |
| 968 matrix = m_PageMatrix; | 966 matrix = m_PageMatrix; |
| 969 matrix.Concat(display_matrix); | 967 matrix.Concat(display_matrix); |
| 970 } | 968 } |
| 971 CPDF_ParseOptions::CPDF_ParseOptions() { | 969 CPDF_ParseOptions::CPDF_ParseOptions() { |
| 972 m_bTextOnly = FALSE; | 970 m_bTextOnly = FALSE; |
| 973 m_bMarkedContent = TRUE; | 971 m_bMarkedContent = TRUE; |
| 974 m_bSeparateForm = TRUE; | 972 m_bSeparateForm = TRUE; |
| 975 m_bDecodeInlineImage = FALSE; | 973 m_bDecodeInlineImage = FALSE; |
| 976 } | 974 } |
| OLD | NEW |