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