-
Notifications
You must be signed in to change notification settings - Fork 0
/
label.js
97 lines (88 loc) · 2.74 KB
/
label.js
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
/*global a2d, a2d */
/**
* Label. For text.
* @class
* @param {string} text to display
* @augments a2d.Node
*/
a2d.Label = function(t, opts) {
'use strict';
a2d.Node.apply(this);
var self = this,
$draw = this.draw.bind(this),
text = "",
font = "21px Arial",
size = new a2d.Dimension(0, 0),
updateBB = function() {
var x = self.position.X,
y = self.position.Y;
if(x < 0) { x += a2d.dimension.Width; }
if(y < 0) { y += a2d.dimension.Height; }
self.boundingBox.topLeft.X = x - size.Width / 2;
self.boundingBox.topLeft.Y = y - size.Height / 2;
self.boundingBox.bottomRight.X = x + size.Width / 2;
self.boundingBox.bottomRight.Y = y + size.Height / 2;
self.boundingBox.topRight.X = x + size.Width / 2;
self.boundingBox.topRight.Y = y - size.Height / 2;
self.boundingBox.bottomLeft.X = x - size.Width / 2;
self.boundingBox.bottomLeft.Y = y + size.Height / 2;
};
this.__defineSetter__("text", function(newtext) {
text = newtext;
a2d.context.font = self.font;
size.Width = a2d.context.measureText(text).width;
size.Height = a2d.context.measureText("m").width;
})
this.__defineGetter__("text", function() { return text; });
this.__defineSetter__("font", function(newfont) {
font = newfont;
a2d.context.font = font;
size.Width = a2d.context.measureText(text).width;
size.Height = a2d.context.measureText("m").width;
})
this.__defineGetter__("font", function() { return font; });
this.text = t;
this.border = { width: 0, color: "black" };
/**
* set to font string
* @example
* var label = new a2d.Label("hello world");
* label.font = "21px Courier New";
* a2d.root.push(label);
*/
this.color = "#000";
this.textAlign = "center";
this.draw = function() {
if(self.visible) {
updateBB();
var p = self.absolutePosition.clone();
if(self.scrollLock && p.X < 0) {
p.X += a2d.dimension.Width;
}
if(self.scrollLock && p.Y < 0) {
p.Y += a2d.dimension.Height;
}
p.add(this.offset);
if(this.relative) {
p.add(this.parent.position);
}
//p.X -= a2d.context.measureText(text).width / 2;
//p.Y -= a2d.context.measureText("m").width / 2;
a2d.context.globalAlpha = this.opacity;
a2d.context.textAlign = this.textAlign;//"center";
a2d.context.textBaseline = "middle";
a2d.context.font = self.font;
a2d.context.fillStyle = self.color;
if(this.border.width !== 0) {
a2d.context.lineWidth = this.border.width;
a2d.context.strokeStyle = this.border.color;
a2d.context.strokeText(this.text, p.X, p.Y);
}
a2d.context.fillText(this.text, p.X, p.Y);
$draw();
}
}
if(opts) {
this.set(opts);
}
};