GLCanvasManager.java 4.5 KB
Newer Older
Gaëtan Renaudeau's avatar
Gaëtan Renaudeau committed
1 2
package com.projectseptember.RNGL;

冷佳娟's avatar
冷佳娟 committed
3
import androidx.annotation.Nullable;
Gaëtan Renaudeau's avatar
Gaëtan Renaudeau committed
4

5 6 7 8
import com.facebook.imagepipeline.core.DefaultExecutorSupplier;
import com.facebook.imagepipeline.core.ExecutorSupplier;
import com.facebook.imagepipeline.memory.PoolConfig;
import com.facebook.imagepipeline.memory.PoolFactory;
9
import com.facebook.infer.annotation.Assertions;
Gaëtan Renaudeau's avatar
WIP  
Gaëtan Renaudeau committed
10 11
import com.facebook.react.bridge.ReadableArray;
import com.facebook.react.bridge.ReadableMap;
Gaëtan Renaudeau's avatar
Gaëtan Renaudeau committed
12
import com.facebook.react.common.MapBuilder;
13
import com.facebook.react.uimanager.PointerEvents;
14 15
import com.facebook.react.uimanager.SimpleViewManager;
import com.facebook.react.uimanager.ThemedReactContext;
Gaëtan Renaudeau's avatar
Gaëtan Renaudeau committed
16
import com.facebook.react.uimanager.annotations.ReactProp;
Gaëtan Renaudeau's avatar
Gaëtan Renaudeau committed
17

18
import java.util.Locale;
Gaëtan Renaudeau's avatar
Gaëtan Renaudeau committed
19 20
import java.util.Map;

21

Gaëtan Renaudeau's avatar
WIP  
Gaëtan Renaudeau committed
22
public class GLCanvasManager extends SimpleViewManager<GLCanvas> {
Gaëtan Renaudeau's avatar
Gaëtan Renaudeau committed
23

Gaëtan Renaudeau's avatar
WIP  
Gaëtan Renaudeau committed
24
    public static final String REACT_CLASS = "GLCanvas";
Gaëtan Renaudeau's avatar
Gaëtan Renaudeau committed
25

26 27
    public static final int COMMAND_CAPTURE_FRAME = 1;

28 29
    private ExecutorSupplier executorSupplier;

30 31 32 33 34
    @ReactProp(name="pixelRatio")
    public void setPixelRatio (GLCanvas view, float pixelRatio) {
        view.setPixelRatio(pixelRatio);
    }

Gaëtan Renaudeau's avatar
WIP  
Gaëtan Renaudeau committed
35 36 37 38
    @ReactProp(name="nbContentTextures")
    public void setNbContentTextures (GLCanvas view, int nbContentTextures) {
        view.setNbContentTextures(nbContentTextures);
    }
39

Gaëtan Renaudeau's avatar
WIP  
Gaëtan Renaudeau committed
40 41 42 43
    @ReactProp(name="renderId")
    public void setRenderId (GLCanvas view, int renderId) {
        view.setRenderId(renderId);
    }
Gaëtan Renaudeau's avatar
Gaëtan Renaudeau committed
44

45
    @ReactProp(name = "autoRedraw")
Gaëtan Renaudeau's avatar
WIP  
Gaëtan Renaudeau committed
46 47 48
    public void setAutoRedraw (GLCanvas view, boolean autoRedraw) {
        view.setAutoRedraw(autoRedraw);
    }
49

50 51 52 53 54
    @ReactProp(name = "overlay")
    public void setZOrderMediaOverlay(GLCanvas view, boolean overlay) {
        view.setZOrderMediaOverlay(overlay);
    }

55 56 57 58 59 60 61 62 63 64
    @ReactProp(name = "setZOrderOnTop")
    public void setZOrderOnTop (GLCanvas view, boolean setZOrderOnTop) {
        view.setZOrderOnTop(setZOrderOnTop);
    }

    @ReactProp(name = "backgroundColor")
    public void setBackgroundColor (GLCanvas view, Integer color) {
        view.setBackgroundColor(color);
    }

65 66 67 68 69 70
    @ReactProp(name = "pointerEvents")
    public void setPointerEvents(GLCanvas view, @Nullable String pointerEventsStr) {
        if (pointerEventsStr != null) {
            PointerEvents pointerEvents = PointerEvents.valueOf(pointerEventsStr.toUpperCase(Locale.US).replace("-", "_"));
            view.setPointerEvents(pointerEvents);
        }
Gaëtan Renaudeau's avatar
WIP  
Gaëtan Renaudeau committed
71
    }
Gaëtan Renaudeau's avatar
WIP  
Gaëtan Renaudeau committed
72

73
    @ReactProp(name = "data")
Gaëtan Renaudeau's avatar
WIP  
Gaëtan Renaudeau committed
74 75 76
    public void setData (GLCanvas view, @Nullable ReadableMap data) {
        view.setData(data == null ? null : GLData.fromMap(data));
    }
Gaëtan Renaudeau's avatar
WIP  
Gaëtan Renaudeau committed
77

Gaëtan Renaudeau's avatar
WIP  
Gaëtan Renaudeau committed
78 79 80 81
    @ReactProp(name="imagesToPreload")
    public void setImagesToPreload (GLCanvas view, @Nullable ReadableArray imageToPreload) {
        view.setImagesToPreload(imageToPreload);
    }
Gaëtan Renaudeau's avatar
WIP  
Gaëtan Renaudeau committed
82

Gaëtan Renaudeau's avatar
WIP  
Gaëtan Renaudeau committed
83 84 85 86
    @Override
    public String getName() {
        return REACT_CLASS;
    }
Gaëtan Renaudeau's avatar
Gaëtan Renaudeau committed
87

Gaëtan Renaudeau's avatar
WIP  
Gaëtan Renaudeau committed
88 89
    @Override
    public GLCanvas createViewInstance (ThemedReactContext context) {
90 91 92 93 94 95
        if (executorSupplier == null) {
            PoolFactory poolFactory = new PoolFactory(PoolConfig.newBuilder().build());
            int numCpuBoundThreads = poolFactory.getFlexByteArrayPoolMaxNumThreads();
            executorSupplier = new DefaultExecutorSupplier(numCpuBoundThreads);
        }
        return new GLCanvas(context, executorSupplier);
Gaëtan Renaudeau's avatar
WIP  
Gaëtan Renaudeau committed
96
    }
Gaëtan Renaudeau's avatar
Gaëtan Renaudeau committed
97

98 99 100 101 102 103 104 105 106
    @Override
    public void receiveCommand(
            GLCanvas canvas,
            int commandType,
            @Nullable ReadableArray args) {
        Assertions.assertNotNull(canvas);
        Assertions.assertNotNull(args);
        switch (commandType) {
            case COMMAND_CAPTURE_FRAME: {
107
                canvas.requestCaptureFrame(CaptureConfig.fromMap(args.getMap(0)));
108 109 110 111 112 113 114 115 116 117
                return;
            }
            default:
                throw new IllegalArgumentException(String.format(
                        "Unsupported command %d received by %s.",
                        commandType,
                        getClass().getSimpleName()));
        }
    }

Gaëtan Renaudeau's avatar
Gaëtan Renaudeau committed
118 119 120
    @Override
    public @Nullable Map getExportedCustomDirectEventTypeConstants() {
        return MapBuilder.of(
121 122
                "captureFrame",
                MapBuilder.of("registrationName", "onGLCaptureFrame"),
Gaëtan Renaudeau's avatar
Gaëtan Renaudeau committed
123
                "load",
124
                MapBuilder.of("registrationName", "onGLLoad"),
Gaëtan Renaudeau's avatar
Gaëtan Renaudeau committed
125
                "progress",
126
                MapBuilder.of("registrationName", "onGLProgress")
Gaëtan Renaudeau's avatar
Gaëtan Renaudeau committed
127 128
        );
    }
129 130 131 132 133 134 135

    @Override
    public Map<String,Integer> getCommandsMap() {
        return MapBuilder.of(
                "captureFrame",
                COMMAND_CAPTURE_FRAME);
    }
Gaëtan Renaudeau's avatar
Gaëtan Renaudeau committed
136
}