Package com.badlogic.gdx.scenes.scene2d.ui

Source Code of com.badlogic.gdx.scenes.scene2d.ui.Image

/*******************************************************************************
* Copyright 2011 See AUTHORS file.
*
* Licensed 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.
******************************************************************************/

package com.badlogic.gdx.scenes.scene2d.ui;

import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.NinePatch;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.scenes.scene2d.utils.Align;
import com.badlogic.gdx.scenes.scene2d.utils.Drawable;
import com.badlogic.gdx.scenes.scene2d.utils.NinePatchDrawable;
import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable;
import com.badlogic.gdx.utils.Scaling;

/** Displays a {@link Drawable}, scaled various way within the widgets bounds. The preferred size is the min size of the drawable.
* Only when using a {@link TextureRegionDrawable} will the actor's scale, rotation, and origin be used when drawing.
* @author Nathan Sweet */
public class Image extends Widget {
  private Scaling scaling;
  private int align = Align.center;
  private float imageX, imageY, imageWidth, imageHeight;
  private Drawable drawable;

  /** Creates an image with no region or patch, stretched, and aligned center. */
  public Image () {
    this((Drawable)null);
  }

  /** Creates an image stretched, and aligned center.
   * @param patch May be null. */
  public Image (NinePatch patch) {
    this(new NinePatchDrawable(patch), Scaling.stretch, Align.center);
  }

  /** Creates an image stretched, and aligned center.
   * @param region May be null. */
  public Image (TextureRegion region) {
    this(new TextureRegionDrawable(region), Scaling.stretch, Align.center);
  }

  /** Creates an image stretched, and aligned center. */
  public Image (Texture texture) {
    this(new TextureRegionDrawable(new TextureRegion(texture)));
  }

  /** Creates an image stretched, and aligned center. */
  public Image (Skin skin, String drawableName) {
    this(skin.getDrawable(drawableName), Scaling.stretch, Align.center);
  }

  /** Creates an image stretched, and aligned center.
   * @param drawable May be null. */
  public Image (Drawable drawable) {
    this(drawable, Scaling.stretch, Align.center);
  }

  /** Creates an image aligned center.
   * @param drawable May be null. */
  public Image (Drawable drawable, Scaling scaling) {
    this(drawable, scaling, Align.center);
  }

  /** @param drawable May be null. */
  public Image (Drawable drawable, Scaling scaling, int align) {
    setDrawable(drawable);
    this.scaling = scaling;
    this.align = align;
    setWidth(getPrefWidth());
    setHeight(getPrefHeight());
  }

  public void layout () {
    if (drawable == null) return;

    float regionWidth = drawable.getMinWidth();
    float regionHeight = drawable.getMinHeight();
    float width = getWidth();
    float height = getHeight();

    Vector2 size = scaling.apply(regionWidth, regionHeight, width, height);
    imageWidth = size.x;
    imageHeight = size.y;

    if ((align & Align.left) != 0)
      imageX = 0;
    else if ((align & Align.right) != 0)
      imageX = (int)(width - imageWidth);
    else
      imageX = (int)(width / 2 - imageWidth / 2);

    if ((align & Align.top) != 0)
      imageY = (int)(height - imageHeight);
    else if ((align & Align.bottom) != 0)
      imageY = 0;
    else
      imageY = (int)(height / 2 - imageHeight / 2);
  }

  public void draw (SpriteBatch batch, float parentAlpha) {
    validate();

    Color color = getColor();
    batch.setColor(color.r, color.g, color.b, color.a * parentAlpha);

    float x = getX();
    float y = getY();
    float scaleX = getScaleX();
    float scaleY = getScaleY();

    if (drawable != null) {
      if (drawable.getClass() == TextureRegionDrawable.class) {
        TextureRegion region = ((TextureRegionDrawable)drawable).getRegion();
        float rotation = getRotation();
        if (scaleX == 1 && scaleY == 1 && rotation == 0)
          batch.draw(region, x + imageX, y + imageY, imageWidth, imageHeight);
        else {
          batch.draw(region, x + imageX, y + imageY, getOriginX() - imageX, getOriginY() - imageY, imageWidth, imageHeight,
            scaleX, scaleY, rotation);
        }
      } else
        drawable.draw(batch, x + imageX, y + imageY, imageWidth * scaleX, imageHeight * scaleY);
    }
  }

  public void setDrawable (Skin skin, String drawableName) {
    setDrawable(skin.getDrawable(drawableName));
  }

  public void setDrawable (Drawable drawable) {
    if (drawable != null) {
      if (this.drawable == drawable) return;
      if (getPrefWidth() != drawable.getMinWidth() || getPrefHeight() != drawable.getMinHeight()) invalidateHierarchy();
    } else {
      if (getPrefWidth() != 0 || getPrefHeight() != 0) invalidateHierarchy();
    }
    this.drawable = drawable;
  }

  public Drawable getDrawable () {
    return drawable;
  }

  public void setScaling (Scaling scaling) {
    if (scaling == null) throw new IllegalArgumentException("scaling cannot be null.");
    this.scaling = scaling;
  }

  public void setAlign (int align) {
    this.align = align;
  }

  public float getMinWidth () {
    return 0;
  }

  public float getMinHeight () {
    return 0;
  }

  public float getPrefWidth () {
    if (drawable != null) return drawable.getMinWidth();
    return 0;
  }

  public float getPrefHeight () {
    if (drawable != null) return drawable.getMinHeight();
    return 0;
  }

  public float getImageX () {
    return imageX;
  }

  public float getImageY () {
    return imageY;
  }

  public float getImageWidth () {
    return imageWidth;
  }

  public float getImageHeight () {
    return imageHeight;
  }
}
TOP

Related Classes of com.badlogic.gdx.scenes.scene2d.ui.Image

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.