feat: new ui widget canvas
This commit is contained in:
@@ -9,6 +9,7 @@ import android.view.SurfaceHolder;
|
||||
import android.view.SurfaceView;
|
||||
|
||||
import com.stardust.autojs.core.eventloop.EventEmitter;
|
||||
import com.stardust.autojs.runtime.ScriptRuntime;
|
||||
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
@@ -25,11 +26,13 @@ public class ScriptCanvasView extends SurfaceView implements SurfaceHolder.Callb
|
||||
private EventEmitter mEventEmitter;
|
||||
private final SurfaceHolder mHolder;
|
||||
private ExecutorService mDrawingThreadPool;
|
||||
private ScriptRuntime mScriptRuntime;
|
||||
|
||||
|
||||
public ScriptCanvasView(Context context, EventEmitter eventEmitter) {
|
||||
public ScriptCanvasView(Context context, ScriptRuntime scriptRuntime) {
|
||||
super(context);
|
||||
mEventEmitter = eventEmitter;
|
||||
mScriptRuntime = scriptRuntime;
|
||||
mEventEmitter = new EventEmitter(mScriptRuntime.bridges);
|
||||
mHolder = getHolder();
|
||||
init();
|
||||
}
|
||||
@@ -52,14 +55,24 @@ public class ScriptCanvasView extends SurfaceView implements SurfaceHolder.Callb
|
||||
if (mDrawingThreadPool == null)
|
||||
mDrawingThreadPool = Executors.newCachedThreadPool();
|
||||
mDrawingThreadPool.execute(() -> {
|
||||
Canvas canvas = null;
|
||||
SurfaceHolder holder = getHolder();
|
||||
while (mDrawing) {
|
||||
Canvas canvas = holder.lockCanvas();
|
||||
canvas.drawColor(Color.WHITE);
|
||||
emit("draw", canvas, this);
|
||||
holder.unlockCanvasAndPost(canvas);
|
||||
try {
|
||||
while (mDrawing) {
|
||||
canvas = holder.lockCanvas();
|
||||
canvas.drawColor(Color.WHITE);
|
||||
emit("draw", canvas, this);
|
||||
holder.unlockCanvasAndPost(canvas);
|
||||
canvas = null;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
mScriptRuntime.exit(e);
|
||||
mDrawing = false;
|
||||
} finally {
|
||||
if (canvas != null) {
|
||||
holder.unlockCanvasAndPost(canvas);
|
||||
}
|
||||
}
|
||||
Log.d(LOG_TAG, "drawing thread: mRunning = false");
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -27,6 +27,6 @@ public class CanvasViewAttrSetter extends BaseViewAttrSetter<ScriptCanvasView> {
|
||||
@Nullable
|
||||
@Override
|
||||
public ViewCreator<ScriptCanvasView> getCreator() {
|
||||
return (context, attrs) -> new ScriptCanvasView(context, new EventEmitter(mScriptRuntime.bridges));
|
||||
return (context, attrs) -> new ScriptCanvasView(context, mScriptRuntime);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.stardust.autojs.engine;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
@@ -63,6 +64,9 @@ public class LoopBasedJavaScriptEngine extends RhinoJavaScriptEngine {
|
||||
@Override
|
||||
public void forceStop() {
|
||||
LooperHelper.quitForThread(getThread());
|
||||
Activity activity = (Activity) getTag("activity");
|
||||
if (activity != null)
|
||||
activity.finish();
|
||||
super.forceStop();
|
||||
}
|
||||
|
||||
|
||||
@@ -14,6 +14,10 @@ public class ScriptEngineProxy<S extends ScriptSource> implements ScriptEngine<S
|
||||
mScriptEngine = scriptEngine;
|
||||
}
|
||||
|
||||
public ScriptEngine<S> getInner() {
|
||||
return mScriptEngine;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void put(String name, Object value) {
|
||||
mScriptEngine.put(name, value);
|
||||
|
||||
@@ -101,6 +101,7 @@ public class ScriptExecuteActivity extends AppCompatActivity {
|
||||
|
||||
private void prepare() {
|
||||
mScriptEngine.put("activity", this);
|
||||
mScriptEngine.setTag("activity", this);
|
||||
mScriptEngine.setTag(ScriptEngine.TAG_ENV_PATH, mScriptExecution.getConfig().getRequirePath());
|
||||
mScriptEngine.setTag(ScriptEngine.TAG_EXECUTE_PATH, mScriptExecution.getConfig().getExecutePath());
|
||||
mScriptEngine.init();
|
||||
@@ -121,6 +122,7 @@ public class ScriptExecuteActivity extends AppCompatActivity {
|
||||
protected void onDestroy() {
|
||||
super.onDestroy();
|
||||
mScriptEngine.put("activity", null);
|
||||
mScriptEngine.setTag("activity", null);
|
||||
mScriptEngine.destroy();
|
||||
mScriptExecution = null;
|
||||
}
|
||||
@@ -149,13 +151,7 @@ public class ScriptExecuteActivity extends AppCompatActivity {
|
||||
if (mScriptEngine != null) {
|
||||
mScriptEngine.forceStop();
|
||||
}
|
||||
mScriptEngine = new ScriptEngineProxy(mScriptEngineManager.createEngineOfSourceOrThrow(getSource())) {
|
||||
@Override
|
||||
public void forceStop() {
|
||||
super.forceStop();
|
||||
activity.finish();
|
||||
}
|
||||
};
|
||||
mScriptEngine = mScriptEngineManager.createEngineOfSourceOrThrow(getSource());
|
||||
return mScriptEngine;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user