/* * Copyright (C) 2006 Clam <clamisgood@gmail.com> * Copyright (C) 2008, 2009 Quadduc <quadduc@gmail.com> * Copyright (C) 2011 IsmAvatar <IsmAvatar@gmail.com> * * This file is part of LateralGM. * LateralGM is free software and comes with ABSOLUTELY NO WARRANTY. * See LICENSE for details. */ package org.lateralgm.resources; import java.awt.image.BufferedImage; import java.lang.ref.SoftReference; import java.util.EnumMap; import org.lateralgm.main.Prefs; import org.lateralgm.main.Util; import org.lateralgm.util.PropertyMap; public class Background extends Resource<Background,Background.PBackground> { private BufferedImage backgroundImage = null; private SoftReference<BufferedImage> imageCache = null; public enum PBackground { TRANSPARENT,SMOOTH_EDGES,PRELOAD,USE_AS_TILESET,TILE_WIDTH,TILE_HEIGHT,H_OFFSET,V_OFFSET,H_SEP, V_SEP } private static final EnumMap<PBackground,Object> DEFS = PropertyMap.makeDefaultMap( PBackground.class,false,false,false,false,16,16,0,0,0,0); public Background() { this(null); } public Background(ResourceReference<Background> r) { super(r); setName(Prefs.prefixes.get(Kind.BACKGROUND)); } public Background makeInstance(ResourceReference<Background> r) { return new Background(r); } public BufferedImage getDisplayImage() { if (backgroundImage == null) return null; BufferedImage bi; if (imageCache != null) { bi = imageCache.get(); if (bi != null) { return bi; } } bi = backgroundImage; if (get(PBackground.TRANSPARENT)) bi = Util.getTransparentIcon(bi); imageCache = new SoftReference<BufferedImage>(bi); return bi; } protected void postCopy(Background dest) { dest.backgroundImage = Util.cloneImage(backgroundImage); } public Kind getKind() { return Kind.BACKGROUND; } @Override protected void fireUpdate() { if (imageCache != null) imageCache.clear(); super.fireUpdate(); } public BufferedImage getBackgroundImage() { return backgroundImage; } public void setBackgroundImage(BufferedImage backgroundImage) { this.backgroundImage = backgroundImage; fireUpdate(); } public int getWidth() { return backgroundImage == null ? 0 : backgroundImage.getWidth(); } public int getHeight() { return backgroundImage == null ? 0 : backgroundImage.getHeight(); } @Override protected PropertyMap<PBackground> makePropertyMap() { return new PropertyMap<PBackground>(PBackground.class,this,DEFS); } }