ae2c20f398
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@16 0039d316-1c4b-4281-b951-d872f2087c98
39 linhas
1.2 KiB
Diff
39 linhas
1.2 KiB
Diff
Index: sgl/SkEdge.cpp
|
|
===================================================================
|
|
--- sgl/SkEdge.cpp (revision 42965)
|
|
+++ sgl/SkEdge.cpp (working copy)
|
|
@@ -17,6 +17,7 @@
|
|
|
|
#include "SkEdge.h"
|
|
#include "SkFDot6.h"
|
|
+#include <limits>
|
|
|
|
/*
|
|
In setLine, setQuadratic, setCubic, the first thing we do is to convert
|
|
@@ -76,8 +77,23 @@
|
|
|
|
fX = SkFDot6ToFixed(x0 + SkFixedMul(slope, (32 - y0) & 63)); // + SK_Fixed1/2
|
|
fDX = slope;
|
|
- fFirstY = SkToS16(top);
|
|
- fLastY = SkToS16(bot - 1);
|
|
+ fFirstY = (int16_t)(top); // inlined skToS16()
|
|
+ if (top != (long)fFirstY) {
|
|
+ if (fFirstY < top) {
|
|
+ fFirstY = std::numeric_limits<int16_t>::max();
|
|
+ } else {
|
|
+ fFirstY = std::numeric_limits<int16_t>::min();
|
|
+ }
|
|
+ fX -= fDX * (top - (long)fFirstY);
|
|
+ }
|
|
+ fLastY = (int16_t)(bot - 1); // inlined SkToS16()
|
|
+ if (bot-1 != (long)fLastY) {
|
|
+ if (fLastY < bot-1) {
|
|
+ fLastY = std::numeric_limits<int16_t>::max();
|
|
+ } else {
|
|
+ fLastY = std::numeric_limits<int16_t>::min();
|
|
+ }
|
|
+ }
|
|
fCurveCount = 0;
|
|
fWinding = SkToS8(winding);
|
|
fCurveShift = 0;
|