/* * This file is part of libbluray * Copyright (C) 2010 William Hahne * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see * . */ package org.havi.ui; import java.awt.Image; import java.awt.Toolkit; import java.awt.image.ImageObserver; import java.awt.image.ImageProducer; import java.net.URL; import java.util.ArrayList; import org.havi.ui.event.HBackgroundImageEvent; import org.havi.ui.event.HBackgroundImageListener; import sun.awt.image.ByteArrayImageSource; import sun.awt.image.FileImageSource; import sun.awt.image.URLImageSource; public class HBackgroundImage implements ImageObserver { public HBackgroundImage(String filename) { producer = new FileImageSource(filename); img = Toolkit.getDefaultToolkit().createImage(producer); } public HBackgroundImage(byte pixels[]) { if (pixels == null) { System.err.println("null pixels from " + org.videolan.Logger.dumpStack()); return; } producer = new ByteArrayImageSource(pixels); img = Toolkit.getDefaultToolkit().createImage(producer); } public HBackgroundImage(URL contents) { producer = new URLImageSource(contents); img = Toolkit.getDefaultToolkit().createImage(producer); } public void load(HBackgroundImageListener listener) { synchronized(listeners) { listeners.add(listener); } Toolkit.getDefaultToolkit().prepareImage(img, -1, -1, this); } public int getHeight() { return img.getHeight(null); } public int getWidth() { return img.getWidth(null); } public void flush() { img.flush(); } public boolean imageUpdate(Image img, int infoflags, int x, int y, int width, int height) { switch(infoflags) { case ImageObserver.ALLBITS: case ImageObserver.FRAMEBITS: notifyListeners(new HBackgroundImageEvent(this, HBackgroundImageEvent.BACKGROUNDIMAGE_LOADED)); return false; case ImageObserver.ERROR: notifyListeners(new HBackgroundImageEvent(this, HBackgroundImageEvent.BACKGROUNDIMAGE_INVALID)); return false; case ImageObserver.ABORT: notifyListeners(new HBackgroundImageEvent(this, HBackgroundImageEvent.BACKGROUNDIMAGE_IOERROR)); return false; } return true; } protected Image getImage() { return img; } protected void notifyListeners(HBackgroundImageEvent event) { ArrayList list; synchronized(listeners) { list = (ArrayList)listeners.clone(); listeners.clear(); } for (int i = 0; i < list.size(); i++) { HBackgroundImageListener listener = (HBackgroundImageListener)list.get(i); if (event.getID() == HBackgroundImageEvent.BACKGROUNDIMAGE_LOADED) listener.imageLoaded(event); else listener.imageLoadFailed(event); } } private ImageProducer producer; private Image img; private ArrayList listeners = new ArrayList(); }