1// Copyright 2016 PDFium Authors. All rights reserved. 2// 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_shadingobject.h" 8 9#include "core/fpdfapi/page/cpdf_shadingpattern.h" 10#include "core/fpdfapi/parser/cpdf_document.h" 11 12CPDF_ShadingObject::CPDF_ShadingObject(CPDF_ShadingPattern* pattern, 13 const CFX_Matrix& matrix) 14 : m_pShading(pattern), m_Matrix(matrix) {} 15 16CPDF_ShadingObject::~CPDF_ShadingObject() {} 17 18CPDF_PageObject::Type CPDF_ShadingObject::GetType() const { 19 return SHADING; 20} 21 22void CPDF_ShadingObject::Transform(const CFX_Matrix& matrix) { 23 if (m_ClipPath.HasRef()) 24 m_ClipPath.Transform(matrix); 25 26 m_Matrix.Concat(matrix); 27 if (m_ClipPath.HasRef()) { 28 CalcBoundingBox(); 29 } else { 30 std::tie(m_Left, m_Right, m_Top, m_Bottom) = 31 matrix.TransformRect(m_Left, m_Right, m_Top, m_Bottom); 32 } 33} 34 35bool CPDF_ShadingObject::IsShading() const { 36 return true; 37} 38 39CPDF_ShadingObject* CPDF_ShadingObject::AsShading() { 40 return this; 41} 42 43const CPDF_ShadingObject* CPDF_ShadingObject::AsShading() const { 44 return this; 45} 46 47void CPDF_ShadingObject::CalcBoundingBox() { 48 if (!m_ClipPath.HasRef()) 49 return; 50 CFX_FloatRect rect = m_ClipPath.GetClipBox(); 51 m_Left = rect.left; 52 m_Bottom = rect.bottom; 53 m_Right = rect.right; 54 m_Top = rect.top; 55} 56