// Copyright 2014 PDFium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com #include "../../../include/fpdfapi/fpdf_page.h" #include "../../../include/fpdfapi/fpdf_pageobj.h" #include "../../../include/fpdfapi/fpdf_module.h" #include "pageint.h" void CPDF_PathObject::CopyData(const CPDF_PageObject* pSrc) { const CPDF_PathObject* pSrcObj = (const CPDF_PathObject*)pSrc; m_Path = pSrcObj->m_Path; m_FillType = pSrcObj->m_FillType; m_bStroke = pSrcObj->m_bStroke; m_Matrix = pSrcObj->m_Matrix; } void CPDF_PathObject::Transform(const CPDF_Matrix& matrix) { m_Matrix.Concat(matrix); CalcBoundingBox(); } void CPDF_PathObject::SetGraphState(CPDF_GraphState GraphState) { m_GraphState = GraphState; CalcBoundingBox(); } void CPDF_PathObject::CalcBoundingBox() { if (m_Path.IsNull()) { return; } CFX_FloatRect rect; FX_FLOAT width = m_GraphState.GetObject()->m_LineWidth; if (m_bStroke && width != 0) { rect = m_Path.GetBoundingBox(width, m_GraphState.GetObject()->m_MiterLimit); } else { rect = m_Path.GetBoundingBox(); } rect.Transform(&m_Matrix); if (width == 0 && m_bStroke) { rect.left += -0.5f; rect.right += 0.5f; rect.bottom += -0.5f; rect.top += 0.5f; } m_Left = rect.left; m_Right = rect.right; m_Top = rect.top; m_Bottom = rect.bottom; }