This is a canvas-based component to simplify drawing graphical elements on the screen, animate them and attach events to them.
{
_: TK.Draw,
Width: 500,
Height: 300,
Init: function() {
this.Add({
_: TK.Draw.Rect,
X: 10, Y: 10, W: 100, H: 50,
Fill: "#F00"
});
this.Refresh(); // Refresh required after manually adding elements
},
Elements: {
SomeCircle: {
_: TK.Draw.Circle,
X: 250, Y: 150, W: 100, H: 100,
Fill: "#00F",
Anchor: window.TK.Draw.AnchorMiddle | window.TK.Draw.AnchorCenter,
MouseDown: function(x, y) {
// React on events by changing properties directly
// The canvas will always redraw after an event
this.Fill = "#000";
},
MouseUp: function(x, y) {
// Change property using an animation
// PropertyName, TargetValue, Length-in-miliseconds, [easing]
this.Animate("Fill", "#090", 500, TK.Draw.EaseExponential);
}
// Also available: MouseMove, MouseOut, Click
},
SomeText: {
_: TK.Draw.Text,
X: 250, Y: 150,
Fill: "#FFF",
Text: "Hello World",
Font: "12pt Arial",
Anchor: window.TK.Draw.AnchorMiddle | window.TK.Draw.AnchorCenter
}
}
}
{
_: TK.Draw,
Width: 650,
Height: 400,
Zoom: 2,
Elements: {
LineNone: {
_: TK.Draw.LineThroughPoints,
Stroke: "#F00", // Red
Smoothing: TK.Draw.SmoothNone,
Points: [
[100, 100], [150, 150], [200, 125], [250, 100]
]
},
LineQuadratic: {
_: TK.Draw.LineThroughPoints,
Stroke: "#090", // Green
Smoothing: TK.Draw.SmoothQuadratic,
Points: [
[100, 100], [150, 150], [200, 125], [250, 100]
]
},
LineCornersVertical: {
_: TK.Draw.LineThroughPoints,
Stroke: "#00F", // Blue
Smoothing: TK.Draw.SmoothCorners,
DefaultDirection: TK.Draw.DirectionBottom,
Points: [
[100, 100], [150, 150], [200, 125], [250, 100]
]
},
LineCornersHorizontal: {
_: TK.Draw.LineThroughPoints,
Stroke: "#F0F", // Purple
Smoothing: TK.Draw.SmoothCorners,
DefaultDirection: TK.Draw.DirectionRight,
Points: [
[100, 100], [150, 150], [200, 125], [250, 100]
]
},
LineVariableWidth: {
_: TK.Draw.LineThroughPoints,
Stroke: "#666", // Green
Smoothing: TK.Draw.SmoothQuadratic,
Points: [
[10, 10], [100, 20], [200, 10], [300, 30]
],
Heights: [10, 20, 20, 40]
}
}
}
Text can be scaled using a few different options using the .Scaling property.
this.Scaling == TK.Draw.TextScalingResize || this.Scaling == TK.Draw.TextScalingResizeIfNeeded
{
_: TK.Draw,
Width: 500,
Height: 300,
Elements: {
SomeRect: {
_: TK.Draw.Rect,
X: 250, Y: 150, W: 100, H: 100,
Fill: "#00F",
Anchor: window.TK.Draw.AnchorMiddle | window.TK.Draw.AnchorCenter
},
SomeText: {
_: TK.Draw.Text,
X: 250, Y: 150, W: 100, H: 100,
Fill: "#FFF",
Text: "This is a long text which should be broken up in multiple lines.",
Font: "12pt Arial",
Scaling: TK.Draw.TextScalingWhiteSpaceBreak,
Anchor: TK.Draw.AnchorMiddle | TK.Draw.AnchorCenter,
TextAlign: TK.Draw.AnchorMiddle | TK.Draw.AnchorLeft
}
}
}
Behaviour of the scaling can be changed with the .Scaling and .ImageAlign properties.
{
_: TK.Draw,
Width: 600,
Height: 300,
Elements: {
BoxA: {
_: TK.Draw.Rect,
X: 110, Y: 60, W: 200, H: 100,
Stroke: "#000",
LineWidth: 2,
Anchor: window.TK.Draw.AnchorMiddle | window.TK.Draw.AnchorCenter
},
ImageA: {
_: TK.Draw.Image,
Src: "example.jpg",
X: 110, Y: 60, W: 198, H: 98,
Scaling: 0, // Fill
Anchor: window.TK.Draw.AnchorMiddle | window.TK.Draw.AnchorCenter,
},
BoxB: {
_: TK.Draw.Rect,
X: 110, Y: 170, W: 200, H: 100,
Stroke: "#000",
LineWidth: 2,
Anchor: window.TK.Draw.AnchorMiddle | window.TK.Draw.AnchorCenter
},
ImageB: {
_: TK.Draw.Image,
Src: "example.jpg",
X: 110, Y: 170, W: 198, H: 98,
Scaling: 1, // Contain
Anchor: window.TK.Draw.AnchorMiddle | window.TK.Draw.AnchorCenter,
},
BoxC: {
_: TK.Draw.Rect,
X: 320, Y: 60, W: 200, H: 100,
Stroke: "#000",
LineWidth: 2,
Anchor: window.TK.Draw.AnchorMiddle | window.TK.Draw.AnchorCenter
},
ImageC: {
_: TK.Draw.Image,
Src: "example.jpg",
X: 320, Y: 60, W: 198, H: 98,
Scaling: 1, // Contain
Anchor: window.TK.Draw.AnchorMiddle | window.TK.Draw.AnchorCenter,
ImageAlign: window.TK.Draw.AnchorMiddle | window.TK.Draw.AnchorLeft,
},
BoxD: {
_: TK.Draw.Rect,
X: 320, Y: 170, W: 200, H: 100,
Stroke: "#000",
LineWidth: 2,
Anchor: window.TK.Draw.AnchorMiddle | window.TK.Draw.AnchorCenter
},
ImageD: {
_: TK.Draw.Image,
Src: "example.jpg",
X: 320, Y: 170, W: 198, H: 98,
Scaling: 1, // Contain
Anchor: window.TK.Draw.AnchorMiddle | window.TK.Draw.AnchorCenter,
ImageAlign: window.TK.Draw.AnchorMiddle | window.TK.Draw.AnchorRight,
},
BoxE: {
_: TK.Draw.Rect,
X: 480, Y: 115, W: 100, H: 210,
Stroke: "#000",
LineWidth: 2,
Anchor: window.TK.Draw.AnchorMiddle | window.TK.Draw.AnchorCenter
},
ImageE: {
_: TK.Draw.Image,
Src: "example.jpg",
X: 480, Y: 115, W: 98, H: 208,
Scaling: 1, // Contain
Anchor: window.TK.Draw.AnchorMiddle | window.TK.Draw.AnchorCenter,
ImageAlign: window.TK.Draw.AnchorTop | window.TK.Draw.AnchorCenter,
}
}
}
Image with scaling Contain
{
_: TK.Draw,
Width: 600,
Height: 300,
Elements: {
BoxA: {
_: TK.Draw.Rect,
X: 110, Y: 60, W: 200, H: 100,
Stroke: "#000",
LineWidth: 2,
Anchor: window.TK.Draw.AnchorMiddle | window.TK.Draw.AnchorCenter
},
ImageA: {
_: TK.Draw.Image,
Src: "example.jpg",
X: 110, Y: 60, W: 198, H: 98,
Scaling: 0, // Fill
Anchor: window.TK.Draw.AnchorMiddle | window.TK.Draw.AnchorCenter,
},
BoxB: {
_: TK.Draw.Rect,
X: 110, Y: 170, W: 200, H: 100,
Stroke: "#000",
LineWidth: 2,
Anchor: window.TK.Draw.AnchorMiddle | window.TK.Draw.AnchorCenter
},
ImageB: {
_: TK.Draw.Image,
Src: "example.jpg",
X: 110, Y: 170, W: 198, H: 98,
Scaling: 2, // Cover
Anchor: window.TK.Draw.AnchorMiddle | window.TK.Draw.AnchorCenter,
},
BoxC: {
_: TK.Draw.Rect,
X: 320, Y: 60, W: 200, H: 100,
Stroke: "#000",
LineWidth: 2,
Anchor: window.TK.Draw.AnchorMiddle | window.TK.Draw.AnchorCenter
},
ImageC: {
_: TK.Draw.Image,
Src: "example.jpg",
X: 320, Y: 60, W: 198, H: 98,
Scaling: 2, // Cover
Anchor: window.TK.Draw.AnchorMiddle | window.TK.Draw.AnchorCenter,
ImageAlign: window.TK.Draw.AnchorTop | window.TK.Draw.AnchorCenter,
},
BoxD: {
_: TK.Draw.Rect,
X: 320, Y: 170, W: 200, H: 100,
Stroke: "#000",
LineWidth: 2,
Anchor: window.TK.Draw.AnchorMiddle | window.TK.Draw.AnchorCenter
},
ImageD: {
_: TK.Draw.Image,
Src: "example.jpg",
X: 320, Y: 170, W: 198, H: 98,
Scaling: 2, // Cover
Anchor: window.TK.Draw.AnchorMiddle | window.TK.Draw.AnchorCenter,
ImageAlign: window.TK.Draw.AnchorBottom | window.TK.Draw.AnchorCenter,
},
BoxE: {
_: TK.Draw.Rect,
X: 480, Y: 115, W: 100, H: 210,
Stroke: "#000",
LineWidth: 2,
Anchor: window.TK.Draw.AnchorMiddle | window.TK.Draw.AnchorCenter
},
ImageE: {
_: TK.Draw.Image,
Src: "example.jpg",
X: 480, Y: 115, W: 98, H: 208,
Scaling: 2, // Cover
Anchor: window.TK.Draw.AnchorMiddle | window.TK.Draw.AnchorCenter,
ImageAlign: window.TK.Draw.AnchorMiddle | window.TK.Draw.AnchorRight,
}
}
}
The direction of the triangle can be decided by the TriangleAlign property which accepts one or two anchor points.
{
_: TK.Draw,
Width: 600,
Height: 300,
Elements: {
BoxA: {
_: TK.Draw.Rect,
X: 110, Y: 60, W: 200, H: 100,
Stroke: "#000",
LineWidth: 2,
Anchor: window.TK.Draw.AnchorMiddle | window.TK.Draw.AnchorCenter
},
TriangleA: {
_: TK.Draw.Triangle,
X: 110, Y: 60, W: 200, H: 100,
Fill: "#F00",
Anchor: window.TK.Draw.AnchorMiddle | window.TK.Draw.AnchorCenter,
TriangleAlign: TK.Draw.AnchorTop | TK.Draw.AnchorLeft
},
BoxB: {
_: TK.Draw.Rect,
X: 320, Y: 60, W: 200, H: 100,
Stroke: "#000",
LineWidth: 2,
Anchor: window.TK.Draw.AnchorMiddle | window.TK.Draw.AnchorCenter
},
TriangleB: {
_: TK.Draw.Triangle,
X: 320, Y: 60, W: 200, H: 100,
Fill: "#00F",
Anchor: window.TK.Draw.AnchorMiddle | window.TK.Draw.AnchorCenter,
TriangleAlign: TK.Draw.AnchorRight
}
}
}