/* * Copyright (c) 2009-2012 jMonkeyEngine * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * * Neither the name of 'jMonkeyEngine' nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package com.jme3.ui; import com.jme3.asset.AssetManager; import com.jme3.asset.TextureKey; import com.jme3.material.Material; import com.jme3.material.RenderState.BlendMode; import com.jme3.math.ColorRGBA; import com.jme3.math.Vector3f; import com.jme3.renderer.queue.RenderQueue.Bucket; import com.jme3.scene.Geometry; import com.jme3.scene.shape.Quad; import com.jme3.texture.Texture2D; /** * A <code>Picture</code> represents a 2D image drawn on the screen. * It can be used to represent sprites or other background elements. * * @author Kirill Vainer */ public class Picture extends Geometry { private float width = 1f; private float height = 1f; /** * Create a named picture. * * By default a picture's width and height are 1 * and its position is 0, 0. * * @param name the name of the picture in the scene graph * @param flipY If true, the Y coordinates of the texture will be flipped. */ public Picture(String name, boolean flipY){ super(name, new Quad(1, 1, flipY)); setQueueBucket(Bucket.Gui); setCullHint(CullHint.Never); } /** * Creates a named picture. * By default a picture's width and height are 1 * and its position is 0, 0. * The image texture coordinates will not be flipped. * * @param name the name of the picture in the scene graph */ public Picture(String name){ this(name, false); } /* * Serialization only. Do not use. */ public Picture(){ } /** * Set the width in pixels of the picture, if the width * does not match the texture's width, then the texture will * be scaled to fit the picture. * * @param width the width to set. */ public void setWidth(float width){ this.width = width; setLocalScale(new Vector3f(width, height, 1f)); } /** * Set the height in pixels of the picture, if the height * does not match the texture's height, then the texture will * be scaled to fit the picture. * * @param height the height to set. */ public void setHeight(float height){ this.height = height; setLocalScale(new Vector3f(width, height, 1f)); } /** * Set the position of the picture in pixels. * The origin (0, 0) is at the bottom-left of the screen. * * @param x The x coordinate * @param y The y coordinate */ public void setPosition(float x, float y){ float z = getLocalTranslation().getZ(); setLocalTranslation(x, y, z); } /** * Set the image to put on the picture. * * @param assetManager The {@link AssetManager} to use to load the image. * @param imgName The image name. * @param useAlpha If true, the picture will appear transparent and allow * objects behind it to appear through. If false, the transparent * portions will be the image's color at that pixel. */ public void setImage(AssetManager assetManager, String imgName, boolean useAlpha){ TextureKey key = new TextureKey(imgName, true); Texture2D tex = (Texture2D) assetManager.loadTexture(key); setTexture(assetManager, tex, useAlpha); } /** * Set the texture to put on the picture. * * @param assetManager The {@link AssetManager} to use to load the material. * @param tex The texture * @param useAlpha If true, the picture will appear transparent and allow * objects behind it to appear through. If false, the transparent * portions will be the image's color at that pixel. */ public void setTexture(AssetManager assetManager, Texture2D tex, boolean useAlpha){ if (getMaterial() == null){ Material mat = new Material(assetManager, "Common/MatDefs/Gui/Gui.j3md"); mat.setColor("Color", ColorRGBA.White); setMaterial(mat); } material.getAdditionalRenderState().setBlendMode(useAlpha ? BlendMode.Alpha : BlendMode.Off); material.setTexture("Texture", tex); } }