NativeScript / canvas

Apache License 2.0
88 stars 18 forks source link

Documentation #24

Open nikkolai14 opened 3 years ago

nikkolai14 commented 3 years ago

Any documentation on how to use this plugin?

triniwiz commented 3 years ago

Docs coming soon but you can get started with the canvas with the following

ns plugin add @nativescript/canvas

IMPORTANT: ensure you include xmlns:canvas="@nativescript/canvas" on the Page element for core {N}

Using Core {N}

<canvas:Canvas id="canvas" width="100%" height="100%" ready="canvasReady"/>

For all the other flavors you need to register the element

Angular

import { CanvasModule } from '@nativescript/canvas/angular';

@NgModule({
    imports: [
    CanvasModule
    ],
    declarations: [
        AppComponent
    ],
    bootstrap: [AppComponent]
})

Vue

import { Vue } from 'nativescript-vue';
import Canvas from '@nativescript/canvas/vue';
Vue.use(Canvas);

Then you can use either the 2D or WebGL APIs

2D

let ctx;
let canvas;
export function canvasReady(args) {
    console.log('canvas ready');
    canvas = args.object;
    console.log(canvas);
    ctx = canvas.getContext('2d');
    ctx.fillStyle = 'green';
    ctx.fillRect(10, 10, 150, 100);
}

WebGL

let gl;
let canvas;
export function canvasReady(args) {
    console.log('canvas ready');
    canvas = args.object;
    gl = canvas.getContext('webgl'); // 'webgl' || 'webgl2'
    gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight);
    // Set the clear color to darkish green.
    gl.clearColor(0.0, 0.5, 0.0, 1.0);
    // Clear the context with the newly set color. This is
    // the function call that actually does the drawing.
    gl.clear(gl.COLOR_BUFFER_BIT);
}

Using other libs is possible with the @nativescript/canvas-polyfill it helps fill in the missing pieces in the dom and {N} it's not perfect so feel free to open an issue if something is missing. When planning to use another canvas lib it always safe to require('@nativescript/canvas-polyfill') early in the app boot e.g app.ts/main.ts so it will setup the the needed APIs also some of those libs usually do some checks early API checks.

So one could get let's say babylonjs working by installing the @nativescript/canvas , @nativescript/canvas-polyfill and the babylonjs package an simply using require('@nativescript/canvas-polyfill') in the app.ts then pass the gl context to the constructor.

Another example one could using Chartjs similar to the babylonjs setup but instead of passing a gl context to the construtor you would pass the 2d context

There are a few libs that have been updated to help make thing much easier

@nativescript/canvas-phaser-ce .. phaser-ce examples @nativescript/canvas-phaser .. phaser examples @nativescript/canvas-three .. three examples @nativescript/canvas-pixi .. examples

nikkolai14 commented 3 years ago

@triniwiz thanks for the effort team!

cgo123 commented 3 years ago

in Angular there is no Page-Element? What's with Angular?

IMPORTANT: ensure you include xmlns:canvas="@nativescript/canvas" on the Page element for core {N}

triniwiz commented 3 years ago

For angular it would be as follow

import { CanvasModule } from '@nativescript/canvas/angular';

@NgModule({
    imports: [
    CanvasModule
    ],
    declarations: [
        AppComponent
    ],
    bootstrap: [AppComponent]
})
<Canvas #canvas width="100%" height="100%" (ready)="canvasReady($event)"/>
Kurikania commented 2 years ago

There are a few libs that have been updated to help make thing much easier

@nativescript/canvas-phaser-ce .. phaser-ce examples @nativescript/canvas-phaser .. phaser examples @nativescript/canvas-three .. three examples @nativescript/canvas-pixi .. examples

I've tried to start a canvas-phaser and a canvas-phaser-ce demo but I couldn't get what steps I have to perform in order to do that. I hope it will be clarified in the docs.