Another SimpleButton derivative for skinning with a bitmap.

git-svn-id: svn+ssh://src.earth.threerings.net/nenya/trunk@722 ed5b42cb-e716-0410-a449-f6a68f950b19
This commit is contained in:
Ray Greenwell
2008-11-24 23:15:07 +00:00
parent 66386a90af
commit 714ad7e725
@@ -0,0 +1,76 @@
//
// $Id$
package com.threerings.flash {
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Shape;
import flash.display.SimpleButton;
import flash.display.Sprite;
import flash.text.TextField;
import flash.text.TextFormat;
/**
* A simple skin that shifts the text in the down state.
*/
public class SimpleSkinButton extends SimpleButton
{
/**
* Create a SimpleSkinButton.
* @param skin a BitmapData, Bitmap, or class that will turn into either.
* @param text the text to place on the button
* @param textFieldProps initProps for the TextField
* @param textFormatProps initProps for the TextFormat
* @param outline if a uint, the color of the outline to put over the skin.
*/
public function SimpleSkinButton (
skin :*, text :String, textFieldProps :Object = null, textFormatProps :Object = null,
padding :int = 10, height :Number = NaN, xshift :int = 0, yshift :int = 1,
outline :Object = null)
{
var bmp :BitmapData = ImageUtil.toBitmapData(skin);
if (bmp == null) {
throw new Error("Skin must be a Bitmap, BitmapData, or Class");
}
upState = createState(bmp, text, textFieldProps, textFormatProps,
padding, height, 0, 0, outline);
overState = upState;
hitTestState = overState;
downState = createState(bmp, text, textFieldProps, textFormatProps,
padding, height, xshift, yshift, outline);
}
protected function createState (
bmp :BitmapData, text :String, textFieldProps :Object, textFormatProps :Object,
padding :int, height :Number, xshift :int, yshift :int, outline :Object) :Sprite
{
var state :Sprite = new Sprite();
var field :TextField = TextFieldUtil.createField(text, textFieldProps, textFormatProps);
if (isNaN(height)) {
height = field.height;
}
var skin :Bitmap = new Bitmap(bmp);
skin.width = field.width + (padding * 2);
skin.height = height;
state.addChild(skin);
field.x = padding + xshift;
field.y = (height - field.height) / 2 + yshift;
state.addChild(field);
if (outline != null) {
var border :Shape = new Shape();
border.graphics.lineStyle(1, uint(outline));
border.graphics.drawRect(0, 0, skin.width - 1, skin.height - 1);
state.addChild(border);
}
return state;
}
}
}