/*******************************************************************************
* 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.utils;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.g2d.Batch;
import com.badlogic.gdx.graphics.g2d.NinePatch;
/** Drawable for a {@link NinePatch}.
* <p>
* The drawable sizes are set when the ninepatch is set, but they are separate values. Eg, {@link Drawable#getLeftWidth()} could
* be set to more than {@link NinePatch#getLeftWidth()} in order to provide more space on the left than actually exists in the
* ninepatch.
* <p>
* The min size is set to the ninepatch total size by default. It could be set to the left+right and top+bottom, excluding the
* middle size, to allow the drawable to be sized down as small as possible.
* @author Nathan Sweet */
public class NinePatchDrawable extends BaseDrawable implements TransformDrawable {
private NinePatch patch;
/** Creates an uninitialized NinePatchDrawable. The ninepatch must be {@link #setPatch(NinePatch) set} before use. */
public NinePatchDrawable () {
}
public NinePatchDrawable (NinePatch patch) {
setPatch(patch);
}
public NinePatchDrawable (NinePatchDrawable drawable) {
super(drawable);
setPatch(drawable.patch);
}
public void draw (Batch batch, float x, float y, float width, float height) {
patch.draw(batch, x, y, width, height);
}
public void draw (Batch batch, float x, float y, float originX, float originY, float width, float height, float scaleX,
float scaleY, float rotation) {
patch.draw(batch, x, y, originX, originY, width, height, scaleX, scaleY, rotation);
}
public void setPatch (NinePatch patch) {
this.patch = patch;
setMinWidth(patch.getTotalWidth());
setMinHeight(patch.getTotalHeight());
setTopHeight(patch.getPadTop());
setRightWidth(patch.getPadRight());
setBottomHeight(patch.getPadBottom());
setLeftWidth(patch.getPadLeft());
}
public NinePatch getPatch () {
return patch;
}
/** Creates a new drawable that renders the same as this drawable tinted the specified color. */
public NinePatchDrawable tint (Color tint) {
NinePatchDrawable drawable = new NinePatchDrawable(this);
drawable.setPatch(new NinePatch(drawable.getPatch(), tint));
return drawable;
}
}