| Index: src/pathops/SkPathOpsLine.cpp
 | 
| ===================================================================
 | 
| --- src/pathops/SkPathOpsLine.cpp	(revision 0)
 | 
| +++ src/pathops/SkPathOpsLine.cpp	(revision 0)
 | 
| @@ -0,0 +1,48 @@
 | 
| +/*
 | 
| + * Copyright 2012 Google Inc.
 | 
| + *
 | 
| + * Use of this source code is governed by a BSD-style license that can be
 | 
| + * found in the LICENSE file.
 | 
| + */
 | 
| +#include "SkPathOpsLine.h"
 | 
| +
 | 
| +SkDLine SkDLine::subDivide(double t1, double t2) const {
 | 
| +    SkDVector delta = tangent();
 | 
| +    SkDLine dst = {{{
 | 
| +            fPts[0].fX - t1 * delta.fX, fPts[0].fY - t1 * delta.fY}, {
 | 
| +            fPts[0].fX - t2 * delta.fX, fPts[0].fY - t2 * delta.fY}}};
 | 
| +    return dst;
 | 
| +}
 | 
| +
 | 
| +// may have this below somewhere else already:
 | 
| +// copying here because I thought it was clever
 | 
| +
 | 
| +// Copyright 2001, softSurfer (www.softsurfer.com)
 | 
| +// This code may be freely used and modified for any purpose
 | 
| +// providing that this copyright notice is included with it.
 | 
| +// SoftSurfer makes no warranty for this code, and cannot be held
 | 
| +// liable for any real or imagined damage resulting from its use.
 | 
| +// Users of this code must verify correctness for their application.
 | 
| +
 | 
| +// Assume that a class is already given for the object:
 | 
| +//    Point with coordinates {float x, y;}
 | 
| +//===================================================================
 | 
| +
 | 
| +// isLeft(): tests if a point is Left|On|Right of an infinite line.
 | 
| +//    Input:  three points P0, P1, and P2
 | 
| +//    Return: >0 for P2 left of the line through P0 and P1
 | 
| +//            =0 for P2 on the line
 | 
| +//            <0 for P2 right of the line
 | 
| +//    See: the January 2001 Algorithm on Area of Triangles
 | 
| +//    return (float) ((P1.x - P0.x)*(P2.y - P0.y) - (P2.x - P0.x)*(P1.y - P0.y));
 | 
| +double SkDLine::isLeft(const SkDPoint& pt) const {
 | 
| +    SkDVector p0 = fPts[1] - fPts[0];
 | 
| +    SkDVector p2 = pt - fPts[0];
 | 
| +    return p0.cross(p2);
 | 
| +}
 | 
| +
 | 
| +SkDPoint SkDLine::xyAtT(double t) const {
 | 
| +    double one_t = 1 - t;
 | 
| +    SkDPoint result = { one_t * fPts[0].fX + t * fPts[1].fX, one_t * fPts[0].fY + t * fPts[1].fY };
 | 
| +    return result;
 | 
| +}
 | 
| 
 |