aboutsummaryrefslogtreecommitdiffhomepage
path: root/samplecode/SamplePathClip.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'samplecode/SamplePathClip.cpp')
-rw-r--r--samplecode/SamplePathClip.cpp30
1 files changed, 14 insertions, 16 deletions
diff --git a/samplecode/SamplePathClip.cpp b/samplecode/SamplePathClip.cpp
index 02a613a72f..a53fe7186b 100644
--- a/samplecode/SamplePathClip.cpp
+++ b/samplecode/SamplePathClip.cpp
@@ -1,4 +1,3 @@
-
/*
* Copyright 2011 Google Inc.
*
@@ -80,7 +79,7 @@ static int clip_line(const SkRect& bounds, SkPoint p0, SkPoint p1, SkPoint edges
if (p0.fY == p1.fY) {
return 0;
}
-
+
if (p0.fY > p1.fY) {
SkTSwap(p0, p1);
}
@@ -88,7 +87,7 @@ static int clip_line(const SkRect& bounds, SkPoint p0, SkPoint p1, SkPoint edges
if (p1.fY <= bounds.top() || p0.fY >= bounds.bottom()) {
return 0;
}
-
+
double dxdy = (double)(p1.fX - p0.fX) / (p1.fY - p0.fY);
if (p0.fY < bounds.top()) {
p0.fX = SkDoubleToScalar(p0.fX + dxdy * (bounds.top() - p0.fY));
@@ -98,14 +97,14 @@ static int clip_line(const SkRect& bounds, SkPoint p0, SkPoint p1, SkPoint edges
p1.fX = SkDoubleToScalar(p1.fX + dxdy * (bounds.bottom() - p1.fY));
p1.fY = bounds.bottom();
}
-
+
// Now p0...p1 is strictly inside bounds vertically, so we just need to clip horizontally
-
+
if (p0.fX > p1.fX) {
SkTSwap(p0, p1);
}
// now we're left-to-right: p0 .. p1
-
+
if (p1.fX <= bounds.left()) { // entirely to the left
p0.fX = p1.fX = bounds.left();
*edges++ = p0;
@@ -118,7 +117,7 @@ static int clip_line(const SkRect& bounds, SkPoint p0, SkPoint p1, SkPoint edges
*edges++ = p1;
return 2;
}
-
+
if (p0.fX < bounds.left()) {
float y = SkDoubleToScalar(p0.fY + (bounds.left() - p0.fX) / dxdy);
*edges++ = SkPoint::Make(bounds.left(), p0.fY);
@@ -157,7 +156,7 @@ public:
SkPoint fPoly[N];
SkRect fClip;
SkColor fEdgeColor[N];
-
+
EdgeClipView() : fClip(SkRect::MakeLTRB(150, 150, 550, 450)) {
fPoly[0].set(300, 40);
fPoly[1].set(550, 250);
@@ -167,7 +166,7 @@ public:
fEdgeColor[1] = 0xFF00FF00;
fEdgeColor[2] = 0xFF0000FF;
}
-
+
protected:
bool onQuery(SkEvent* evt) override {
if (SampleCode::TitleQ(*evt)) {
@@ -240,21 +239,21 @@ protected:
MyClick(SkView* view) : Click(view) {}
virtual void handleMove() = 0;
};
-
+
class VertClick : public MyClick {
SkPoint* fPt;
public:
VertClick(SkView* view, SkPoint* pt) : MyClick(view), fPt(pt) {}
void handleMove() override { *fPt = snap(fCurr); }
};
-
+
class DragRectClick : public MyClick {
SkRect* fRect;
public:
DragRectClick(SkView* view, SkRect* rect) : MyClick(view), fRect(rect) {}
void handleMove() override { fRect->offset(fCurr.x() - fPrev.x(), fCurr.y() - fPrev.y()); }
};
-
+
class DragPolyClick : public MyClick {
SkPoint fSrc[100];
SkPoint* fPoly;
@@ -294,7 +293,7 @@ protected:
return new VertClick(this, &fPoly[i]);
}
}
-
+
SkPath path;
path.addPoly(fPoly, N, true);
if (path.contains(x, y)) {
@@ -306,15 +305,14 @@ protected:
}
return new DoNothingClick(this);
}
-
+
bool onClick(Click* click) override {
((MyClick*)click)->handleMove();
this->inval(nullptr);
return false;
}
-
+
private:
typedef SampleView INHERITED;
};
DEF_SAMPLE( return new EdgeClipView; )
-