fix cheapComputeDirection() in the non-convex case to pivot on the y-max point
rather than pivoting on the next. Also remove the loop, as it is just logically wrong to think we can use this trick only a non-extrema pt. git-svn-id: http://skia.googlecode.com/svn/trunk@3014 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
parent
b9349e1cb5
commit
3d19c385e7
@ -10,56 +10,6 @@
|
||||
#include "SkPath.h"
|
||||
#include "SkTypeface.h"
|
||||
|
||||
static void test_path(SkCanvas* canvas, const SkPath& path) {
|
||||
SkPaint paint;
|
||||
paint.setAntiAlias(true);
|
||||
canvas->drawPath(path, paint);
|
||||
|
||||
paint.setStyle(SkPaint::kStroke_Style);
|
||||
paint.setColor(SK_ColorRED);
|
||||
canvas->drawPath(path, paint);
|
||||
}
|
||||
|
||||
static void test_rev(SkCanvas* canvas, const SkPath& path) {
|
||||
test_path(canvas, path);
|
||||
|
||||
SkPath rev;
|
||||
rev.reverseAddPath(path);
|
||||
canvas->save();
|
||||
canvas->translate(SkIntToScalar(150), 0);
|
||||
test_path(canvas, rev);
|
||||
canvas->restore();
|
||||
}
|
||||
|
||||
static void test_rev(SkCanvas* canvas) {
|
||||
SkRect r = { 10, 10, 100, 60 };
|
||||
|
||||
SkPath path;
|
||||
|
||||
path.addRect(r); test_rev(canvas, path);
|
||||
|
||||
canvas->translate(0, 100);
|
||||
path.offset(20, 20);
|
||||
path.addRect(r); test_rev(canvas, path);
|
||||
|
||||
canvas->translate(0, 100);
|
||||
path.reset();
|
||||
path.moveTo(10, 10); path.lineTo(30, 30);
|
||||
path.addOval(r);
|
||||
r.offset(50, 20);
|
||||
path.addOval(r);
|
||||
test_rev(canvas, path);
|
||||
|
||||
SkPaint paint;
|
||||
paint.setTextSize(SkIntToScalar(100));
|
||||
SkTypeface* hira = SkTypeface::CreateFromName("Hiragino Maru Gothic Pro", SkTypeface::kNormal);
|
||||
SkSafeUnref(paint.setTypeface(hira));
|
||||
path.reset();
|
||||
paint.getTextPath("e", 1, 50, 50, &path);
|
||||
canvas->translate(0, 100);
|
||||
test_rev(canvas, path);
|
||||
}
|
||||
|
||||
namespace skiagm {
|
||||
|
||||
class StrokeFillGM : public GM {
|
||||
@ -83,8 +33,8 @@ protected:
|
||||
const size_t len = sizeof(text) - 1;
|
||||
paint.setAntiAlias(true);
|
||||
paint.setTextSize(SkIntToScalar(100));
|
||||
SkTypeface* hira = SkTypeface::CreateFromName("Hiragino Maru Gothic Pro",
|
||||
SkTypeface::kNormal);
|
||||
// SkTypeface* hira = SkTypeface::CreateFromName("Hiragino Maru Gothic Pro", SkTypeface::kNormal);
|
||||
SkTypeface* hira = SkTypeface::CreateFromName("Papyrus", SkTypeface::kNormal);
|
||||
paint.setTypeface(hira);
|
||||
SkScalar x = SkIntToScalar(180);
|
||||
SkScalar y = SkIntToScalar(88);
|
||||
|
@ -1947,21 +1947,9 @@ bool SkPath::cheapComputeDirection(Direction* dir) const {
|
||||
}
|
||||
} else {
|
||||
int i = find_max_y(pts, n);
|
||||
// loop around until we get a non-zero cross
|
||||
for (int j = 0; j < n; ++j) {
|
||||
if (i < n - 2) {
|
||||
cross = cross_prod(pts[i], pts[i + 1], pts[i + 2]);
|
||||
} else {
|
||||
cross = cross_prod(pts[i], pts[(i + 1) % n], pts[(i + 2) % n]);
|
||||
}
|
||||
if (cross) {
|
||||
break;
|
||||
}
|
||||
SkASSERT(i < n);
|
||||
if (++i == n) {
|
||||
i = 0;
|
||||
}
|
||||
}
|
||||
// can't always say (i-1) % n, in case i-1 goes negative, so we
|
||||
// use (i+n-1) % n instead
|
||||
cross = cross_prod(pts[(i + n - 1) % n], pts[i], pts[(i + 1) % n]);
|
||||
}
|
||||
if (cross) {
|
||||
if (dir) {
|
||||
|
Loading…
Reference in New Issue
Block a user