From 2247cb9b485c7bab0346e94892ce1b36b03771ce Mon Sep 17 00:00:00 2001 From: benfry Date: Sun, 14 Nov 2004 03:18:06 +0000 Subject: [PATCH] more work and new icons --- app/PdeEditor.java | 2 +- .../Contents/Resources/processing.icns | Bin 28757 -> 63229 bytes build/windows/launcher/application.ico | Bin 8294 -> 97566 bytes build/windows/make.sh | 1 + core/PApplet.java | 22 +-- core/PGraphics.java | 148 +++++++------- core/PImage.java | 182 +++++++++--------- core/PMethods.java | 14 +- core/todo.txt | 3 + todo.txt | 2 + 10 files changed, 196 insertions(+), 178 deletions(-) diff --git a/app/PdeEditor.java b/app/PdeEditor.java index 8a3afd6f7..ef78fdeab 100644 --- a/app/PdeEditor.java +++ b/app/PdeEditor.java @@ -178,7 +178,7 @@ implements MRJAboutHandler, MRJQuitHandler, MRJPrefsHandler textarea.setRightClickPopup(new TextAreaPopup()); textarea.setTokenMarker(new PdeKeywords()); - textarea.setHorizontalOffset(4); + textarea.setHorizontalOffset(5); //textarea.setBorder(new EmptyBorder(0, 20, 0, 0)); //textarea.setBackground(Color.white); diff --git a/build/macosx/dist/Processing.app/Contents/Resources/processing.icns b/build/macosx/dist/Processing.app/Contents/Resources/processing.icns index 3def58a590a8b5099663858424da8cb88f4a05b7..c0df6e38b4920d657d6c19b7630d4d4fd453ffb9 100755 GIT binary patch literal 63229 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

_{w&U+qQee)ZY} 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 m1j-1M5hx>2M&MNh`dqQOBN53(Bsi?$qs#b_{q zeRQzI`(SXX9mfFuK|j`maFUi|u~sfxXocnLinIf`rcg~3RYXXdAOv7VQ~w7Mm) z*lW^bPp902*~!S}moW+_Re7l-C8CD=bIZ@uR+2tTX3|dS zzLnfdd&y3^r6pU5O1E)!aqTw5xrYeMf{`C0P7(R>v8e~pWS)iXFy~>iZ6XcNI^%Sc zZaR}Bn145&2gDz+uFkHT%xN0Jiy1;GFcBA~En4ZD$Z}H!^93;%>8xgmeMMZ(wUu_T zZk^=00#NBQrI*jTZz(LF!t!a}mO@!@b#d)B#KH0z&saXhDIz~UHuV6S%(Ji^<~&qb zK5M4KbMGqD5MFwK^MLpR*3~v$HK%C^FJ=g(z(ib_wrHhqBFjzbdqK=aI;$CCUlEtH z)XS$jFT(1T>%v`pj#lr+m7nl)Gq#mFREML6dS8#+{1Pyf{3z(K;@?CeCW`O|nz`n45cnsr0Dge) z>aQs0<&LQ$XYP)PC%v}1fqkT|;X~EY-J|8Xl}-G8vHa=!r|Y-zw@+^NF^TT|1Ag$S zN1+STBZ{)`JN#4<16_>pr2`*t7V#|tUmWnsp&dg9pDI8@bcu3&Od*YL3(+Fval6xQ zla5FO_EoI?!KMC00ZsYz(7tL?Lmv3lpg+BtR5ajQk~ONYLZqpuU*!Na4gKuJ3y^X* zomu7f3{u#WD$~Y`@kd!%p1n)D^3$%&4f66Bdi7e{;Hy^ak4Jpf+S9KQdr5>|C+YG1 zU@M(VNa$CH1n(}hPO3%qIlOCVyX|Bi7PPvbV|+{NdZ=x@i_B_cNdQeK66z$66o5+i zbbq|3n3qCcN+B;rLifgO%9+qpl^ZKKJa)y9&5&P#Rn z&uUs5y6bCQ@Snf`hh*&*clDQla`XR#_gVYur5~|bd!6Rs6YS;vDDFD@ws=3Tu#DE(pQ*^y+0`e@N3YPaFLV#ez93^ykzeQ|&}8cK-Vl7E&`&7z6UP7K zG=4W>yNl~h?j!J6&*|0$y~EIYoP>vd0)FiMF&T~ip=5vl=$B?KiyEMxI77Tw3jGA~ z(Y+(!B=kpPH!ZlU@O(!O`v&%a?*QlXME4Vo%MnM%WDW%`Ji;QELOwlRyI#b7wW>>2 zo^y5HzS^9=p46qt*S&V9tJmzgvU>^Q`22*wzw`b}zscvZM>mzRI|K{`UxPLTV{_lV_Q~b9NHM^Y1U5KC6-}P@$n&xq#-eV9p9n0lE#1Hik`!Afo z@ceNjlcsFc`4d|gton25*u1KKh=08LyXq#jvt_KcO&OW~Lmwt$U^8N3s=cK$)|4@I|p5eY2_xyF)P09=VulfDwt1;Kg zCnLYE_4maH@k9N6dn4?>`p%!6GuE^^D02qzZzF)S8UM_@%{b3uWohm$E|-| zaeRJ4{L$ynSGT(Oq5h%%qn^KY?K7XBu>ZpT3;S>Q_n+rNhMXPJf(sNKTPCbmrV z@2bB`-}V>cXB8M#C%axQy>ayyxm|0)1xgHow#_)6==#=QYTp;;^3$%4Z{Nt}b>&Ic&PjG=E7f8O~ z0&QJa{YBn1WIiGO@cK7hckv(UANF53f8qS`IWVmu`!B?wP6b$h{vJ&8|Lz;&Pq+U6 E0R>Sfj{pDw diff --git a/build/windows/launcher/application.ico b/build/windows/launcher/application.ico index 2e8b3b7ae6f4a59c78e0341dc3b21a77cbcdb147..0d50b66f4a5d0345a13b27f89b09355a3fa22547 100644 GIT binary patch literal 97566 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 literal 8294 zcmeHLy>1gh5T5f-1Og;Wi4X;aOG+d^0H^pltaOMPDP^$bbe5n>6UkL7N}hnY%7dif z4Up2r$2U8-bGx^DcH$he<=n#V&d)dB%*~xIYZE1OK)qgzc>KcrjM?k4M)aji^fqzy zHqo~OqJCfSAL0A+l63>8pD%!a<>;@8ejgHjfSV~9mf#W}kYfFRAUDQGvuK@?-Q^GQu0`Z}@oopA{4mOJky<$fc(p%}6(+L8%BoST z@ybvOUJFn*wLpLotJYIW9aT5RyLng3ChyZfXMKELQcQdPf)ET8Vr;7m`u|=o0$G+5 zqL!VruSZw2sbu(AOFD$Gg4ZN4Mm5%N6OZQ`NoF5bVaX9P~dL zqMYI_scJ06R`CNSNCx diff --git a/build/windows/make.sh b/build/windows/make.sh index 52275319c..a51055880 100755 --- a/build/windows/make.sh +++ b/build/windows/make.sh @@ -189,6 +189,7 @@ rm -rf simong mkdir -p ../../build/windows/work/libraries/particles/library/ cp library/particles.jar ../../build/windows/work/libraries/particles/library/ +exit; # OPENGL LIBRARY echo Building OpenGL library... diff --git a/core/PApplet.java b/core/PApplet.java index 0194cfbab..9053ee8f1 100644 --- a/core/PApplet.java +++ b/core/PApplet.java @@ -4180,7 +4180,7 @@ public class PApplet extends Applet } - public void copy(int sx1, int sy1, int sx2, int sy2, + public void copy(int sx1, int sy1, int sx2, int sy2, int dx1, int dy1, int dx2, int dy2) { g.copy(sx1, sy1, sx2, sy2, dx1, dy1, dx2, dy2); } @@ -4207,13 +4207,13 @@ public class PApplet extends Applet } - public void blend(int sx1, int sy1, int sx2, int sy2, + public void blend(int sx1, int sy1, int sx2, int sy2, int dx1, int dy1, int dx2, int dy2, int mode) { g.blend(sx1, sy1, sx2, sy2, dx1, dy1, dx2, dy2, mode); } - public void blend(PImage src, int sx1, int sy1, int sx2, int sy2, + public void blend(PImage src, int sx1, int sy1, int sx2, int sy2, int dx1, int dy1, int dx2, int dy2, int mode) { g.blend(src, sx1, sy1, sx2, sy2, dx1, dy1, dx2, dy2, mode); } @@ -4753,25 +4753,25 @@ public class PApplet extends Applet } - public void colorMode(int icolorMode) { - g.colorMode(icolorMode); + public void colorMode(int mode) { + g.colorMode(mode); } - public void colorMode(int icolorMode, float max) { - g.colorMode(icolorMode, max); + public void colorMode(int mode, float max) { + g.colorMode(mode, max); } - public void colorMode(int icolorMode, + public void colorMode(int mode, float maxX, float maxY, float maxZ) { - g.colorMode(icolorMode, maxX, maxY, maxZ); + g.colorMode(mode, maxX, maxY, maxZ); } - public void colorMode(int icolorMode, + public void colorMode(int mode, float maxX, float maxY, float maxZ, float maxA) { - g.colorMode(icolorMode, maxX, maxY, maxZ, maxA); + g.colorMode(mode, maxX, maxY, maxZ, maxA); } diff --git a/core/PGraphics.java b/core/PGraphics.java index ddf9b5e45..15afb967b 100644 --- a/core/PGraphics.java +++ b/core/PGraphics.java @@ -203,7 +203,7 @@ public class PGraphics extends PImage // OLD_GRAPHICS - PPolygon polygon; // general polygon to use for shape + protected PPolygon polygon; // general polygon to use for shape PPolygon fpolygon; // used to fill polys for tri or quad strips PPolygon spolygon; // stroke/line polygon float svertices[][]; // temp vertices used for stroking end of poly @@ -259,7 +259,7 @@ public class PGraphics extends PImage public float normalX, normalY, normalZ; // used by NEW_GRAPHICS, or by OLD_GRAPHICS simply as a boolean - private PImage textureImage; + public PImage textureImage; // NEW_GRAPHICS static final int DEFAULT_TEXTURES = 3; @@ -274,7 +274,7 @@ public class PGraphics extends PImage boolean unchangedZ; boolean strokeChanged; boolean fillChanged; - boolean normalChanged; + protected boolean normalChanged; // ........................................................ @@ -318,7 +318,7 @@ public class PGraphics extends PImage // [toxi031031] new & faster sphere code w/ support flexibile resolutions // will be set by sphereDetail() or 1st call to sphere() - public int sphere_detail = 0; + public int sphereDetail = 0; float sphereX[], sphereY[], sphereZ[]; //int text_mode; @@ -515,8 +515,8 @@ public class PGraphics extends PImage lightG[1] = ONE; lightB[1] = ONE; - textureMode = IMAGE_SPACE; - rectMode = CORNER; + textureMode = IMAGE_SPACE; + rectMode = CORNER; ellipseMode = CENTER; angleMode = RADIANS; //text_mode = ALIGN_LEFT; @@ -3212,7 +3212,7 @@ public class PGraphics extends PImage int ix2 = image.width; int iy2 = image.height; - if (image_mode == CENTER) { + if (imageMode == CENTER) { sx1 -= image.width / 2; sy1 -= image.height / 2; } @@ -3550,42 +3550,42 @@ public class PGraphics extends PImage // precompute vertices along unit sphere with new detail setting public void sphereDetail(int res) { - if (res<3) res=3; // force a minimum res - if (res != sphere_detail) { - float delta = (float)SINCOS_LENGTH/res; - float[] cx = new float[res]; - float[] cz = new float[res]; - // calc unit circle in XZ plane - for (int i = 0; i < res; i++) { - cx[i] = cosLUT[(int) (i*delta) % SINCOS_LENGTH]; - cz[i] = sinLUT[(int) (i*delta) % SINCOS_LENGTH]; - } - // computing vertexlist - // vertexlist starts at south pole - int vertCount = res * (res-1) + 2; - int currVert = 0; + if (res < 3) res = 3; // force a minimum res + if (res == sphereDetail) return; - // re-init arrays to store vertices - sphereX = new float[vertCount]; - sphereY = new float[vertCount]; - sphereZ = new float[vertCount]; - - float angle_step = (SINCOS_LENGTH*0.5f)/res; - float angle = angle_step; - - // step along Y axis - for (int i = 1; i < res; i++) { - float curradius = sinLUT[(int) angle % SINCOS_LENGTH]; - float currY = -cosLUT[(int) angle % SINCOS_LENGTH]; - for (int j = 0; j < res; j++) { - sphereX[currVert] = cx[j] * curradius; - sphereY[currVert] = currY; - sphereZ[currVert++] = cz[j] * curradius; - } - angle += angle_step; - } - sphere_detail = res; + float delta = (float)SINCOS_LENGTH/res; + float[] cx = new float[res]; + float[] cz = new float[res]; + // calc unit circle in XZ plane + for (int i = 0; i < res; i++) { + cx[i] = cosLUT[(int) (i*delta) % SINCOS_LENGTH]; + cz[i] = sinLUT[(int) (i*delta) % SINCOS_LENGTH]; } + // computing vertexlist + // vertexlist starts at south pole + int vertCount = res * (res-1) + 2; + int currVert = 0; + + // re-init arrays to store vertices + sphereX = new float[vertCount]; + sphereY = new float[vertCount]; + sphereZ = new float[vertCount]; + + float angle_step = (SINCOS_LENGTH*0.5f)/res; + float angle = angle_step; + + // step along Y axis + for (int i = 1; i < res; i++) { + float curradius = sinLUT[(int) angle % SINCOS_LENGTH]; + float currY = -cosLUT[(int) angle % SINCOS_LENGTH]; + for (int j = 0; j < res; j++) { + sphereX[currVert] = cx[j] * curradius; + sphereY[currVert] = currY; + sphereZ[currVert++] = cz[j] * curradius; + } + angle += angle_step; + } + sphereDetail = res; } @@ -3607,7 +3607,7 @@ public class PGraphics extends PImage } public void sphere(float x, float y, float z, float r) { - if (sphere_detail == 0) { + if (sphereDetail == 0) { sphereDetail(30); } @@ -3620,7 +3620,7 @@ public class PGraphics extends PImage // 1st ring from south pole beginShape(TRIANGLE_STRIP); - for (int i = 0; i < sphere_detail; i++) { + for (int i = 0; i < sphereDetail; i++) { vertex(0, -1, 0); vertex(sphereX[i], sphereY[i], sphereZ[i]); } @@ -3630,12 +3630,12 @@ public class PGraphics extends PImage // middle rings int voff = 0; - for(int i = 2; i < sphere_detail; i++) { + for(int i = 2; i < sphereDetail; i++) { v1=v11=voff; - voff += sphere_detail; + voff += sphereDetail; v2=voff; beginShape(TRIANGLE_STRIP); - for (int j = 0; j < sphere_detail; j++) { + for (int j = 0; j < sphereDetail; j++) { vertex(sphereX[v1], sphereY[v1], sphereZ[v1++]); vertex(sphereX[v2], sphereY[v2], sphereZ[v2++]); } @@ -3649,7 +3649,7 @@ public class PGraphics extends PImage // add the northern cap beginShape(TRIANGLE_STRIP); - for (int i = 0; i < sphere_detail; i++) { + for (int i = 0; i < sphereDetail; i++) { v2 = voff + i; vertex(0, 1, 0); vertex(sphereX[v2], sphereY[v2], sphereZ[v2]); @@ -4091,7 +4091,7 @@ public class PGraphics extends PImage public void image(PImage image, float x1, float y1) { if ((dimensions == 0) && !lights && !tint && - (image_mode != CENTER_RADIUS)) { + (imageMode != CENTER_RADIUS)) { // if drawing a flat image with no warping, // use faster routine to draw direct to the screen flat_image(image, (int)x1, (int)y1); @@ -4122,7 +4122,7 @@ public class PGraphics extends PImage public void image(PImage image, float x1, float y1, float x2, float y2, float u1, float v1, float u2, float v2) { - switch (image_mode) { + switch (imageMode) { case CORNERS: break; case CORNER: @@ -4141,22 +4141,17 @@ public class PGraphics extends PImage break; } - // fill must be set to 'true' for image to show up - // (although need to do some sort of color blending) - // stroke should be set to false or it gets confusing - // (and annoying) because one has to keep disabling stroke - boolean savedStroke = stroke; boolean savedFill = fill; + stroke = false; + fill = true; + float savedFillR = fillR; float savedFillG = fillG; float savedFillB = fillB; float savedFillA = fillA; - stroke = false; - fill = true; - if (tint) { fillR = tintR; fillG = tintG; @@ -4164,7 +4159,10 @@ public class PGraphics extends PImage fillA = tintA; } else { - fillR = fillG = fillB = fillA = 1; + fillR = 1; + fillG = 1; + fillB = 1; + fillA = 1; } beginShape(QUADS); @@ -4512,10 +4510,19 @@ public class PGraphics extends PImage /** + * Calling cameraMode(PERSPECTIVE) will setup the standard + * Processing transformation. + * + * cameraMode(ORTHOGRAPHIC) will setup a straight orthographic + * projection. + * + * cameraMode(CUSTOM) will set the perspective (camera) matrix + * to identity, after which time the user can make a mess. + * * Note that this setting gets nuked if resize() is called. */ - public void cameraMode(int icameraMode) { - cameraMode = icameraMode; // this doesn't do much + public void cameraMode(int mode) { + cameraMode = mode; // this doesn't do much if (cameraMode == PERSPECTIVE) { beginCamera(); @@ -4531,6 +4538,11 @@ public class PGraphics extends PImage resetMatrix(); ortho(0, width, 0, height, -10, 10); endCamera(); + + } else if (cameraMode == CUSTOM) { + beginCamera(); + resetMatrix(); + endCamera(); } } @@ -4922,13 +4934,13 @@ public class PGraphics extends PImage // COLOR - public void colorMode(int icolorMode) { - colorMode = icolorMode; + public void colorMode(int mode) { + colorMode = mode; } - public void colorMode(int icolorMode, float max) { - colorMode(icolorMode, max, max, max, max); + public void colorMode(int mode, float max) { + colorMode(mode, max, max, max, max); } @@ -4936,15 +4948,15 @@ public class PGraphics extends PImage // so colorMode(RGB, 255, 255, 255) would retain the previous max alpha // could be a problem when colorMode(HSB, 360, 100, 100); - public void colorMode(int icolorMode, + public void colorMode(int mode, float maxX, float maxY, float maxZ) { - colorMode(icolorMode, maxX, maxY, maxZ, colorModeA); //maxX); //ONE); + colorMode(mode, maxX, maxY, maxZ, colorModeA); //maxX); //ONE); } - public void colorMode(int icolorMode, + public void colorMode(int mode, float maxX, float maxY, float maxZ, float maxA) { - colorMode = icolorMode; + colorMode = mode; colorModeX = maxX; // still needs to be set for hsb colorModeY = maxY; diff --git a/core/PImage.java b/core/PImage.java index b42e4034a..4898ec565 100644 --- a/core/PImage.java +++ b/core/PImage.java @@ -4,8 +4,8 @@ PImage - storage class for pixel data Part of the Processing project - http://Proce55ing.net - Copyright (c) 2001-03 - Ben Fry, Massachusetts Institute of Technology and + Copyright (c) 2001-03 + Ben Fry, Massachusetts Institute of Technology and Casey Reas, Interaction Design Institute Ivrea This library is free software; you can redistribute it and/or @@ -18,9 +18,9 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. - You should have received a copy of the GNU Lesser General - Public License along with this library; if not, write to the - Free Software Foundation, Inc., 59 Temple Place, Suite 330, + You should have received a copy of the GNU Lesser General + Public License along with this library; if not, write to the + Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ @@ -32,18 +32,18 @@ import java.io.*; /** - * [fry 0407XX] + * [fry 0407XX] * - get() on RGB images sets the high bits to opaque * - modification of naming for functions * - inclusion of Object.clone() * - make get(), copy(), blend() honor imageMode * - lots of moving things around for new megabucket api - * + * * [toxi 030722] - * advanced copying/blitting code + * advanced copying/blitting code * * [fry 030918] - * integrated and modified to fit p5 spec + * integrated and modified to fit p5 spec * * [toxi 030930] * - target pixel buffer doesn't loose alpha channel anymore @@ -51,19 +51,19 @@ import java.io.*; * - resizing by large factors (>250%) doesn't yield any rounding errors * anymore, changed to 16bit precision (=65536% max or 0.000015% min) * - replicate() is now only using REPLACE mode to avoid semantic problems - * - added blend() methods to use replicate()'s functionality, + * - added blend() methods to use replicate()'s functionality, * but with blend modes * * [toxi 031006] - * blit_resize() is now clipping input coordinates to avoid array - * exceptions target dimension can be larger than destination image + * blit_resize() is now clipping input coordinates to avoid array + * exceptions target dimension can be larger than destination image * object, outside pixels will be skipped * * [toxi 031017] - * versions of replicate() and blend() methods which use cross-image - * blitting are now called in the destination image and expect a source - * image object as parameter. this is to provide an easy syntax for cases - * where the main pixel buffer is the destination. as those methods are + * versions of replicate() and blend() methods which use cross-image + * blitting are now called in the destination image and expect a source + * image object as parameter. this is to provide an easy syntax for cases + * where the main pixel buffer is the destination. as those methods are * overloaded in BApplet, users can call those functions directly without * explicitly giving a reference to PGraphics. */ @@ -81,8 +81,8 @@ public class PImage implements PConstants, Cloneable { // would scan line be useful? maybe for pow of 2 gl textures // note! inherited by PGraphics - int image_mode = CORNER; - boolean smooth = false; + public int imageMode = CORNER; + public boolean smooth = false; /** for gl subclass / hardware accel */ public int cacheIndex; @@ -102,11 +102,11 @@ public class PImage implements PConstants, Cloneable { static final int PREC_RED_SHIFT = 16-PRECISIONB; - /** + /** * Create an empty image object, set its format to RGB. * The pixel array is not allocated. */ - public PImage() { + public PImage() { format = RGB; // makes sure that this guy is useful cacheIndex = -1; } @@ -124,8 +124,8 @@ public class PImage implements PConstants, Cloneable { //for(int i=0; i> 16, Math.max((pixels[i] & GREEN_MASK) >> 8, (pixels[i] & BLUE_MASK))); - pixels[i] = (pixels[i] & ALPHA_MASK) | + pixels[i] = (pixels[i] & ALPHA_MASK) | ((max < thresh) ? 0x000000 : 0xffffff); } break; @@ -285,13 +285,13 @@ public class PImage implements PConstants, Cloneable { /** * Returns a "color" type (a packed 32 bit int with the color. - * If the image is in RGB format (i.e. on a PVideo object), + * If the image is in RGB format (i.e. on a PVideo object), * the value will get its high bits set, because of the likely * case that they haven't been already. */ public int get(int x, int y) { if ((x < 0) || (y < 0) || (x >= width) || (y >= height)) return 0; - return (format == RGB) ? + return (format == RGB) ? (pixels[y*width + x] | 0xff000000) : pixels[y*width + x]; } @@ -301,13 +301,13 @@ public class PImage implements PConstants, Cloneable { * This honors imageMode() for the coordinates. */ public PImage get(int x, int y, int w, int h) { - if (image_mode == CORNERS) { // if CORNER, do nothing - //x2 += x1; y2 += y1; + if (imageMode == CORNERS) { // if CORNER, do nothing + //x2 += x1; y2 += y1; // w/h are x2/y2 in this case, bring em down to size w = (w - x); h = (h - x); - } else if (image_mode == CENTER) { + } else if (imageMode == CENTER) { // w/h are the proper w/h, but x/y need to be moved x -= w/2; y -= h/2; @@ -324,7 +324,7 @@ public class PImage implements PConstants, Cloneable { int index = y*width + x; int index2 = 0; for (int row = y; row < y+h; row++) { - System.arraycopy(pixels, index, + System.arraycopy(pixels, index, newbie.pixels, index2, w); index+=width; index2+=w; @@ -341,7 +341,7 @@ public class PImage implements PConstants, Cloneable { ////////////////////////////////////////////////////////////// - + // REPLICATING & BLENDING (AREAS) OF PIXELS @@ -378,9 +378,9 @@ public class PImage implements PConstants, Cloneable { public void copy(PImage src, int dx, int dy) { // source - int sx = 0; + int sx = 0; int sy = 0; - int sw = src.width; + int sw = src.width; int sh = src.height; // target @@ -402,7 +402,7 @@ public class PImage implements PConstants, Cloneable { ty = 0; } if (tx + tw > width) { - int extra = (tx + tw) - width; + int extra = (tx + tw) - width; sw -= extra; tw -= extra; } @@ -413,17 +413,17 @@ public class PImage implements PConstants, Cloneable { } for (int row = sy; row < sy + sh; row++) { - System.arraycopy(src.pixels, row*src.width + sx, + System.arraycopy(src.pixels, row*src.width + sx, pixels, (dy+row)*width + tx, sw); } } /** - * Copy things from one area of this image + * Copy things from one area of this image * to another area in the same image. */ - public void copy(int sx1, int sy1, int sx2, int sy2, + public void copy(int sx1, int sy1, int sx2, int sy2, int dx1, int dy1, int dx2, int dy2) { copy(this, sx1, sy1, sx2, sy2, dx1, dy1, dx2, dy2); } @@ -434,11 +434,11 @@ public class PImage implements PConstants, Cloneable { */ public void copy(PImage src, int sx1, int sy1, int sx2, int sy2, int dx1, int dy1, int dx2, int dy2) { - if (image_mode == CORNER) { // if CORNERS, do nothing - sx2 += sx1; sy2 += sy1; - dx2 += dx1; dy2 += dy1; + if (imageMode == CORNER) { // if CORNERS, do nothing + sx2 += sx1; sy2 += sy1; + dx2 += dx1; dy2 += dy1; - } else if (image_mode == CENTER) { + } else if (imageMode == CENTER) { sx2 /= 2f; sy2 /= 2f; dx2 /= 2f; dy2 /= 2f; } @@ -446,7 +446,7 @@ public class PImage implements PConstants, Cloneable { if ((src == this) && intersect(sx1, sy1, sx2, sy2, dx1, dy1, dx2, dy2)) { // if src is me, and things intersect, make a copy of the data - blit_resize(get(sx1, sy1, sx2 - sx1, sy2 - sy1), + blit_resize(get(sx1, sy1, sx2 - sx1, sy2 - sy1), 0, 0, sx2 - sx1 - 1, sy2 - sy1 - 1, pixels, width, height, dx1, dy1, dx2, dy2, REPLACE); } else { @@ -473,14 +473,14 @@ public class PImage implements PConstants, Cloneable { } - /** + /** * Copies and blends 1 pixel with MODE to pixel in another image */ public void blend(PImage src, int sx, int sy, int dx, int dy, int mode) { if ((dx >= 0) && (dx < width) && (sx >= 0) && (sx < src.width) && (dy >= 0) && (dy < height) && (sy >= 0) && (sy < src.height)) { - pixels[dy * width + dx] = - blend(pixels[dy * width + dx], + pixels[dy * width + dx] = + blend(pixels[dy * width + dx], src.pixels[sy * src.width + sx], mode); } } @@ -488,7 +488,7 @@ public class PImage implements PConstants, Cloneable { public void blend(int sx, int sy, int dx, int dy, int mode) { if ((dx >= 0) && (dx < width) && (sx >= 0) && (sx < width) && (dy >= 0) && (dy < height) && (sy >= 0) && (sy < height)) { - pixels[dy * width + dx] = + pixels[dy * width + dx] = blend(pixels[dy * width + dx], pixels[sy * width + sx], mode); } } @@ -497,7 +497,7 @@ public class PImage implements PConstants, Cloneable { /** * Blends one area of this image to another area */ - public void blend(int sx1, int sy1, int sx2, int sy2, + public void blend(int sx1, int sy1, int sx2, int sy2, int dx1, int dy1, int dx2, int dy2, int mode) { blend(this, sx1, sy1, sx2, sy2, dx1, dy1, dx2, dy2, mode); } @@ -506,20 +506,20 @@ public class PImage implements PConstants, Cloneable { /** * Copies area of one image into another PImage object */ - public void blend(PImage src, int sx1, int sy1, int sx2, int sy2, + public void blend(PImage src, int sx1, int sy1, int sx2, int sy2, int dx1, int dy1, int dx2, int dy2, int mode) { - if (image_mode == CORNER) { // if CORNERS, do nothing - sx2 += sx1; sy2 += sy1; - dx2 += dx1; dy2 += dy1; + if (imageMode == CORNER) { // if CORNERS, do nothing + sx2 += sx1; sy2 += sy1; + dx2 += dx1; dy2 += dy1; - } else if (image_mode == CENTER) { + } else if (imageMode == CENTER) { sx2 /= 2f; sy2 /= 2f; dx2 /= 2f; dy2 /= 2f; } if ((src == this) && intersect(sx1, sy1, sx2, sy2, dx1, dy1, dx2, dy2)) { - blit_resize(get(sx1, sy1, sx2 - sx1, sy2 - sy1), + blit_resize(get(sx1, sy1, sx2 - sx1, sy2 - sy1), 0, 0, sx2 - sx1 - 1, sy2 - sy1 - 1, pixels, width, height, dx1, dy1, dx2, dy2, mode); } else { @@ -532,7 +532,7 @@ public class PImage implements PConstants, Cloneable { /** * Check to see if two rectangles intersect one another */ - protected boolean intersect(int sx1, int sy1, int sx2, int sy2, + protected boolean intersect(int sx1, int sy1, int sx2, int sy2, int dx1, int dy1, int dx2, int dy2) { int sw = sx2 - sx1 + 1; int sh = sy2 - sy1 + 1; @@ -567,18 +567,18 @@ public class PImage implements PConstants, Cloneable { ////////////////////////////////////////////////////////////// - + // COPYING IMAGE DATA /** - * Convenience method to avoid an extra cast, + * Convenience method to avoid an extra cast, * and the exception handling. */ public PImage get() { try { return (PImage) clone(); - } catch (CloneNotSupportedException e) { + } catch (CloneNotSupportedException e) { return null; } } @@ -618,7 +618,7 @@ public class PImage implements PConstants, Cloneable { */ /* public PImage duplicate(int newWidth, int newHeight) { - PImage dupe = new PImage(new int[newWidth * newHeight], + PImage dupe = new PImage(new int[newWidth * newHeight], newWidth, newHeight, format); dupe.copy(this, 0, 0, width - 1, height - 1, @@ -630,15 +630,15 @@ public class PImage implements PConstants, Cloneable { ////////////////////////////////////////////////////////////// - + /** * Internal blitter/resizer/copier from toxi. * Uses bilinear filtering if smooth() has been enabled * 'mode' determines the blending mode used in the process. */ - private void blit_resize(PImage img, - int srcX1, int srcY1, int srcX2, int srcY2, - int[] destPixels, int screenW, int screenH, + private void blit_resize(PImage img, + int srcX1, int srcY1, int srcX2, int srcY2, + int[] destPixels, int screenW, int screenH, int destX1, int destY1, int destX2, int destY2, int mode) { if (srcX1 < 0) srcX1 = 0; @@ -688,7 +688,7 @@ public class PImage implements PConstants, Cloneable { iw = img.width; iw1 = img.width - 1; ih1 = img.height - 1; - + switch (mode) { case BLEND: @@ -779,7 +779,7 @@ public class PImage implements PConstants, Cloneable { sY = (srcYOffset >> PRECISIONB) * img.width; for (int x = 0; x < destW; x++) { destPixels[destOffset + x] = - blend_multiply(destPixels[destOffset + x], + blend_multiply(destPixels[destOffset + x], srcBuffer[sY + (sX >> PRECISIONB)]); sX += dx; } @@ -794,7 +794,7 @@ public class PImage implements PConstants, Cloneable { sY = (srcYOffset >> PRECISIONB) * img.width; for (int x = 0; x < destW; x++) { destPixels[destOffset + x] = - blend_add_pin(destPixels[destOffset + x], + blend_add_pin(destPixels[destOffset + x], srcBuffer[sY + (sX >> PRECISIONB)]); sX += dx; } @@ -809,7 +809,7 @@ public class PImage implements PConstants, Cloneable { sY = (srcYOffset >> PRECISIONB) * img.width; for (int x = 0; x < destW; x++) { destPixels[destOffset + x] = - blend_sub_pin(destPixels[destOffset + x], + blend_sub_pin(destPixels[destOffset + x], srcBuffer[sY + (sX >> PRECISIONB)]); sX += dx; } @@ -824,7 +824,7 @@ public class PImage implements PConstants, Cloneable { sY = (srcYOffset >> PRECISIONB) * img.width; for (int x = 0; x < destW; x++) { destPixels[destOffset + x] = - blend_lightest(destPixels[destOffset + x], + blend_lightest(destPixels[destOffset + x], srcBuffer[sY + (sX >> PRECISIONB)]); sX += dx; } @@ -839,7 +839,7 @@ public class PImage implements PConstants, Cloneable { sY = (srcYOffset >> PRECISIONB) * img.width; for (int x = 0; x < destW; x++) { destPixels[destOffset + x] = - blend_darkest(destPixels[destOffset + x], + blend_darkest(destPixels[destOffset + x], srcBuffer[sY + (sX >> PRECISIONB)]); sX += dx; } @@ -890,20 +890,20 @@ public class PImage implements PConstants, Cloneable { cLL = srcBuffer[v2 + u1]; cLR = srcBuffer[v2 + u2]; - r = ((ul*((cUL&RED_MASK)>>16) + ll*((cLL&RED_MASK)>>16) + + r = ((ul*((cUL&RED_MASK)>>16) + ll*((cLL&RED_MASK)>>16) + ur*((cUR&RED_MASK)>>16) + lr*((cLR&RED_MASK)>>16)) << PREC_RED_SHIFT) & RED_MASK; g = ((ul*(cUL&GREEN_MASK) + ll*(cLL&GREEN_MASK) + - ur*(cUR&GREEN_MASK) + lr*(cLR&GREEN_MASK)) + ur*(cUR&GREEN_MASK) + lr*(cLR&GREEN_MASK)) >>> PRECISIONB) & GREEN_MASK; - b = (ul*(cUL&BLUE_MASK) + ll*(cLL&BLUE_MASK) + + b = (ul*(cUL&BLUE_MASK) + ll*(cLL&BLUE_MASK) + ur*(cUR&BLUE_MASK) + lr*(cLR&BLUE_MASK)) >>> PRECISIONB; - a = ((ul*((cUL&ALPHA_MASK)>>>24) + ll*((cLL&ALPHA_MASK)>>>24) + - ur*((cUR&ALPHA_MASK)>>>24) + lr*((cLR&ALPHA_MASK)>>>24)) + a = ((ul*((cUL&ALPHA_MASK)>>>24) + ll*((cLL&ALPHA_MASK)>>>24) + + ur*((cUR&ALPHA_MASK)>>>24) + lr*((cLR&ALPHA_MASK)>>>24)) << PREC_ALPHA_SHIFT) & ALPHA_MASK; return a | r | g | b; @@ -941,7 +941,7 @@ public class PImage implements PConstants, Cloneable { ///////////////////////////////////////////////////////////// - + // BLEND MODE IMPLEMENTIONS private static int blend_multiply(int a, int b) { @@ -949,7 +949,7 @@ public class PImage implements PConstants, Cloneable { return (low(((a & ALPHA_MASK) >>> 24) + f, 0xff) << 24 | mix(a & RED_MASK, b & RED_MASK, f) & RED_MASK | - mix(a & GREEN_MASK, b & GREEN_MASK, f) & GREEN_MASK | + mix(a & GREEN_MASK, b & GREEN_MASK, f) & GREEN_MASK | mix(a & BLUE_MASK, b & BLUE_MASK, f)); } @@ -965,7 +965,7 @@ public class PImage implements PConstants, Cloneable { ((b & RED_MASK) >> 8) * f), RED_MASK) & RED_MASK | low(((a & GREEN_MASK) + ((b & GREEN_MASK) >> 8) * f), GREEN_MASK) & GREEN_MASK | - low((a & BLUE_MASK) + + low((a & BLUE_MASK) + (((b & BLUE_MASK) * f) >> 8), BLUE_MASK)); } @@ -1006,13 +1006,13 @@ public class PImage implements PConstants, Cloneable { return (low(((a & ALPHA_MASK) >>> 24) + f, 0xff) << 24 | mix(a & RED_MASK, - low(a & RED_MASK, + low(a & RED_MASK, ((b & RED_MASK) >> 8) * f), f) & RED_MASK | - mix(a & GREEN_MASK, - low(a & GREEN_MASK, + mix(a & GREEN_MASK, + low(a & GREEN_MASK, ((b & GREEN_MASK) >> 8) * f), f) & GREEN_MASK | - mix(a & BLUE_MASK, - low(a & BLUE_MASK, + mix(a & BLUE_MASK, + low(a & BLUE_MASK, ((b & BLUE_MASK) * f) >> 8), f)); } @@ -1064,12 +1064,12 @@ public class PImage implements PConstants, Cloneable { * [toxi 030902] * Creates a Targa32 formatted byte sequence of specified pixel buffer * - * [fry 030917] - * Modified to write directly to OutputStream, because of + * [fry 030917] + * Modified to write directly to OutputStream, because of * memory issues with first making an array of the data. * tga spec: http://organicbit.com/closecombat/formats/tga.html */ - static void write_targa(OutputStream output, int pixels[], + static void write_targa(OutputStream output, int pixels[], int width, int height) throws IOException { byte header[] = new byte[18]; @@ -1140,7 +1140,7 @@ public class PImage implements PConstants, Cloneable { * mode is one of CORNERS, CORNER, CENTER */ public void imageMode(int mode) { - image_mode = mode; + imageMode = mode; } } diff --git a/core/PMethods.java b/core/PMethods.java index cddd1a53d..8ee15f077 100755 --- a/core/PMethods.java +++ b/core/PMethods.java @@ -22,7 +22,7 @@ public interface PMethods { public void copy(PImage src, int dx, int dy); - public void copy(int sx1, int sy1, int sx2, int sy2, + public void copy(int sx1, int sy1, int sx2, int sy2, int dx1, int dy1, int dx2, int dy2); public void copy(PImage src, int sx1, int sy1, int sx2, int sy2, @@ -32,10 +32,10 @@ public interface PMethods { public void blend(int sx, int sy, int dx, int dy, int mode); - public void blend(int sx1, int sy1, int sx2, int sy2, + public void blend(int sx1, int sy1, int sx2, int sy2, int dx1, int dy1, int dx2, int dy2, int mode); - public void blend(PImage src, int sx1, int sy1, int sx2, int sy2, + public void blend(PImage src, int sx1, int sy1, int sx2, int sy2, int dx1, int dy1, int dx2, int dy2, int mode); public PImage get(); @@ -272,14 +272,14 @@ public interface PMethods { float n20, float n21, float n22, float n23, float n30, float n31, float n32, float n33); - public void colorMode(int icolorMode); + public void colorMode(int mode); - public void colorMode(int icolorMode, float max); + public void colorMode(int mode, float max); - public void colorMode(int icolorMode, + public void colorMode(int mode, float maxX, float maxY, float maxZ); - public void colorMode(int icolorMode, + public void colorMode(int mode, float maxX, float maxY, float maxZ, float maxA); public void noTint(); diff --git a/core/todo.txt b/core/todo.txt index d78767683..7a453711a 100644 --- a/core/todo.txt +++ b/core/todo.txt @@ -5,6 +5,9 @@ X added focusGained() and focusLost() _ add to preprocessor X lots of changes to internal naming of vars +_ break apart functions into local (placement) and override (blitting) +_ just have a "thin_flat_line" option in opengl code + _ image("blah.jpg"); _ loadImage() is broken on some machines _ hacked for a fix in 72, but need to better coordinate with openStream() diff --git a/todo.txt b/todo.txt index 4f9f0439e..d7d5aa708 100644 --- a/todo.txt +++ b/todo.txt @@ -1,4 +1,6 @@ 0073 pde +X change horizontal offset to 5 instead of 4 + //