1e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Copyright 2014 PDFium Authors. All rights reserved. 2e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Use of this source code is governed by a BSD-style license that can be 3e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// found in the LICENSE file. 4ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 5e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 7e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include "pageint.h" 8ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 9ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "core/include/fpdfapi/fpdf_module.h" 10ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "core/include/fpdfapi/fpdf_page.h" 11ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "core/include/fpdfapi/fpdf_pageobj.h" 12ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 13ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_PathObject::CopyData(const CPDF_PageObject* pSrc) { 14ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const CPDF_PathObject* pSrcObj = (const CPDF_PathObject*)pSrc; 15ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Path = pSrcObj->m_Path; 16ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_FillType = pSrcObj->m_FillType; 17ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_bStroke = pSrcObj->m_bStroke; 18ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Matrix = pSrcObj->m_Matrix; 19e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 20ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_PathObject::Transform(const CFX_Matrix& matrix) { 21ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Matrix.Concat(matrix); 22ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CalcBoundingBox(); 23e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 24ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_PathObject::SetGraphState(CPDF_GraphState GraphState) { 25ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_GraphState = GraphState; 26ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CalcBoundingBox(); 27e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 28ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_PathObject::CalcBoundingBox() { 29ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_Path.IsNull()) { 30ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 31ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 32ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_FloatRect rect; 33ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT width = m_GraphState.GetObject()->m_LineWidth; 34ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_bStroke && width != 0) { 35ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rect = m_Path.GetBoundingBox(width, m_GraphState.GetObject()->m_MiterLimit); 36ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 37ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rect = m_Path.GetBoundingBox(); 38ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 39ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rect.Transform(&m_Matrix); 40ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (width == 0 && m_bStroke) { 41ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rect.left += -0.5f; 42ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rect.right += 0.5f; 43ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rect.bottom += -0.5f; 44ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann rect.top += 0.5f; 45ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 46ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Left = rect.left; 47ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Right = rect.right; 48ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Top = rect.top; 49ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Bottom = rect.bottom; 50e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 51