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

Gaëtan Renaudeau's avatar
WIP  
Gaëtan Renaudeau committed
3
import android.support.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
WIP  
Gaëtan Renaudeau committed
16
import com.facebook.react.uimanager.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

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

50
    @ReactProp(name = "autoRedraw")
Gaëtan Renaudeau's avatar
WIP  
Gaëtan Renaudeau committed
51 52 53
    public void setAutoRedraw (GLCanvas view, boolean autoRedraw) {
        view.setAutoRedraw(autoRedraw);
    }
54

55 56 57 58 59 60
    @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
61
    }
Gaëtan Renaudeau's avatar
WIP  
Gaëtan Renaudeau committed
62

63
    @ReactProp(name = "data")
Gaëtan Renaudeau's avatar
WIP  
Gaëtan Renaudeau committed
64 65 66
    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
67

Gaëtan Renaudeau's avatar
WIP  
Gaëtan Renaudeau committed
68 69 70 71
    @ReactProp(name="imagesToPreload")
    public void setImagesToPreload (GLCanvas view, @Nullable ReadableArray imageToPreload) {
        view.setImagesToPreload(imageToPreload);
    }
Gaëtan Renaudeau's avatar
WIP  
Gaëtan Renaudeau committed
72

Gaëtan Renaudeau's avatar
WIP  
Gaëtan Renaudeau committed
73 74 75 76
    @Override
    public String getName() {
        return REACT_CLASS;
    }
Gaëtan Renaudeau's avatar
Gaëtan Renaudeau committed
77

Gaëtan Renaudeau's avatar
WIP  
Gaëtan Renaudeau committed
78 79
    @Override
    public GLCanvas createViewInstance (ThemedReactContext context) {
80 81 82 83 84 85
        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
86
    }
Gaëtan Renaudeau's avatar
Gaëtan Renaudeau committed
87

88 89 90 91 92 93 94 95 96
    @Override
    public void receiveCommand(
            GLCanvas canvas,
            int commandType,
            @Nullable ReadableArray args) {
        Assertions.assertNotNull(canvas);
        Assertions.assertNotNull(args);
        switch (commandType) {
            case COMMAND_CAPTURE_FRAME: {
97
                canvas.requestCaptureFrame(CaptureConfig.fromMap(args.getMap(0)));
98 99 100 101 102 103 104 105 106 107
                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
108 109 110
    @Override
    public @Nullable Map getExportedCustomDirectEventTypeConstants() {
        return MapBuilder.of(
111 112
                "captureFrame",
                MapBuilder.of("registrationName", "onGLCaptureFrame"),
Gaëtan Renaudeau's avatar
Gaëtan Renaudeau committed
113
                "load",
114
                MapBuilder.of("registrationName", "onGLLoad"),
Gaëtan Renaudeau's avatar
Gaëtan Renaudeau committed
115
                "progress",
116
                MapBuilder.of("registrationName", "onGLProgress")
Gaëtan Renaudeau's avatar
Gaëtan Renaudeau committed
117 118
        );
    }
119 120 121 122 123 124 125

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