kumarashishg | 826308d | 2023-06-23 13:21:22 +0000 | [diff] [blame] | 1 | // Copyright 2016 The PDFium Authors |
Philip P. Moltmann | d904c1e | 2018-03-19 09:26:45 -0700 | [diff] [blame] | 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/fxge/cfx_graphstate.h" |
| 8 | |
Haibo Huang | 49cc930 | 2020-04-27 16:14:24 -0700 | [diff] [blame] | 9 | #include <utility> |
Philip P. Moltmann | d904c1e | 2018-03-19 09:26:45 -0700 | [diff] [blame] | 10 | |
Haibo Huang | 49cc930 | 2020-04-27 16:14:24 -0700 | [diff] [blame] | 11 | CFX_GraphState::CFX_GraphState() = default; |
Philip P. Moltmann | d904c1e | 2018-03-19 09:26:45 -0700 | [diff] [blame] | 12 | |
| 13 | CFX_GraphState::CFX_GraphState(const CFX_GraphState& that) |
| 14 | : m_Ref(that.m_Ref) {} |
| 15 | |
Haibo Huang | 49cc930 | 2020-04-27 16:14:24 -0700 | [diff] [blame] | 16 | CFX_GraphState::~CFX_GraphState() = default; |
Philip P. Moltmann | d904c1e | 2018-03-19 09:26:45 -0700 | [diff] [blame] | 17 | |
| 18 | void CFX_GraphState::Emplace() { |
| 19 | m_Ref.Emplace(); |
| 20 | } |
| 21 | |
Haibo Huang | 49cc930 | 2020-04-27 16:14:24 -0700 | [diff] [blame] | 22 | void CFX_GraphState::SetLineDash(std::vector<float> dashes, |
| 23 | float phase, |
| 24 | float scale) { |
Philip P. Moltmann | d904c1e | 2018-03-19 09:26:45 -0700 | [diff] [blame] | 25 | CFX_GraphStateData* pData = m_Ref.GetPrivateCopy(); |
| 26 | pData->m_DashPhase = phase * scale; |
Haibo Huang | 49cc930 | 2020-04-27 16:14:24 -0700 | [diff] [blame] | 27 | for (float& val : dashes) |
| 28 | val *= scale; |
| 29 | pData->m_DashArray = std::move(dashes); |
Philip P. Moltmann | d904c1e | 2018-03-19 09:26:45 -0700 | [diff] [blame] | 30 | } |
| 31 | |
kumarashishg | 826308d | 2023-06-23 13:21:22 +0000 | [diff] [blame] | 32 | void CFX_GraphState::SetLineDashPhase(float phase) { |
| 33 | CFX_GraphStateData* pData = m_Ref.GetPrivateCopy(); |
| 34 | pData->m_DashPhase = phase; |
| 35 | } |
| 36 | |
| 37 | std::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 | |
| 46 | size_t CFX_GraphState::GetLineDashSize() const { |
| 47 | return m_Ref.GetObject() ? m_Ref.GetObject()->m_DashArray.size() : 0; |
| 48 | } |
| 49 | |
| 50 | float CFX_GraphState::GetLineDashPhase() const { |
| 51 | return m_Ref.GetObject() ? m_Ref.GetObject()->m_DashPhase : 1.0f; |
| 52 | } |
| 53 | |
Philip P. Moltmann | d904c1e | 2018-03-19 09:26:45 -0700 | [diff] [blame] | 54 | float CFX_GraphState::GetLineWidth() const { |
kumarashishg | 826308d | 2023-06-23 13:21:22 +0000 | [diff] [blame] | 55 | return m_Ref.GetObject() ? m_Ref.GetObject()->m_LineWidth : 1.0f; |
Philip P. Moltmann | d904c1e | 2018-03-19 09:26:45 -0700 | [diff] [blame] | 56 | } |
| 57 | |
| 58 | void CFX_GraphState::SetLineWidth(float width) { |
| 59 | m_Ref.GetPrivateCopy()->m_LineWidth = width; |
| 60 | } |
| 61 | |
| 62 | CFX_GraphStateData::LineCap CFX_GraphState::GetLineCap() const { |
| 63 | return m_Ref.GetObject() ? m_Ref.GetObject()->m_LineCap |
kumarashishg | 826308d | 2023-06-23 13:21:22 +0000 | [diff] [blame] | 64 | : CFX_GraphStateData::LineCap::kButt; |
Philip P. Moltmann | d904c1e | 2018-03-19 09:26:45 -0700 | [diff] [blame] | 65 | } |
| 66 | void CFX_GraphState::SetLineCap(CFX_GraphStateData::LineCap cap) { |
| 67 | m_Ref.GetPrivateCopy()->m_LineCap = cap; |
| 68 | } |
| 69 | |
| 70 | CFX_GraphStateData::LineJoin CFX_GraphState::GetLineJoin() const { |
| 71 | return m_Ref.GetObject() ? m_Ref.GetObject()->m_LineJoin |
kumarashishg | 826308d | 2023-06-23 13:21:22 +0000 | [diff] [blame] | 72 | : CFX_GraphStateData::LineJoin::kMiter; |
Philip P. Moltmann | d904c1e | 2018-03-19 09:26:45 -0700 | [diff] [blame] | 73 | } |
| 74 | |
| 75 | void CFX_GraphState::SetLineJoin(CFX_GraphStateData::LineJoin join) { |
| 76 | m_Ref.GetPrivateCopy()->m_LineJoin = join; |
| 77 | } |
| 78 | |
| 79 | float CFX_GraphState::GetMiterLimit() const { |
| 80 | return m_Ref.GetObject() ? m_Ref.GetObject()->m_MiterLimit : 10.f; |
| 81 | } |
| 82 | |
| 83 | void CFX_GraphState::SetMiterLimit(float limit) { |
| 84 | m_Ref.GetPrivateCopy()->m_MiterLimit = limit; |
| 85 | } |