Internet‎ > ‎Google‎ > ‎Google Web Toolkit‎ > ‎

Building HTML 5 Canvas Class in GWT

HTML 5 CANVAS CLASS

package com.skj.client;

import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.user.client.ui.* ;

class Canvas
{
private JavaScriptObject ctx ; // Stands for context of Canvas
private JavaScriptObject element ; // Stands for DOM element
public Canvas(int width, int height, Engine engine)
{
createCanvas(width, height,engine) ;
}
// 1
public native void createCanvas(int width, int height, Engine engine)
/*-{
var w = width ;
var h = height ;
  var c = $doc.createElement('canvas') ;
            c.setAttribute("id", "canvas") ;
            
            c.setAttribute("width", w) ;
            c.setAttribute("height", h) ;
            
            $doc.body.appendChild(c) ;
 
  ctx = $doc.getElementById('canvas').getContext('2d');
            
            // WINDOW KEYBOARD EVENTS
            
            // KEYDOWN - Completed
            $wnd.onkeydown = function(event)
            {
             var source = event.which ;
         engine.@com.skj.client.Engine::outputPress(III)(source, -1, -1) ;
            } ;
            
            // KEYPRESS - Completed
            $wnd.onkeypress = function(event)
            {
             // Doing same work as onkeydown but only small letter coming instead of capital
         //var source = event.which ;
         //engine.@com.skj.client.Engine::outputPress(III)(source, -1, -1) ;
            } ;
            
            // KEYUP - Completed
            $wnd.onkeyup = function(event)
            {
         var source = event.which ;
         engine.@com.skj.client.Engine::outputRelease(III)(source, -1, -1) ;
            } ;
            
            // CANVAS MOUSE EVENTS
            
            // MOUSE OVER
            c.onmouseover = function(event)
            {
         var source = event.button ;
             var mouseX = event.clientX ;
             var mouseY = event.clientY ;
            
         engine.@com.skj.client.Engine::outputEnter(III)(source, mouseX,mouseY) ;
            } ;
            
            // MOUSE OUT
            c.onmouseout = function(event)
            {
         var source = event.button ;
             var mouseX = event.clientX ;
             var mouseY = event.clientY ;
            
         engine.@com.skj.client.Engine::outputExit(III)(source, mouseX,mouseY) ;
            } ;
            
            // MOUSE DOWN - Completed
            c.onmousedown = function(event)
            {
             var source = event.button ;
             var mouseX = event.clientX ;
             var mouseY = event.clientY ;
            
         engine.@com.skj.client.Engine::outputPress(III)(source, mouseX,mouseY) ;
            } ;
            
            // MOUSE UP - Completed
            c.onmouseup = function(event)
            {
             var source = event.button ;
         var mouseX = event.clientX ;
             var mouseY = event.clientY ;
            
         engine.@com.skj.client.Engine::outputRelease(III)(source, mouseX,mouseY) ;
            } ;
            
            // ON CLICK - Completed
            c.onclick = function(event)
            {
             var source = event.button ;
         var mouseX = event.clientX ;
             var mouseY = event.clientY ;
            
         engine.@com.skj.client.Engine::outputClick(III)(source, mouseX,mouseY) ;
            } ;
            
            // ON DOUBLE CLICK - Completed
            c.ondblclick = function(event)
            {
             var source = event.button ;
         var mouseX = event.clientX ;
             var mouseY = event.clientY ;
            
         engine.@com.skj.client.Engine::outputDouble_Click(III)(source, mouseX,mouseY) ;
            } ;
            
            // MOUSE MOVE - Completed
            c.onmousemove = function(event)
            {
             var source = event.button ;
         var mouseX = event.clientX ;
             var mouseY = event.clientY ;
            
         engine.@com.skj.client.Engine::outputMove(III)(source, mouseX,mouseY) ;
            } ;
}-*/;
// 2 - push state of canvas on state stack
public native void save()
/*-{  
  ctx.save() ;
}-*/;
// 3 - pop state stack of canvas and restore state
public native void restore()
/*-{  
  ctx.restore() ;
}-*/;
// 4 - transformations (default transform is the identity matrix)
public native void scale(double x, double y)
/*-{
  ctx.scale(x,y) ;
}-*/;
// 5 - Rotate
public native void rotate(double angle)
/*-{  
ctx.rotate();
}-*/;
// 6 - Translate
public native void translate(double x,  double y)
/*-{  
ctx.translate(x,y) ;
}-*/;
// 7 - Transform
public native void transform(double m11,  double m12,  double m21,  double m22,  double dx,  double dy)
/*-{  
ctx.transform(m11,m12m,m21,m22,dx,dy) ;
}-*/;
// 8 - Set Transfrom
public native void setTransform(double m11,  double m12,  double m21,  double m22,  double dx,  double dy)
/*-{  
ctx.setTransform(m11,m12,m21,m22,dx,dy) ;
}-*/;
// 9 - Linear Gradient
public native void createLinearGradient(double x0,  double y0,  double x1,  double y1)
/*-{  
context.createLinearGradient(x0, y0, x1, y1) ;
}-*/;
// 10 - Radial Gradient
public native void createRadialGradient(double x0,  double y0,  double r0,  double x1,  double y1,  double r1)
/*-{  
context.createRadialGradient(x0, y0, r0, x1, y1, r1) ;
}-*/;
// 11 - Image Pattern
public native void createPattern(Image image,  String repetition)
/*-{  
context.createPattern(image, repetition) ;
}-*/;
// 12 - Clear Rectangle
public native void clearRect(double x,  double y,  double w,  double h)
/*-{  
ctx.clearRect(x, y, w, h) ;
}-*/;
// 14 - Stroke Rectangle
public native void strokeRect(double x,  double y,  double w,  double h)
/*-{  
ctx.strokeRect(x, y, w, h) ;
}-*/;
// 15 - Line Begin Path
public native void beginPath()
/*-{  
ctx.beginPath() ;
}-*/;
// 16 - Close Path
public native void closePath()
/*-{  
ctx.closePath() ;
}-*/;
// 17 - Move to
public native void moveTo(double x,  double y)
/*-{  
ctx.moveTo(x, y) ;
}-*/;
// 18 - Line to
public native void lineTo(double x,  double y)
/*-{  
ctx.lineTo(x, y) ;
}-*/;
// 19 - Quadratic Curve
public native void quadraticCurveTo(double cpx,  double cpy,  double x,  double y)
/*-{  
ctx.quadraticCurveTo(cpx, cpy, x, y) ;
}-*/;
// 20 - Bezier Curve
public native void bezierCurveTo(double cp1x,  double cp1y,  double cp2x,  double cp2y,  double x,  double y)
/*-{  
ctx.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) ;
}-*/;
// 21 - Arc To
public native void arcTo(double x1,  double y1,  double x2,  double y2,  double radius)
/*-{  
ctx.arcTo(x1, y1, x2, y2, radius) ;
}-*/;
// 22 - Rectangle
public native void rect(double x,  double y,  double w,  double h)
/*-{  
ctx.rect(x, y, w, h) ;
}-*/;
// 23
public native void arc(double x,  double y,  double radius,  double startAngle,  double endAngle,  double anticlockwise)
/*-{
if(anticlockwise == 0)
{
ctx.arc(x, y, radius, startAngle, endAngle, false) ;
}
else
{
ctx.arc(x, y, radius, startAngle, endAngle, true) ;
}
}-*/;
// 24 - Fill
public native void fill()
/*-{  
ctx.fill() ;
}-*/;
// 25 - Stroke
public native void stroke()
/*-{  
ctx.stroke() ;
}-*/;
// 26
public native void clip()
/*-{  
ctx.clip() ;
}-*/;
// 27
public native void isPointInPath(double x, double y)
/*-{  
ctx.isPointInPath(x, y) ;
}-*/;
// 28
public native void drawFocusRing(JavaScriptObject element,  double xCaret,  double yCaret)
/*-{  
shouldDraw = ctx.drawFocusRing(element, x, y, [ canDrawCustom ]) ;
}-*/;
// 29
public native void drawFocusRing(JavaScriptObject element,  double xCaret,  double yCaret, double canDrawCustom)
/*-{  
}-*/;
// 30 - Fill Text
public native void fillText(String text,  double x,  double y)
/*-{  
ctx.fillText(text, x, y) ;
}-*/;
// 31 - Fill Text with Max Width
public native void fillText(String text,  double x,  double y, double maxWidth)
/*-{  
ctx.fillText(text, x, y , maxWidth) ;
}-*/;
// 32 - Stroke Text
public native void strokeText(String text,  double x,  double y)
/*-{  
ctx.strokeText(text, x, y ) ;
}-*/;
// 33 - Stroke Text with Max Width
public native void strokeText(String text,  double x,  double y,  double maxWidth)
/*-{  
ctx.strokeText(text, x, y, maxWidth ) ;
}-*/;
// 34 - Drawing Images
public native void drawImage(JavaScriptObject image,  double dx, double dy)
/*-{  
ctx.drawImage(image, dx, dy) ;
}-*/;
// 35 - Drawing Images
public native void drawImage(JavaScriptObject image, double dx,  double dy, double dw,  double dh)
/*-{  
ctx.drawImage(image, dx, dy, dw, dh) ;
}-*/;
// 36 - drawing images
public native void drawImage(JavaScriptObject image, double sx,  double sy,  double sw,  double sh,  double dx,  double dy,  double dw,  double dh)
/*-{
var maxW = image.width ;
var maxH = image.height ;
if(sx + sw > maxW)
{
sw = maxW - sx ;
}
if(sy + sh > maxH)
{
sh = maxH - sy ;
}
ctx.drawImage(image, sx,  sy,  sw,  sh,  dx,  dy,  dw,  dh) ;
}-*/;
// 37 - drawing images
public native void drawImage(Canvas canvas,  double dx, double dy)
/*-{  
}-*/;
// 38 - drawing Canvas
public native void drawCanvas(Canvas canvas, double dx,  double dy)
/*-{  
}-*/;
// 39 - drawing Video
public native void drawVideo(Video video, double dx,  double dy)
/*-{  
}-*/;
// 40 - drawing images
public native void drawImage(Canvas canvas, double dx,  double dy, double dw,  double dh)
/*-{  
}-*/;
// 41 - drawing images Video
public native void drawImage(Video video, double dx,  double dy, double dw,  double dh)
/*-{  
}-*/;
// 42 - drawing images
public native void drawImage(Canvas canvas, double sx,  double sy,  double sw,  double sh,  double dx,  double dy,  double dw,  double dh)
/*-{  
}-*/;
// 43 - drawing images Video
public native void drawImage(Video video, double sx,  double sy,  double sw,  double sh,  double dx,  double dy,  double dw,  double dh)
/*-{  
}-*/;
// Java Method
public native void drawLine(double x1, double y1, double x2, double y2) 
/*-{
ctx.beginPath() ;
ctx.moveTo(x1 + 0.5,y1 + 0.5) ;
ctx.lineTo(x2 + 0.5,y2 + 0.5) ;
ctx.closePath() ;
ctx.stroke() ;
}-*/;
public native void drawOval(int x, int y, int width, int height)
/*-{
var radius = width / 2 ;
ctx.arc(x, y, radius, 0, 360, true) ;
ctx.stroke() ;
}-*/;
public native void drawRect(double x, double y, double width, double height, boolean color, double r, double g, double b)
/*-{
if(color == true)
{
ctx.strokeStyle = "RGB(" + r + "," + g + "," + b + ")" ;
}
ctx.strokeRect(x - 0.5, y - 0.5 , width, height) ;
}-*/;
public native void drawRoundRect(double x, double y, double width, double height, double arcWidth, double arcHeight)
/*-{
//ctx.rect(x, y, w, h) ;
}-*/;
public native void fillOval(double x, double y, double width, double height) 
/*-{
//ctx.arc(x, y, radius, startAngle, endAngle, anticlockwise) ;
//ctx.fill();
}-*/;
public native void fillRect(double x, double y, double width, double height, boolean color, double r, double g, double b) 
/*-{
if(color == true)
{
ctx.fillStyle = "RGB(" + r + "," + g + "," + b + ")" ;
}
ctx.fillRect(x - 0.5, y - 0.5, width, height) ;
}-*/;
public native void fillRoundRect(double x, double y, double width, double height, double arcWidth, double arcHeight)
/*-{
//ctx.fillStyle = "blue" ;
//ctx.fillRect(x, y, w, h) ;
}-*/;
public native void setClip(double x, double y, double width, double height) 
/*-{
}-*/;
public native void drawFrame(Image image, double xOffset, double yOffset, double x,  double y, double w,  double h)
/*-{  
ctx.drawImage(image, xOffset, yOffset, w, h, x, y, w, h) ;
}-*/;
public native JavaScriptObject createImage(String uri)
/*-{  
  var img = new Image(); // Create new Image object
img.src = uri ; // Set source path
return img ;
}-*/;
public native JavaScriptObject createVideo(String uri)
/*-{  
  var video = new Image(); // Create new Image object
video.src = uri ; // Set source path
return img ;
}-*/;
public native JavaScriptObject createAudio(String uri)
/*-{  
  var img = new Image(); // Create new Image object
img.src = uri ; // Set source path
return img ;
}-*/;
}

/* Useful Facts
+ JSNI stands for JavaScript Native Interface
+ Window can be accessed  JSNI within GWT using $wnd name
+ Document can be accessed  JSNI within GWT using $doc name
*/

INITIALIZING the above defined CANVAS class object from some other class
canvas = new Canvas(maxX,maxY, this) ;
Comments