Skip to content

Commit 358a8ad

Browse files
committed
Graphics.setClip working properly, allowing for unsetting a clip
1 parent ea92bb2 commit 358a8ad

File tree

6 files changed

+215
-148
lines changed

6 files changed

+215
-148
lines changed

sources/net.sf.j2s.java.core/src/java/awt/GraphicsConfiguration.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -188,11 +188,7 @@ public BufferedImage createCompatibleImage(int width, int height,
188188

189189
protected BufferedImage newBufferedImage(ColorModel cm, WritableRaster wr,
190190
boolean alphaPremultiplied, Hashtable<?, ?> properties) {
191-
return (BufferedImage) Interface.getInstanceWithParams(
192-
"java.awt.image.BufferedImage", new Class<?>[] { ColorModel.class,
193-
WritableRaster.class, Boolean.class, Hashtable.class },
194-
new Object[] { cm, wr,
195-
alphaPremultiplied ? Boolean.TRUE : Boolean.FALSE, properties });
191+
return new BufferedImage(cm, wr, alphaPremultiplied, properties);
196192
}
197193

198194
/**

sources/net.sf.j2s.java.core/src/java/awt/image/BufferedImage.java

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ public class BufferedImage extends Image implements RenderedImage, Transparency
128128
/**
129129
* the JSGrpahics2D object associated with this image
130130
*/
131-
JSGraphics2D 秘g; // a JSGraphics2D instance
131+
public JSGraphics2D 秘g; // a JSGraphics2D instance
132132

133133
/**
134134
* if an image is used just for graphics that the HTML5 canvas can use, we back
@@ -1877,8 +1877,10 @@ public Graphics2D getImageGraphic() {
18771877
Raster r = raster;
18781878
@SuppressWarnings("unused")
18791879
int[] p = 秘pix;
1880-
1881-
if (getColorModel() == ColorModel.秘RGBdefault) {
1880+
switch (imageType) {
1881+
case TYPE_INT_RGB:
1882+
case TYPE_INT_ARGB:
1883+
case TYPE_4BYTE_HTML5:
18821884
@SuppressWarnings("unused")
18831885
int[] rp = ((SunWritableRaster) r).秘pix;
18841886
/**
@@ -1887,9 +1889,10 @@ public Graphics2D getImageGraphic() {
18871889
* pixels = rp || p;
18881890
*
18891891
*/
1890-
} else {
1891-
// a more complex exercise
1892+
break;
1893+
default:
18921894
pixels = 秘getPixelsFromRaster();
1895+
break;
18931896
}
18941897
return pixels;
18951898
}
@@ -1901,8 +1904,9 @@ public Graphics2D getImageGraphic() {
19011904
* @return
19021905
*/
19031906
private int[] 秘getPixelsFromRaster() {
1904-
if (imageType == TYPE_4BYTE_HTML5)
1905-
return 秘pix;
1907+
// Coerse byte[] to int[] for SwingJS
1908+
if (imageType == TYPE_4BYTE_HTML5)
1909+
return 秘pix = (int[])(Object) ((DataBufferByte) raster.getDataBuffer()).getData();
19061910
int n = 秘wxh;
19071911
if (秘pix == null || 秘pix.length != n * 4)
19081912
秘pix = new int[n * 4];
@@ -1911,6 +1915,7 @@ public Graphics2D getImageGraphic() {
19111915
int[] p = 秘pix;
19121916
if (isPacked) {
19131917
int[] a = new int[n];
1918+
raster.getDataElements(0, 0, width, height, a);
19141919
for (int i = 0, pt = 0; i < n; i++, pt += 4) {
19151920
cm.getComponents(a[i], p, pt);
19161921
}
@@ -1966,19 +1971,15 @@ public Graphics2D getImageGraphic() {
19661971
*/
19671972

19681973
public DOMNode 秘getImageNode(boolean force) {
1969-
if (!force && 秘hasRasterData || imageType == TYPE_4BYTE_HTML5)
1970-
return null;
1971-
Object node = (秘canvas != null ? 秘canvas : 秘imgNode);
1972-
if (node == null && (force || !秘hasRasterData))
1973-
return JSGraphicsCompositor.createImageNode(this);
1974-
if (秘hasRasterData) {
1975-
秘getPixelsFromRaster();
1976-
秘g = null;
1977-
createGraphics();
1978-
秘g.drawImagePriv(this, 0, 0, null);
1979-
node = 秘g.getCanvas();
1980-
}
1981-
return (DOMNode) node;
1974+
if (!秘hasRasterData)
1975+
return (DOMNode) (秘canvas != null ? 秘canvas
1976+
: 秘imgNode != null ? 秘imgNode : JSGraphicsCompositor.createImageNode(this));
1977+
if (!force)// || imageType == TYPE_4BYTE_HTML5)
1978+
return null;
1979+
秘getPixelsFromRaster();
1980+
秘g = null;
1981+
getImageGraphic();
1982+
return 秘g.getCanvas();
19821983
}
19831984

19841985
/**

sources/net.sf.j2s.java.core/src/java/awt/image/DirectColorModel.java

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ public DirectColorModel(int bits, int rmask, int gmask,
186186
bits, rmask, gmask, bmask, amask, false,
187187
amask == 0 ? Transparency.OPAQUE : Transparency.TRANSLUCENT,
188188
ColorModel.getDefaultTransferType(bits));
189-
// SwingJS for native code only setFields();
189+
setFields();
190190
}
191191

192192
/**
@@ -1392,32 +1392,32 @@ public boolean isCompatibleRaster(Raster raster) {
13921392
return (raster.getTransferType() == transferType);
13931393
}
13941394

1395-
// private void setFields() {
1396-
// // Set the private fields
1397-
// // REMIND: Get rid of these from the native code
1398-
// red_mask = maskArray[0];
1399-
// red_offset = maskOffsets[0];
1400-
// green_mask = maskArray[1];
1401-
// green_offset = maskOffsets[1];
1402-
// blue_mask = maskArray[2];
1403-
// blue_offset = maskOffsets[2];
1404-
// if (nBits[0] < 8) {
1405-
// red_scale = (1 << nBits[0]) - 1;
1406-
// }
1407-
// if (nBits[1] < 8) {
1408-
// green_scale = (1 << nBits[1]) - 1;
1409-
// }
1410-
// if (nBits[2] < 8) {
1411-
// blue_scale = (1 << nBits[2]) - 1;
1412-
// }
1413-
// if (supportsAlpha) {
1414-
// alpha_mask = maskArray[3];
1415-
// alpha_offset = maskOffsets[3];
1416-
// if (nBits[3] < 8) {
1417-
// alpha_scale = (1 << nBits[3]) - 1;
1418-
// }
1419-
// }
1420-
// }
1395+
private void setFields() {
1396+
// Set the private fields
1397+
// REMIND: Get rid of these from the native code
1398+
red_mask = maskArray[0];
1399+
red_offset = maskOffsets[0];
1400+
green_mask = maskArray[1];
1401+
green_offset = maskOffsets[1];
1402+
blue_mask = maskArray[2];
1403+
blue_offset = maskOffsets[2];
1404+
if (nBits[0] < 8) {
1405+
red_scale = (1 << nBits[0]) - 1;
1406+
}
1407+
if (nBits[1] < 8) {
1408+
green_scale = (1 << nBits[1]) - 1;
1409+
}
1410+
if (nBits[2] < 8) {
1411+
blue_scale = (1 << nBits[2]) - 1;
1412+
}
1413+
if (supportsAlpha) {
1414+
alpha_mask = maskArray[3];
1415+
alpha_offset = maskOffsets[3];
1416+
if (nBits[3] < 8) {
1417+
alpha_scale = (1 << nBits[3]) - 1;
1418+
}
1419+
}
1420+
}
14211421

14221422
/**
14231423
* Returns a <code>String</code> that represents this

0 commit comments

Comments
 (0)