-
Notifications
You must be signed in to change notification settings - Fork 15
/
BaseExample.as
103 lines (83 loc) · 2.61 KB
/
BaseExample.as
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
package util {
import flash.display.DisplayObject;
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.geom.Point;
/**
* @author Eric-Paul Lecluse (c) epologee.com
*/
public class BaseExample extends Sprite {
public var pixelSnapping : Boolean = false;
//
private var _spacing : Point;
private var _origin : Point;
private var _offset : Point;
public function BaseExample(inOriginX : Number = 10, inOriginY : Number = 10, inSpacingX : Number = 10, inSpacingY : Number = 10) {
_spacing = new Point(inSpacingX, inSpacingY);
_origin = new Point(inOriginX, inOriginY);
_offset = new Point(0, 0);
if (stage) {
setupStage();
} else {
addEventListener(Event.ADDED_TO_STAGE, setupStage);
}
}
private function setupStage(...ignoreParameters) : void {
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
}
public function addRow(...inRowElements : Array) : void {
addRowAt(inRowElements);
}
public function addRowBehind(...inRowElements : Array) : void {
addRowAt(inRowElements, 0);
}
private function addRowAt(inRowElements : Array, inDepth : Number = NaN) : void {
var height : Number = 0;
_offset.x = 0;
for each (var obj : DisplayObject in inRowElements) {
obj.x = nextX;
obj.y = nextY;
if (isNaN(inDepth)) {
addChild(obj);
} else {
addChildAt(obj, inDepth);
}
height = Math.max(obj.height, height);
_offset.x += obj.width + _spacing.x;
}
_offset.x = 0;
_offset.y += height + _spacing.y;
}
public function reset(inOriginX : Number = NaN, inOriginY : Number = NaN, inSpacingX : Number = NaN, inSpacingY : Number = NaN) : void {
_origin.x = isNaN(inOriginX) ? _origin.x : inOriginX;
_origin.y = isNaN(inOriginY) ? _origin.y : inOriginY;
_spacing.x = isNaN(inSpacingX) ? _spacing.x : inSpacingX;
_spacing.y = isNaN(inSpacingY) ? _spacing.y : inSpacingY;
_offset.x = 0;
_offset.y = 0;
}
public function get spacingX() : Number {
return _spacing.x;
}
public function set spacingX(inPixels : Number) : void {
_spacing.x = inPixels;
}
public function get spacingY() : Number {
return _spacing.y;
}
public function set spacingY(inPixels : Number) : void {
_spacing.y = inPixels;
}
public function get nextX() : Number {
if (pixelSnapping) return Math.round(_origin.x + _offset.x);
return _origin.x + _offset.x;
}
public function get nextY() : Number {
if (pixelSnapping) return Math.round(_origin.y + _offset.y);
return _origin.y + _offset.y;
}
}
}