remove NetProducerImage and replace it with ToolkitImage

This commit is contained in:
smallsql 2010-12-27 21:16:43 +00:00
Родитель ed4cc46c04
Коммит f11ad4940d
3 изменённых файлов: 6 добавлений и 161 удалений

Просмотреть файл

@ -55,7 +55,7 @@ namespace ikvm.awt
return color == null ? Color.Empty : Color.FromArgb(color.getRGB()); return color == null ? Color.Empty : Color.FromArgb(color.getRGB());
} }
internal static Image ConvertImage(java.awt.Image img) internal static Bitmap ConvertImage(java.awt.Image img)
{ {
if (img is BufferedImage) if (img is BufferedImage)
{ {
@ -65,9 +65,9 @@ namespace ikvm.awt
{ {
return ((NetVolatileImage)img).bitmap; return ((NetVolatileImage)img).bitmap;
} }
if (img is NetProducerImage) if (img is sun.awt.image.ToolkitImage)
{ {
return ((NetProducerImage)img).getBitmap(); return ((sun.awt.image.ToolkitImage)img).getImageRep().getBitmap();
} }
if (img is NoImage) if (img is NoImage)
{ {

Просмотреть файл

@ -1,7 +1,7 @@
/* /*
Copyright (C) 2002, 2004, 2005, 2006 Jeroen Frijters Copyright (C) 2002, 2004, 2005, 2006 Jeroen Frijters
Copyright (C) 2006 Active Endpoints, Inc. Copyright (C) 2006 Active Endpoints, Inc.
Copyright (C) 2006, 2007, 2008 Volker Berlin (i-net software) Copyright (C) 2006 - 2010 Volker Berlin (i-net software)
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -33,157 +33,6 @@ using System.Drawing.Imaging;
namespace ikvm.awt namespace ikvm.awt
{ {
class NetProducerImage : java.awt.Image, java.awt.image.ImageConsumer
{
private java.awt.image.ImageProducer source;
private int mHeight = -1;
private int mWidth = -1;
private int mHintFlags;
private ColorModel mColorModel;
private Hashtable mProperties;
private Bitmap mBitmap;
private int availinfo;
internal NetProducerImage(java.awt.image.ImageProducer source)
{
this.source = source;
}
public override void flush()
{
}
public override java.awt.Graphics getGraphics()
{
return new BitmapGraphics(mBitmap);
}
public override int getHeight(ImageObserver param)
{
return mHeight;
}
public override int getWidth(ImageObserver param)
{
return mWidth;
}
public override object getProperty(string param, ImageObserver obs)
{
return null;
}
public override ImageProducer getSource()
{
return source;
}
public void setHints(int hintflags)
{
mHintFlags = hintflags;
}
public void setPixels(int x, int y, int w, int h, ColorModel model, byte[] pixels, int off, int scansize)
{
int[] pixeli = new int[pixels.Length];
for (int i = 0; i < pixels.Length; i++)
{
pixeli[i] = model.getRGB(pixels[i] & 0xff);
}
setPixels(x, y, w, h, model, pixeli, off, scansize);
}
/// <summary>
/// Create a bitmap from the pixel array. The bitmap will be used
/// by drawImage.
/// </summary>
[System.Security.SecuritySafeCritical]
public void setPixels(int x, int y, int w, int h, ColorModel model, int[] pixels, int off, int scansize)
{
if( x < 0) {
w -= x;
x = 0;
}
if (y < 0) {
h -= y;
y = 0;
}
if (w <= 0 || h <= 0) {
// nothing to set
return;
}
if ( off < 0 ) {
throw new java.lang.ArrayIndexOutOfBoundsException( "Data offset out of bounds." );
}
long length = w * h;
if (length > pixels.Length - off)
{
throw new java.lang.ArrayIndexOutOfBoundsException("Data offset out of bounds.");
}
lock (mBitmap)
{
BitmapData data = mBitmap.LockBits(new Rectangle(x, y, w, h), ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb);
System.Runtime.InteropServices.Marshal.Copy(pixels, off, data.Scan0, data.Width * data.Height);
mBitmap.UnlockBits(data);
}
}
public Bitmap getBitmap()
{
return mBitmap;
}
public void setDimensions(int width, int height)
{
mWidth = width;
mHeight = height;
mBitmap = new Bitmap(mWidth, mHeight);
availinfo |= ImageObserver.__Fields.WIDTH | ImageObserver.__Fields.HEIGHT;
}
public void imageComplete(int status)
{
switch (status)
{
default:
case ImageConsumer.__Fields.IMAGEERROR:
availinfo |= ImageObserver.__Fields.ERROR | ImageObserver.__Fields.ABORT;
break;
case ImageConsumer.__Fields.IMAGEABORTED:
availinfo |= ImageObserver.__Fields.ABORT;
break;
case ImageConsumer.__Fields.STATICIMAGEDONE:
availinfo |= ImageObserver.__Fields.ALLBITS;
break;
case ImageConsumer.__Fields.SINGLEFRAMEDONE:
availinfo |= ImageObserver.__Fields.FRAMEBITS;
break;
}
}
public void setColorModel(ColorModel model)
{
mColorModel = model;
}
public void setProperties(Hashtable props)
{
mProperties = props;
}
internal int getStatus()
{
return availinfo;
}
}
class NetVolatileImage : java.awt.image.VolatileImage class NetVolatileImage : java.awt.image.VolatileImage
{ {
internal readonly Bitmap bitmap; internal readonly Bitmap bitmap;

Просмотреть файл

@ -1592,9 +1592,7 @@ namespace ikvm.awt
throw new ArgumentException("invalid hotSpot"); throw new ArgumentException("invalid hotSpot");
} }
NetProducerImage npi = new NetProducerImage(cursorIm.getSource()); Bitmap bitmap = J2C.ConvertImage(cursorIm);
cursorIm.getSource().startProduction(npi);
Bitmap bitmap = npi.getBitmap();
IntPtr hIcon = bitmap.GetHicon(); IntPtr hIcon = bitmap.GetHicon();
cursor = new Cursor(hIcon); cursor = new Cursor(hIcon);
} }
@ -2498,9 +2496,7 @@ namespace ikvm.awt
public override java.awt.Image createImage(java.awt.image.ImageProducer prod) public override java.awt.Image createImage(java.awt.image.ImageProducer prod)
{ {
NetProducerImage npi = new NetProducerImage(prod); return new sun.awt.image.ToolkitImage(prod);
prod.startProduction(npi);
return new java.awt.image.BufferedImage(npi.getBitmap());
} }
public override java.awt.Image createImage(int width, int height) public override java.awt.Image createImage(int width, int height)