use super::*;
use day_toolkit_material::{AHandle, Material, java};
use day_spec::NodeId;
day_toolkit_material::java_class! {
DayCamera => dev.daybrite.day.piece.camera.DayCamera,
methods {
static fn makeCamera(id: jlong, facing: jint, active: jboolean) -> android.view.View,
static fn cameraCommand(view: android.view.View, cmd: jint, arg: jint),
static fn releaseCamera(view: android.view.View),
},
}
const CMD_START: i32 = 0;
const CMD_STOP: i32 = 1;
const CMD_CAPTURE: i32 = 2;
const CMD_FACING: i32 = 3;
fn make(_backend: &mut Material, p: &CameraProps, id: NodeId) -> AHandle {
let (facing, active) = (p.facing.code(), p.active);
day_toolkit_material::realize("camera", |env| {
DayCamera::makeCamera(env, id.0 as i64, facing, active)
})
}
fn update(_backend: &mut Material, h: &AHandle, patch: &CameraPatch) {
let (cmd, arg) = match patch {
CameraPatch::Start => (CMD_START, 0),
CameraPatch::Stop => (CMD_STOP, 0),
CameraPatch::Capture => (CMD_CAPTURE, 0),
CameraPatch::Facing(f) => (CMD_FACING, f.code()),
CameraPatch::Surface(_) => return,
};
java(|env| DayCamera::cameraCommand(env, h.0.as_obj(), cmd, arg));
}
fn release(_backend: &mut Material, h: &AHandle) {
java(|env| DayCamera::releaseCamera(env, h.0.as_obj()));
}
day_pieces::renderer!(day_toolkit_material::RENDERERS, Material,
kind: KIND, props: CameraProps, patch: CameraPatch, make: make, update: update,
measure: day_pieces::fill_measure, release: release);