自作 TextArea ver.3
TextAreaの自作 ver.3
*
* ある程度は動かせると思う。簡単にしか実験もしてないので不安
* いつか自分で自作コンポーネントを作ってみたいものです。
*
* アドバイスを頂けたら嬉しいです。
*
/**
* Copyright zahir ( http://wonderfl.net/user/zahir )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/8Od2
*/
/*
* TextAreaの自作 ver.3
*
* ある程度は動かせると思う。簡単にしか実験もしてないので不安
* いつか自分で自作コンポーネントを作ってみたいものです。
*
* アドバイスを頂けたら嬉しいです。
*
*/
package{
import flash.display.Sprite;
[SWF(width = 465, height = 465, backgroundColor = 0xFFFFFF)]
public class TF_test1 extends Sprite{
public function TF_test1(){
var txt:String = "";
txt += " 1 :: ";
for(var i:int= 2; i<=25; i++){
txt += "\n " + i + " :: ";
}
var ta:TextArea = new TextArea( 320, 180, true, true, false, true);
addChild( ta );
ta.x = (stage.stageWidth - ta.width) >>1;
ta.y = (stage.stageHeight - ta.height) >>1;
ta.text = txt;
}
}
}
import flash.display.DisplayObject;
import flash.display.Graphics;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.FocusEvent;
import flash.events.KeyboardEvent;
import flash.events.MouseEvent;
import flash.events.TextEvent;
import flash.filters.ColorMatrixFilter;
import flash.geom.Rectangle;
import flash.text.StyleSheet;
import flash.text.TextField;
import flash.text.TextFieldType;
import flash.text.TextFormat;
import flash.text.TextLineMetrics;
class TextArea extends Sprite{
public const SCROLL_BAR_WIDTH : int = 16;
private var t:TextField;
// HScrollBar
private var hSliderBg:Sprite;
private var hSlider:HSlider;
// VScrollBar
private var upBtn:UpButton;
private var downBtn:DownButton;
private var vSliderBg:Sprite;
private var vSlider:VSlider;
// up, down, over
private var _arrowColor:Array = [0x999999, 0x333333, 0x666666];
private var _baseColor:Array = [0xEEEEEE, 0xCCCCCC, 0xCCCCCC];
private var _lineColor:Array = [0x999999, 0x0099FF, 0x666666];
private var _barBackgroundColor:uint = 0xCCCCCC;
private var _bg:uint = 0xEEEEEE;
private var _border:uint = 0x333333;
private var _focusBg:uint = 0xFFFFCC;
private var _focusBorder:uint = 0x0099FF;
private var _textColor:uint = 0x000000;
private var _selectTextColor:uint = 0xFFFFFF;
private var _selectBackgroundColor:uint = 0x0099FF;
private var _useHScrollBar:Boolean;
private var _useVScrollBar:Boolean;
private var _useFilter:Boolean;
private var _edit:Boolean;
private var _focus:Boolean;
private var _inFocus:Boolean = false;
private var _draw:Boolean = true;
private var _drag_flg:Boolean = false;
private var hScroll_flg:Boolean = false;
private var vScroll_flg:Boolean = false;
private var w:int, h:int;
private var hScrollThickness:Number;
private var vScrollThickness:Number;
private var clickPoint:int;
private var minHScrollX:int;
private var maxHScrollX:int;
private var minVScrollY:int;
private var maxVScrollY:int;
private var _delayFrame:int = 8;
private var count:int = 0;
public function TextArea( width:int, height:int,
useHScrollBar:Boolean, useVScrollBar:Boolean,
focus:Boolean = false,
useFilter:Boolean = false, editable:Boolean = true){
t = new TextField();
addChild( t );
w = t.width = width;
h = t.height = height;
t.x = t.y = 0;
_useHScrollBar = useHScrollBar;
_useVScrollBar = useVScrollBar;
_useFilter = useFilter;
this.focus = focus;
this.editable = editable;
this.multiline = true;
init();
}
private function init():void{
t.type = (_edit == true) ? TextFieldType.INPUT : TextFieldType.DYNAMIC;
setFilter();
draw();
t.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
t.addEventListener( Event.CHANGE, onChange );
t.addEventListener(Event.SCROLL, onScroll);
t.addEventListener( TextEvent.LINK, onLink );
}
private function addHScrollUI():void{
if(hScroll_flg){
updataHScrollUI();
return;
}
t.height -= SCROLL_BAR_WIDTH;
hSliderBg = new Sprite();
addChild( hSliderBg );
drawH();
var _w:int = hSliderBg.width * (t.width / t.textWidth);
_w = _w < 12 ? 12 : _w;
hSlider = new HSlider( _w, SCROLL_BAR_WIDTH, _arrowColor, _baseColor, _lineColor );
addChild(hSlider);
hSliderBg.addEventListener( MouseEvent.MOUSE_DOWN, onHSliderBgDown);
hSlider.addEventListener( MouseEvent.MOUSE_DOWN, onHSliderDown);
hSlider.cacheAsBitmap = true;
if(useVScrollBar && vScroll_flg)
updataVScrollUI();
updataHScrollUI();
hScroll_flg = true;
_draw = true;
}
private function addVScrollUI():void{
if(vScroll_flg){
updataVScrollUI();
return;
}
t.width -= SCROLL_BAR_WIDTH;
vSliderBg = new Sprite();
addChild(vSliderBg);
upBtn = new UpButton( SCROLL_BAR_WIDTH, _arrowColor, _baseColor, _lineColor);
addChild( upBtn );
downBtn = new DownButton( SCROLL_BAR_WIDTH, _arrowColor, _baseColor, _lineColor);
addChild( downBtn );
var _h:int = (h - SCROLL_BAR_WIDTH*2) * (t.height / t.textHeight);
_h = _h < 12 ? 12 : _h;
vSlider = new VSlider( _h , SCROLL_BAR_WIDTH, _arrowColor, _baseColor, _lineColor);
addChild( vSlider );
drawV();
upBtn.addEventListener( MouseEvent.MOUSE_DOWN, onUpDown );
downBtn.addEventListener( MouseEvent.MOUSE_DOWN, onDownDown );
vSliderBg.addEventListener( MouseEvent.MOUSE_DOWN, onVSliderBgDown );
vSlider.addEventListener( MouseEvent.MOUSE_DOWN, onVSliderDown );
vSlider.cacheAsBitmap = true;
if(useHScrollBar && hScroll_flg)
updataHScrollUI();
updataVScrollUI();
vScroll_flg = true;
_draw = true;
}
private function removeHScrollUI():void{
if( hSliderBg != null && this.contains( hSliderBg) ){
hSliderBg.removeEventListener( MouseEvent.MOUSE_DOWN, onHSliderBgDown);
removeChild(hSliderBg);
}
if( hSlider != null && this.contains( hSlider) ){
hSlider.removeEventListener( MouseEvent.MOUSE_DOWN, onHSliderDown);
removeChild(hSlider);
}
t.height = h;
hScroll_flg = false;
}
private function removeVScrollUI():void{
if( upBtn != null && this.contains(upBtn) ){
upBtn.removeEventListener( MouseEvent.MOUSE_DOWN, onUpDown );
removeChild( upBtn );
}
if( downBtn != null && this.contains(downBtn) ){
downBtn.removeEventListener( MouseEvent.MOUSE_DOWN, onDownDown );
removeChild( downBtn );
}
if( vSliderBg != null && this.contains(vSliderBg) ){
vSliderBg.removeEventListener( MouseEvent.CLICK, onVSliderBgDown);
removeChild( vSliderBg );
}
if( vSlider != null && this.contains(vSlider) ){
vSlider.removeEventListener( MouseEvent.MOUSE_DOWN, onVSliderDown );
removeChild( vSlider );
}
t.width = w;
vScroll_flg = false;
}
private function updataHScrollUI():void{
hSliderBg.y = hSlider.y = t.height;
var _w:int = hSliderBg.width * ( (maxScrollH / 3) / maxScrollH);
hSlider.sliderWidth = _w = _w < 12 ? 12 : _w;
minHScrollX = 0;
maxHScrollX = t.width - hSlider.width;
hScrollThickness = (maxHScrollX - minHScrollX) / ( t.maxScrollH);
hSlider.x = minHScrollX + hScrollThickness * ( t.scrollH);
draw();
}
private function updataVScrollUI():void{
vSliderBg.x = upBtn.x = downBtn.x = vSlider.x = t.width;
downBtn.y = h - SCROLL_BAR_WIDTH - 1;
var _h:int = ( t.height - SCROLL_BAR_WIDTH*2) * (t.height / t.textHeight);
vSlider.sliderHeight = _h < 12 ? 12 : _h;
minVScrollY = upBtn.y + upBtn.height;
maxVScrollY = downBtn.y - vSlider.height;
vScrollThickness = (maxVScrollY - minVScrollY ) / (t.maxScrollV);
vSlider.y = minVScrollY + vScrollThickness * (scrollV - 1);
draw();
}
private function checkUseScrollBar():void{
if( !useHScrollBar && !useVScrollBar ) return;
if( useHScrollBar ){
if( maxScrollH >= 1){
addHScrollUI();
}else if( maxScrollH == 0){
removeHScrollUI();
}
}
if( useVScrollBar ){
if( maxScrollV > 1){
addVScrollUI();
}else if( maxScrollV == 1){
removeVScrollUI();
}
}
}
private function draw():void{
if(!_draw) return;
var g:Graphics = this.graphics;
g.clear();
g.lineStyle( _inFocus ? 2 : 1, _inFocus ? focusBorderColor : borderColor , _inFocus ? 0.8 : 1);
g.beginFill( _inFocus ? focusBackgroundColor : backgroundColor );
g.drawRect(0,0, width, height -1);
g.endFill();
if( hScroll_flg ) drawH();
if( vScroll_flg ) drawV();
_draw = false;
}
private function drawH():void{
var g:Graphics = hSliderBg.graphics;
g.clear();
g.lineStyle( 1, _lineColor[0]);
g.beginFill( _barBackgroundColor );
g.drawRect( 1,0, t.width - 1, SCROLL_BAR_WIDTH - 2);
g.endFill();
}
private function drawV():void{
var g:Graphics = vSliderBg.graphics;
g.clear();
g.lineStyle( 1, _lineColor[0]);
g.beginFill( _barBackgroundColor );
g.drawRect( 1,1, SCROLL_BAR_WIDTH - 2, h -3);
g.endFill();
}
private function setFilter():void{
//引用元 :: http://labs.hellokeita.com/2008/03/13/textfield-selection-color/
// filterを使用する場合 htmlTextで<font color="#RRGGBB">を利用してもテキストの色は統一されるので注意
if( !_useFilter ) return;
const n:Number = 1/255;
var cf:ColorMatrixFilter = new ColorMatrixFilter();
var c:Array = [];
var r:int, g:int, b:int;
c[0] = _selectBackgroundColor >> 16;
c[1] = _selectBackgroundColor >> 8 &0xFF;
c[2] = _selectBackgroundColor &0xFF;
r = _textColor >>16; g = _textColor >> 8 &0xFF; b = _textColor &0xFF;
c[3] = (r - (255 + c[0])) * n + 1;
c[4] = (g - (255 + c[1])) * n + 1;
c[5] = (b - (255 + c[2])) * n + 1;
r = _selectTextColor >>16; g = _selectTextColor >> 8 &0xFF; b = _selectTextColor &0xFF;
c[6] = (r - (255 + c[0])) * n + 1 - c[3];
c[7] = (g - (255 + c[1])) * n + 1 - c[4];
c[8] = (b - (255 + c[2])) * n + 1 - c[5];
cf.matrix = [c[3], c[6], 0, 0, c[0], c[4], c[7], 0, 0, c[1], c[5], c[8], 0, 0, c[2], 0, 0, 0, 1, 0];
t.textColor = 0xFF0000;
t.filters = [ cf ];
}
public function get backgroundColor():uint{
return _bg;
}
public function set backgroundColor( value:uint ):void{
_bg = value;
_draw = true;
draw()
}
public function get borderColor():uint{
return _border;
}
public function set borderColor( value:uint ):void{
_border = value;
_draw = true;
draw();
}
public function set barBackgroundColor( value:uint ):void{
_barBackgroundColor = value;
_draw = true;
draw();
}
public function get delayFrame():int{
return _delayFrame;
}
public function set delayFrame( value:int ):void{
_delayFrame = value < 0 ? 0:Math.round( value );
}
public function get editable():Boolean{ return _edit; }
public function set editable( flg:Boolean ):void {
_edit = flg;
t.type = (_edit == true) ? TextFieldType.INPUT : TextFieldType.DYNAMIC;
}
public function get filtering():Boolean{ return _useFilter; }
public function set filtering( flg:Boolean ):void{
_useFilter = flg;
if(!flg) t.filters = [];
}
public function get focus():Boolean{ return _focus; }
public function set focus( flg:Boolean ):void{
_focus = flg;
if(flg){
t.addEventListener(FocusEvent.FOCUS_IN, inFocus);
}else{
t.removeEventListener(FocusEvent.FOCUS_IN, inFocus);
}
}
public function get focusBackgroundColor():uint{ return _focusBg; }
public function set focusBackgroundColor( value:uint ):void{ _focusBg = value; }
public function get focusBorderColor():uint{ return _focusBorder; }
public function set focusBorderColor( value:uint ):void{ _focusBorder = value; }
public override function get height():Number{
return Math.floor( super.height );
}
public override function set height( value:Number ):void{
h = Math.round( value );
_draw = true;
if(hScroll_flg){
t.height = h - SCROLL_BAR_WIDTH;
updataHScrollUI();
}else t.height = h;
if(vScroll_flg) updataVScrollUI();
draw();
}
public function get selectBackgroundColor():uint{ return _selectBackgroundColor; }
public function set selectBackgroundColor( value:uint ):void{_selectBackgroundColor = value; setFilter();}
public function get selectTextColor():uint{ return _selectTextColor; }
public function set selectTextColor( value:uint ):void{ _selectTextColor = value; setFilter();}
public function get textColor():uint{ return _textColor; }
public function set textColor(value:uint):void{ _textColor = value; setFilter();}
public function set UIArrowColor( arr:Array ):void{
if(arr.length != 3) return;
_arrowColor = arr;
upBtn.arrowColors = downBtn.arrowColors = vSlider.arrowColors = arr;
}
public function set UIBaseColor( arr:Array ):void{
if(arr.length != 3) return;
_baseColor = arr;
upBtn.baseColors = downBtn.baseColors = vSlider.baseColors = arr;
}
public function set UILineColor( arr:Array ):void{
if(arr.length != 3) return;
_lineColor = arr;
upBtn.lineColors = downBtn.lineColors = vSlider.lineColors = arr;
}
public function get useHScrollBar():Boolean{ return _useHScrollBar; }
public function set useHScrollBar( flg:Boolean ):void{ _useHScrollBar = flg; }
public function get useVScrollBar():Boolean{ return _useVScrollBar; }
public function set useVScrollBar( flg:Boolean ):void{ _useVScrollBar = flg; }
public override function get width():Number{
return Math.floor( super.width );
}
public override function set width(value:Number):void{
w = Math.round( value );
_draw = true;
if(vScroll_flg){
t.width = w - SCROLL_BAR_WIDTH;
updataVScrollUI();
}else t.width = w;
if(hScroll_flg) updataHScrollUI();
draw();
}
// HSliderBg
protected function onHSliderBgDown( e:MouseEvent ):void{
var p:int = mouseX;
p = p < minHScrollX ? minHScrollX : p > maxHScrollX? maxHScrollX : p;
scrollH = p / hScrollThickness + 1;
hSliderBg.stage.addEventListener(MouseEvent.MOUSE_MOVE, onHSliderBgMove);
hSliderBg.stage.addEventListener(MouseEvent.MOUSE_UP, onHSliderBgUp);
}
protected function onHSliderBgMove( e:MouseEvent ):void{
var p:int = mouseX;
p = p < minHScrollX ? minHScrollX : p > maxHScrollX? maxHScrollX : p;
scrollH = p / hScrollThickness + 1;
e.updateAfterEvent();
}
protected function onHSliderBgUp( e:MouseEvent ):void{
hSliderBg.stage.removeEventListener(MouseEvent.MOUSE_MOVE, onHSliderBgMove);
hSliderBg.stage.removeEventListener(MouseEvent.MOUSE_UP, onHSliderBgUp);
}
protected function onHSliderDown( e:MouseEvent ):void{
_drag_flg = true;
clickPoint = hSlider.mouseX;
hSlider.stage.addEventListener( MouseEvent.MOUSE_MOVE, onHSliderMove );
hSlider.stage.addEventListener( MouseEvent.MOUSE_UP, onHSliderUp );
}
protected function onHSliderMove( e:MouseEvent ):void{
var p:int = mouseX - clickPoint;
hSlider.x = p = p < minHScrollX ? minHScrollX : p > maxHScrollX? maxHScrollX : p;
scrollH = p / hScrollThickness + 1;
}
protected function onHSliderUp( e:MouseEvent ):void{
_drag_flg = false;
hSlider.stage.removeEventListener( MouseEvent.MOUSE_MOVE, onHSliderMove );
hSlider.stage.removeEventListener( MouseEvent.MOUSE_UP, onHSliderUp );
}
// VSliderBg
protected function onVSliderBgDown( e:MouseEvent ):void{
var p:int = mouseY;
p = p < minVScrollY ? minVScrollY : p > maxVScrollY? maxVScrollY : p;
scrollV = ( p - SCROLL_BAR_WIDTH ) / vScrollThickness + 1;
vSliderBg.stage.addEventListener(MouseEvent.MOUSE_MOVE, onVSliderBgMove);
vSliderBg.stage.addEventListener(MouseEvent.MOUSE_UP, onVSliderBgUp);
}
protected function onVSliderBgMove( e:MouseEvent ):void{
var p:int = mouseY;
p = p < minVScrollY ? minVScrollY : p > maxVScrollY? maxVScrollY : p;
scrollV = ( p - SCROLL_BAR_WIDTH ) / vScrollThickness + 1;
e.updateAfterEvent();
}
protected function onVSliderBgUp( e:MouseEvent ):void{
vSliderBg.stage.removeEventListener(MouseEvent.MOUSE_MOVE, onVSliderBgMove);
vSliderBg.stage.removeEventListener(MouseEvent.MOUSE_UP, onVSliderBgUp);
}
// VSlider
protected function onVSliderDown( e:MouseEvent ):void{
_drag_flg = true;
clickPoint = vSlider.mouseY;
vSlider.stage.addEventListener( MouseEvent.MOUSE_MOVE, onVSliderMove );
vSlider.stage.addEventListener( MouseEvent.MOUSE_UP, onVSliderUp );
}
protected function onVSliderMove( e:MouseEvent):void{
var p:int = mouseY - clickPoint;
vSlider.y = p = p < minVScrollY ? minVScrollY : p > maxVScrollY? maxVScrollY : p;
scrollV = ( p - SCROLL_BAR_WIDTH ) / vScrollThickness + 1;
e.updateAfterEvent();
}
protected function onVSliderUp( e:MouseEvent ):void{
_drag_flg = false;
vSlider.stage.removeEventListener( MouseEvent.MOUSE_MOVE, onVSliderMove );
vSlider.stage.removeEventListener( MouseEvent.MOUSE_UP, onVSliderUp );
}
// Up Button
protected function onUpDown( e:MouseEvent ):void{
scrollV--;
count = 0;
addEventListener(Event.ENTER_FRAME, onUpFrame);
stage.addEventListener( MouseEvent.MOUSE_UP, onUpUp);
}
protected function onUpUp( e:MouseEvent ):void{
removeEventListener(Event.ENTER_FRAME, onUpFrame);
stage.removeEventListener( MouseEvent.MOUSE_UP, onUpUp);
}
protected function onUpFrame( e:Event ):void{
if( count <= delayFrame){
count ++;
return;
}
scrollV--;
}
// Down Button
protected function onDownDown( e:MouseEvent):void{
scrollV++;
count = 0;
addEventListener(Event.ENTER_FRAME, onDownFrame);
stage.addEventListener( MouseEvent.MOUSE_UP, onDownUp);
}
protected function onDownUp(e:MouseEvent):void{
removeEventListener(Event.ENTER_FRAME, onDownFrame);
stage.removeEventListener( MouseEvent.MOUSE_UP, onDownUp);
}
protected function onDownFrame( e:Event ):void{
if( count <= delayFrame){
count ++;
return;
}
scrollV++;
}
protected function onChange( e:Event ):void{
checkUseScrollBar();
dispatchEvent( e );
}
protected function onScroll( e:Event ):void{
dispatchEvent( e );
if(_drag_flg) return;
if(hScroll_flg)
hSlider.x = scrollH == 1 ? minHScrollX : minHScrollX + hScrollThickness * scrollH;
if(vScroll_flg)
vSlider.y = scrollV == 1 ? minVScrollY : minVScrollY + vScrollThickness * scrollV;
}
protected function inFocus( e:FocusEvent ):void{
_inFocus = true;
_draw = true;
draw();
}
protected function outFocus( e:FocusEvent ):void{
_inFocus = false;
_draw = true;
draw();
}
protected function onLink( e:TextEvent ):void{
dispatchEvent( e );
}
protected function onKeyDown( e:KeyboardEvent ):void{
t.addEventListener(KeyboardEvent.KEY_UP, onKeyUp);
}
protected function onKeyUp( e:KeyboardEvent ):void{
t.removeEventListener( KeyboardEvent.KEY_UP, onKeyUp);
}
// TextFieldのプロパティーとかメソッドとか
public function get alwaysShowSelection():Boolean{ return t.alwaysShowSelection; }
public function set alwaysShowSelection(flg:Boolean):void{ t.alwaysShowSelection = flg; }
public function get antiAliasType():String{ return t.antiAliasType; }
public function set antiAliasType(str:String):void{ t.antiAliasType = str; }
public function get bottomScroll():int{ return t.bottomScrollV; }
public function get caretIndex():int{ return t.caretIndex; }
public function get condenseWhite():Boolean{ return t.condenseWhite; }
public function set condenseWhite(flg:Boolean):void{ t.condenseWhite = flg; }
public function get defaultTextFormat():TextFormat{ return t.defaultTextFormat; }
public function set defaultTextFormat(data:TextFormat):void{ t.defaultTextFormat = data; }
public function get embedFonts():Boolean{ return t.embedFonts; }
public function set embedFonts(flg:Boolean):void{ t.embedFonts = flg; }
public function get gridFitType():String{ return t.gridFitType; }
public function set gridFitType(str:String):void{ t.gridFitType = str; }
public function get htmlText():String{ return t.htmlText; }
public function set htmlText(str:String):void{ t.htmlText = str; checkUseScrollBar();}
public function get length():int{ return t.length; }
public function get maxChars():int{ return t.maxChars; }
public function set maxChars(value:int):void{ t.maxChars = value; }
public function get maxScrollH():int{ return t.maxScrollH; }
public function get maxScrollV():int{ return t.maxScrollV; }
public function get mouseWheelEnabled():Boolean{ return t.mouseWheelEnabled; }
public function set mouseWheelEnabled(flg:Boolean):void{ t.mouseWheelEnabled = flg; }
public function get multiline():Boolean{ return t.multiline; }
public function set multiline(flg:Boolean):void{ t.multiline = flg; }
public function get numLines():int{ return t.numLines; }
public function get restrict():String{ return t.restrict; }
public function set restrict(str:String):void{ t.restrict = str; }
public function get scrollH():int{ return t.scrollH; }
public function set scrollH(value:int):void{ t.scrollH = value; }
public function get scrollV():int{ return t.scrollV; }
public function set scrollV(value:int):void{ t.scrollV = value; }
public function get selectable():Boolean{ return t.selectable; }
public function set selectable(flg:Boolean):void{ t.selectable = flg; }
public function get selectedText():String{ return t.selectedText; }
public function get selectionBeginIndex():int{ return t.selectionBeginIndex; }
public function get selectionEndIndex():int{ return t.selectionEndIndex; }
public function get sharpness():Number{ return t.sharpness; }
public function set sharpness(value:Number):void{ t.sharpness = value; }
public function get styleSheet():StyleSheet{ return t.styleSheet; }
public function set styleSheet(data:StyleSheet):void{ t.styleSheet = data; }
public function get text():String{ return t.text; }
public function set text(str:String):void{ t.text = str; checkUseScrollBar();}
public function get textHeight():Number{ return t.textHeight; }
public function get textWidth():Number{ return t.textWidth; }
public function get thickness():Number{ return t.thickness; }
public function set thickness(value:Number):void{ t.thickness = value; }
public function get useRichTextClipboard():Boolean{ return t.useRichTextClipboard; }
public function set useRichTextClipboard(flg:Boolean):void{ t.useRichTextClipboard = flg; }
public function get wordWrap():Boolean{ return t.wordWrap; }
public function set wordWrap(flg:Boolean):void{ t.wordWrap = flg; }
public function appendText(newText:String):void{ t.appendText( newText ); }
public function getCharBoundaries(charIndex:int):Rectangle{ return t.getCharBoundaries( charIndex ); }
public function getCharIndexAtPoint(x:Number, y:Number):int{ return t.getCharIndexAtPoint( x, y ); }
public function getFirstCharInParagraph(charIndex:int):int{ return t.getFirstCharInParagraph( charIndex ); }
public function getImageReference(id:String):DisplayObject{ return t.getImageReference( id ); }
public function getLineIndexAtPoint(x:Number, y:Number):int{ return t.getLineIndexAtPoint( x, y); }
public function getLineIndexOfChar(charIndex:int):int{ return t.getLineIndexOfChar( charIndex ); }
public function getLineLength(lineIndex:int):int{ return t.getLineLength( lineIndex ); }
public function getLineMetrics(lineIndex:int):TextLineMetrics{ return t.getLineMetrics( lineIndex ); }
public function getLineOffset(lineIndex:int):int{ return t.getLineOffset( lineIndex ); }
public function getLineText(lineIndex:int):String{ return t.getLineText( lineIndex ); }
public function getParagraphLength(charIndex:int):int{ return t.getParagraphLength( charIndex ); }
public function getRawText():String{ return t.getRawText(); }
public function getTextFormat(beginIndex:int, endIndex:int):TextFormat{ return t.getTextFormat( beginIndex, endIndex ); }
public function getTextRuns(beginIndex:int=0, endIndex:int=2147483647):Array{ return t.getTextRuns( beginIndex, endIndex ); }
public function getXMLText(beginIndex:int=0, endIndex:int=2147483647):String{ return t.getXMLText( beginIndex, endIndex ); }
public function replaceSelectedText(value:String):void{ t.replaceSelectedText( value ); }
public function replaceText(beginIndex:int, endIndex:int, newText:String):void{ t.replaceText( beginIndex, endIndex, newText ); }
public function setSelection(beginIndex:int, endIndex:int):void{ t.setSelection( beginIndex, endIndex ); }
public function setTextFormat(format:TextFormat, beginIndex:int, endIndex:int):void{ t.setTextFormat( format, beginIndex, endIndex ); }
}
class MyButton extends Sprite{
protected var flg:Boolean = false;
protected var over_flg:Boolean = false;
// up, down, over
protected var _arrowColor:Array ;
protected var _baseColor:Array;
protected var _lineColor:Array;
protected var _thickness:Array = [1,2,1];
protected var _side:int;
protected var ui:Sprite;
public function set arrowColors( arr:Array ):void{
_arrowColor = arr;
draw();
}
public function set baseColors( arr:Array ):void{
_baseColor = arr;
draw();
}
public function set lineColors( arr:Array ):void{
_lineColor = arr;
draw();
}
public function MyButton( side:int, arrowColor:Array, baseColor:Array, lineColor:Array ){
_side = side;
_arrowColor = arrowColor;
_baseColor = baseColor;
_lineColor = lineColor;
ui = new Sprite();
addChild( ui );
var g:Graphics = this.graphics;
g.beginFill( _baseColor[ 0 ], 0.02);
g.drawRect( 0,0, side,side);
g.endFill();
draw();
addEventListener( MouseEvent.MOUSE_DOWN, onDown );
addEventListener( MouseEvent.MOUSE_OVER, onOver );
}
protected function draw( num:int = 0 ):void{
if( num >= 3) return;
// overrideして描画処理しよう
}
protected function onDown( e:MouseEvent ):void{
flg = true;
draw( 1 );
stage.addEventListener( MouseEvent.MOUSE_UP, onUp );
}
protected function onUp( e:MouseEvent ):void{
flg = false;
over_flg == true ? draw(2): draw();
stage.removeEventListener( MouseEvent.MOUSE_UP, onUp );
}
protected function onOver( e:MouseEvent ):void{
over_flg = true;
if(flg) return;
draw( 2 );
addEventListener( MouseEvent.MOUSE_OUT, onOut );
}
protected function onOut( e:MouseEvent ):void{
over_flg = false;
if(flg) return;
draw();
removeEventListener( MouseEvent.MOUSE_OUT, onOut );
}
}
class HSlider extends MyButton{
private var _width:int;
public function HSlider( width:int, side:int, arrowColor:Array, baseColor:Array, lineColor:Array ){
_width = width;
super( side, arrowColor, baseColor, lineColor );
}
public function set sliderWidth( value:int ):void{
_width = value;
draw();
}
protected override function draw( num:int = 0):void{
super.draw( num );
var g:Graphics = ui.graphics;
g.clear();
g.lineStyle( 1, _lineColor[ num ]);
g.beginFill( _baseColor[ num ] );
g.drawRect( 2,1, _width, _side - 4);
g.endFill();
var ww:int = _width >>1;
var t:int = _side >>1;
var b:int = t;
t -= 4;
b +=4;
g.lineStyle( 1, _arrowColor[ num ]);
g.moveTo( ww -3, t);
g.lineTo( ww - 3, b);
g.moveTo( ww, t);
g.lineTo( ww, b);
g.moveTo( ww +3, t);
g.lineTo( ww + 3, b);
}
}
class VSlider extends MyButton{
private var _height:int;
public function VSlider( height:int, side:int, arrowColor:Array, baseColor:Array, lineColor:Array ){
_height = height;
super( side, arrowColor, baseColor, lineColor );
}
public function set sliderHeight( value:int ):void{
_height = value;
draw();
}
protected override function draw( num:int = 0):void{
super.draw( num );
var g:Graphics = ui.graphics;
g.clear();
g.lineStyle( 1, _lineColor[ num ]);
g.beginFill( _baseColor[ num ] );
g.drawRect( 2,1, _side - 4, _height);
g.endFill();
var hh:int = _height >>1;
var l:int = _side >>1;
var r:int = l;
l -= 4;
r +=4;
g.lineStyle( 1, _arrowColor[ num ]);
g.moveTo( l, hh - 3);
g.lineTo( r, hh - 3);
g.moveTo( l, hh);
g.lineTo( r, hh);
g.moveTo( l, hh + 3);
g.lineTo( r, hh + 3);
}
}
class UpButton extends MyButton{
public function UpButton( side:int, arrowColor:Array, baseColor:Array, lineColor:Array ){
super( side, arrowColor, baseColor, lineColor );
}
protected override function draw( num:int = 0):void{
super.draw( num );
var g:Graphics = ui.graphics;
var l:int =_thickness[ num ];
g.clear();
g.lineStyle( l, _lineColor[ num ]);
g.beginFill( _baseColor[ num ] );
g.drawRect( l,l, _side - (l+1),_side - (l+1));
g.endFill();
g.lineStyle( 0, 0, 0);
g.beginFill( _arrowColor[ num ]);
g.moveTo( 5, _side - 5);
g.lineTo( _side - 5, _side -5);
g.lineTo( _side/2, 6);
g.lineTo( 5, _side -5);
g.endFill();
}
}
class DownButton extends MyButton{
public function DownButton( side:int, arrowColor:Array, baseColor:Array, lineColor:Array ){
super( side, arrowColor, baseColor, lineColor );
}
protected override function draw( num:int = 0):void{
super.draw( num );
var g:Graphics = ui.graphics;
var l:int =_thickness[ num ];
g.clear();
g.lineStyle( l, _lineColor[ num ]);
g.beginFill( _baseColor[ num ] );
g.drawRect( l,l, _side - (l+1),_side - (l+1));
g.endFill();
g.lineStyle( 0, 0, 0);
g.beginFill( _arrowColor[ num ]);
g.moveTo( 5, 7);
g.lineTo( _side - 5, 7);
g.lineTo( _side/2, _side - 5);
g.lineTo( 5, 7);
g.endFill();
}
}