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

Unified Diff: gm/OverStroke.cpp

Issue 2161633002: Add Overstroke gm (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Completely reorganized code, added cubics and ovals with overstroke Created 4 years, 5 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 | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gm/OverStroke.cpp
diff --git a/gm/OverStroke.cpp b/gm/OverStroke.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..79dde4fe99c24cc6177e0555435770dbdfd64916
--- /dev/null
+++ b/gm/OverStroke.cpp
@@ -0,0 +1,217 @@
+/*
+ * Copyright 2016 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "gm.h"
+#include "SkPaint.h"
+#include "SkPath.h"
+
+//////// path and paint builders
+
+SkPaint make_overstroke_paint() {
+ SkPaint p;
+ p.setAntiAlias(true);
+ p.setStyle(SkPaint::kStroke_Style);
+ p.setStrokeWidth(500);
+
+ return p;
+}
+
+SkPath quad_path() {
+ SkPoint p1 = SkPoint::Make(0, 0);
reed1 2016/08/02 15:21:31 nit: I think it hurts readability a little to name
Harry Stern 2016/08/02 15:44:02 I actually think the exact opposite. seeing a bunc
+ SkPoint p2 = SkPoint::Make(100, 0);
+ SkPoint p3 = SkPoint::Make(50, -40);
+
+ SkPath path;
+ path.moveTo(p1);
+ path.lineTo(p2);
+ path.quadTo(p3, p1);
+
+ return path;
+}
+
+SkPath cubic_path() {
+ SkPoint p1 = SkPoint::Make(0, 0);
reed1 2016/08/02 15:21:31 ditto
Harry Stern 2016/08/02 15:44:02 Done.
+ SkPoint p2 = SkPoint::Make(25, 75);
+ SkPoint p3 = SkPoint::Make(75, -50);
+ SkPoint p4 = SkPoint::Make(100, 0);
+
+ SkPath path;
+ path.moveTo(p1);
+ path.cubicTo(p2, p3, p4);
+
+ return path;
+}
+
+SkPath oval_path() {
+ SkRect oval = SkRect::MakeWH(100, 50);
reed1 2016/08/02 15:21:31 nit: use SkRect::MakeXYWH(0, -25, 100, 50);
Harry Stern 2016/08/02 15:44:02 Done.
+ oval.offset(0, -25);
+
+ SkPath path;
+ path.arcTo(oval, 0, 359, true);
Harry Stern 2016/08/02 15:44:02 There's no way to make a complete oval just with a
+
+ return path;
+}
+
+///////// quads
+
+void draw_small_quad(SkCanvas *canvas) {
+ // scaled so it's visible
+ canvas->scale(8, 8);
+
+ SkPaint p;
+ p.setAntiAlias(true);
+ p.setStyle(SkPaint::kStroke_Style);
+ p.setStrokeWidth(3);
+
+ SkPath path = quad_path();
+
+ canvas->drawPath(path, p);
+}
+
+void draw_large_quad(SkCanvas *canvas) {
+ SkPaint p = make_overstroke_paint();
+ SkPath path = quad_path();
+
+ canvas->drawPath(path, p);
+}
+
+void draw_quad_fillpath(SkCanvas *canvas) {
+ SkPath path = quad_path();
+ SkPaint p = make_overstroke_paint();
+
+ SkPaint fillp;
+ fillp.setAntiAlias(true);
+ fillp.setStyle(SkPaint::kStroke_Style);
+ fillp.setColor(SK_ColorMAGENTA);
+
+ SkPath fillpath;
+ p.getFillPath(path, &fillpath);
+
+ canvas->drawPath(fillpath, fillp);
+}
+
+void draw_stroked_quad(SkCanvas *canvas) {
+ canvas->translate(200, 0);
+ draw_large_quad(canvas);
+ draw_quad_fillpath(canvas);
+}
+
+////////// cubics
+
+void draw_small_cubic(SkCanvas *canvas) {
+ // scaled so it's visible
+ canvas->scale(8, 8);
+
+ SkPaint p;
+ p.setAntiAlias(true);
+ p.setStyle(SkPaint::kStroke_Style);
+ p.setStrokeWidth(3);
+
+ SkPath path = cubic_path();
+
+ canvas->drawPath(path, p);
+}
+
+void draw_large_cubic(SkCanvas *canvas) {
+ SkPaint p = make_overstroke_paint();
+ SkPath path = cubic_path();
+
+ canvas->drawPath(path, p);
+}
+
+void draw_cubic_fillpath(SkCanvas *canvas) {
+ SkPath path = cubic_path();
+ SkPaint p = make_overstroke_paint();
+
+ SkPaint fillp;
+ fillp.setAntiAlias(true);
+ fillp.setStyle(SkPaint::kStroke_Style);
+ fillp.setColor(SK_ColorMAGENTA);
+
+ SkPath fillpath;
+ p.getFillPath(path, &fillpath);
+
+ canvas->drawPath(fillpath, fillp);
+}
+
+void draw_stroked_cubic(SkCanvas *canvas) {
+ canvas->translate(400, 0);
+ draw_large_cubic(canvas);
+ draw_cubic_fillpath(canvas);
+}
+
+////////// ovals
+
+void draw_small_oval(SkCanvas *canvas) {
+ // scaled so it's visible
+ canvas->scale(8, 8);
+
+ SkPaint p;
+ p.setAntiAlias(true);
+ p.setStyle(SkPaint::kStroke_Style);
+ p.setStrokeWidth(3);
+
+ SkPath path = oval_path();
+
+ canvas->drawPath(path, p);
+}
+
+void draw_large_oval(SkCanvas *canvas) {
+ SkPaint p = make_overstroke_paint();
+ SkPath path = oval_path();
+
+ canvas->drawPath(path, p);
+}
+
+void draw_oval_fillpath(SkCanvas *canvas) {
+ SkPath path = oval_path();
+ SkPaint p = make_overstroke_paint();
+
+ SkPaint fillp;
+ fillp.setAntiAlias(true);
+ fillp.setStyle(SkPaint::kStroke_Style);
+ fillp.setColor(SK_ColorMAGENTA);
+
+ SkPath fillpath;
+ p.getFillPath(path, &fillpath);
+
+ canvas->drawPath(fillpath, fillp);
+}
+
+void draw_stroked_oval(SkCanvas *canvas) {
+ canvas->translate(400, 0);
+ draw_large_oval(canvas);
+ draw_oval_fillpath(canvas);
+}
+
+////////// gm
+
+void (*examples[])(SkCanvas *canvas) = {
+ draw_small_quad, draw_stroked_quad, draw_small_cubic,
+ draw_stroked_cubic, draw_small_oval, draw_stroked_oval,
+};
+
+DEF_SIMPLE_GM(OverStroke, canvas, 500, 500) {
reed1 2016/08/02 15:21:31 // overstroke means ... and that's why I want to e
Harry Stern 2016/08/02 15:44:02 Done, at top of file.
+ const size_t length = sizeof(examples) / sizeof(examples[0]);
+ const size_t width = 2;
+
+ printf("length %ld\n", length);
+
+ for (size_t i = 0; i < length; i++) {
+ int x = i % width;
+ int y = i / width;
+
+ canvas->save();
+ canvas->translate(200 * x, 150 * y);
+ canvas->scale(0.25f, 0.25f);
+ canvas->translate(100, 400);
+
+ examples[i](canvas);
+
+ canvas->restore();
+ }
+}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698