drop interval/timeout funs. Modify traffic light example

This commit is contained in:
pTalanov
2012-05-31 20:10:19 +04:00
parent 44c0baa9e1
commit 5fa3e96e4b
6 changed files with 431 additions and 412 deletions
-9
View File
@@ -28,12 +28,3 @@ library
open class RuntimeException() : Exception() {} open class RuntimeException() : Exception() {}
library library
class NumberFormatException() : Exception() {} class NumberFormatException() : Exception() {}
native
fun setTimeout(callback : ()-> Unit) {}
native
fun setTimeout(callback : ()-> Unit, ms : Int) {}
native
fun setInterval(callback : ()-> Unit, ms : Int) {}
native
fun setInterval(callback : ()-> Unit) {}
@@ -40,11 +40,11 @@ public final class WebDemoCanvasExamplesTest extends SingleFileTranslationTest {
} }
public void testCreatures() throws Exception { public void testCreatures() throws Exception {
doTest("Creatures.kt", "document"); doTest("Creatures.kt", "$");
} }
public void testHelloKotlin() throws Exception { public void testHelloKotlin() throws Exception {
doTest("Hello, Kotlin.kt", "document"); doTest("Hello, Kotlin.kt", "$");
} }
public void testFancyLines() throws Exception { public void testFancyLines() throws Exception {
@@ -52,7 +52,7 @@ public final class WebDemoCanvasExamplesTest extends SingleFileTranslationTest {
} }
public void testTrafficLight() throws Exception { public void testTrafficLight() throws Exception {
doTest("Traffic light.kt", "document"); doTest("Traffic light.kt", "window");
} }
private void doTest(@NotNull String filename, @NotNull String firstUnknownSymbolEncountered) throws Exception { private void doTest(@NotNull String filename, @NotNull String firstUnknownSymbolEncountered) throws Exception {
@@ -74,6 +74,7 @@ class Logo(override var pos: Vector): Shape()
fun drawLogo(state: CanvasState) { fun drawLogo(state: CanvasState) {
size = imageSize * (state.size.x / imageSize.x) * relSize size = imageSize * (state.size.x / imageSize.x) * relSize
// getKotlinLogo() is a 'magic' function here defined only for purposes of demonstration but in fact it just find an element containing the logo
state.context.drawImage(getImage("http://kotlin-demo.jetbrains.com/static/images/kotlinlogowobackground.png"), 0, 0, state.context.drawImage(getImage("http://kotlin-demo.jetbrains.com/static/images/kotlinlogowobackground.png"), 0, 0,
imageSize.x.toInt(), imageSize.y.toInt(), imageSize.x.toInt(), imageSize.y.toInt(),
position.x.toInt(), position.y.toInt(), position.x.toInt(), position.y.toInt(),
@@ -245,7 +246,7 @@ class CanvasState(val canvas: HTMLCanvasElement) {
valid = false valid = false
} }
setInterval({ window.setInterval({
draw() draw()
}, interval) }, interval)
} }
@@ -339,9 +340,9 @@ fun main(args: Array<String>) {
state.addShape(Kotlin) state.addShape(Kotlin)
state.addShape(Creature(state.size * 0.25, state)) state.addShape(Creature(state.size * 0.25, state))
state.addShape(Creature(state.size * 0.75, state)) state.addShape(Creature(state.size * 0.75, state))
setTimeout({ window.setTimeout({
state.valid = false state.valid = false
}) }, 1000)
} }
} }
@@ -29,15 +29,15 @@ class FancyLines() {
var hue = 0; var hue = 0;
fun line() { fun line() {
context.save() context.save();
context.beginPath() context.beginPath();
context.lineWidth = 20.0 * Math.random() context.lineWidth = 20.0 * Math.random();
context.moveTo(x.toInt(), y.toInt()); context.moveTo(x.toInt(), y.toInt());
x = width * Math.random(); x = width * Math.random();
y = height * Math.random() y = height * Math.random();
context.bezierCurveTo(width * Math.random(), height * Math.random(), context.bezierCurveTo(width * Math.random(), height * Math.random(),
width * Math.random(), height * Math.random(), x, y); width * Math.random(), height * Math.random(), x, y);
@@ -60,7 +60,7 @@ class FancyLines() {
} }
fun run() { fun run() {
setInterval({line()}, 40); window.setInterval({line()}, 40);
setInterval({blank()}, 100); window.setInterval({blank()}, 100);
} }
} }
@@ -98,7 +98,7 @@ fun main(args: Array<String>) {
HelloKotlin() HelloKotlin()
} }
setInterval({ window.setInterval({
renderBackground() renderBackground()
for (logo in logos) { for (logo in logos) {
logo.draw() logo.draw()
@@ -1,15 +1,42 @@
import jquery.* package traffic
import html5.*
import java.util.ArrayList import java.util.ArrayList
import js.setInterval import js.dom.html5.CanvasContext
import js.DomElement import js.dom.html5.HTMLCanvasElement
import js.setTimeout
import js.*;
val PATH_TO_IMAGES = "/static/images/canvas/" import js.dom.html.HTMLImageElement
import js.dom.html.window
import js.jquery.*
import js.dom.html.HTMLElement
val state = CanvasState(getCanvas()) fun getImage(path: String): HTMLImageElement {
val colors = Colors() val image = window.document.createElement("img") as HTMLImageElement
image.src = path
return image
}
val canvas: HTMLCanvasElement
get() {
return window.document.getElementsByTagName("canvas").item(0)!! as HTMLCanvasElement
}
val context: CanvasContext
get() {
return canvas.getContext("2d")!!
}
val PATH_TO_IMAGES = "http://kotlin-demo.jetbrains.com/static/images/canvas/"
val state: CanvasState
get() {
return CanvasState(canvas)
}
val colors: Colors
get() {
return Colors()
}
var trafficLightUp = TrafficLight(v(180.0, 181.0), "up", "red") var trafficLightUp = TrafficLight(v(180.0, 181.0), "up", "red")
var trafficLightDown = TrafficLight(v(100.0, 77.0), "down", "red") var trafficLightDown = TrafficLight(v(100.0, 77.0), "down", "red")
@@ -76,14 +103,14 @@ class Button(val src : String, override var pos : Vector, var imageSize : Vector
fun mouseClick() { fun mouseClick() {
isMouseDown = true isMouseDown = true
setTimeout({ window.setTimeout({
isMouseDown = false isMouseDown = false
}, 1000) }, 1000)
} }
fun mouseOver() { fun mouseOver() {
isMouseOver = true isMouseOver = true
setTimeout({ window.setTimeout({
isMouseOver = false isMouseOver = false
}, 1000) }, 1000)
} }
@@ -184,7 +211,7 @@ class TrafficLight(override var pos : Vector, val direction : String, val startC
fun changeColorForward() { fun changeColorForward() {
changeColorForward = false changeColorForward = false
currentColor = "yellow" currentColor = "yellow"
setTimeout({ window.setTimeout({
if (!isForceColorChange) timer.resetTimer() else isForceColorChange = false if (!isForceColorChange) timer.resetTimer() else isForceColorChange = false
currentColor = "green" currentColor = "green"
}, 3000) }, 3000)
@@ -194,9 +221,9 @@ class TrafficLight(override var pos : Vector, val direction : String, val startC
fun changeColorBackward() { fun changeColorBackward() {
changeColorForward = true changeColorForward = true
currentColor = "green_flash" currentColor = "green_flash"
setTimeout({ window.setTimeout({
currentColor = "yellow" currentColor = "yellow"
setTimeout({ window.setTimeout({
if (!isForceColorChange) timer.resetTimer() else isForceColorChange = false if (!isForceColorChange) timer.resetTimer() else isForceColorChange = false
currentColor = "red" currentColor = "red"
}, 1000) }, 1000)
@@ -324,12 +351,12 @@ class Map(override var pos : Vector) : Shape() {
} }
class CanvasState(val canvas : Canvas) { class CanvasState(val canvas: HTMLCanvasElement) {
val context = getContext() val context = traffic.context
var shapes = ArrayList<Shape>() var shapes = ArrayList<Shape>()
var width = canvas.width.toDouble() var width = canvas.width
var height = canvas.height.toDouble() var height = canvas.height
val size: Vector val size: Vector
get() = v(width, height) get() = v(width, height)
@@ -378,11 +405,11 @@ class CanvasState(val canvas : Canvas) {
} }
} }
setInterval({ window.setInterval({
draw() draw()
}, 1000 / 30) }, 1000 / 30)
setInterval({ window.setInterval({
trafficLightUp.changeColor() trafficLightUp.changeColor()
trafficLightLeft.changeColor() trafficLightLeft.changeColor()
trafficLightRight.changeColor() trafficLightRight.changeColor()
@@ -392,17 +419,17 @@ class CanvasState(val canvas : Canvas) {
} }
fun mousePos(e: MouseEvent): Vector { fun mousePos(e: MouseEvent): Vector {
var offset = Vector() var offset = Vector()
var element : DomElement? = canvas var element: HTMLElement? = canvas
while (element != null) { while (element != null) {
val el : DomElement = element.sure() val el: HTMLElement = element.sure()
offset += Vector(el.offsetLeft, el.offsetTop) offset += Vector(el.offsetLeft, el.offsetTop)
element = el.offsetParent element = el.offsetParent
} }
return v(e.pageX, e.pageY) - offset return Vector(e.pageX, e.pageY) - offset
} }
fun draw() { fun draw() {
clear() clear()
for (shape in shapes) { for (shape in shapes) {
@@ -421,7 +448,7 @@ abstract class Shape() {
abstract fun draw() abstract fun draw()
// a couple of helper extension methods we'll be using in the derived classes // a couple of helper extension methods we'll be using in the derived classes
fun Context.shadowed(shadowOffset : Vector, alpha : Double, render : Context.() -> Unit) { fun CanvasContext.shadowed(shadowOffset: Vector, alpha: Double, render: CanvasContext.() -> Unit) {
save() save()
shadowColor = "rgba(100, 100, 100, $alpha)" shadowColor = "rgba(100, 100, 100, $alpha)"
shadowBlur = 5.0 shadowBlur = 5.0
@@ -431,7 +458,7 @@ abstract class Shape() {
restore() restore()
} }
fun Context.fillPath(constructPath : Context.() -> Unit) { fun CanvasContext.fillPath(constructPath: CanvasContext.() -> Unit) {
beginPath() beginPath()
constructPath() constructPath()
closePath() closePath()