aboutsummaryrefslogtreecommitdiffhomepage
path: root/samplecode/SamplePath.cpp
diff options
context:
space:
mode:
authorGravatar reed <reed@chromium.org>2014-12-17 01:47:32 -0800
committerGravatar Commit bot <commit-bot@chromium.org>2014-12-17 01:47:32 -0800
commit8b5752443f34680d26a73bb6e1e72a8d7cf0f320 (patch)
tree25d12c07db584d2bc71b57bd87126f27b06c8916 /samplecode/SamplePath.cpp
parent287ccfece68de4f2c5fc464a583f202626b38f8c (diff)
add arcto patheffect
BUG=skia: TBR= Review URL: https://codereview.chromium.org/813513003
Diffstat (limited to 'samplecode/SamplePath.cpp')
-rw-r--r--samplecode/SamplePath.cpp65
1 files changed, 45 insertions, 20 deletions
diff --git a/samplecode/SamplePath.cpp b/samplecode/SamplePath.cpp
index 49c51d3ad0..14aae8285c 100644
--- a/samplecode/SamplePath.cpp
+++ b/samplecode/SamplePath.cpp
@@ -214,45 +214,56 @@ DEF_SAMPLE( return new PathView; )
//////////////////////////////////////////////////////////////////////////////
+#include "SkArcToPathEffect.h"
#include "SkCornerPathEffect.h"
#include "SkRandom.h"
class ArcToView : public SampleView {
- SkPaint fPtsPaint, fArcPaint, fSkeletonPaint, fCornerPaint;
+ bool fDoFrame, fDoArcTo, fDoCorner, fDoConic;
+ SkPaint fPtsPaint, fArcToPaint, fSkeletonPaint, fCornerPaint;
public:
enum {
N = 4
};
SkPoint fPts[N];
- SkScalar fRadius;
- ArcToView() : fRadius(50) {
+ ArcToView()
+ : fDoFrame(false), fDoArcTo(false), fDoCorner(false), fDoConic(false)
+ {
SkRandom rand;
for (int i = 0; i < N; ++i) {
fPts[i].fX = 20 + rand.nextUScalar1() * 640;
fPts[i].fY = 20 + rand.nextUScalar1() * 480;
}
+
+ const SkScalar rad = 50;
fPtsPaint.setAntiAlias(true);
fPtsPaint.setStrokeWidth(15);
fPtsPaint.setStrokeCap(SkPaint::kRound_Cap);
- fArcPaint.setAntiAlias(true);
- fArcPaint.setStyle(SkPaint::kStroke_Style);
- fArcPaint.setStrokeWidth(9);
- fArcPaint.setColor(0x800000FF);
+ fArcToPaint.setAntiAlias(true);
+ fArcToPaint.setStyle(SkPaint::kStroke_Style);
+ fArcToPaint.setStrokeWidth(9);
+ fArcToPaint.setColor(0x800000FF);
+ fArcToPaint.setPathEffect(SkArcToPathEffect::Create(rad))->unref();
fCornerPaint.setAntiAlias(true);
fCornerPaint.setStyle(SkPaint::kStroke_Style);
fCornerPaint.setStrokeWidth(13);
fCornerPaint.setColor(SK_ColorGREEN);
- fCornerPaint.setPathEffect(SkCornerPathEffect::Create(fRadius*2))->unref();
+ fCornerPaint.setPathEffect(SkCornerPathEffect::Create(rad*2))->unref();
fSkeletonPaint.setAntiAlias(true);
fSkeletonPaint.setStyle(SkPaint::kStroke_Style);
fSkeletonPaint.setColor(SK_ColorRED);
}
+ void toggle(bool& value) {
+ value = !value;
+ this->inval(NULL);
+ }
+
protected:
// overrides from SkEventSink
bool onQuery(SkEvent* evt) SK_OVERRIDE {
@@ -260,29 +271,43 @@ protected:
SampleCode::TitleR(evt, "ArcTo");
return true;
}
+ SkUnichar uni;
+ if (SampleCode::CharQ(*evt, &uni)) {
+ switch (uni) {
+ case '1': this->toggle(fDoFrame); return true;
+ case '2': this->toggle(fDoArcTo); return true;
+ case '3': this->toggle(fDoCorner); return true;
+ case '4': this->toggle(fDoConic); return true;
+ default: break;
+ }
+ }
return this->INHERITED::onQuery(evt);
}
+
+ void makePath(SkPath* path) {
+ path->moveTo(fPts[0]);
+ for (int i = 1; i < N; ++i) {
+ path->lineTo(fPts[i]);
+ }
+ if (!fDoFrame) {
+ path->close();
+ }
+ }
void onDrawContent(SkCanvas* canvas) SK_OVERRIDE {
canvas->drawPoints(SkCanvas::kPoints_PointMode, N, fPts, fPtsPaint);
SkPath path;
+ this->makePath(&path);
- path.moveTo(fPts[0]);
- for (int i = 1; i < N; ++i) {
- path.lineTo(fPts[i].fX, fPts[i].fY);
+ if (fDoCorner) {
+ canvas->drawPath(path, fCornerPaint);
}
- canvas->drawPath(path, fCornerPaint);
-
- path.reset();
- path.moveTo(fPts[0]);
- for (int i = 1; i < N - 1; ++i) {
- path.arcTo(fPts[i].fX, fPts[i].fY, fPts[i+1].fX, fPts[i+1].fY, fRadius);
+ if (fDoArcTo) {
+ canvas->drawPath(path, fArcToPaint);
}
- path.lineTo(fPts[N - 1]);
- canvas->drawPath(path, fArcPaint);
- canvas->drawPoints(SkCanvas::kPolygon_PointMode, N, fPts, fSkeletonPaint);
+ canvas->drawPath(path, fSkeletonPaint);
}
bool onClick(Click* click) SK_OVERRIDE {