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