canvas icon indicating copy to clipboard operation
canvas copied to clipboard

Documentation

Open nikkolai14 opened this issue 4 years ago • 5 comments

Any documentation on how to use this plugin?

nikkolai14 avatar Apr 03 '21 12:04 nikkolai14

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

triniwiz avatar Apr 03 '21 18:04 triniwiz

@triniwiz thanks for the effort team!

nikkolai14 avatar Apr 04 '21 13:04 nikkolai14

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}

cgo123 avatar Oct 20 '21 17:10 cgo123

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)"/>

triniwiz avatar Oct 20 '21 18:10 triniwiz

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.

Kurikania avatar Apr 07 '22 06:04 Kurikania