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

Unified Diff: experimental/Intersection/EdgeDemo.cpp

Issue 867213004: remove prototype pathops code (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 5 years, 11 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 | « experimental/Intersection/EdgeDemo.h ('k') | experimental/Intersection/EdgeDemoApp.mm » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: experimental/Intersection/EdgeDemo.cpp
diff --git a/experimental/Intersection/EdgeDemo.cpp b/experimental/Intersection/EdgeDemo.cpp
deleted file mode 100644
index 684dfd99b745d9bde3062368c3e522a67777825e..0000000000000000000000000000000000000000
--- a/experimental/Intersection/EdgeDemo.cpp
+++ /dev/null
@@ -1,347 +0,0 @@
-#include "EdgeDemo.h"
-#include "EdgeWalker_Test.h"
-#include "ShapeOps.h"
-#import "SkCanvas.h"
-#import "SkPaint.h"
-
-extern void showPath(const SkPath& path, const char* str);
-
-static bool drawPaths(SkCanvas* canvas, const SkPath& path, bool useOld)
-{
- SkPath out;
-#define SHOW_PATH 0
-#if SHOW_PATH
- showPath(path, "original:");
-#endif
- if (useOld) {
- simplify(path, true, out);
- } else {
- simplifyx(path, out);
- }
-#if SHOW_PATH
- showPath(out, "simplified:");
-#endif
- SkPaint paint;
- paint.setAntiAlias(true);
- paint.setStyle(SkPaint::kStroke_Style);
-// paint.setStrokeWidth(6);
- // paint.setColor(0x1F003f7f);
- // canvas->drawPath(path, paint);
- paint.setColor(0xFF305F00);
- paint.setStrokeWidth(1);
- canvas->drawPath(out, paint);
- return true;
-}
-
-// Three circles bounce inside a rectangle. The circles describe three, four
-// or five points which in turn describe a polygon. The polygon points
-// bounce inside the circles. The circles rotate and scale over time. The
-// polygons are combined into a single path, simplified, and stroked.
-static bool drawCircles(SkCanvas* canvas, int step, bool useOld)
-{
- const int circles = 3;
- int scales[circles];
- int angles[circles];
- int locs[circles * 2];
- int pts[circles * 2 * 4];
- int c, p;
- for (c = 0; c < circles; ++c) {
- scales[c] = abs(10 - (step + c * 4) % 21);
- angles[c] = (step + c * 6) % 600;
- locs[c * 2] = abs(130 - (step + c * 9) % 261);
- locs[c * 2 + 1] = abs(170 - (step + c * 11) % 341);
- for (p = 0; p < 4; ++p) {
- pts[c * 8 + p * 2] = abs(90 - ((step + c * 121 + p * 13) % 190));
- pts[c * 8 + p * 2 + 1] = abs(110 - ((step + c * 223 + p * 17) % 230));
- }
- }
- SkPath path;
- for (c = 0; c < circles; ++c) {
- for (p = 0; p < 4; ++p) {
- SkScalar x = pts[c * 8 + p * 2];
- SkScalar y = pts[c * 8 + p * 2 + 1];
- x *= 3 + scales[c] / 10.0f;
- y *= 3 + scales[c] / 10.0f;
- SkScalar angle = angles[c] * 3.1415f * 2 / 600;
- SkScalar temp = (SkScalar) (x * cos(angle) - y * sin(angle));
- y = (SkScalar) (x * sin(angle) + y * cos(angle));
- x = temp;
- x += locs[c * 2] * 200 / 130.0f;
- y += locs[c * 2 + 1] * 200 / 170.0f;
- x += 50;
- // y += 200;
- if (p == 0) {
- path.moveTo(x, y);
- } else {
- path.lineTo(x, y);
- }
- }
- path.close();
- }
- return drawPaths(canvas, path, useOld);
-}
-
-static void createStar(SkPath& path, SkScalar innerRadius, SkScalar outerRadius,
- SkScalar startAngle, int points, SkPoint center) {
- SkScalar angle = startAngle;
- for (int index = 0; index < points * 2; ++index) {
- SkScalar radius = index & 1 ? outerRadius : innerRadius;
- SkScalar x = (SkScalar) (radius * cos(angle));
- SkScalar y = (SkScalar) (radius * sin(angle));
- x += center.fX;
- y += center.fY;
- if (index == 0) {
- path.moveTo(x, y);
- } else {
- path.lineTo(x, y);
- }
- angle += 3.1415f / points;
- }
- path.close();
-}
-
-static bool drawStars(SkCanvas* canvas, int step, bool useOld)
-{
- SkPath path;
- const int stars = 25;
- int pts[stars];
- // static bool initialize = true;
- int s;
- for (s = 0; s < stars; ++s) {
- pts[s] = 4 + (s % 7);
- }
- SkPoint locs[stars];
- SkScalar angles[stars];
- SkScalar innerRadius[stars];
- SkScalar outerRadius[stars];
- const int width = 640;
- const int height = 480;
- const int margin = 30;
- const int minRadius = 120;
- const int maxInner = 800;
- const int maxOuter = 1153;
- for (s = 0; s < stars; ++s) {
- int starW = (int) (width - margin * 2 + (SkScalar) s * (stars - s) / stars);
- locs[s].fX = (int) (step * (1.3f * (s + 1) / stars) + s * 121) % (starW * 2);
- if (locs[s].fX > starW) {
- locs[s].fX = starW * 2 - locs[s].fX;
- }
- locs[s].fX += margin;
- int starH = (int) (height - margin * 2 + (SkScalar) s * s / stars);
- locs[s].fY = (int) (step * (1.7f * (s + 1) / stars) + s * 183) % (starH * 2);
- if (locs[s].fY > starH) {
- locs[s].fY = starH * 2 - locs[s].fY;
- }
- locs[s].fY += margin;
- angles[s] = ((step + s * 47) % (360 * 4)) * 3.1415f / 180 / 4;
- innerRadius[s] = (step + s * 30) % (maxInner * 2);
- if (innerRadius[s] > maxInner) {
- innerRadius[s] = (maxInner * 2) - innerRadius[s];
- }
- innerRadius[s] = innerRadius[s] / 4 + minRadius;
- outerRadius[s] = (step + s * 70) % (maxOuter * 2);
- if (outerRadius[s] > maxOuter) {
- outerRadius[s] = (maxOuter * 2) - outerRadius[s];
- }
- outerRadius[s] = outerRadius[s] / 4 + minRadius;
- createStar(path, innerRadius[s] / 4.0f, outerRadius[s] / 4.0f,
- angles[s], pts[s], locs[s]);
- }
- return drawPaths(canvas, path, useOld);
-}
-
-#if 0
-static void tryRoncoOnce(const SkPath& path, const SkRect& target, bool show) {
- // capture everything in a desired rectangle
- SkPath tiny;
- bool closed = true;
- SkPath::Iter iter(path, false);
- SkPoint pts[4];
- SkPath::Verb verb;
- int count = 0;
- SkPoint lastPt;
- while ((verb = iter.next(pts)) != SkPath::kDone_Verb) {
- switch (verb) {
- case SkPath::kMove_Verb:
- count = 0;
- break;
- case SkPath::kLine_Verb:
- count = 1;
- break;
- case SkPath::kQuad_Verb:
- count = 2;
- break;
- case SkPath::kCubic_Verb:
- count = 3;
- break;
- case SkPath::kClose_Verb:
- if (!closed) {
- tiny.close();
- closed = true;
- }
- count = 0;
- break;
- default:
- SkDEBUGFAIL("bad verb");
- }
- if (!count) {
- continue;
- }
- SkRect bounds;
- bounds.set(pts[0].fX, pts[0].fY, pts[0].fX, pts[0].fY);
- for (int i = 1; i <= count; ++i) {
- bounds.growToInclude(pts[i].fX + 0.1f, pts[i].fY + 0.1f);
- }
- if (!SkRect::Intersects(target, bounds)) {
- continue;
- }
- if (closed) {
- tiny.moveTo(pts[0].fX, pts[0].fY);
- closed = false;
- } else if (pts[0] != lastPt) {
- tiny.lineTo(pts[0].fX, pts[0].fY);
- }
- switch (verb) {
- case SkPath::kLine_Verb:
- tiny.lineTo(pts[1].fX, pts[1].fY);
- lastPt = pts[1];
- break;
- case SkPath::kQuad_Verb:
- tiny.quadTo(pts[1].fX, pts[1].fY, pts[2].fX, pts[2].fY);
- lastPt = pts[2];
- break;
- case SkPath::kCubic_Verb:
- tiny.cubicTo(pts[1].fX, pts[1].fY, pts[2].fX, pts[2].fY, pts[3].fX, pts[3].fY);
- lastPt = pts[3];
- break;
- default:
- SkDEBUGFAIL("bad verb");
- }
- }
- if (!closed) {
- tiny.close();
- }
- if (show) {
- showPath(tiny, NULL);
- SkDebugf("simplified:\n");
- }
- testSimplifyx(tiny);
-}
-#endif
-
-#if 0
-static void tryRonco(const SkPath& path) {
- int divMax = 64;
- int divMin = 1;
- int xDivMin = 0;
- int yDivMin = 0;
- bool allYs = true;
- bool allXs = true;
- if (1) {
- divMax = divMin = 64;
- xDivMin = 11;
- yDivMin = 0;
- allXs = true;
- allYs = true;
- }
- for (int divs = divMax; divs >= divMin; divs /= 2) {
- SkDebugf("divs=%d\n",divs);
- const SkRect& overall = path.getBounds();
- SkScalar cellWidth = overall.width() / divs * 2;
- SkScalar cellHeight = overall.height() / divs * 2;
- SkRect target;
- int xDivMax = divMax == divMin && !allXs ? xDivMin + 1 : divs;
- int yDivMax = divMax == divMin && !allYs ? yDivMin + 1 : divs;
- for (int xDiv = xDivMin; xDiv < xDivMax; ++xDiv) {
- SkDebugf("xDiv=%d\n",xDiv);
- for (int yDiv = yDivMin; yDiv < yDivMax; ++yDiv) {
- SkDebugf("yDiv=%d\n",yDiv);
- target.setXYWH(overall.fLeft + (overall.width() - cellWidth) * xDiv / divs,
- overall.fTop + (overall.height() - cellHeight) * yDiv / divs,
- cellWidth, cellHeight);
- tryRoncoOnce(path, target, divMax == divMin);
- }
- }
- }
-}
-#endif
-
-static bool drawLetters(SkCanvas* canvas, int step, bool useOld)
-{
- SkPath path;
- const int width = 640;
- const int height = 480;
- const char testStr[] = "Merge";
- const int testStrLen = sizeof(testStr) - 1;
- SkPoint textPos[testStrLen];
- SkScalar widths[testStrLen];
- SkPaint paint;
- paint.setTextSize(40);
- paint.setAntiAlias(true);
- paint.getTextWidths(testStr, testStrLen, widths, NULL);
- SkScalar running = 0;
- for (int x = 0; x < testStrLen; ++x) {
- SkScalar width = widths[x];
- widths[x] = running;
- running += width;
- }
- SkScalar bias = (width - widths[testStrLen - 1]) / 2;
- for (int x = 0; x < testStrLen; ++x) {
- textPos[x].fX = bias + widths[x];
- textPos[x].fY = height / 2;
- }
- paint.setTextSize(40 + step / 100.0f);
-#if 0
- bool oneShot = false;
- for (int mask = 0; mask < 1 << testStrLen; ++mask) {
- char maskStr[testStrLen];
-#if 1
- mask = 12;
- oneShot = true;
-#endif
- SkDebugf("mask=%d\n", mask);
- for (int letter = 0; letter < testStrLen; ++letter) {
- maskStr[letter] = mask & (1 << letter) ? testStr[letter] : ' ';
- }
- paint.getPosTextPath(maskStr, testStrLen, textPos, &path);
- // showPath(path, NULL);
- // SkDebugf("%d simplified:\n", mask);
- tryRonco(path);
- // testSimplifyx(path);
- if (oneShot) {
- break;
- }
- }
-#endif
- paint.getPosTextPath(testStr, testStrLen, textPos, &path);
-#if 0
- tryRonco(path);
- SkDebugf("RoncoDone!\n");
-#endif
-#if 0
- showPath(path, NULL);
- SkDebugf("simplified:\n");
-#endif
- return drawPaths(canvas, path, false);
-}
-
-static bool (*drawDemos[])(SkCanvas* , int , bool ) = {
- drawStars,
- drawCircles,
- drawLetters,
-};
-
-static size_t drawDemosCount = sizeof(drawDemos) / sizeof(drawDemos[0]);
-
-static bool (*firstTest)(SkCanvas* , int , bool) = drawStars;
-
-
-bool DrawEdgeDemo(SkCanvas* canvas, int step, bool useOld) {
- size_t index = 0;
- if (firstTest) {
- while (index < drawDemosCount && drawDemos[index] != firstTest) {
- ++index;
- }
- }
- return (*drawDemos[index])(canvas, step, useOld);
-}
« no previous file with comments | « experimental/Intersection/EdgeDemo.h ('k') | experimental/Intersection/EdgeDemoApp.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698