From fc843eca8f0bf2ccb6793856e7f801b3b48c90ac Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Fri, 30 Mar 2012 20:02:27 +0400 Subject: [PATCH] Some tweaks in canvas api. --- js/js.examples/js.examples.iml | 4 +- js/js.examples/src/html5/creatures/main.kt | 2 +- js/js.libraries/src/html5/canvas.kt | 126 +++++++++--------- .../k2js/translate/intrinsic/Intrinsics.java | 23 ++-- .../k2js/translate/utils/DescriptorUtils.java | 10 +- 5 files changed, 86 insertions(+), 79 deletions(-) diff --git a/js/js.examples/js.examples.iml b/js/js.examples/js.examples.iml index 861647b3dcc..617b8bb909b 100644 --- a/js/js.examples/js.examples.iml +++ b/js/js.examples/js.examples.iml @@ -2,8 +2,8 @@ - - + + diff --git a/js/js.examples/src/html5/creatures/main.kt b/js/js.examples/src/html5/creatures/main.kt index 793ec6bbe57..02a5d12a3fa 100644 --- a/js/js.examples/src/html5/creatures/main.kt +++ b/js/js.examples/src/html5/creatures/main.kt @@ -61,7 +61,7 @@ class Logo(override var pos : Vector) : Shape() fun drawLogo(state : CanvasState) { 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(getKotlinLogo(), 0.0, 0.0, imageSize.x, imageSize.y, position.x, position.y, size.x, size.y) + state.context.drawImage(getKotlinLogo(), 0, 0, imageSize.x.toInt(), imageSize.y.toInt(), position.x.toInt(), position.y.toInt(), size.x.toInt(), size.y.toInt()) } override fun draw(state : CanvasState) { diff --git a/js/js.libraries/src/html5/canvas.kt b/js/js.libraries/src/html5/canvas.kt index af8f1b745fd..ad3aab58cd3 100644 --- a/js/js.libraries/src/html5/canvas.kt +++ b/js/js.libraries/src/html5/canvas.kt @@ -5,24 +5,24 @@ import js.DomElement native class Context() { - fun save() { - } - fun restore() { - } + fun save() : Unit = js.noImpl - fun scale(x : Double, y : Double) { - } - fun rotate(angle : Double) { - } - fun translate(x : Double, y : Double) { - } + fun restore() : Unit = js.noImpl + + + fun scale(x : Double, y : Double) : Unit = js.noImpl + + fun rotate(angle : Double) : Unit = js.noImpl + + fun translate(x : Double, y : Double) : Unit = js.noImpl + + + fun clearRect(x : Double, y : Double, w : Double, h : Double) : Unit = js.noImpl + + fun fillRect(x : Double, y : Double, w : Double, h : Double) : Unit = js.noImpl + + fun strokeRect(x : Double, y : Double, w : Double, h : Double) : Unit = js.noImpl - fun clearRect(x : Double, y : Double, w : Double, h : Double) { - } - fun fillRect(x : Double, y : Double, w : Double, h : Double) { - } - fun strokeRect(x : Double, y : Double, w : Double, h : Double) { - } var globalAlpha : Double = 1.0; var strokeStyle : Any = "" @@ -34,49 +34,47 @@ class Context() { var shadowColor : String = "" var font : String = "" - fun beginPath() { - } - fun moveTo(x : Double, y : Double) { - } - fun closePath() { - } + fun beginPath() : Unit = js.noImpl - fun lineTo(x : Double, y : Double) { - } - fun quadraticCurveTo(cpx : Double, cpy : Double, x : Double, y : Double) { - } - fun bezierCurveTo(cp1x : Double, cp1y : Double, cp2x : Double, cp2y : Double, x : Double, y : Double) { - } - fun arcTo(x1 : Double, y1 : Double, x2 : Double, y2 : Double, radius : Double) { - } - fun arc(x : Double, y : Double, radius : Double, startAngle : Double, endAngle : Double, anticlockwise : Boolean) { - } + fun moveTo(x : Double, y : Double) : Unit = js.noImpl - fun rect(x : Double, y : Double, w : Double, h : Double) { - } - fun fill() { - } - fun stroke() { - } + fun closePath() : Unit = js.noImpl - fun fillText(text : String, x : Double, y : Double) { - } - fun fillText(text : String, x : Double, y : Double, maxWidth : Double) { - } - fun strokeText(text : String, x : Double, y : Double) { - } - fun strokeText(text : String, x : Double, y : Double, maxWidth : Double) { - } - fun measureText(text : String) : TextMetrics = TextMetrics(); + fun lineTo(x : Double, y : Double) : Unit = js.noImpl + + fun quadraticCurveTo(cpx : Double, cpy : Double, x : Double, y : Double) : Unit = js.noImpl + + fun bezierCurveTo(cp1x : Double, cp1y : Double, cp2x : Double, cp2y : Double, x : Double, y : Double) : Unit = js.noImpl + + fun arcTo(x1 : Double, y1 : Double, x2 : Double, y2 : Double, radius : Double) : Unit = js.noImpl + + fun arc(x : Double, y : Double, radius : Double, startAngle : Double, endAngle : Double, anticlockwise : Boolean) : Unit = js.noImpl + + + fun rect(x : Double, y : Double, w : Double, h : Double) : Unit = js.noImpl + + fun fill() : Unit = js.noImpl + + fun stroke() : Unit = js.noImpl + + + fun fillText(text : String, x : Double, y : Double) : Unit = js.noImpl + + fun fillText(text : String, x : Double, y : Double, maxWidth : Double) : Unit = js.noImpl + + fun strokeText(text : String, x : Double, y : Double) : Unit = js.noImpl + + fun strokeText(text : String, x : Double, y : Double, maxWidth : Double) : Unit = js.noImpl + + + fun measureText(text : String) : TextMetrics = TextMetrics(); + + fun drawImage(image : HTMLImageElement, dx : Int, dy : Int) : Unit = js.noImpl + fun drawImage(image : HTMLImageElement, dx : Int, dy : Int, dw : Int, dh : Int) : Unit = js.noImpl + fun drawImage(image : HTMLImageElement, sx : Int, sy : Int, + sw : Int, sh : Int, dx : Int, dy : Int, dw : Int, dh : Int) : Unit = js.noImpl - fun drawImage(image : HTMLImageElement, dx : Double, dy : Double) { - } - fun drawImage(image : HTMLImageElement, dx: Double, dy: Double, dw: Double, dh: Double) { - } - fun drawImage(image : HTMLImageElement, sx: Double, sy: Double, - sw: Double, sh: Double, dx: Double, dy: Double, dw: Double, dh: Double) { - } fun createLinearGradient(x0 : Double, y0 : Double, x1 : Double, y1 : Double) : CanvasGradient = CanvasGradient() fun createRadialGradient(x0 : Double, y0 : Double, r0 : Double, x1 : Double, y1 : Double, r1 : Double) : CanvasGradient = CanvasGradient(); @@ -85,16 +83,19 @@ class Context() { fun putImageData(data : ImageData, dx : Int, dy : Int) : Unit = js.noImpl } + native open class HTMLImageElement() : DomElement() { } + native class CanvasGradient() { - fun addColorStop(offset : Double, color : String) { - } + fun addColorStop(offset : Double, color : String) : Unit = js.noImpl } + + native class ImageData() { // readonly attribute unsigned long width; @@ -106,6 +107,7 @@ class ImageData() { } + native class Canvas() : DomElement() { var width : Int = js.noImpl; @@ -116,17 +118,19 @@ class Canvas() : DomElement() { fun toDataURL(typ : String) : String = js.noImpl } + native class TextMetrics() { - val width : Int = 0 + val width : Int = js.noImpl } + /*custom helpers*/ native -fun getContext() : Context = Context(); +fun getContext() : Context = js.noImpl native -fun getCanvas() : Canvas = Canvas(); +fun getCanvas() : Canvas = js.noImpl native -fun getKotlinLogo() : HTMLImageElement = HTMLImageElement(); +fun getKotlinLogo() : HTMLImageElement = js.noImpl native -fun getImage(src: String) : HTMLImageElement = HTMLImageElement(); \ No newline at end of file +fun getImage(src : String) : HTMLImageElement = js.noImpl \ No newline at end of file diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/Intrinsics.java b/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/Intrinsics.java index d23a9e9afbc..7e445c78177 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/Intrinsics.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/Intrinsics.java @@ -55,15 +55,15 @@ public final class Intrinsics { @NotNull private final Map functionIntrinsics = - new HashMap(); + new HashMap(); @NotNull private final Map equalsIntrinsics = - new HashMap(); + new HashMap(); @NotNull private final Map compareToIntrinsics = - new HashMap(); + new HashMap(); @NotNull private final Intrinsic lengthPropertyIntrinsic = new BuiltInPropertyIntrinsic("length"); @@ -84,6 +84,8 @@ public final class Intrinsics { declareBooleanIntrinsics(); FunctionDescriptor intToDouble = getFunctionByName(library.getInt().getDefaultType().getMemberScope(), "toDouble"); functionIntrinsics.put(intToDouble, ReturnReceiverIntrinsic.INSTANCE); + FunctionDescriptor doubleToInt = getFunctionByName(library.getDouble().getDefaultType().getMemberScope(), "toInt"); + functionIntrinsics.put(doubleToInt, new CallStandardMethodIntrinsic("Math.floor", true, 0)); FunctionDescriptor toStringFunction = getFunctionByName(library.getLibraryScope(), "toString"); functionIntrinsics.put(toStringFunction, new BuiltInFunctionIntrinsic("toString")); } @@ -144,7 +146,7 @@ public final class Intrinsics { FunctionDescriptor iteratorFunction = getFunctionByName(arrayMemberScope, "iterator"); functionIntrinsics.put(iteratorFunction, new CallStandardMethodIntrinsic("Kotlin.arrayIterator", true, 0)); ConstructorDescriptor arrayConstructor = - ((ClassDescriptor) arrayMemberScope.getContainingDeclaration()).getConstructors().iterator().next(); + ((ClassDescriptor)arrayMemberScope.getContainingDeclaration()).getConstructors().iterator().next(); functionIntrinsics.put(arrayConstructor, new CallStandardMethodIntrinsic("Kotlin.arrayFromFun", false, 2)); } @@ -168,13 +170,13 @@ public final class Intrinsics { private void declareStringIntrinsics() { //TODO: same intrinsic for 2 different methods PropertyDescriptor stringLengthProperty = - getPropertyByName(library.getString().getDefaultType().getMemberScope(), "length"); + getPropertyByName(library.getString().getDefaultType().getMemberScope(), "length"); functionIntrinsics.put(stringLengthProperty.getGetter(), lengthPropertyIntrinsic); PropertyDescriptor charSequenceLengthProperty = - getPropertyByName(library.getCharSequence().getDefaultType().getMemberScope(), "length"); + getPropertyByName(library.getCharSequence().getDefaultType().getMemberScope(), "length"); functionIntrinsics.put(charSequenceLengthProperty.getGetter(), lengthPropertyIntrinsic); FunctionDescriptor getFunction = - getFunctionByName(library.getString().getDefaultType().getMemberScope(), "get"); + getFunctionByName(library.getString().getDefaultType().getMemberScope(), "get"); functionIntrinsics.put(getFunction, CharAtIntrinsic.INSTANCE); } @@ -183,7 +185,7 @@ public final class Intrinsics { for (int elementIndex = 0; elementIndex < tupleSize; ++elementIndex) { String accessorName = "_" + (elementIndex + 1); PropertyDescriptor propertyDescriptor = - getPropertyByName(tupleDescriptor.getDefaultType().getMemberScope(), accessorName); + getPropertyByName(tupleDescriptor.getDefaultType().getMemberScope(), accessorName); functionIntrinsics.put(propertyDescriptor.getGetter(), new TupleAccessIntrinsic(elementIndex)); } } @@ -199,7 +201,7 @@ public final class Intrinsics { public boolean isIntrinsic(@NotNull DeclarationDescriptor descriptor) { //NOTE: that if we want to add other intrinsics we have to modify this method if (descriptor instanceof FunctionDescriptor) { - FunctionDescriptor functionDescriptor = (FunctionDescriptor) descriptor.getOriginal(); + FunctionDescriptor functionDescriptor = (FunctionDescriptor)descriptor.getOriginal(); return (equalsIntrinsics.containsKey(functionDescriptor) || compareToIntrinsics.containsKey(functionDescriptor) || functionIntrinsics.containsKey(functionDescriptor)); @@ -228,7 +230,7 @@ public final class Intrinsics { @Override public Void visitClassDescriptor(@NotNull ClassDescriptor descriptor, @Nullable Void nothing) { for (DeclarationDescriptor memberDescriptor : - descriptor.getDefaultType().getMemberScope().getAllDescriptors()) { + descriptor.getDefaultType().getMemberScope().getAllDescriptors()) { //noinspection NullableProblems memberDescriptor.accept(this, null); } @@ -289,5 +291,4 @@ public final class Intrinsics { return !DescriptorUtils.hasParameters(descriptor); } } - } diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/utils/DescriptorUtils.java b/js/js.translator/src/org/jetbrains/k2js/translate/utils/DescriptorUtils.java index 1fadbafa664..364045342ce 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/utils/DescriptorUtils.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/utils/DescriptorUtils.java @@ -152,11 +152,13 @@ public final class DescriptorUtils { @NotNull public static String getNameForNamespace(@NotNull NamespaceDescriptor descriptor) { - if (descriptor.getContainingDeclaration() instanceof ModuleDescriptor) { + //if (descriptor.getContainingDeclaration() instanceof ModuleDescriptor) { + // return Namer.getAnonymousNamespaceName(); + //} else + if (descriptor.getName().isEmpty()) { return Namer.getAnonymousNamespaceName(); - } else if (descriptor.getName().equals("")) { - return Namer.getAnonymousNamespaceName(); - } else { + } + else { return descriptor.getName(); } }