/gui.as
ActionScript | 238 lines | 188 code | 32 blank | 18 comment | 19 complexity | 1786aaa693c30dbabfcf18f73dc1ee05 MD5 | raw file
- // Flash Synthesizer / Bassline Experiment
- // Copyright (C) 2009 Joost Diepenmaat - joost@zeekat.nl
- //
- // This program is free software; you can redistribute it and/or modify
- // it under the terms of the GNU General Public License as published by
- // the Free Software Foundation; either version 2 of the License, or
- // (at your option) any later version.
- //
- // This program is distributed in the hope that it will be useful,
- // but WITHOUT ANY WARRANTY; without even the implied warranty of
- // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- // GNU General Public License for more details.
- //
- // You should have received a copy of the GNU General Public License along
- // with this program; if not, write to the Free Software Foundation, Inc.,
- // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- import flash.display.DisplayObject;
- import flash.display.Shape;
- import flash.display.Sprite;
- import flash.text.TextField;
- import flash.text.TextFormat;
- import flash.text.TextFieldAutoSize;
- import flash.display.SimpleButton;
- import flash.events.*
- var buttonTextFormat:TextFormat = new TextFormat()
- buttonTextFormat.font = "Verdana"
- buttonTextFormat.color = 0xffffff
- buttonTextFormat.size = 5
- buttonTextFormat.bold = true
- var titleTextFormat:TextFormat = new TextFormat()
- titleTextFormat.font = "Verdana"
- titleTextFormat.color = 0xffffff
- titleTextFormat.size = 25
- titleTextFormat.bold = true
- var knobs:Array = []
- function drawRoundedRectangle(graphics:flash.display.Graphics,color:uint,alpha:Number,x1:Number,y1:Number,x2:Number,y2:Number,rounded:Number = 2.0):void {
- with (graphics) {
- lineStyle(1,0)
- beginFill(color,alpha)
- moveTo(x1+rounded,y1)
- lineTo(x2-rounded,y1)
- curveTo(x2,y1,x2,y1+rounded)
- lineTo(x2,y2-rounded)
- curveTo(x2,y2,x2-rounded,y2)
- lineTo(x1+rounded,y2)
- curveTo(x1,y2,x1,y2-rounded)
- lineTo(x1,y1+rounded)
- curveTo(x1,y1,x1+rounded,y1)
- endFill()
- }
- }
- function drawLabel(sprite:Sprite, text:String, color:uint=0xffffff,bgcolor:uint=0xd0d0d0, bgalpha:Number=0.5):void {
- drawRoundedRectangle(sprite.graphics, bgcolor, bgalpha,0,0,20,20)
- var label:TextField = new TextField()
- label.selectable = false
- label.defaultTextFormat = buttonTextFormat
- label.width = 1
- label.autoSize = TextFieldAutoSize.LEFT
- label.text = text
- label.y = 10
- sprite.addChild(label)
- label.x = (20.0 - label.textWidth) / 2.0 - 1.7
- }
- class ToggleButton extends Sprite {
- public var onState:Shape
- public var offState:Shape
- public var onOff:Function
- public var onOn:Function
- private var state:Boolean
- public function ToggleButton(text:String,startState:Boolean,upcolor:uint,downcolor:uint,bgcolor:uint = 0xd0d0d0,bgalpha:Number=0.5) {
- buttonMode = true
- useHandCursor = true
- drawLabel(this, text, 0xffffff,bgcolor, bgalpha)
- onState = createShape(10,0, downcolor)
- offState = createShape(10,0, upcolor)
- onState.y = offState.y = 2
- onState.x = offState.x = 5
- state = startState
- addEventListener(MouseEvent.CLICK, function():void {
- if (onOn != null && onOff != null) {
- setValue(!state)
- }
- })
- updateState()
- addChild(onState)
- addChild(offState)
- knobs.push(this)
- }
- public function setValue(val:Boolean):void {
- state = val
- if (state && onOn != null) onOn()
- if (!state && onOff != null) onOff()
- updateState()
- }
- private function updateState():void {
- if (state) {
- onState.visible=true
- offState.visible=false
- }
- else {
- onState.visible=false
- offState.visible=true
- }
- }
- private function createShape(size:Number,edgeColor:uint,fillColor:uint):Shape {
- var sp:Shape = new Shape()
- with (sp.graphics) {
- beginFill(fillColor)
- drawCircle(size/2,size/2,size/2)
- endFill()
- lineStyle(size/10,edgeColor)
- drawCircle(size/2,size/2,size/2)
- lineStyle(undefined)
- beginFill(0,0.3)
- drawCircle(size/2,size/2,size/3)
- endFill()
- lineStyle(size/10,0xffffe0,0.3)
- moveTo(size*.80,size*.5)
- curveTo(size*.80,size*.80,size*.5,size*.80)
- }
- return sp
- }
- public function randomize():void {
- setValue(Math.random() < 0.5)
- }
- }
- class DialButton extends Sprite {
- public var shape:Shape = new Shape()
- public var onChange:Function
- private var value:Number
- private var min:Number
- private var max:Number
- private var color:uint
- public function DialButton(text:String,startValue:Number,min:Number,max:Number,color:uint=0xd0d0d0) {
- this.min = min
- this.max = max
- buttonMode = false
- value = startValue
- drawLabel(this, text)
-
- // shape is the dialing part of the graphics:
- // the value is indicated by rotating shape
- with (shape.graphics) {
- clear()
- rotation = 0
- lineStyle(1,0)
- beginFill(color)
- drawCircle(0,0,5)
- endFill()
- moveTo(0,-5)
- lineTo(0,-1)
- }
- shape.x = 10
- shape.y = 7
- updateDisplay()
- addChild(shape)
- var y:Number = 0.0
- function drag(event:MouseEvent):void {
- var delta:Number = ((event.stageY - y) * (max - min)) / 100
- setValue(Math.min(max,Math.max(min,value - delta)))
- }
- function upevent(event:MouseEvent):void {
- root.removeEventListener(MouseEvent.MOUSE_MOVE,drag)
- root.removeEventListener(MouseEvent.MOUSE_UP,upevent)
- }
- addEventListener(MouseEvent.MOUSE_DOWN, function(event:MouseEvent):void {
- y = event.stageY
- root.addEventListener(MouseEvent.MOUSE_MOVE,drag)
- root.addEventListener(MouseEvent.MOUSE_UP, upevent)
- })
- knobs.push(this)
- }
- public function setValue(val:Number):void {
- value = val
- if (onChange != null) onChange(value)
- updateDisplay()
- }
- private function updateDisplay():void {
- shape.rotation = (value-min)* (320/(max - min)) - 160
- }
- public function randomize():void {
- setValue(Math.random() * (max - min) + min)
- }
- }
- class VUMeter extends Sprite {
- private var indicator:Shape = new Shape()
- public function VUMeter() {
- drawRoundedRectangle(graphics, 0, 0.5, 0,0,20,95)
- addChild(indicator)
- }
- public function setValue(val:Number):void {
- indicator.graphics.clear()
- var color:uint
- val = Math.min(1,Math.max(0,Math.abs(val)))
- if (val * 83 < 8) return;
- if (val < 0.5) {
- color = 0xa0a000
- }
- else if (val < 0.8) {
- color = 0x00f000
- }
- else {
- color = 0xff0000
- }
- drawRoundedRectangle(indicator.graphics, color, 1, 4,8 + (1 - val) * 83,16,91)
- }
- }