blob: 00520ecf439173ea6372d41bb885c2c38851eba9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
/*
* Copyright 2012 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef SkOpAngle_DEFINED
#define SkOpAngle_DEFINED
#include "SkLineParameters.h"
#include "SkOpSpan.h"
#include "SkPath.h"
#include "SkPathOpsCubic.h"
#include "SkTDArray.h"
// sorting angles
// given angles of {dx dy ddx ddy dddx dddy} sort them
class SkOpAngle {
public:
bool operator<(const SkOpAngle& rh) const;
double dx() const {
return fTangent1.dx();
}
double dy() const {
return fTangent1.dy();
}
int end() const {
return fEnd;
}
bool isHorizontal() const {
return dy() == 0 && fVerb == SkPath::kLine_Verb;
}
bool lengthen();
bool reverseLengthen();
void set(const SkPoint* orig, SkPath::Verb verb, const SkOpSegment* segment,
int start, int end, const SkTDArray<SkOpSpan>& spans);
void setSpans();
SkOpSegment* segment() const {
return const_cast<SkOpSegment*>(fSegment);
}
int sign() const {
return SkSign32(fStart - fEnd);
}
const SkTDArray<SkOpSpan>* spans() const {
return fSpans;
}
int start() const {
return fStart;
}
bool unsortable() const {
return fUnsortable;
}
#if DEBUG_ANGLE
const SkPoint* pts() const {
return fPts;
}
SkPath::Verb verb() const {
return fVerb;
}
void debugShow(const SkPoint& a) const {
SkDebugf(" d=(%1.9g,%1.9g) side=%1.9g\n", dx(), dy(), fSide);
}
#endif
private:
const SkPoint* fPts;
SkDCubic fCurvePart;
SkPath::Verb fVerb;
double fSide;
SkLineParameters fTangent1;
const SkTDArray<SkOpSpan>* fSpans;
const SkOpSegment* fSegment;
int fStart;
int fEnd;
bool fReversed;
mutable bool fUnsortable; // this alone is editable by the less than operator
};
#endif
|