GLCanvasManager.java 3.97 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;

Gaëtan Renaudeau's avatar
WIP  
Gaëtan Renaudeau committed
30 31 32 33
    @ReactProp(name="nbContentTextures")
    public void setNbContentTextures (GLCanvas view, int nbContentTextures) {
        view.setNbContentTextures(nbContentTextures);
    }
34

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

Gaëtan Renaudeau's avatar
WIP  
Gaëtan Renaudeau committed
40 41 42 43
    @ReactProp(name="opaque")
    public void setOpaque (GLCanvas view, boolean opaque) {
        view.setOpaque(opaque);
    }
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 55
    @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
56
    }
Gaëtan Renaudeau's avatar
WIP  
Gaëtan Renaudeau committed
57

58
    @ReactProp(name = "data")
Gaëtan Renaudeau's avatar
WIP  
Gaëtan Renaudeau committed
59 60 61
    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
62

Gaëtan Renaudeau's avatar
WIP  
Gaëtan Renaudeau committed
63 64 65 66
    @ReactProp(name="imagesToPreload")
    public void setImagesToPreload (GLCanvas view, @Nullable ReadableArray imageToPreload) {
        view.setImagesToPreload(imageToPreload);
    }
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
    @Override
    public String getName() {
        return REACT_CLASS;
    }
Gaëtan Renaudeau's avatar
Gaëtan Renaudeau committed
72

Gaëtan Renaudeau's avatar
WIP  
Gaëtan Renaudeau committed
73 74
    @Override
    public GLCanvas createViewInstance (ThemedReactContext context) {
75 76 77 78 79 80
        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
81
    }
Gaëtan Renaudeau's avatar
Gaëtan Renaudeau committed
82

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

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