summaryrefslogtreecommitdiffstats
path: root/awt/org/apache/harmony/awt/gl/image/OffscreenImage.java
diff options
context:
space:
mode:
Diffstat (limited to 'awt/org/apache/harmony/awt/gl/image/OffscreenImage.java')
-rw-r--r--awt/org/apache/harmony/awt/gl/image/OffscreenImage.java532
1 files changed, 0 insertions, 532 deletions
diff --git a/awt/org/apache/harmony/awt/gl/image/OffscreenImage.java b/awt/org/apache/harmony/awt/gl/image/OffscreenImage.java
deleted file mode 100644
index 3445f8e..0000000
--- a/awt/org/apache/harmony/awt/gl/image/OffscreenImage.java
+++ /dev/null
@@ -1,532 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @author Igor V. Stolyarov
- * @version $Revision$
- */
-/*
- * Created on 22.12.2004
- *
- */
-package org.apache.harmony.awt.gl.image;
-
-import java.awt.Graphics;
-import java.awt.Image;
-import java.awt.image.BufferedImage;
-import java.awt.image.ColorModel;
-import java.awt.image.ComponentColorModel;
-import java.awt.image.DataBuffer;
-import java.awt.image.DataBufferByte;
-import java.awt.image.DataBufferInt;
-import java.awt.image.DirectColorModel;
-import java.awt.image.ImageConsumer;
-import java.awt.image.ImageObserver;
-import java.awt.image.ImageProducer;
-import java.awt.image.IndexColorModel;
-import java.awt.image.WritableRaster;
-import java.util.Hashtable;
-import java.util.Vector;
-
-import org.apache.harmony.awt.gl.ImageSurface;
-import org.apache.harmony.awt.internal.nls.Messages;
-
-
-/**
- * This class represent implementation of abstract Image class
- */
-public class OffscreenImage extends Image implements ImageConsumer {
-
- static final ColorModel rgbCM = ColorModel.getRGBdefault();
- ImageProducer src;
- BufferedImage image;
- ColorModel cm;
- WritableRaster raster;
- boolean isIntRGB;
- Hashtable<?, ?> properties;
- Vector<ImageObserver> observers;
- int width;
- int height;
- int imageState;
- int hints;
- private boolean producing;
- private ImageSurface imageSurf;
-
- public OffscreenImage(ImageProducer ip){
- imageState = 0;
- src = ip;
- width = -1;
- height = -1;
- observers = new Vector<ImageObserver>();
- producing = false;
- }
-
- @Override
- public Object getProperty(String name, ImageObserver observer) {
- if(name == null) {
- // awt.38=Property name is not defined
- throw new NullPointerException(Messages.getString("awt.38")); //$NON-NLS-1$
- }
- if(properties == null){
- addObserver(observer);
- startProduction();
- if(properties == null) {
- return null;
- }
- }
- Object prop = properties.get(name);
- if(prop == null) {
- prop = UndefinedProperty;
- }
- return prop;
- }
-
- @Override
- public ImageProducer getSource() {
- return src;
- }
-
- @Override
- public int getWidth(ImageObserver observer) {
- if((imageState & ImageObserver.WIDTH) == 0){
- addObserver(observer);
- startProduction();
- if((imageState & ImageObserver.WIDTH) == 0) {
- return -1;
- }
- }
- return width;
- }
-
- @Override
- public int getHeight(ImageObserver observer) {
- if((imageState & ImageObserver.HEIGHT) == 0){
- addObserver(observer);
- startProduction();
- if((imageState & ImageObserver.HEIGHT) == 0) {
- return -1;
- }
- }
- return height;
- }
-
- @Override
- public Graphics getGraphics() {
- // awt.39=This method is not implemented for image obtained from ImageProducer
- throw new UnsupportedOperationException(Messages.getString("awt.39")); //$NON-NLS-1$
- }
-
- @Override
- public void flush() {
- stopProduction();
- imageUpdate(this, ImageObserver.ABORT, -1, -1, -1, -1);
- imageState &= ~ImageObserver.ERROR;
- imageState = 0;
- image = null;
- cm = null;
- raster = null;
- hints = 0;
- width = -1;
- height = -1;
- }
-
- public void setProperties(Hashtable<?, ?> properties) {
- this.properties = properties;
- imageUpdate(this, ImageObserver.PROPERTIES, 0, 0, width, height);
- }
-
- public void setColorModel(ColorModel cm) {
- this.cm = cm;
- }
-
- /*
- * We suppose what in case loading JPEG image then image has DirectColorModel
- * and for infill image Raster will use setPixels method with int array.
- *
- * In case loading GIF image, for raster infill, is used setPixels method with
- * byte array and Color Model is IndexColorModel. But Color Model may
- * be changed during this process. Then is called setPixels method with
- * int array and image force to default color model - int ARGB. The rest
- * pixels are sending in DirectColorModel.
- */
- public void setPixels(int x, int y, int w, int h, ColorModel model,
- int[] pixels, int off, int scansize) {
- if(raster == null){
- if(cm == null){
- if(model == null) {
- // awt.3A=Color Model is null
- throw new NullPointerException(Messages.getString("awt.3A")); //$NON-NLS-1$
- }
- cm = model;
- }
- createRaster();
- }
-
- if(model == null) {
- model = cm;
- }
- if(cm != model){
- forceToIntARGB();
- }
-
- if(cm == model && model.getTransferType() == DataBuffer.TYPE_INT &&
- raster.getNumDataElements() == 1){
-
- DataBufferInt dbi = (DataBufferInt) raster.getDataBuffer();
- int data[] = dbi.getData();
- int scanline = raster.getWidth();
- int rof = dbi.getOffset() + y * scanline + x;
- for(int lineOff = off, line = y; line < y + h;
- line++, lineOff += scansize, rof += scanline){
-
- System.arraycopy(pixels, lineOff, data, rof, w);
- }
-
- }else if(isIntRGB){
- int buff[] = new int[w];
- DataBufferInt dbi = (DataBufferInt) raster.getDataBuffer();
- int data[] = dbi.getData();
- int scanline = raster.getWidth();
- int rof = dbi.getOffset() + y * scanline + x;
- for (int sy = y, sOff = off; sy < y + h; sy++, sOff += scansize,
- rof += scanline) {
-
- for (int sx = x, idx = 0; sx < x + w; sx++, idx++) {
- buff[idx] = model.getRGB(pixels[sOff + idx]);
- }
- System.arraycopy(buff, 0, data, rof, w);
- }
- }else{
- Object buf = null;
- for (int sy = y, sOff = off; sy < y + h; sy++, sOff += scansize) {
- for (int sx = x, idx = 0; sx < x + w; sx++, idx++) {
- int rgb = model.getRGB(pixels[sOff + idx]);
- buf = cm.getDataElements(rgb, buf);
- raster.setDataElements(sx, sy, buf);
- }
- }
- }
-
- if (imageSurf != null) {
- imageSurf.invalidate();
- }
-
- imageUpdate(this, ImageObserver.SOMEBITS, 0, 0, width, height);
- }
-
- public void setPixels(int x, int y, int w, int h, ColorModel model,
- byte[] pixels, int off, int scansize) {
-
- if(raster == null){
- if(cm == null){
- if(model == null) {
- // awt.3A=Color Model is null
- throw new NullPointerException(Messages.getString("awt.3A")); //$NON-NLS-1$
- }
- cm = model;
- }
- createRaster();
- }
- if(model == null) {
- model = cm;
- }
- if(model != cm){
- forceToIntARGB();
- }
-
- if(isIntRGB){
- int buff[] = new int[w];
- IndexColorModel icm = (IndexColorModel) model;
- int colorMap[] = new int[icm.getMapSize()];
- icm.getRGBs(colorMap);
- DataBufferInt dbi = (DataBufferInt) raster.getDataBuffer();
- int data[] = dbi.getData();
- int scanline = raster.getWidth();
- int rof = dbi.getOffset() + y * scanline + x;
- if(model instanceof IndexColorModel){
-
- for (int sy = y, sOff = off; sy < y + h; sy++, sOff += scansize,
- rof += scanline) {
- for (int sx = x, idx = 0; sx < x + w; sx++, idx++) {
- buff[idx] = colorMap[pixels[sOff + idx] & 0xff];
- }
- System.arraycopy(buff, 0, data, rof, w);
- }
- }else{
-
- for (int sy = y, sOff = off; sy < y + h; sy++, sOff += scansize,
- rof += scanline) {
- for (int sx = x, idx = 0; sx < x + w; sx++, idx++) {
- buff[idx] = model.getRGB(pixels[sOff + idx] & 0xff);
- }
- System.arraycopy(buff, 0, data, rof, w);
- }
- }
- }else if(model == cm && model.getTransferType() == DataBuffer.TYPE_BYTE &&
- raster.getNumDataElements() == 1){
-
- DataBufferByte dbb = (DataBufferByte)raster.getDataBuffer();
- byte data[] = dbb.getData();
- int scanline = raster.getWidth();
- int rof = dbb.getOffset() + y * scanline + x;
- for(int lineOff = off, line = y; line < y + h;
- line++, lineOff += scansize, rof += scanline){
- System.arraycopy(pixels, lineOff, data, rof, w);
- }
- // BEGIN android-added (taken from newer Harmony)
- }else if(model == cm && model.getTransferType() == DataBuffer.TYPE_BYTE &&
- cm instanceof ComponentColorModel){
-
- int nc = cm.getNumComponents();
- byte stride[] = new byte[scansize];
- for (int sy = y, sOff = off; sy < y + h; sy++, sOff += scansize) {
- System.arraycopy(pixels, sOff, stride, 0, scansize);
-
- raster.setDataElements(x, sy, w, 1, stride);
- }
- // END android-added
- }else {
- for (int sy = y, sOff = off; sy < y + h; sy++, sOff += scansize) {
- for (int sx = x, idx = 0; sx < x + w; sx++, idx++) {
- int rgb = model.getRGB(pixels[sOff + idx] & 0xff);
- raster.setDataElements(sx, sy, cm.getDataElements(rgb, null));
- }
- }
- }
-
- if (imageSurf != null) {
- imageSurf.invalidate();
- }
-
- imageUpdate(this, ImageObserver.SOMEBITS, 0, 0, width, height);
- }
-
- public void setDimensions(int width, int height) {
- if(width <= 0 || height <= 0){
- imageComplete(ImageObserver.ERROR);
- return;
- }
-
- this.width = width;
- this.height = height;
- imageUpdate(this, (ImageObserver.HEIGHT | ImageObserver.WIDTH),
- 0, 0, width, height);
- }
-
- public void setHints(int hints) {
- this.hints = hints;
- }
-
- public void imageComplete(int state) {
- int flag;
- switch(state){
- case IMAGEABORTED:
- flag = ImageObserver.ABORT;
- break;
- case IMAGEERROR:
- flag = ImageObserver.ERROR | ImageObserver.ABORT;
- break;
- case SINGLEFRAMEDONE:
- flag = ImageObserver.FRAMEBITS;
- break;
- case STATICIMAGEDONE:
- flag = ImageObserver.ALLBITS;
- break;
- default:
- // awt.3B=Incorrect ImageConsumer completion status
- throw new IllegalArgumentException(Messages.getString("awt.3B")); //$NON-NLS-1$
- }
- imageUpdate(this, flag, 0, 0, width, height);
-
- if((flag & (ImageObserver.ERROR | ImageObserver.ABORT |
- ImageObserver.ALLBITS)) != 0 ) {
- stopProduction();
- observers.removeAllElements();
- }
- }
-
- public /*synchronized*/ BufferedImage getBufferedImage(){
- if(image == null){
- ColorModel model = getColorModel();
- WritableRaster wr = getRaster();
- if(model != null && wr != null) {
- image = new BufferedImage(model, wr, model.isAlphaPremultiplied(), null);
- }
- }
- return image;
- }
-
- public /*synchronized*/ int checkImage(ImageObserver observer){
- addObserver(observer);
- return imageState;
- }
-
- public /*synchronized*/ boolean prepareImage(ImageObserver observer){
- if((imageState & ImageObserver.ERROR) != 0){
- if(observer != null){
- observer.imageUpdate(this, ImageObserver.ERROR |
- ImageObserver.ABORT, -1, -1, -1, -1);
- }
- return false;
- }
- if((imageState & ImageObserver.ALLBITS) != 0) {
- return true;
- }
- addObserver(observer);
- startProduction();
- return ((imageState & ImageObserver.ALLBITS) != 0);
- }
-
- public /*synchronized*/ ColorModel getColorModel(){
- if(cm == null) {
- startProduction();
- }
- return cm;
- }
-
- public /*synchronized*/ WritableRaster getRaster(){
- if(raster == null) {
- startProduction();
- }
- return raster;
- }
-
- public int getState(){
- return imageState;
- }
-
- private /*synchronized*/ void addObserver(ImageObserver observer){
- if(observer != null){
- if(observers.contains(observer)) {
- return;
- }
- if((imageState & ImageObserver.ERROR) != 0){
- observer.imageUpdate(this, ImageObserver.ERROR |
- ImageObserver.ABORT, -1, -1, -1, -1);
- return;
- }
- if((imageState & ImageObserver.ALLBITS) != 0){
- observer.imageUpdate(this, imageState, 0, 0, width, height);
- return;
- }
- observers.addElement(observer);
- }
- }
-
- private synchronized void startProduction(){
- if(!producing){
- imageState &= ~ImageObserver.ABORT;
- producing = true;
- src.startProduction(this);
- }
- }
-
- private synchronized void stopProduction(){
- producing = false;
- src.removeConsumer(this);
- }
-
- private void createRaster(){
- try{
- raster = cm.createCompatibleWritableRaster(width, height);
- isIntRGB = false;
- if(cm instanceof DirectColorModel){
- DirectColorModel dcm = (DirectColorModel) cm;
- if(dcm.getTransferType() == DataBuffer.TYPE_INT &&
- dcm.getRedMask() == 0xff0000 &&
- dcm.getGreenMask() == 0xff00 &&
- dcm.getBlueMask() == 0xff){
- isIntRGB = true;
- }
- }
- }catch(Exception e){
- cm = ColorModel.getRGBdefault();
- raster = cm.createCompatibleWritableRaster(width, height);
- isIntRGB = true;
- }
- }
-
- private /*synchronized*/ void imageUpdate(Image img, int infoflags, int x, int y,
- int width, int height){
-
- imageState |= infoflags;
- for (ImageObserver observer : observers) {
- observer.imageUpdate(this, infoflags, x, y, width, height);
- }
-
-// notifyAll();
- }
-
- private void forceToIntARGB(){
-
- int w = raster.getWidth();
- int h = raster.getHeight();
-
- WritableRaster destRaster = rgbCM.createCompatibleWritableRaster(w, h);
-
- Object obj = null;
- int pixels[] = new int[w];
-
- if(cm instanceof IndexColorModel){
- IndexColorModel icm = (IndexColorModel) cm;
- int colorMap[] = new int[icm.getMapSize()];
- icm.getRGBs(colorMap);
-
- for (int y = 0; y < h; y++) {
- obj = raster.getDataElements(0, y, w, 1, obj);
- byte ba[] = (byte[]) obj;
- for (int x = 0; x < ba.length; x++) {
- pixels[x] = colorMap[ba[x] & 0xff];
- }
- destRaster.setDataElements(0, y, w, 1, pixels);
- }
-
- }else{
- for(int y = 0; y < h; y++){
- for(int x = 0; x < w; x++){
- obj = raster.getDataElements(x, y, obj);
- pixels[x] = cm.getRGB(obj);
- }
- destRaster.setDataElements(0, y, w, 1, pixels);
- }
- }
-
- synchronized(this){
- if(imageSurf != null){
- imageSurf.dispose();
- imageSurf = null;
- }
- if(image != null){
- image.flush();
- image = null;
- }
- cm = rgbCM;
- raster = destRaster;
- isIntRGB = true;
- }
- }
-
- public ImageSurface getImageSurface() {
- if (imageSurf == null) {
- ColorModel model = getColorModel();
- WritableRaster wr = getRaster();
- if(model != null && wr != null) {
- imageSurf = new ImageSurface(model, wr);
- }
- }
- return imageSurf;
- }
-}