+++ /dev/null
-/* Copyright (C) 2000 Free Software Foundation
-
- This file is part of libgcj.
-
-This software is copyrighted work licensed under the terms of the
-Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
-details. */
-
-package gnu.gcj.xlib;
-
-import gnu.gcj.RawData;
-
-/**
- * Structure containing image data that resides on the client side.
- * The format, depth and offset attributes of an XImage determines how
- * bitfields are encoded in a raster image. However, it does not
- * determine how a color is encoded into a bitfield. I.e. the XImage
- * pixel values in a specific structure, but does not determine what
- * colors that will be used to represent these pixel values on the
- * screen.
- *
- * @author Rolf W. Rasmussen <rolfwr@ii.uib.no>
- */
-public class XImage
-{
- /** This object reference points to the data, hindering garbage
- collection of the data. */
- Object dataRef;
-
- // Must match definitions in X.h:
- public static final int XYBITMAP_FORMAT = 0,
- XYPIXMAP_FORMAT = 1,
- ZPIXMAP_FORMAT = 2;
-
- // Must match definitions in X.h:
- public static final int LEAST_SIGNIFICANT_B_FIRST_ORDER = 0,
- MOST_SIGNIFICANT_B_FIRST_ORDER = 1;
-
- public XImage(Visual visual, int depth, int format, int xoffset,
- int width, int height, int bitmapPad,
- int bytesPerLine)
- {
- this(visual, depth, format, xoffset, width, height, bitmapPad,
- bytesPerLine,
- 0 // bitsPerPixel
- );
- }
-
- public XImage(Visual visual, int depth, int format, int xoffset,
- int width, int height, int bitmapPad,
- int bytesPerLine, int bitsPerPixel)
- {
- if (visual == null) throw new
- NullPointerException("a visual must be specified");
-
- init(visual, depth, format, xoffset, width, height,
- bitmapPad, bytesPerLine, bitsPerPixel);
- }
-
- public native void init(Visual visual, int depth, int format, int xoffset,
- int width, int height, int bitmapPad,
- int bytesPerLine, int bitsPerPixel);
-
- private native void init(Visual visual, int width, int height);
-
-
- public XImage(Visual visual, int width, int height)
- {
- this(visual, width, height,
- true // Automatically allocate memory
- );
- }
-
- /**
- * Create a new XImage.
- *
- * @param allocate specifies whether to automatically allocate
- * memory for the image. It is possible to create the data array
- * elsewhere, so that we can for instance use a DataBufferUShort as
- * data. Ie. not limit ourself to byte arrays. This is done by
- * passing false and calling a setData() method manually after
- * creation.
- */
- public XImage(Visual visual, int width, int height, boolean allocate)
- {
- if (visual == null)
- throw new NullPointerException("a visual must be specified");
-
- init(visual, width, height);
-
- if (allocate)
- {
- /* Now that Xlib has figured out the appropriate bytes per
- line, we can allocate memory for the image. */
- // FIXME: What about formats with several layers/bands?
- byte[] data = new byte[getBytesPerLine()*height];
-
- setData(data, 0);
- }
- }
-
- /**
- * Attach image data to this XImage.
- *
- * @param offset the index of the first actual data element in the array.
- */
- public void setData(byte[] data, int offset)
- {
- dataRef = data;
- internalSetData(data, offset);
- }
-
- /**
- * Attach image data to this XImage.
- *
- * @param offset the index of the first actual data element in the
- * array. Note: this is short offset, not a byte offset.
- */
- public void setData(short[] data, int offset)
- {
- dataRef = data;
- internalSetData(data, offset);
- }
-
- /**
- * Attach image data to this XImage
- *
- * @param offset the index of the first actual data element in the array.
- * Note: this is not a byte offset.
- */
- public void setData(int[] data, int offset)
- {
- dataRef = data;
- internalSetData(data, offset);
- }
-
- private native void internalSetData(byte[] data, int offset);
- private native void internalSetData(short[] data, int offset);
- private native void internalSetData(int[] data, int offset);
-
- protected native void finalize();
-
- boolean ownsData = false;
- RawData structure = null;
-
- public final native int getWidth();
- public final native int getHeight();
- public final native int getDepth();
- public final native int getFormat();
-
- public final boolean isZPixmapFormat()
- {
- return getFormat() == ZPIXMAP_FORMAT;
- }
-
-
- /**
- * Get the xoffset. The xoffset avoids the need of shifting the
- * scanlines into place.
- */
- public final native int getXOffset();
-
- public native final int getBytesPerLine();
- public native final int getBitsPerPixel();
-
- public native final int getImageByteOrder();
- public native final int getBitmapBitOrder();
- public native final int getBitmapUnit();
- public native final int getBitmapPad();
-
-
- // True/Direct Color specific:
- public native int getRedMask();
- public native int getGreenMask();
- public native int getBlueMask();
-
-
- /**
- * Set a pixel value at a given position in the image. This method
- * is slow. Don't use it, except as a fall-back.
- */
- public native final void setPixel(int x, int y, int pixel);
-
- public String toString()
- {
- String format;
- switch(getFormat())
- {
- case ZPIXMAP_FORMAT:
- format = "ZPixmapFormat";
- break;
- default:
- format = "unknown";
- }
-
- String imageByteOrder;
- switch(getImageByteOrder())
- {
- case LEAST_SIGNIFICANT_B_FIRST_ORDER:
- imageByteOrder = "leastSignificantByteFirst";
- break;
- case MOST_SIGNIFICANT_B_FIRST_ORDER:
- imageByteOrder = "mostSignificantByteFirst";
- break;
- default:
- imageByteOrder = "unknwon";
- }
-
- String bitmapBitOrder;
- switch(getBitmapBitOrder())
- {
- case LEAST_SIGNIFICANT_B_FIRST_ORDER:
- bitmapBitOrder = "leastSignificantBitFirst";
- break;
- case MOST_SIGNIFICANT_B_FIRST_ORDER:
- bitmapBitOrder = "mostSignificantBitFirst";
- break;
- default:
- bitmapBitOrder = "unknown";
- }
-
- return getClass().getName() + "[" + format +
- ", width=" + getWidth() +
- ", height=" + getHeight() +
- ", bytesPerLine=" + getBytesPerLine() +
- ", xoffset=" + getXOffset() +
- ", depth=" + getDepth() +
- ", bitsPerPixel=" + getBitsPerPixel() +
- ", bitmapUnit=" + getBitmapUnit() +
- ", bitmapPad=" + getBitmapPad() +
- ", byteOrder=" + imageByteOrder +
- ", bitOrder=" + bitmapBitOrder +
- "]";
- }
-}