public void moveTo(int x0, int y0) {
    long tx0, ty0;

    if (scaleAndTranslate) {
      tx0 = m00 * x0 + m02;
      ty0 = m11 * y0 + m12;
    } else {
      tx0 = m00 * x0 + m01 * y0 + m02;
      ty0 = m10 * x0 + m11 * y0 + m12;
    }

    //   	System.out.println("PT: moveTo " +
    //   			   ((tx0 >> 16)/65536.0) + ", " +
    //   			   ((ty0 >> 16)/65536.0));
    output.moveTo((int) (tx0 >> 16), (int) (ty0 >> 16));
  }
  public void lineTo(int x1, int y1) {
    long tx1, ty1;

    if (scaleAndTranslate) {
      tx1 = m00 * x1 + m02;
      ty1 = m11 * y1 + m12;
    } else {
      tx1 = m00 * x1 + m01 * y1 + m02;
      ty1 = m10 * x1 + m11 * y1 + m12;
    }

    //   	System.out.println("PT: lineTo " +
    //   			   ((tx1 >> 16)/65536.0) + ", " +
    //   			   ((ty1 >> 16)/65536.0));
    output.lineTo((int) (tx1 >> 16), (int) (ty1 >> 16));
  }
  public void quadTo(int x1, int y1, int x2, int y2) {
    long tx1, ty1, tx2, ty2;

    if (scaleAndTranslate) {
      tx1 = m00 * x1 + m02;
      ty1 = m11 * y1 + m12;
      tx2 = m00 * x2 + m02;
      ty2 = m11 * y2 + m12;
    } else {
      tx1 = m00 * x1 + m01 * y1 + m02;
      ty1 = m10 * x1 + m11 * y1 + m12;
      tx2 = m00 * x2 + m01 * y2 + m02;
      ty2 = m10 * x2 + m11 * y2 + m12;
    }

    // 	System.out.println("PT: quadTo " +
    //  			   ((tx1 >> 16)/65536.0) + ", " +
    //  			   ((ty1 >> 16)/65536.0) + ", " +
    //  			   ((tx2 >> 16)/65536.0) + ", " +
    //  			   ((ty2 >> 16)/65536.0));
    output.quadTo((int) (tx1 >> 16), (int) (ty1 >> 16), (int) (tx2 >> 16), (int) (ty2 >> 16));
  }
 public void lineJoin() {
   output.lineJoin();
 }
 public void end() {
   //  	System.out.println("PT: end");
   output.end();
 }
 public void close() {
   //  	System.out.println("PT: close");
   output.close();
 }
  public void cubicTo(int x1, int y1, int x2, int y2, int x3, int y3) {
    long tx1, ty1, tx2, ty2, tx3, ty3;

    if (scaleAndTranslate) {
      tx1 = m00 * x1 + m02;
      ty1 = m11 * y1 + m12;
      tx2 = m00 * x2 + m02;
      ty2 = m11 * y2 + m12;
      tx3 = m00 * x3 + m02;
      ty3 = m11 * y3 + m12;
    } else {
      tx1 = m00 * x1 + m01 * y1 + m02;
      ty1 = m10 * x1 + m11 * y1 + m12;
      tx2 = m00 * x2 + m01 * y2 + m02;
      ty2 = m10 * x2 + m11 * y2 + m12;
      tx3 = m00 * x3 + m01 * y3 + m02;
      ty3 = m10 * x3 + m11 * y3 + m12;
    }
    //          if (m00 != (1 << 16)) {
    //              tx1 = m00*x1;
    //              tx2 = m00*x2;
    //              tx3 = m00*x3;
    //          } else {
    //              tx1 = (long)x1 << 16;
    //              tx2 = (long)x2 << 16;
    //              tx3 = (long)x3 << 16;
    //          }

    //         if (m11 != (1 << 16)) {
    //             ty1 = m11*y1;
    //             ty2 = m11*y2;
    //             ty3 = m11*y3;
    //         } else {
    //             ty1 = (long)y1 << 16;
    //             ty2 = (long)y2 << 16;
    //             ty3 = (long)y3 << 16;
    //         }

    //         if (m01 != 0) {
    //             tx1 += m01*y1;
    //             tx2 += m01*y2;
    //             tx3 += m01*y3;
    //         }

    //         if (m10 != 0) {
    //             ty1 += m10*x1;
    //             ty2 += m10*x2;
    //             ty3 += m10*x3;
    //         }

    //         if (m02 != 0) {
    //             tx1 += m02;
    //             tx2 += m02;
    //             tx3 += m02;
    //         }

    //         if (m12 != 0) {
    //             ty1 += m12;
    //             ty2 += m12;
    //             ty3 += m12;
    //         }

    //  	System.out.println("PT: cubicTo " +
    //   			   ((tx1 >> 16)/65536.0) + ", " +
    //   			   ((ty1 >> 16)/65536.0) + ", " +
    //   			   ((tx2 >> 16)/65536.0) + ", " +
    //   			   ((ty2 >> 16)/65536.0) + ", " +
    //   			   ((tx3 >> 16)/65536.0) + ", " +
    //   			   ((ty3 >> 16)/65536.0));
    output.cubicTo(
        (int) (tx1 >> 16),
        (int) (ty1 >> 16),
        (int) (tx2 >> 16),
        (int) (ty2 >> 16),
        (int) (tx3 >> 16),
        (int) (ty3 >> 16));
  }