Index: android/core/src/processing/core/PMatrix2D.java =================================================================== --- android/core/src/processing/core/PMatrix2D.java (revision 6414) +++ android/core/src/processing/core/PMatrix2D.java (working copy) @@ -190,12 +190,12 @@ public void skewX(float angle) { - apply(1, 0, 1, angle, 0, 0); + apply(1, (float)Math.tan(angle), 0, 0, 1, 0); } public void skewY(float angle) { - apply(1, 0, 1, 0, angle, 0); + apply(1, 0, 0, (float)Math.tan(angle), 1, 0); } @@ -423,7 +423,7 @@ // TODO make this more efficient, or move into PMatrix2D protected boolean isWarped() { - return ((m00 != 1) || (m01 != 0) && + return ((m00 != 1) || (m01 != 0) || // was &&, but changed so skewX and skewY will work (m10 != 0) || (m11 != 1)); } Index: core/src/processing/core/PApplet.java =================================================================== --- core/src/processing/core/PApplet.java (revision 6414) +++ core/src/processing/core/PApplet.java (working copy) @@ -8840,6 +8840,24 @@ /** + * Skew along X axis + */ + public void skewX(float angle) { + if (recorder != null) recorder.skewX(angle); + g.skewX(angle); + } + + + /** + * Skew along Y axis + */ + public void skewY(float angle) { + if (recorder != null) recorder.skewY(angle); + g.skewY(angle); + } + + + /** * Set the current transformation matrix to identity. */ public void resetMatrix() { Index: core/src/processing/core/PGraphics2D.java =================================================================== --- core/src/processing/core/PGraphics2D.java (revision 6414) +++ core/src/processing/core/PGraphics2D.java (working copy) @@ -1886,8 +1886,16 @@ showDepthWarningXYZ("scale"); } + public void skewX(float angle) { + ctm.skewX(angle); + } + public void skewY(float angle) { + ctm.skewY(angle); + } + + ////////////////////////////////////////////////////////////// // TRANSFORMATION MATRIX Index: core/src/processing/core/PGraphicsJava2D.java =================================================================== --- core/src/processing/core/PGraphicsJava2D.java (revision 6414) +++ core/src/processing/core/PGraphicsJava2D.java (working copy) @@ -1221,8 +1221,15 @@ showDepthWarningXYZ("scale"); } + public void skewX(float angle) { + g2.shear(Math.tan(angle), 0); + } + public void skewY(float angle) { + g2.shear(0, Math.tan(angle)); + } + ////////////////////////////////////////////////////////////// // MATRIX MORE Index: core/src/processing/core/PMatrix2D.java =================================================================== --- core/src/processing/core/PMatrix2D.java (revision 6414) +++ core/src/processing/core/PMatrix2D.java (working copy) @@ -191,12 +191,12 @@ public void skewX(float angle) { - apply(1, 0, 1, angle, 0, 0); + apply(1, (float)Math.tan(angle), 0, 0, 1, 0); } public void skewY(float angle) { - apply(1, 0, 1, 0, angle, 0); + apply(1, 0, 0, (float)Math.tan(angle), 1, 0); } @@ -424,7 +424,7 @@ // TODO make this more efficient, or move into PMatrix2D protected boolean isWarped() { - return ((m00 != 1) || (m01 != 0) && + return ((m00 != 1) || (m01 != 0) || // was &&, but changed so skewX and skewY work (m10 != 0) || (m11 != 1)); } Index: core/src/processing/core/PGraphics.java =================================================================== --- core/src/processing/core/PGraphics.java (revision 6414) +++ core/src/processing/core/PGraphics.java (working copy) @@ -3763,6 +3763,19 @@ showMissingWarning("scale"); } + /** + * Skew along X axis + */ + public void skewX(float angle) { + showMissingWarning("skewX"); + } + + /** + * Skew along Y axis + */ + public void skewY(float angle) { + showMissingWarning("skewY"); + } ////////////////////////////////////////////////////////////// Index: build/shared/lib/keywords.txt =================================================================== --- build/shared/lib/keywords.txt (revision 6414) +++ build/shared/lib/keywords.txt (working copy) @@ -497,6 +497,8 @@ rotateZ KEYWORD2 PShape_rotateZ_ scale KEYWORD2 PShape_scale_ setVisible KEYWORD2 PShape_setVisible_ +skewX KEYWORD2 PShape_skewX_ +skewY KEYWORD2 PShape_skewY_ translate KEYWORD2 PShape_translate_ public KEYWORD1 public pushMatrix KEYWORD2 pushMatrix_ @@ -559,6 +561,8 @@ shorten KEYWORD2 shorten_ sin KEYWORD2 sin_ size KEYWORD2 size_ +skewX KEYWORD2 skewX_ +skewY KEYWORD2 skewY_ smooth KEYWORD2 smooth_ sort KEYWORD2 sort_ specular KEYWORD2 specular_