blob: 18f32a3b2d48a6c6836304e50b6b97b2c665763c [file] [log] [blame]
kumarashishg826308d2023-06-23 13:21:22 +00001// Copyright 2016 The PDFium Authors
Philip P. Moltmannd904c1e2018-03-19 09:26:45 -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/fxge/cfx_graphstate.h"
8
Haibo Huang49cc9302020-04-27 16:14:24 -07009#include <utility>
Philip P. Moltmannd904c1e2018-03-19 09:26:45 -070010
Haibo Huang49cc9302020-04-27 16:14:24 -070011CFX_GraphState::CFX_GraphState() = default;
Philip P. Moltmannd904c1e2018-03-19 09:26:45 -070012
13CFX_GraphState::CFX_GraphState(const CFX_GraphState& that)
14 : m_Ref(that.m_Ref) {}
15
Haibo Huang49cc9302020-04-27 16:14:24 -070016CFX_GraphState::~CFX_GraphState() = default;
Philip P. Moltmannd904c1e2018-03-19 09:26:45 -070017
18void CFX_GraphState::Emplace() {
19 m_Ref.Emplace();
20}
21
Haibo Huang49cc9302020-04-27 16:14:24 -070022void CFX_GraphState::SetLineDash(std::vector<float> dashes,
23 float phase,
24 float scale) {
Philip P. Moltmannd904c1e2018-03-19 09:26:45 -070025 CFX_GraphStateData* pData = m_Ref.GetPrivateCopy();
26 pData->m_DashPhase = phase * scale;
Haibo Huang49cc9302020-04-27 16:14:24 -070027 for (float& val : dashes)
28 val *= scale;
29 pData->m_DashArray = std::move(dashes);
Philip P. Moltmannd904c1e2018-03-19 09:26:45 -070030}
31
kumarashishg826308d2023-06-23 13:21:22 +000032void CFX_GraphState::SetLineDashPhase(float phase) {
33 CFX_GraphStateData* pData = m_Ref.GetPrivateCopy();
34 pData->m_DashPhase = phase;
35}
36
37std::vector<float> CFX_GraphState::GetLineDashArray() const {
38 std::vector<float> ret;
39
40 if (m_Ref.GetObject())
41 ret = m_Ref.GetObject()->m_DashArray;
42
43 return ret;
44}
45
46size_t CFX_GraphState::GetLineDashSize() const {
47 return m_Ref.GetObject() ? m_Ref.GetObject()->m_DashArray.size() : 0;
48}
49
50float CFX_GraphState::GetLineDashPhase() const {
51 return m_Ref.GetObject() ? m_Ref.GetObject()->m_DashPhase : 1.0f;
52}
53
Philip P. Moltmannd904c1e2018-03-19 09:26:45 -070054float CFX_GraphState::GetLineWidth() const {
kumarashishg826308d2023-06-23 13:21:22 +000055 return m_Ref.GetObject() ? m_Ref.GetObject()->m_LineWidth : 1.0f;
Philip P. Moltmannd904c1e2018-03-19 09:26:45 -070056}
57
58void CFX_GraphState::SetLineWidth(float width) {
59 m_Ref.GetPrivateCopy()->m_LineWidth = width;
60}
61
62CFX_GraphStateData::LineCap CFX_GraphState::GetLineCap() const {
63 return m_Ref.GetObject() ? m_Ref.GetObject()->m_LineCap
kumarashishg826308d2023-06-23 13:21:22 +000064 : CFX_GraphStateData::LineCap::kButt;
Philip P. Moltmannd904c1e2018-03-19 09:26:45 -070065}
66void CFX_GraphState::SetLineCap(CFX_GraphStateData::LineCap cap) {
67 m_Ref.GetPrivateCopy()->m_LineCap = cap;
68}
69
70CFX_GraphStateData::LineJoin CFX_GraphState::GetLineJoin() const {
71 return m_Ref.GetObject() ? m_Ref.GetObject()->m_LineJoin
kumarashishg826308d2023-06-23 13:21:22 +000072 : CFX_GraphStateData::LineJoin::kMiter;
Philip P. Moltmannd904c1e2018-03-19 09:26:45 -070073}
74
75void CFX_GraphState::SetLineJoin(CFX_GraphStateData::LineJoin join) {
76 m_Ref.GetPrivateCopy()->m_LineJoin = join;
77}
78
79float CFX_GraphState::GetMiterLimit() const {
80 return m_Ref.GetObject() ? m_Ref.GetObject()->m_MiterLimit : 10.f;
81}
82
83void CFX_GraphState::SetMiterLimit(float limit) {
84 m_Ref.GetPrivateCopy()->m_MiterLimit = limit;
85}