From c3b7d6359caf8e7b1812e3351723753e6569ebc3 Mon Sep 17 00:00:00 2001 From: SuperMonster003 Date: Sat, 3 Jan 2026 20:48:07 +0800 Subject: [PATCH] =?UTF-8?q?6.7.0=20-=20Alpha13=20-=20=E4=BF=AE=E5=A4=8D=20?= =?UTF-8?q?Canvas=20=E6=9E=84=E9=80=A0=E5=87=BD=E6=95=B0=E5=8F=AF=E6=8E=A5?= =?UTF-8?q?=E5=8F=97=E7=9A=84=E5=8F=82=E6=95=B0=E7=B1=BB=E5=9E=8B=E9=94=99?= =?UTF-8?q?=E8=AF=AF=20(issue=20#402)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .changelog/lang_zh-Hans.json | 1 + .../autojs/autojs/runtime/ScriptRuntime.kt | 2 + .../runtime/api/augment/canvas/Canvas.kt | 48 +++++++++++++++++++ .../runtime/api/augment/global/Classes.kt | 5 +- 4 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 app/src/main/java/org/autojs/autojs/runtime/api/augment/canvas/Canvas.kt diff --git a/.changelog/lang_zh-Hans.json b/.changelog/lang_zh-Hans.json index fdab1932..0d815f3b 100644 --- a/.changelog/lang_zh-Hans.json +++ b/.changelog/lang_zh-Hans.json @@ -74,6 +74,7 @@ "部分设备无法正常初始化 MLKit Google OCR 的问题 (试修) _[`issue #8`](http://issues.autojs6.com/8#issuecomment-3117061768)_", "部分设备无法正常触发文件管理器功能按钮点击事件的问题 (试修) _[`issue #465`](http://issues.autojs6.com/465)_", "ErrorDialogActivity 可能无法正常启动或短时间自动消失的问题 _[`issue #471`](http://issues.autojs6.com/471)_ _[`issue #414`](http://issues.autojs6.com/414)_ _[`issue #340`](http://issues.autojs6.com/340#issuecomment-2973485826)_", + "Canvas 构造函数可接受的参数类型错误 _[`issue #402`](http://issues.autojs6.com/402)_", "崩溃报告页面复制详细信息功能失效的问题", "文件管理器删除项目文件夹后 UI 未能自动刷新的问题", "使用 \"三按钮\" 手势导航时导航栏前景色可能与夜间模式关联异常的问题", diff --git a/app/src/main/java/org/autojs/autojs/runtime/ScriptRuntime.kt b/app/src/main/java/org/autojs/autojs/runtime/ScriptRuntime.kt index 2997ab3c..ecc027a3 100644 --- a/app/src/main/java/org/autojs/autojs/runtime/ScriptRuntime.kt +++ b/app/src/main/java/org/autojs/autojs/runtime/ScriptRuntime.kt @@ -42,6 +42,7 @@ import org.autojs.autojs.runtime.api.augment.automator.RootAutomator import org.autojs.autojs.runtime.api.augment.barcode.Barcode import org.autojs.autojs.runtime.api.augment.barcode.QrCode import org.autojs.autojs.runtime.api.augment.base64.Base64 +import org.autojs.autojs.runtime.api.augment.canvas.Canvas import org.autojs.autojs.runtime.api.augment.colors.Color import org.autojs.autojs.runtime.api.augment.colors.Colors import org.autojs.autojs.runtime.api.augment.console.Console @@ -755,6 +756,7 @@ class ScriptRuntime private constructor(builder: Builder) { Selector(this).augment(target, true, READONLY) Events(this).augment(target, events, true) Keys.augmentWithRuntime(target, this, true) + Canvas(this).augment(target, false) Images(this).augment(target, true) Ocr(this).augment(target, true).also { ocr -> OcrMLKit(this).augment(ocr, false).also { augmentedOcrMLKit = it } diff --git a/app/src/main/java/org/autojs/autojs/runtime/api/augment/canvas/Canvas.kt b/app/src/main/java/org/autojs/autojs/runtime/api/augment/canvas/Canvas.kt new file mode 100644 index 00000000..bfde9c76 --- /dev/null +++ b/app/src/main/java/org/autojs/autojs/runtime/api/augment/canvas/Canvas.kt @@ -0,0 +1,48 @@ +package org.autojs.autojs.runtime.api.augment.canvas + +import android.graphics.Bitmap +import org.autojs.autojs.core.graphics.ScriptCanvas +import org.autojs.autojs.core.image.ImageWrapper +import org.autojs.autojs.extension.AnyExtensions.jsBrief +import org.autojs.autojs.extension.FlexibleArray.Companion.component1 +import org.autojs.autojs.extension.FlexibleArray.Companion.component2 +import org.autojs.autojs.runtime.ScriptRuntime +import org.autojs.autojs.runtime.api.augment.Augmentable +import org.autojs.autojs.runtime.api.augment.Constructable +import org.autojs.autojs.runtime.exception.WrappedIllegalArgumentException +import org.autojs.autojs.util.RhinoUtils.coerceIntNumber +import org.mozilla.javascript.Context +import org.mozilla.javascript.Scriptable + +@Suppress("unused") +class Canvas(private val scriptRuntime: ScriptRuntime) : Augmentable(scriptRuntime), Constructable { + + init { + originateKeyName() + } + + override fun construct(vararg args: Any?): Scriptable = ensureArgumentsAtMost(args, 2) { argList -> + when (argList.size) { + 0 -> ScriptCanvas(scriptRuntime) + 1 -> when (val o = argList[0]) { + is Bitmap -> ScriptCanvas(scriptRuntime, o) + is ImageWrapper -> ScriptCanvas(scriptRuntime, o) + else -> throw WrappedIllegalArgumentException("Invalid argument ${o.jsBrief()} for $key constructor") + } + 2 -> { + val (width, height) = argList + require(width is Number) { + "Argument \"width\" ${width.jsBrief()} for $key constructor must be a number" + } + require(height is Number) { + "Argument \"height\" ${height.jsBrief()} for $key constructor must be a number" + } + ScriptCanvas(scriptRuntime, coerceIntNumber(width), coerceIntNumber(height)) + } + else -> throw WrappedIllegalArgumentException("Invalid arguments length ${argList.size} for $key constructor") + }.let { javaCanvas -> + Context.javaToJS(javaCanvas, scriptRuntime.topLevelScope) as Scriptable + } + } + +} diff --git a/app/src/main/java/org/autojs/autojs/runtime/api/augment/global/Classes.kt b/app/src/main/java/org/autojs/autojs/runtime/api/augment/global/Classes.kt index 548c1d0c..fcab469b 100644 --- a/app/src/main/java/org/autojs/autojs/runtime/api/augment/global/Classes.kt +++ b/app/src/main/java/org/autojs/autojs/runtime/api/augment/global/Classes.kt @@ -461,8 +461,9 @@ class Classes { @JvmField val JsWebView = org.autojs.autojs.core.ui.widget.JsWebView::class - @JvmField - val Canvas = org.autojs.autojs.core.graphics.ScriptCanvas::class + // @Comment by SuperMonster003 on Jan 3, 2026. + // # @JvmField + // # val Canvas = org.autojs.autojs.core.graphics.ScriptCanvas::class @JvmField val EvaluatorException = org.mozilla.javascript.EvaluatorException::class