Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(12)

Unified Diff: gm/strokes.cpp

Issue 1314213002: zero-length cap fix (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: add gm test decl Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | include/core/SkPaint.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gm/strokes.cpp
diff --git a/gm/strokes.cpp b/gm/strokes.cpp
index 0bcb039783de0ce2de1380f57668a025514de7f7..a2302601e26a03d206bf36e7870d944a91d0bf6d 100644
--- a/gm/strokes.cpp
+++ b/gm/strokes.cpp
@@ -8,6 +8,8 @@
#include "gm.h"
#include "SkPath.h"
#include "SkRandom.h"
+#include "SkDashPathEffect.h"
+#include "SkParsePath.h"
#define W 400
#define H 400
@@ -76,16 +78,86 @@ private:
typedef skiagm::GM INHERITED;
};
+/* See
+ https://code.google.com/p/chromium/issues/detail?id=422974 and
+ http://jsfiddle.net/1xnku3sg/2/
+ */
+class ZeroLenStrokesGM : public skiagm::GM {
+ SkPath fMoveHfPath, fMoveZfPath, fDashedfPath, fRefPath[4];
+protected:
+ void onOnceBeforeDraw() override {
+
+ SkAssertResult(SkParsePath::FromSVGString("M0,0h0M10,0h0M20,0h0", &fMoveHfPath));
+ SkAssertResult(SkParsePath::FromSVGString("M0,0zM10,0zM20,0z", &fMoveZfPath));
+ SkAssertResult(SkParsePath::FromSVGString("M0,0h25", &fDashedfPath));
+
+ for (int i = 0; i < 3; ++i) {
+ fRefPath[0].addCircle(i * 10.f, 0, 5);
+ fRefPath[1].addCircle(i * 10.f, 0, 10);
+ fRefPath[2].addRect(i * 10.f - 4, -2, i * 10.f + 4, 6);
+ fRefPath[3].addRect(i * 10.f - 10, -10, i * 10.f + 10, 10);
+ }
+ }
+
+ SkString onShortName() override {
+ return SkString("zeroPath");
+ }
+
+ SkISize onISize() override {
+ return SkISize::Make(W, H*2);
+ }
+
+ void onDraw(SkCanvas* canvas) override {
+ SkPaint fillPaint, strokePaint, dashPaint;
+ fillPaint.setAntiAlias(true);
+ strokePaint = fillPaint;
+ strokePaint.setStyle(SkPaint::kStroke_Style);
+ for (int i = 0; i < 2; ++i) {
+ fillPaint.setAlpha(255);
+ strokePaint.setAlpha(255);
+ strokePaint.setStrokeWidth(i ? 8.f : 10.f);
+ strokePaint.setStrokeCap(i ? SkPaint::kSquare_Cap : SkPaint::kRound_Cap);
+ canvas->save();
+ canvas->translate(10 + i * 100.f, 10);
+ canvas->drawPath(fMoveHfPath, strokePaint);
+ canvas->translate(0, 20);
+ canvas->drawPath(fMoveZfPath, strokePaint);
+ dashPaint = strokePaint;
+ const SkScalar intervals[] = { 0, 10 };
+ dashPaint.setPathEffect(SkDashPathEffect::Create(intervals, 2, 0))->unref();
+ SkPath fillPath;
+ dashPaint.getFillPath(fDashedfPath, &fillPath);
+ canvas->translate(0, 20);
+ canvas->drawPath(fDashedfPath, dashPaint);
+ canvas->translate(0, 20);
+ canvas->drawPath(fRefPath[i * 2], fillPaint);
+ strokePaint.setStrokeWidth(20);
+ strokePaint.setAlpha(127);
+ canvas->translate(0, 50);
+ canvas->drawPath(fMoveHfPath, strokePaint);
+ canvas->translate(0, 30);
+ canvas->drawPath(fMoveZfPath, strokePaint);
+ canvas->translate(0, 30);
+ fillPaint.setAlpha(127);
+ canvas->drawPath(fRefPath[1 + i * 2], fillPaint);
+ canvas->restore();
+ }
+ }
+
+private:
+ typedef skiagm::GM INHERITED;
+};
+
class Strokes2GM : public skiagm::GM {
SkPath fPath;
protected:
void onOnceBeforeDraw() override {
- SkRandom rand;
- fPath.moveTo(0, 0);
- for (int i = 0; i < 13; i++) {
- SkScalar x = rand.nextUScalar1() * (W >> 1);
- SkScalar y = rand.nextUScalar1() * (H >> 1);
- fPath.lineTo(x, y);
+ SkRandom rand;
+ fPath.moveTo(0, 0);
+ for (int i = 0; i < 13; i++) {
+ SkScalar x = rand.nextUScalar1() * (W >> 1);
+ SkScalar y = rand.nextUScalar1() * (H >> 1);
+ fPath.lineTo(x, y);
}
}
@@ -334,3 +406,5 @@ static skiagm::GMRegistry R1(F1);
static skiagm::GMRegistry R2(F2);
static skiagm::GMRegistry R3(F3);
static skiagm::GMRegistry R4(F4);
+
+DEF_GM( return SkNEW(ZeroLenStrokesGM); )
« no previous file with comments | « no previous file | include/core/SkPaint.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698