add shader plugin
This commit is contained in:
		@@ -5,6 +5,7 @@ import android.os.Bundle;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import com.github.penfeizhou.doric.DoricContext;
 | 
					import com.github.penfeizhou.doric.DoricContext;
 | 
				
			||||||
import com.github.penfeizhou.doric.utils.DoricUtils;
 | 
					import com.github.penfeizhou.doric.utils.DoricUtils;
 | 
				
			||||||
 | 
					import com.github.pengfeizhou.jscore.JSONBuilder;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class MainActivity extends AppCompatActivity {
 | 
					public class MainActivity extends AppCompatActivity {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -13,6 +14,7 @@ public class MainActivity extends AppCompatActivity {
 | 
				
			|||||||
        super.onCreate(savedInstanceState);
 | 
					        super.onCreate(savedInstanceState);
 | 
				
			||||||
        setContentView(R.layout.activity_main);
 | 
					        setContentView(R.layout.activity_main);
 | 
				
			||||||
        DoricContext doricContext = DoricContext.create(this, DoricUtils.readAssetFile("demo.js"), "demo");
 | 
					        DoricContext doricContext = DoricContext.create(this, DoricUtils.readAssetFile("demo.js"), "demo");
 | 
				
			||||||
 | 
					        doricContext.callEntity("__init__", new JSONBuilder().put("width", 100).put("height", 100));
 | 
				
			||||||
        doricContext.callEntity("log");
 | 
					        doricContext.callEntity("log");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,6 +2,7 @@ package com.github.penfeizhou.doric;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import android.text.TextUtils;
 | 
					import android.text.TextUtils;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.github.penfeizhou.doric.plugin.ShaderPlugin;
 | 
				
			||||||
import com.github.penfeizhou.doric.widget.ViewNode;
 | 
					import com.github.penfeizhou.doric.widget.ViewNode;
 | 
				
			||||||
import com.github.penfeizhou.doric.utils.DoricMetaInfo;
 | 
					import com.github.penfeizhou.doric.utils.DoricMetaInfo;
 | 
				
			||||||
import com.github.penfeizhou.doric.plugin.DoricJavaPlugin;
 | 
					import com.github.penfeizhou.doric.plugin.DoricJavaPlugin;
 | 
				
			||||||
@@ -36,6 +37,7 @@ public class DoricRegistry {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public DoricRegistry() {
 | 
					    public DoricRegistry() {
 | 
				
			||||||
 | 
					        this.registerNativePlugin(ShaderPlugin.class);
 | 
				
			||||||
        this.registerNativePlugin(ModalPlugin.class);
 | 
					        this.registerNativePlugin(ModalPlugin.class);
 | 
				
			||||||
        initRegistry(this);
 | 
					        initRegistry(this);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,31 @@
 | 
				
			|||||||
 | 
					package com.github.penfeizhou.doric.plugin;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.github.penfeizhou.doric.DoricContext;
 | 
				
			||||||
 | 
					import com.github.penfeizhou.doric.extension.bridge.DoricMethod;
 | 
				
			||||||
 | 
					import com.github.penfeizhou.doric.extension.bridge.DoricPlugin;
 | 
				
			||||||
 | 
					import com.github.penfeizhou.doric.utils.DoricLog;
 | 
				
			||||||
 | 
					import com.github.pengfeizhou.jscore.JSDecoder;
 | 
				
			||||||
 | 
					import com.github.pengfeizhou.jscore.JSObject;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * @Description: com.github.penfeizhou.doric.plugin
 | 
				
			||||||
 | 
					 * @Author: pengfei.zhou
 | 
				
			||||||
 | 
					 * @CreateDate: 2019-07-22
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					@DoricPlugin(name = "shader")
 | 
				
			||||||
 | 
					public class ShaderPlugin extends DoricJavaPlugin {
 | 
				
			||||||
 | 
					    public ShaderPlugin(DoricContext doricContext) {
 | 
				
			||||||
 | 
					        super(doricContext);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @DoricMethod
 | 
				
			||||||
 | 
					    public void render(JSDecoder jsDecoder) {
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            JSObject jsObject = jsDecoder.decode().asObject();
 | 
				
			||||||
 | 
					        } catch (Exception e) {
 | 
				
			||||||
 | 
					            e.printStackTrace();
 | 
				
			||||||
 | 
					            DoricLog.e("Shader.render:error%s", e.getLocalizedMessage());
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -10,6 +10,7 @@ import android.view.WindowManager;
 | 
				
			|||||||
import com.github.penfeizhou.doric.Doric;
 | 
					import com.github.penfeizhou.doric.Doric;
 | 
				
			||||||
import com.github.pengfeizhou.jscore.JSArray;
 | 
					import com.github.pengfeizhou.jscore.JSArray;
 | 
				
			||||||
import com.github.pengfeizhou.jscore.JSDecoder;
 | 
					import com.github.pengfeizhou.jscore.JSDecoder;
 | 
				
			||||||
 | 
					import com.github.pengfeizhou.jscore.JSONBuilder;
 | 
				
			||||||
import com.github.pengfeizhou.jscore.JSValue;
 | 
					import com.github.pengfeizhou.jscore.JSValue;
 | 
				
			||||||
import com.github.pengfeizhou.jscore.JavaValue;
 | 
					import com.github.pengfeizhou.jscore.JavaValue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -52,6 +53,8 @@ public class DoricUtils {
 | 
				
			|||||||
    public static JavaValue toJavaValue(Object arg) {
 | 
					    public static JavaValue toJavaValue(Object arg) {
 | 
				
			||||||
        if (arg == null) {
 | 
					        if (arg == null) {
 | 
				
			||||||
            return new JavaValue();
 | 
					            return new JavaValue();
 | 
				
			||||||
 | 
					        } else if (arg instanceof JSONBuilder) {
 | 
				
			||||||
 | 
					            return new JavaValue(((JSONBuilder) arg).toJSONObject());
 | 
				
			||||||
        } else if (arg instanceof JSONObject) {
 | 
					        } else if (arg instanceof JSONObject) {
 | 
				
			||||||
            return new JavaValue((JSONObject) arg);
 | 
					            return new JavaValue((JSONObject) arg);
 | 
				
			||||||
        } else if (arg instanceof String) {
 | 
					        } else if (arg instanceof String) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,12 +1,18 @@
 | 
				
			|||||||
import { NativeCall, Text, Alignment, Color, VLayout, Panel, log, logw, loge } from "./index"
 | 
					import { NativeCall, Text, Alignment, Color, VLayout, Panel, log, logw, loge } from "./index"
 | 
				
			||||||
 | 
					import { Group } from "./src/ui/view";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@Entry
 | 
					@Entry
 | 
				
			||||||
export class MyPage extends Panel {
 | 
					export class MyPage extends Panel {
 | 
				
			||||||
    build() {
 | 
					
 | 
				
			||||||
        return new Text
 | 
					    build(rootView: Group): void {
 | 
				
			||||||
 | 
					        log('build view')
 | 
				
			||||||
 | 
					        const text = new Text
 | 
				
			||||||
 | 
					        text.text = "hello"
 | 
				
			||||||
 | 
					        rootView.children.push(text)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @NativeCall
 | 
					    @NativeCall
 | 
				
			||||||
    log() {
 | 
					    log() {
 | 
				
			||||||
        log("Hello.HEGO")
 | 
					        log("Hello.HEGO")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -26,6 +26,7 @@ export default [
 | 
				
			|||||||
        plugins: [
 | 
					        plugins: [
 | 
				
			||||||
            resolve({ jsnext: true, main: true }),
 | 
					            resolve({ jsnext: true, main: true }),
 | 
				
			||||||
        ],
 | 
					        ],
 | 
				
			||||||
 | 
					        external: ['reflect-metadata']
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        input: "build/demo.js",
 | 
					        input: "build/demo.js",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
import { Context } from "./sandbox";
 | 
					import { Context } from "./sandbox";
 | 
				
			||||||
require('reflect-metadata');
 | 
					export * from 'reflect-metadata'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
declare global {
 | 
					declare global {
 | 
				
			||||||
    const context: Context;
 | 
					    const context: Context;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,8 @@
 | 
				
			|||||||
import { } from './../runtime/global';
 | 
					import './../runtime/global'
 | 
				
			||||||
import { View, Stack, Group } from "./view";
 | 
					import { View, Stack, Group } from "./view";
 | 
				
			||||||
import { loge, log } from '../util/log';
 | 
					import { loge, log } from '../util/log';
 | 
				
			||||||
 | 
					import { Model } from '../util/types';
 | 
				
			||||||
 | 
					import { Context } from '../runtime/sandbox';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export function NativeCall(target: Panel, propertyKey: string, descriptor: PropertyDescriptor) {
 | 
					export function NativeCall(target: Panel, propertyKey: string, descriptor: PropertyDescriptor) {
 | 
				
			||||||
@@ -15,7 +17,7 @@ export function NativeCall(target: Panel, propertyKey: string, descriptor: Prope
 | 
				
			|||||||
type Frame = { width: number, height: number }
 | 
					type Frame = { width: number, height: number }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export abstract class Panel {
 | 
					export abstract class Panel {
 | 
				
			||||||
 | 
					    context?: Context
 | 
				
			||||||
    onCreate() { }
 | 
					    onCreate() { }
 | 
				
			||||||
    onDestory() { }
 | 
					    onDestory() { }
 | 
				
			||||||
    onShow() { }
 | 
					    onShow() { }
 | 
				
			||||||
@@ -35,6 +37,7 @@ export abstract class Panel {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    @NativeCall
 | 
					    @NativeCall
 | 
				
			||||||
    private __init__(frame: Frame, data: any) {
 | 
					    private __init__(frame: Frame, data: any) {
 | 
				
			||||||
 | 
					        log('__init__:', frame, data)
 | 
				
			||||||
        this.__data__ = data
 | 
					        this.__data__ = data
 | 
				
			||||||
        this.__rootView__.width = frame.width
 | 
					        this.__rootView__.width = frame.width
 | 
				
			||||||
        this.__rootView__.height = frame.height
 | 
					        this.__rootView__.height = frame.height
 | 
				
			||||||
@@ -88,15 +91,19 @@ export abstract class Panel {
 | 
				
			|||||||
        }, this.__rootView__)
 | 
					        }, this.__rootView__)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private nativeRender(model: Model) {
 | 
				
			||||||
 | 
					        if (this.context) {
 | 
				
			||||||
 | 
					            this.context.bridge.shader_render(model)
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private hookBeforeNativeCall() {
 | 
					    private hookBeforeNativeCall() {
 | 
				
			||||||
        log('__hookBeforeNativeCall__')
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private hookAfterNativeCall() {
 | 
					    private hookAfterNativeCall() {
 | 
				
			||||||
        log('__hookAfterNativeCall__')
 | 
					 | 
				
			||||||
        if (this.__rootView__.isDirty()) {
 | 
					        if (this.__rootView__.isDirty()) {
 | 
				
			||||||
            const model = this.__rootView__.toModel()
 | 
					            const model = this.__rootView__.toModel()
 | 
				
			||||||
            log('needRefresh:' + JSON.stringify(model))
 | 
					            this.nativeRender(model)
 | 
				
			||||||
            this.__rootView__.clean()
 | 
					            this.__rootView__.clean()
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -119,13 +119,13 @@ export abstract class View implements Modeling {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    clean() {
 | 
					    clean() {
 | 
				
			||||||
        for (const key in this.__dirty_props__) {
 | 
					        for (const key in this.__dirty_props__) {
 | 
				
			||||||
            if (this.__dirty_props__.hasOwnProperty(key)) {
 | 
					            if (Reflect.has(this.__dirty_props__, key)) {
 | 
				
			||||||
                this.__dirty_props__[key] = undefined
 | 
					                Reflect.deleteProperty(this.__dirty_props__, key)
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    isDirty() {
 | 
					    isDirty() {
 | 
				
			||||||
        return Reflect.ownKeys(this.__dirty_props__).length === 0
 | 
					        return Reflect.ownKeys(this.__dirty_props__).length !== 0
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    responseCallback(id: string, ...args: any) {
 | 
					    responseCallback(id: string, ...args: any) {
 | 
				
			||||||
        const f = this.id2Callback(id)
 | 
					        const f = this.id2Callback(id)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user