package gnu.java.awt.peer.x; import gnu.x11.Display; import gnu.x11.image.ZPixmap; import java.awt.GraphicsEnvironment; import java.awt.image.DataBuffer; /** * A DataBuffer implementation that is based on a ZPixmap. This is used * as backing store for BufferedImages. */ class ZPixmapDataBuffer extends DataBuffer { /** * The backing ZPixmap. */ private ZPixmap zpixmap; /** * Creates a new ZPixmapDataBuffer with a specified width and height. * * @param d the X display * @param w the width * @param h the height */ ZPixmapDataBuffer(int w, int h) { super(TYPE_BYTE, w * h * 3); // TODO: Support non-24-bit-resolutions. GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment(); XGraphicsDevice dev = (XGraphicsDevice) env.getDefaultScreenDevice(); Display d = dev.getDisplay(); zpixmap = new ZPixmap(d, w, h, d.default_pixmap_format); } /** * Creates a ZPixmapDataBuffer from an existing ZPixmap. * * @param zpixmap the ZPixmap to wrap */ ZPixmapDataBuffer(ZPixmap zpixmap) { super(TYPE_BYTE, zpixmap.get_data_length()); this.zpixmap = zpixmap; } @Override public int getElem(int bank, int i) { return 0xff & zpixmap.get_data_element(i); } @Override public void setElem(int bank, int i, int val) { zpixmap.set_data_element(i, (byte) val); } ZPixmap getZPixmap() { return zpixmap; } }