Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Toggle main menu visibility
Loading...
Searching...
No Matches
cxfa_stroke.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
"xfa/fxfa/parser/cxfa_stroke.h"
8
9
#
include
<
math
.
h
>
10
11
#
include
<
utility
>
12
13
#
include
"fxjs/xfa/cjx_object.h"
14
#
include
"xfa/fgas/graphics/cfgas_gecolor.h"
15
#
include
"xfa/fgas/graphics/cfgas_gegraphics.h"
16
#
include
"xfa/fxfa/cxfa_ffwidget.h"
17
#
include
"xfa/fxfa/parser/cxfa_color.h"
18
#
include
"xfa/fxfa/parser/cxfa_document.h"
19
#
include
"xfa/fxfa/parser/cxfa_measurement.h"
20
#
include
"xfa/fxfa/parser/cxfa_node.h"
21
#
include
"xfa/fxfa/parser/xfa_utils.h"
22
23
void
XFA_StrokeTypeSetLineDash
(
CFGAS_GEGraphics
* pGraphics,
24
XFA_AttributeValue
iStrokeType,
25
XFA_AttributeValue
iCapType) {
26
switch
(iStrokeType) {
27
case
XFA_AttributeValue
::DashDot: {
28
float
dashArray[] = {4, 1, 2, 1};
29
if
(iCapType !=
XFA_AttributeValue
::Butt) {
30
dashArray[1] = 2;
31
dashArray[3] = 2;
32
}
33
pGraphics->SetLineDash(0, dashArray);
34
break
;
35
}
36
case
XFA_AttributeValue
::DashDotDot: {
37
float
dashArray[] = {4, 1, 2, 1, 2, 1};
38
if
(iCapType !=
XFA_AttributeValue
::Butt) {
39
dashArray[1] = 2;
40
dashArray[3] = 2;
41
dashArray[5] = 2;
42
}
43
pGraphics->SetLineDash(0, dashArray);
44
break
;
45
}
46
case
XFA_AttributeValue
::Dashed: {
47
float
dashArray[] = {5, 1};
48
if
(iCapType !=
XFA_AttributeValue
::Butt)
49
dashArray[1] = 2;
50
51
pGraphics->SetLineDash(0, dashArray);
52
break
;
53
}
54
case
XFA_AttributeValue
::Dotted: {
55
float
dashArray[] = {2, 1};
56
if
(iCapType !=
XFA_AttributeValue
::Butt)
57
dashArray[1] = 2;
58
59
pGraphics->SetLineDash(0, dashArray);
60
break
;
61
}
62
default
:
63
pGraphics
->
SetSolidLineDash
(
)
;
64
break
;
65
}
66
}
67
68
CXFA_Stroke
::
CXFA_Stroke
(CXFA_Document* pDoc,
69
XFA_PacketType
ePacket,
70
Mask
<
XFA_XDPPACKET
> validPackets,
71
XFA_ObjectType
oType,
72
XFA_Element
eType,
73
pdfium::span<
const
PropertyData> properties,
74
pdfium::span<
const
AttributeData> attributes,
75
CJX_Object
* js_node)
76
:
CXFA_Node
(pDoc,
77
ePacket,
78
validPackets,
79
oType,
80
eType,
81
properties,
82
attributes,
83
js_node) {}
84
85
CXFA_Stroke
::~
CXFA_Stroke
() =
default
;
86
87
bool
CXFA_Stroke
::
IsVisible
() {
88
XFA_AttributeValue
presence = JSObject()
89
->TryEnum(
XFA_Attribute
::Presence,
true
)
90
.value_or(
XFA_AttributeValue
::Visible);
91
return
presence ==
XFA_AttributeValue
::Visible;
92
}
93
94
XFA_AttributeValue
CXFA_Stroke
::
GetCapType
() {
95
return
JSObject()->GetEnum(
XFA_Attribute
::Cap);
96
}
97
98
XFA_AttributeValue
CXFA_Stroke
::
GetStrokeType
() {
99
return
JSObject()->GetEnum(
XFA_Attribute
::Stroke);
100
}
101
102
float
CXFA_Stroke
::
GetThickness
()
const
{
103
return
GetMSThickness
(
)
.
ToUnit
(
XFA_Unit
::
Pt
)
;
104
}
105
106
CXFA_Measurement
CXFA_Stroke
::
GetMSThickness
()
const
{
107
return
JSObject()->GetMeasure(
XFA_Attribute
::Thickness);
108
}
109
110
void
CXFA_Stroke
::
SetMSThickness
(
CXFA_Measurement
msThinkness) {
111
JSObject()->SetMeasure(
XFA_Attribute
::Thickness, msThinkness,
false
);
112
}
113
114
FX_ARGB
CXFA_Stroke
::
GetColor
()
const
{
115
const
auto
* pNode = GetChild<CXFA_Color>(0,
XFA_Element
::Color,
false
);
116
if
(!pNode)
117
return
0xFF000000;
118
119
return
CXFA_Color
::
StringToFXARGB
(
120
pNode->JSObject()->GetCData(
XFA_Attribute
::Value).AsStringView()
)
;
121
}
122
123
void
CXFA_Stroke
::
SetColor
(
FX_ARGB
argb) {
124
CXFA_Color* pNode =
125
JSObject()->GetOrCreateProperty<CXFA_Color>(0,
XFA_Element
::Color);
126
if
(!pNode)
127
return
;
128
129
pNode->JSObject()->SetCData(
130
XFA_Attribute
::Value,
131
WideString
::
FromASCII
(
CFGAS_GEColor
::
ColorToString
(
argb
)
.AsStringView()
)
);
132
}
133
134
XFA_AttributeValue
CXFA_Stroke
::
GetJoinType
() {
135
return
JSObject()->GetEnum(
XFA_Attribute
::Join);
136
}
137
138
bool
CXFA_Stroke
::
IsInverted
() {
139
return
JSObject()->GetBoolean(
XFA_Attribute
::Inverted);
140
}
141
142
float
CXFA_Stroke
::
GetRadius
()
const
{
143
return
JSObject()
144
->TryMeasure(
XFA_Attribute
::Radius,
true
)
145
.value_or(
CXFA_Measurement
(
0
,
XFA_Unit
::
In
)
)
146
.ToUnit(
XFA_Unit
::
Pt
);
147
}
148
149
bool
CXFA_Stroke
::
SameStyles
(
CXFA_Stroke
* stroke,
150
Mask
<
SameStyleOption
> dwFlags) {
151
if
(
this
== stroke)
152
return
true
;
153
if
(fabs(
GetThickness
(
)
- stroke
->
GetThickness
(
)
) >= 0.01f)
154
return
false
;
155
if
(!(dwFlags &
SameStyleOption
::
kNoPresence
) &&
156
IsVisible
(
)
!= stroke
->
IsVisible
(
)
) {
157
return
false
;
158
}
159
if
(
GetStrokeType
(
)
!= stroke
->
GetStrokeType
(
)
)
160
return
false
;
161
if
(
GetColor
(
)
!= stroke
->
GetColor
(
)
)
162
return
false
;
163
if
((dwFlags &
CXFA_Stroke
::
SameStyleOption
::
kCorner
) &&
164
fabs(
GetRadius
(
)
- stroke
->
GetRadius
(
)
) >= 0.01f) {
165
return
false
;
166
}
167
return
true
;
168
}
169
170
void
CXFA_Stroke
::
Stroke
(
CFGAS_GEGraphics
* pGS,
171
const
CFGAS_GEPath& pPath,
172
const
CFX_Matrix
& matrix) {
173
if
(!
IsVisible
(
)
)
174
return
;
175
176
float
fThickness =
GetThickness
(
)
;
177
if
(fThickness < 0.001f)
178
return
;
179
180
CFGAS_GEGraphics
::
StateRestorer
restorer
(
pGS
)
;
181
if
(
IsCorner
(
)
&& fThickness > 2 *
GetRadius
(
)
)
182
fThickness = 2 *
GetRadius
(
)
;
183
184
pGS
->
SetLineWidth
(
fThickness
)
;
185
pGS
->
EnableActOnDash
(
)
;
186
pGS
->
SetLineCap
(
CFX_GraphStateData
::
LineCap
::
kButt
)
;
187
XFA_StrokeTypeSetLineDash
(
pGS
,
GetStrokeType
(
)
,
XFA_AttributeValue
::Butt
)
;
188
pGS
->
SetStrokeColor
(
CFGAS_GEColor
(
GetColor
(
)
)
)
;
189
pGS
->
StrokePath
(
pPath
,
matrix
)
;
190
}
CFGAS_GEColor
Definition
cfgas_gecolor.h:19
CFGAS_GEColor::ColorToString
static ByteString ColorToString(FX_ARGB argb)
Definition
cfgas_gecolor.cpp:24
CFGAS_GEColor::CFGAS_GEColor
CFGAS_GEColor(FX_ARGB argb)
Definition
cfgas_gecolor.cpp:9
CFGAS_GEGraphics::StateRestorer
Definition
cfgas_gegraphics.h:28
CFGAS_GEGraphics::StateRestorer::StateRestorer
StateRestorer(CFGAS_GEGraphics *graphics)
Definition
cfgas_gegraphics.cpp:421
CFGAS_GEGraphics
Definition
cfgas_gegraphics.h:26
CFGAS_GEGraphics::SetLineWidth
void SetLineWidth(float lineWidth)
Definition
cfgas_gegraphics.cpp:157
CFGAS_GEGraphics::SetStrokeColor
void SetStrokeColor(const CFGAS_GEColor &color)
Definition
cfgas_gegraphics.cpp:165
CFGAS_GEGraphics::SetSolidLineDash
void SetSolidLineDash()
Definition
cfgas_gegraphics.cpp:153
CFGAS_GEGraphics::SetLineCap
void SetLineCap(CFX_GraphStateData::LineCap lineCap)
Definition
cfgas_gegraphics.cpp:139
CFGAS_GEGraphics::StrokePath
void StrokePath(const CFGAS_GEPath &path, const CFX_Matrix &matrix)
Definition
cfgas_gegraphics.cpp:173
CFGAS_GEGraphics::EnableActOnDash
void EnableActOnDash()
Definition
cfgas_gegraphics.cpp:161
CFX_GraphStateData
Definition
cfx_graphstatedata.h:16
CFX_GraphStateData::LineCap
LineCap
Definition
cfx_graphstatedata.h:18
CFX_GraphStateData::LineCap::kButt
@ kButt
Definition
cfx_graphstatedata.h:18
CFX_Matrix
Definition
fx_coordinates.h:440
CJX_Object
Definition
cjx_object.h:46
CXFA_Color::StringToFXARGB
static FX_ARGB StringToFXARGB(WideStringView view)
Definition
cxfa_color.cpp:31
CXFA_Measurement
Definition
cxfa_measurement.h:13
CXFA_Measurement::CXFA_Measurement
CXFA_Measurement(float fValue, XFA_Unit eUnit)
Definition
cxfa_measurement.cpp:33
CXFA_Measurement::ToUnit
float ToUnit(XFA_Unit eUnit) const
Definition
cxfa_measurement.cpp:78
CXFA_Node
Definition
cxfa_node.h:94
CXFA_Stroke
Definition
cxfa_stroke.h:23
CXFA_Stroke::GetColor
FX_ARGB GetColor() const
Definition
cxfa_stroke.cpp:114
CXFA_Stroke::GetJoinType
XFA_AttributeValue GetJoinType()
Definition
cxfa_stroke.cpp:134
CXFA_Stroke::CXFA_Stroke
CXFA_Stroke(CXFA_Document *pDoc, XFA_PacketType ePacket, Mask< XFA_XDPPACKET > validPackets, XFA_ObjectType oType, XFA_Element eType, pdfium::span< const PropertyData > properties, pdfium::span< const AttributeData > attributes, CJX_Object *js_node)
Definition
cxfa_stroke.cpp:68
CXFA_Stroke::IsCorner
bool IsCorner() const
Definition
cxfa_stroke.h:32
CXFA_Stroke::GetCapType
XFA_AttributeValue GetCapType()
Definition
cxfa_stroke.cpp:94
CXFA_Stroke::GetRadius
float GetRadius() const
Definition
cxfa_stroke.cpp:142
CXFA_Stroke::Stroke
void Stroke(CFGAS_GEGraphics *pGS, const CFGAS_GEPath &pPath, const CFX_Matrix &matrix)
Definition
cxfa_stroke.cpp:170
CXFA_Stroke::SameStyles
bool SameStyles(CXFA_Stroke *stroke, Mask< SameStyleOption > dwFlags)
Definition
cxfa_stroke.cpp:149
CXFA_Stroke::IsInverted
bool IsInverted()
Definition
cxfa_stroke.cpp:138
CXFA_Stroke::~CXFA_Stroke
~CXFA_Stroke() override
CXFA_Stroke::IsVisible
bool IsVisible()
Definition
cxfa_stroke.cpp:87
CXFA_Stroke::SetMSThickness
void SetMSThickness(CXFA_Measurement msThinkness)
Definition
cxfa_stroke.cpp:110
CXFA_Stroke::SameStyleOption
SameStyleOption
Definition
cxfa_stroke.h:25
CXFA_Stroke::SameStyleOption::kNoPresence
@ kNoPresence
Definition
cxfa_stroke.h:26
CXFA_Stroke::SameStyleOption::kCorner
@ kCorner
Definition
cxfa_stroke.h:27
CXFA_Stroke::GetMSThickness
CXFA_Measurement GetMSThickness() const
Definition
cxfa_stroke.cpp:106
CXFA_Stroke::SetColor
void SetColor(FX_ARGB argb)
Definition
cxfa_stroke.cpp:123
CXFA_Stroke::GetThickness
float GetThickness() const
Definition
cxfa_stroke.cpp:102
CXFA_Stroke::GetStrokeType
XFA_AttributeValue GetStrokeType()
Definition
cxfa_stroke.cpp:98
fxcrt::Mask
Definition
mask.h:15
fxcrt::WideString::FromASCII
static WideString FromASCII(ByteStringView str)
Definition
widestring.cpp:704
XFA_ObjectType
XFA_ObjectType
Definition
cxfa_object.h:21
XFA_StrokeTypeSetLineDash
void XFA_StrokeTypeSetLineDash(CFGAS_GEGraphics *pGraphics, XFA_AttributeValue iStrokeType, XFA_AttributeValue iCapType)
Definition
cxfa_stroke.cpp:23
FX_ARGB
uint32_t FX_ARGB
Definition
fx_dib.h:36
XFA_Unit
XFA_Unit
Definition
fxfa_basic.h:91
XFA_Unit::Pt
@ Pt
Definition
fxfa_basic.h:94
XFA_Unit::In
@ In
Definition
fxfa_basic.h:95
XFA_Attribute
XFA_Attribute
Definition
fxfa_basic.h:67
XFA_XDPPACKET
XFA_XDPPACKET
Definition
fxfa_basic.h:51
XFA_Element
XFA_Element
Definition
fxfa_basic.h:75
XFA_AttributeValue
XFA_AttributeValue
Definition
fxfa_basic.h:60
XFA_PacketType
XFA_PacketType
Definition
fxfa_basic.h:44
WideString
fxcrt::WideString WideString
Definition
widestring.h:207
qtwebengine
src
3rdparty
chromium
third_party
pdfium
xfa
fxfa
parser
cxfa_stroke.cpp
Generated on
for Qt by
1.18.0