blob: d7b2fd3b782a12bc40fa51f58b5245ea97849609 [file] [log] [blame]
kumarashishg826308d2023-06-23 13:21:22 +00001// Copyright 2016 The PDFium Authors
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -07002// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7#include "core/fpdfapi/page/cpdf_tilingpattern.h"
8
kumarashishg826308d2023-06-23 13:21:22 +00009#include <math.h>
10
11#include <utility>
12
Haibo Huang49cc9302020-04-27 16:14:24 -070013#include "core/fpdfapi/page/cpdf_allstates.h"
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -070014#include "core/fpdfapi/page/cpdf_form.h"
Haibo Huang49cc9302020-04-27 16:14:24 -070015#include "core/fpdfapi/page/cpdf_pageobject.h"
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -070016#include "core/fpdfapi/parser/cpdf_dictionary.h"
17#include "core/fpdfapi/parser/cpdf_object.h"
18#include "core/fpdfapi/parser/cpdf_stream.h"
kumarashishg826308d2023-06-23 13:21:22 +000019#include "third_party/base/check.h"
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -070020
21CPDF_TilingPattern::CPDF_TilingPattern(CPDF_Document* pDoc,
kumarashishg826308d2023-06-23 13:21:22 +000022 RetainPtr<CPDF_Object> pPatternObj,
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -070023 const CFX_Matrix& parentMatrix)
kumarashishg826308d2023-06-23 13:21:22 +000024 : CPDF_Pattern(pDoc, std::move(pPatternObj), parentMatrix) {
25 DCHECK(document());
Philip P. Moltmannd904c1e2018-03-19 09:26:45 -070026 m_bColored = pattern_obj()->GetDict()->GetIntegerFor("PaintType") == 1;
27 SetPatternToFormMatrix();
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -070028}
29
Haibo Huang49cc9302020-04-27 16:14:24 -070030CPDF_TilingPattern::~CPDF_TilingPattern() = default;
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -070031
32CPDF_TilingPattern* CPDF_TilingPattern::AsTilingPattern() {
33 return this;
34}
35
Haibo Huang49cc9302020-04-27 16:14:24 -070036std::unique_ptr<CPDF_Form> CPDF_TilingPattern::Load(CPDF_PageObject* pPageObj) {
kumarashishg826308d2023-06-23 13:21:22 +000037 RetainPtr<const CPDF_Dictionary> pDict = pattern_obj()->GetDict();
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -070038 m_bColored = pDict->GetIntegerFor("PaintType") == 1;
kumarashishg826308d2023-06-23 13:21:22 +000039 m_XStep = fabsf(pDict->GetFloatFor("XStep"));
40 m_YStep = fabsf(pDict->GetFloatFor("YStep"));
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -070041
kumarashishg826308d2023-06-23 13:21:22 +000042 RetainPtr<CPDF_Stream> pStream = ToStream(pattern_obj());
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -070043 if (!pStream)
Haibo Huang49cc9302020-04-27 16:14:24 -070044 return nullptr;
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -070045
Philip P. Moltmannd904c1e2018-03-19 09:26:45 -070046 const CFX_Matrix& matrix = parent_matrix();
kumarashishg826308d2023-06-23 13:21:22 +000047 auto form =
48 std::make_unique<CPDF_Form>(document(), nullptr, std::move(pStream));
Haibo Huang49cc9302020-04-27 16:14:24 -070049
50 CPDF_AllStates allStates;
51 allStates.m_ColorState.Emplace();
52 allStates.m_GraphState.Emplace();
53 allStates.m_TextState.Emplace();
54 allStates.m_GeneralState = pPageObj->m_GeneralState;
55 form->ParseContent(&allStates, &matrix, nullptr);
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -070056 m_BBox = pDict->GetRectFor("BBox");
Haibo Huang49cc9302020-04-27 16:14:24 -070057 return form;
Philip P. Moltmann4d3acf42017-03-20 11:05:52 -070058}