Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
cpdf_generalstate.cpp
Go to the documentation of this file.
1// Copyright 2016 The PDFium Authors
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/fpdfapi/page/cpdf_generalstate.h"
8
9#include <utility>
10
11#include "core/fpdfapi/page/cpdf_transferfunc.h"
12#include "core/fpdfapi/parser/cpdf_dictionary.h"
13#include "core/fpdfapi/parser/cpdf_object.h"
14
15namespace {
16
17int RI_StringToId(const ByteString& ri) {
18 uint32_t id = ri.GetID();
19 if (id == FXBSTR_ID('A', 'b', 's', 'o'))
20 return 1;
21
22 if (id == FXBSTR_ID('S', 'a', 't', 'u'))
23 return 2;
24
25 if (id == FXBSTR_ID('P', 'e', 'r', 'c'))
26 return 3;
27
28 return 0;
29}
30
31BlendMode GetBlendTypeInternal(const ByteString& mode) {
32 switch (mode.GetID()) {
33 case FXBSTR_ID('N', 'o', 'r', 'm'):
34 case FXBSTR_ID('C', 'o', 'm', 'p'):
35 return BlendMode::kNormal;
36 case FXBSTR_ID('M', 'u', 'l', 't'):
38 case FXBSTR_ID('S', 'c', 'r', 'e'):
39 return BlendMode::kScreen;
40 case FXBSTR_ID('O', 'v', 'e', 'r'):
42 case FXBSTR_ID('D', 'a', 'r', 'k'):
43 return BlendMode::kDarken;
44 case FXBSTR_ID('L', 'i', 'g', 'h'):
46 case FXBSTR_ID('C', 'o', 'l', 'o'):
47 if (mode.GetLength() == 10)
49 if (mode.GetLength() == 9)
51 return BlendMode::kColor;
52 case FXBSTR_ID('H', 'a', 'r', 'd'):
54 case FXBSTR_ID('S', 'o', 'f', 't'):
56 case FXBSTR_ID('D', 'i', 'f', 'f'):
58 case FXBSTR_ID('E', 'x', 'c', 'l'):
60 case FXBSTR_ID('H', 'u', 'e', 0):
61 return BlendMode::kHue;
62 case FXBSTR_ID('S', 'a', 't', 'u'):
64 case FXBSTR_ID('L', 'u', 'm', 'i'):
66 }
67 return BlendMode::kNormal;
68}
69
70} // namespace
71
73
75
77
79 m_Ref.GetPrivateCopy()->m_RenderIntent = RI_StringToId(ri);
80}
81
83 switch (GetBlendType()) {
108 case BlendMode::kHue:
116 }
118}
119
121 const StateData* pData = m_Ref.GetObject();
122 return pData ? pData->m_BlendType : BlendMode::kNormal;
123}
124
126 if (GetBlendType() != type) {
127 m_Ref.GetPrivateCopy()->m_BlendType = type;
128 }
129}
130
132 const StateData* pData = m_Ref.GetObject();
133 return pData ? pData->m_FillAlpha : 1.0f;
134}
135
136void CPDF_GeneralState::SetFillAlpha(float alpha) {
137 if (GetFillAlpha() != alpha) {
138 m_Ref.GetPrivateCopy()->m_FillAlpha = alpha;
139 }
140}
141
143 const StateData* pData = m_Ref.GetObject();
144 return pData ? pData->m_StrokeAlpha : 1.0f;
145}
146
148 if (GetStrokeAlpha() != alpha) {
149 m_Ref.GetPrivateCopy()->m_StrokeAlpha = alpha;
150 }
151}
152
154 const StateData* pData = m_Ref.GetObject();
155 return pData ? pData->m_pSoftMask : nullptr;
156}
157
159 const StateData* pData = m_Ref.GetObject();
160 return pData ? pData->m_pSoftMask : nullptr;
161}
162
164 m_Ref.GetPrivateCopy()->m_pSoftMask = std::move(pDict);
165}
166
168 const StateData* pData = m_Ref.GetObject();
169 return pData ? pData->m_pTR : nullptr;
170}
171
173 m_Ref.GetPrivateCopy()->m_pTR = std::move(pObject);
174}
175
176RetainPtr<CPDF_TransferFunc> CPDF_GeneralState::GetTransferFunc() const {
177 const StateData* pData = m_Ref.GetObject();
178 return pData ? pData->m_pTransferFunc : nullptr;
179}
180
181void CPDF_GeneralState::SetTransferFunc(RetainPtr<CPDF_TransferFunc> pFunc) {
182 m_Ref.GetPrivateCopy()->m_pTransferFunc = std::move(pFunc);
183}
184
186 StateData* pData = m_Ref.GetPrivateCopy();
187 pData->m_BlendMode = mode;
188 pData->m_BlendType = GetBlendTypeInternal(mode);
189}
190
192 const StateData* pData = m_Ref.GetObject();
193 return pData ? &pData->m_SMaskMatrix : nullptr;
194}
195
197 m_Ref.GetPrivateCopy()->m_SMaskMatrix = matrix;
198}
199
201 const StateData* pData = m_Ref.GetObject();
202 return pData && pData->m_FillOP;
203}
204
206 m_Ref.GetPrivateCopy()->m_FillOP = op;
207}
208
210 m_Ref.GetPrivateCopy()->m_StrokeOP = op;
211}
212
214 const StateData* pData = m_Ref.GetObject();
215 return pData && pData->m_StrokeOP;
216}
217
219 return m_Ref.GetObject()->m_OPMode;
220}
221
223 m_Ref.GetPrivateCopy()->m_OPMode = mode;
224}
225
227 m_Ref.GetPrivateCopy()->m_pBG = std::move(pObject);
228}
229
231 m_Ref.GetPrivateCopy()->m_pUCR = std::move(pObject);
232}
233
235 m_Ref.GetPrivateCopy()->m_pHT = std::move(pObject);
236}
237
238void CPDF_GeneralState::SetFlatness(float flatness) {
239 m_Ref.GetPrivateCopy()->m_Flatness = flatness;
240}
241
242void CPDF_GeneralState::SetSmoothness(float smoothness) {
243 m_Ref.GetPrivateCopy()->m_Smoothness = smoothness;
244}
245
247 const StateData* pData = m_Ref.GetObject();
248 return pData && pData->m_StrokeAdjust;
249}
250
252 m_Ref.GetPrivateCopy()->m_StrokeAdjust = adjust;
253}
254
256 m_Ref.GetPrivateCopy()->m_AlphaSource = source;
257}
258
259void CPDF_GeneralState::SetTextKnockout(bool knockout) {
260 m_Ref.GetPrivateCopy()->m_TextKnockout = knockout;
261}
262
264 std::vector<ByteString> names) {
265 m_Ref.GetPrivateCopy()->m_GraphicsResourceNames = std::move(names);
266}
267
269 m_Ref.GetPrivateCopy()->m_GraphicsResourceNames.push_back(std::move(name));
270}
271
273 const {
274 const StateData* data = m_Ref.GetObject();
275 if (!data) {
276 return {};
277 }
278 return data->m_GraphicsResourceNames;
279}
280
281CPDF_GeneralState::StateData::StateData() = default;
282
283CPDF_GeneralState::StateData::StateData(const StateData& that)
284 : m_BlendMode(that.m_BlendMode),
285 m_BlendType(that.m_BlendType),
286 m_pSoftMask(that.m_pSoftMask),
287 m_SMaskMatrix(that.m_SMaskMatrix),
288 m_StrokeAlpha(that.m_StrokeAlpha),
289 m_FillAlpha(that.m_FillAlpha),
290 m_pTR(that.m_pTR),
291 m_pTransferFunc(that.m_pTransferFunc),
292 m_RenderIntent(that.m_RenderIntent),
293 m_StrokeAdjust(that.m_StrokeAdjust),
294 m_AlphaSource(that.m_AlphaSource),
295 m_TextKnockout(that.m_TextKnockout),
296 m_StrokeOP(that.m_StrokeOP),
297 m_FillOP(that.m_FillOP),
298 m_OPMode(that.m_OPMode),
299 m_pBG(that.m_pBG),
300 m_pUCR(that.m_pUCR),
301 m_pHT(that.m_pHT),
302 m_Flatness(that.m_Flatness),
303 m_Smoothness(that.m_Smoothness) {}
304
305CPDF_GeneralState::StateData::~StateData() = default;
306
307RetainPtr<CPDF_GeneralState::StateData> CPDF_GeneralState::StateData::Clone()
308 const {
309 return pdfium::MakeRetain<CPDF_GeneralState::StateData>(*this);
310}
fxcrt::ByteString ByteString
Definition bytestring.h:180
CFX_Matrix(const CFX_Matrix &other)=default
std::map< ByteString, RetainPtr< CPDF_Object >, std::less<> > DictMap
void AppendGraphicsResourceName(ByteString name)
void SetRenderIntent(const ByteString &ri)
void SetHT(RetainPtr< const CPDF_Object > pObject)
void SetBlendType(BlendMode type)
void SetUCR(RetainPtr< const CPDF_Object > pObject)
float GetStrokeAlpha() const
CPDF_GeneralState(const CPDF_GeneralState &that)
void SetTransferFunc(RetainPtr< CPDF_TransferFunc > pFunc)
RetainPtr< CPDF_TransferFunc > GetTransferFunc() const
void SetFillAlpha(float alpha)
void SetStrokeAlpha(float alpha)
void SetSmoothness(float smoothness)
void SetTR(RetainPtr< const CPDF_Object > pObject)
BlendMode GetBlendType() const
void SetStrokeAdjust(bool adjust)
RetainPtr< const CPDF_Object > GetTR() const
void SetBlendMode(const ByteString &mode)
pdfium::span< const ByteString > GetGraphicsResourceNames() const
void SetSMaskMatrix(const CFX_Matrix &matrix)
void SetGraphicsResourceNames(std::vector< ByteString > names)
const CFX_Matrix * GetSMaskMatrix() const
void SetSoftMask(RetainPtr< CPDF_Dictionary > pDict)
void SetBG(RetainPtr< const CPDF_Object > pObject)
ByteString GetBlendMode() const
void SetAlphaSource(bool source)
void SetTextKnockout(bool knockout)
RetainPtr< CPDF_Dictionary > GetMutableSoftMask()
RetainPtr< const CPDF_Dictionary > GetSoftMask() const
void SetFlatness(float flatness)
uint32_t GetID() const
Definition bytestring.h:98
ByteString(const char *ptr)
BlendMode
Definition fx_dib.h:119
@ kExclusion
Definition fx_dib.h:131
@ kNormal
Definition fx_dib.h:120
@ kSaturation
Definition fx_dib.h:133
@ kColorBurn
Definition fx_dib.h:127
@ kLighten
Definition fx_dib.h:125
@ kMultiply
Definition fx_dib.h:121
@ kColorDodge
Definition fx_dib.h:126
@ kScreen
Definition fx_dib.h:122
@ kLuminosity
Definition fx_dib.h:135
@ kSoftLight
Definition fx_dib.h:129
@ kDifference
Definition fx_dib.h:130
@ kOverlay
Definition fx_dib.h:123
@ kHardLight
Definition fx_dib.h:128
@ kDarken
Definition fx_dib.h:124
constexpr uint32_t FXBSTR_ID(uint8_t c1, uint8_t c2, uint8_t c3, uint8_t c4)
Definition fx_string.h:19
const char kColorDodge[]
const char kHardLight[]
const char kDifference[]
const char kExclusion[]
const char kSaturation[]
const char kLuminosity[]
const char kSoftLight[]
const char kColorBurn[]