Some tweaks in canvas api.
This commit is contained in:
@@ -2,8 +2,8 @@
|
||||
<module type="JAVA_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$/src/html5/fancyLines">
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/html5/fancyLines" isTestSource="false" />
|
||||
<content url="file://$MODULE_DIR$/src/html5/creatures">
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/html5/creatures" isTestSource="false" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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();
|
||||
fun getImage(src : String) : HTMLImageElement = js.noImpl
|
||||
@@ -55,15 +55,15 @@ public final class Intrinsics {
|
||||
|
||||
@NotNull
|
||||
private final Map<FunctionDescriptor, Intrinsic> functionIntrinsics =
|
||||
new HashMap<FunctionDescriptor, Intrinsic>();
|
||||
new HashMap<FunctionDescriptor, Intrinsic>();
|
||||
|
||||
@NotNull
|
||||
private final Map<FunctionDescriptor, EqualsIntrinsic> equalsIntrinsics =
|
||||
new HashMap<FunctionDescriptor, EqualsIntrinsic>();
|
||||
new HashMap<FunctionDescriptor, EqualsIntrinsic>();
|
||||
|
||||
@NotNull
|
||||
private final Map<FunctionDescriptor, CompareToIntrinsic> compareToIntrinsics =
|
||||
new HashMap<FunctionDescriptor, CompareToIntrinsic>();
|
||||
new HashMap<FunctionDescriptor, CompareToIntrinsic>();
|
||||
|
||||
@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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user