You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@devicemap.apache.org by wk...@apache.org on 2016/06/19 21:56:47 UTC

svn commit: r1749209 [1/7] - in /devicemap/trunk/examples/1.0/java/gwtcanvas: ./ .gwt/ .settings/ src/ src/org/ src/org/apache/ src/org/apache/devicemap/ src/org/apache/devicemap/gwt/ src/org/apache/devicemap/gwt/gwtcanvasdemo/ src/org/apache/devicemap...

Author: wkeil
Date: Sun Jun 19 21:56:46 2016
New Revision: 1749209

URL: http://svn.apache.org/viewvc?rev=1749209&view=rev
Log:
DMAP-153: Add a demo for HTML5 Canvas 

Task-Url: https://issues.apache.org/jira/browse/DMAP-153

Added:
    devicemap/trunk/examples/1.0/java/gwtcanvas/   (with props)
    devicemap/trunk/examples/1.0/java/gwtcanvas/.classpath
    devicemap/trunk/examples/1.0/java/gwtcanvas/.gitignore
    devicemap/trunk/examples/1.0/java/gwtcanvas/.gwt/
    devicemap/trunk/examples/1.0/java/gwtcanvas/.gwt/.gwt-log
    devicemap/trunk/examples/1.0/java/gwtcanvas/.project
    devicemap/trunk/examples/1.0/java/gwtcanvas/.settings/
    devicemap/trunk/examples/1.0/java/gwtcanvas/.settings/com.google.gwt.eclipse.core.prefs
    devicemap/trunk/examples/1.0/java/gwtcanvas/.settings/org.eclipse.core.resources.prefs
    devicemap/trunk/examples/1.0/java/gwtcanvas/src/
    devicemap/trunk/examples/1.0/java/gwtcanvas/src/org/
    devicemap/trunk/examples/1.0/java/gwtcanvas/src/org/apache/
    devicemap/trunk/examples/1.0/java/gwtcanvas/src/org/apache/devicemap/
    devicemap/trunk/examples/1.0/java/gwtcanvas/src/org/apache/devicemap/gwt/
    devicemap/trunk/examples/1.0/java/gwtcanvas/src/org/apache/devicemap/gwt/gwtcanvasdemo/
    devicemap/trunk/examples/1.0/java/gwtcanvas/src/org/apache/devicemap/gwt/gwtcanvasdemo/DmapGwtCanvas.gwt.xml
    devicemap/trunk/examples/1.0/java/gwtcanvas/src/org/apache/devicemap/gwt/gwtcanvasdemo/client/
    devicemap/trunk/examples/1.0/java/gwtcanvas/src/org/apache/devicemap/gwt/gwtcanvasdemo/client/Ball.java
    devicemap/trunk/examples/1.0/java/gwtcanvas/src/org/apache/devicemap/gwt/gwtcanvasdemo/client/BallGroup.java
    devicemap/trunk/examples/1.0/java/gwtcanvas/src/org/apache/devicemap/gwt/gwtcanvasdemo/client/DmapGwtCanvas.java
    devicemap/trunk/examples/1.0/java/gwtcanvas/src/org/apache/devicemap/gwt/gwtcanvasdemo/client/Lens.java
    devicemap/trunk/examples/1.0/java/gwtcanvas/src/org/apache/devicemap/gwt/gwtcanvasdemo/client/Logo.java
    devicemap/trunk/examples/1.0/java/gwtcanvas/src/org/apache/devicemap/gwt/gwtcanvasdemo/client/LogoGroup.java
    devicemap/trunk/examples/1.0/java/gwtcanvas/src/org/apache/devicemap/gwt/gwtcanvasdemo/client/SpringObject.java
    devicemap/trunk/examples/1.0/java/gwtcanvas/src/org/apache/devicemap/gwt/gwtcanvasdemo/client/Vector.java
    devicemap/trunk/examples/1.0/java/gwtcanvas/war/
    devicemap/trunk/examples/1.0/java/gwtcanvas/war/DmapGwtCanvas.css
    devicemap/trunk/examples/1.0/java/gwtcanvas/war/DmapGwtCanvas.html
    devicemap/trunk/examples/1.0/java/gwtcanvas/war/WEB-INF/   (with props)
    devicemap/trunk/examples/1.0/java/gwtcanvas/war/WEB-INF/.gitignore
    devicemap/trunk/examples/1.0/java/gwtcanvas/war/WEB-INF/lib/
    devicemap/trunk/examples/1.0/java/gwtcanvas/war/WEB-INF/lib/gwt-servlet.jar   (with props)
    devicemap/trunk/examples/1.0/java/gwtcanvas/war/WEB-INF/web.xml
    devicemap/trunk/examples/1.0/java/gwtcanvas/war/gwtcanvasdemo/
    devicemap/trunk/examples/1.0/java/gwtcanvas/war/gwtcanvasdemo/1F3415A1E505353447A37AC06942BACA.cache.html
    devicemap/trunk/examples/1.0/java/gwtcanvas/war/gwtcanvasdemo/7FF5D1B42B099CE211B37843C6F0C06D.cache.html
    devicemap/trunk/examples/1.0/java/gwtcanvas/war/gwtcanvasdemo/ADBF2F8AC80D342B0419E68C9ED5DE95.cache.html
    devicemap/trunk/examples/1.0/java/gwtcanvas/war/gwtcanvasdemo/CA46384733F54DD5934866FB0CCC0B18.cache.html
    devicemap/trunk/examples/1.0/java/gwtcanvas/war/gwtcanvasdemo/E8CB2998FA92C29DF73EAF12F9511C08.cache.html
    devicemap/trunk/examples/1.0/java/gwtcanvas/war/gwtcanvasdemo/clear.cache.gif   (with props)
    devicemap/trunk/examples/1.0/java/gwtcanvas/war/gwtcanvasdemo/gwt/
    devicemap/trunk/examples/1.0/java/gwtcanvas/war/gwtcanvasdemo/gwt/standard/
    devicemap/trunk/examples/1.0/java/gwtcanvas/war/gwtcanvasdemo/gwt/standard/images/
    devicemap/trunk/examples/1.0/java/gwtcanvas/war/gwtcanvasdemo/gwt/standard/images/corner.png   (with props)
    devicemap/trunk/examples/1.0/java/gwtcanvas/war/gwtcanvasdemo/gwt/standard/images/corner_ie6.png   (with props)
    devicemap/trunk/examples/1.0/java/gwtcanvas/war/gwtcanvasdemo/gwt/standard/images/hborder.png   (with props)
    devicemap/trunk/examples/1.0/java/gwtcanvas/war/gwtcanvasdemo/gwt/standard/images/hborder_ie6.png   (with props)
    devicemap/trunk/examples/1.0/java/gwtcanvas/war/gwtcanvasdemo/gwt/standard/images/ie6/
    devicemap/trunk/examples/1.0/java/gwtcanvas/war/gwtcanvasdemo/gwt/standard/images/ie6/corner_dialog_topleft.png   (with props)
    devicemap/trunk/examples/1.0/java/gwtcanvas/war/gwtcanvasdemo/gwt/standard/images/ie6/corner_dialog_topright.png   (with props)
    devicemap/trunk/examples/1.0/java/gwtcanvas/war/gwtcanvasdemo/gwt/standard/images/ie6/hborder_blue_shadow.png   (with props)
    devicemap/trunk/examples/1.0/java/gwtcanvas/war/gwtcanvasdemo/gwt/standard/images/ie6/hborder_gray_shadow.png   (with props)
    devicemap/trunk/examples/1.0/java/gwtcanvas/war/gwtcanvasdemo/gwt/standard/images/ie6/vborder_blue_shadow.png   (with props)
    devicemap/trunk/examples/1.0/java/gwtcanvas/war/gwtcanvasdemo/gwt/standard/images/ie6/vborder_gray_shadow.png   (with props)
    devicemap/trunk/examples/1.0/java/gwtcanvas/war/gwtcanvasdemo/gwt/standard/images/splitPanelThumb.png   (with props)
    devicemap/trunk/examples/1.0/java/gwtcanvas/war/gwtcanvasdemo/gwt/standard/images/vborder.png   (with props)
    devicemap/trunk/examples/1.0/java/gwtcanvas/war/gwtcanvasdemo/gwt/standard/images/vborder_ie6.png   (with props)
    devicemap/trunk/examples/1.0/java/gwtcanvas/war/gwtcanvasdemo/gwt/standard/standard.css
    devicemap/trunk/examples/1.0/java/gwtcanvas/war/gwtcanvasdemo/gwt/standard/standard_rtl.css
    devicemap/trunk/examples/1.0/java/gwtcanvas/war/gwtcanvasdemo/gwtcanvasdemo.nocache.js
    devicemap/trunk/examples/1.0/java/gwtcanvas/war/gwtcanvasdemo/hosted.html
    devicemap/trunk/examples/1.0/java/gwtcanvas/war/gwtlogo.png   (with props)
    devicemap/trunk/examples/1.0/java/gwtcanvas/war/gwtlogo40_40.png   (with props)

Propchange: devicemap/trunk/examples/1.0/java/gwtcanvas/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Sun Jun 19 21:56:46 2016
@@ -0,0 +1 @@
+gwt-unitCache

Added: devicemap/trunk/examples/1.0/java/gwtcanvas/.classpath
URL: http://svn.apache.org/viewvc/devicemap/trunk/examples/1.0/java/gwtcanvas/.classpath?rev=1749209&view=auto
==============================================================================
--- devicemap/trunk/examples/1.0/java/gwtcanvas/.classpath (added)
+++ devicemap/trunk/examples/1.0/java/gwtcanvas/.classpath Sun Jun 19 21:56:46 2016
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="com.google.gwt.eclipse.core.GWT_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="lib" path="C:/Users/Werner/.m2/repository/org/apache/devicemap/devicemap-client/1.2.0-SNAPSHOT/devicemap-client-1.2.0-SNAPSHOT.jar"/>
+	<classpathentry kind="output" path="war/WEB-INF/classes"/>
+</classpath>

Added: devicemap/trunk/examples/1.0/java/gwtcanvas/.gitignore
URL: http://svn.apache.org/viewvc/devicemap/trunk/examples/1.0/java/gwtcanvas/.gitignore?rev=1749209&view=auto
==============================================================================
--- devicemap/trunk/examples/1.0/java/gwtcanvas/.gitignore (added)
+++ devicemap/trunk/examples/1.0/java/gwtcanvas/.gitignore Sun Jun 19 21:56:46 2016
@@ -0,0 +1,3 @@
+/.gwt/
+/.settings/
+/gwt-unitCache/

Added: devicemap/trunk/examples/1.0/java/gwtcanvas/.gwt/.gwt-log
URL: http://svn.apache.org/viewvc/devicemap/trunk/examples/1.0/java/gwtcanvas/.gwt/.gwt-log?rev=1749209&view=auto
==============================================================================
    (empty)

Added: devicemap/trunk/examples/1.0/java/gwtcanvas/.project
URL: http://svn.apache.org/viewvc/devicemap/trunk/examples/1.0/java/gwtcanvas/.project?rev=1749209&view=auto
==============================================================================
--- devicemap/trunk/examples/1.0/java/gwtcanvas/.project (added)
+++ devicemap/trunk/examples/1.0/java/gwtcanvas/.project Sun Jun 19 21:56:46 2016
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>dmap-gwtcanvas</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>com.google.gdt.eclipse.core.webAppProjectValidator</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>com.google.gwt.eclipse.core.gwtProjectValidator</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>com.google.gwt.eclipse.core.gwtNature</nature>
+	</natures>
+</projectDescription>

Added: devicemap/trunk/examples/1.0/java/gwtcanvas/.settings/com.google.gwt.eclipse.core.prefs
URL: http://svn.apache.org/viewvc/devicemap/trunk/examples/1.0/java/gwtcanvas/.settings/com.google.gwt.eclipse.core.prefs?rev=1749209&view=auto
==============================================================================
--- devicemap/trunk/examples/1.0/java/gwtcanvas/.settings/com.google.gwt.eclipse.core.prefs (added)
+++ devicemap/trunk/examples/1.0/java/gwtcanvas/.settings/com.google.gwt.eclipse.core.prefs Sun Jun 19 21:56:46 2016
@@ -0,0 +1,3 @@
+eclipse.preferences.version=1
+filesCopiedToWebInfLib=gwt-servlet.jar
+gwtCompileSettings=PGd3dC1jb21waWxlLXNldHRpbmdzPjxsb2ctbGV2ZWw+SU5GTzwvbG9nLWxldmVsPjxvdXRwdXQtc3R5bGU+T0JGVVNDQVRFRDwvb3V0cHV0LXN0eWxlPjxleHRyYS1hcmdzPjwhW0NEQVRBW11dPjwvZXh0cmEtYXJncz48dm0tYXJncz48IVtDREFUQVstWG14NTEybV1dPjwvdm0tYXJncz48ZW50cnktcG9pbnQtbW9kdWxlPmNvbS5nb29nbGUuZ3d0Lmd3dGNhbnZhc2RlbW8uR3d0Q2FudmFzRGVtbzwvZW50cnktcG9pbnQtbW9kdWxlPjwvZ3d0LWNvbXBpbGUtc2V0dGluZ3M+

Added: devicemap/trunk/examples/1.0/java/gwtcanvas/.settings/org.eclipse.core.resources.prefs
URL: http://svn.apache.org/viewvc/devicemap/trunk/examples/1.0/java/gwtcanvas/.settings/org.eclipse.core.resources.prefs?rev=1749209&view=auto
==============================================================================
--- devicemap/trunk/examples/1.0/java/gwtcanvas/.settings/org.eclipse.core.resources.prefs (added)
+++ devicemap/trunk/examples/1.0/java/gwtcanvas/.settings/org.eclipse.core.resources.prefs Sun Jun 19 21:56:46 2016
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8

Added: devicemap/trunk/examples/1.0/java/gwtcanvas/src/org/apache/devicemap/gwt/gwtcanvasdemo/DmapGwtCanvas.gwt.xml
URL: http://svn.apache.org/viewvc/devicemap/trunk/examples/1.0/java/gwtcanvas/src/org/apache/devicemap/gwt/gwtcanvasdemo/DmapGwtCanvas.gwt.xml?rev=1749209&view=auto
==============================================================================
--- devicemap/trunk/examples/1.0/java/gwtcanvas/src/org/apache/devicemap/gwt/gwtcanvasdemo/DmapGwtCanvas.gwt.xml (added)
+++ devicemap/trunk/examples/1.0/java/gwtcanvas/src/org/apache/devicemap/gwt/gwtcanvasdemo/DmapGwtCanvas.gwt.xml Sun Jun 19 21:56:46 2016
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 0.0.999//EN" "http://google-web-toolkit.googlecode.com/svn/tags/0.0.999/distro-source/core/src/gwt-module.dtd">
+<module rename-to='gwtcanvasdemo'>
+  <!-- Inherit the core Web Toolkit stuff.                        -->
+  <inherits name='com.google.gwt.user.User'/>
+
+  <!-- Inherit the default GWT style sheet.  You can change       -->
+  <!-- the theme of your GWT application by uncommenting          -->
+  <!-- any one of the following lines.                            -->
+  <inherits name='com.google.gwt.user.theme.standard.Standard'/>
+  <!-- <inherits name='com.google.gwt.user.theme.chrome.Chrome'/> -->
+  <!-- <inherits name='com.google.gwt.user.theme.dark.Dark'/>     -->
+
+  <!-- Other module inherits                                      -->
+
+  <!-- Specify the app entry point class.                         -->
+  <entry-point class='org.apache.devicemap.gwt.gwtcanvasdemo.client.DmapGwtCanvas'/>
+
+  <!-- Specify the paths for translatable code                    -->
+  <source path='client'/>
+  <source path='shared'/>
+
+</module>

Added: devicemap/trunk/examples/1.0/java/gwtcanvas/src/org/apache/devicemap/gwt/gwtcanvasdemo/client/Ball.java
URL: http://svn.apache.org/viewvc/devicemap/trunk/examples/1.0/java/gwtcanvas/src/org/apache/devicemap/gwt/gwtcanvasdemo/client/Ball.java?rev=1749209&view=auto
==============================================================================
--- devicemap/trunk/examples/1.0/java/gwtcanvas/src/org/apache/devicemap/gwt/gwtcanvasdemo/client/Ball.java (added)
+++ devicemap/trunk/examples/1.0/java/gwtcanvas/src/org/apache/devicemap/gwt/gwtcanvasdemo/client/Ball.java Sun Jun 19 21:56:46 2016
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2016 Apache DeviceMap.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package org.apache.devicemap.gwt.gwtcanvasdemo.client;
+
+import com.google.gwt.canvas.dom.client.Context2d;
+import com.google.gwt.canvas.dom.client.CssColor;
+
+public class Ball extends SpringObject {
+  public CssColor color;
+  public double posZ, velZ, goalZ;
+  public double radius;
+  public Vector startPos;
+  public double startPosZ;
+  public double startRadius;
+
+  public Ball(Vector start, double startPosZ, double radius, CssColor color) {
+    super(start);
+    this.color = color;
+    this.posZ = startPosZ;
+    this.velZ = 0;
+    this.goalZ = startPosZ;
+    this.radius = radius;
+    this.startPos = new Vector(start);
+    this.startPosZ = startPosZ;
+    this.startRadius = radius;
+  }
+  
+  public Ball(double x, double y, double z, double radius, String color) {
+    this(new Vector(x, y), z, radius, CssColor.make(color));
+  }
+  
+  public void update() {
+    super.update();
+    
+    Vector dh = Vector.sub(startPos, pos);
+    double dist = dh.mag();
+    goalZ = dist / 100.0 + 1.0;
+    double dgZ = goalZ - posZ;
+    double aZ = dgZ * springStrength;
+    velZ += aZ;
+    velZ *= friction;
+    posZ += velZ;
+    
+    radius = startRadius * posZ;
+    radius = radius < 1 ? 1 : radius;
+  }
+  
+  public void draw(Context2d context) {
+    context.setFillStyle(color);
+    context.beginPath();
+    context.arc(pos.x, pos.y, radius, 0, Math.PI * 2.0, true);
+    context.closePath();
+    context.fill();
+  }
+}

Added: devicemap/trunk/examples/1.0/java/gwtcanvas/src/org/apache/devicemap/gwt/gwtcanvasdemo/client/BallGroup.java
URL: http://svn.apache.org/viewvc/devicemap/trunk/examples/1.0/java/gwtcanvas/src/org/apache/devicemap/gwt/gwtcanvasdemo/client/BallGroup.java?rev=1749209&view=auto
==============================================================================
--- devicemap/trunk/examples/1.0/java/gwtcanvas/src/org/apache/devicemap/gwt/gwtcanvasdemo/client/BallGroup.java (added)
+++ devicemap/trunk/examples/1.0/java/gwtcanvas/src/org/apache/devicemap/gwt/gwtcanvasdemo/client/BallGroup.java Sun Jun 19 21:56:46 2016
@@ -0,0 +1,141 @@
+/*
+ * Copyright 2016 Apache DeviceMap.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package org.apache.devicemap.gwt.gwtcanvasdemo.client;
+
+import com.google.gwt.canvas.dom.client.Context2d;
+
+import java.util.ArrayList;
+
+public class BallGroup {
+  final double width;
+  final double height;
+  Ball[] balls;
+  
+  public BallGroup(double width, double height) {
+    this.width = width;
+    this.height = height;
+    ArrayList<Ball> ballsArrayList = new ArrayList<Ball>(0);
+    
+    // init balls (values from Google's homepage)
+    ballsArrayList.add(new Ball(202, 78, 0, 9, "#ed9d33"));
+    ballsArrayList.add(new Ball(348, 83, 0, 9, "#d44d61"));
+    ballsArrayList.add(new Ball(256, 69, 0, 9, "#4f7af2"));
+    ballsArrayList.add(new Ball(214, 59, 0, 9, "#ef9a1e"));
+    ballsArrayList.add(new Ball(265, 36, 0, 9, "#4976f3"));
+    ballsArrayList.add(new Ball(300, 78, 0, 9, "#269230"));
+    ballsArrayList.add(new Ball(294, 59, 0, 9, "#1f9e2c"));
+    ballsArrayList.add(new Ball(45, 88, 0, 9, "#1c48dd"));
+    ballsArrayList.add(new Ball(268, 52, 0, 9, "#2a56ea"));
+    ballsArrayList.add(new Ball(73, 83, 0, 9, "#3355d8"));
+    ballsArrayList.add(new Ball(294, 6, 0, 9, "#36b641"));
+    ballsArrayList.add(new Ball(235, 62, 0, 9, "#2e5def"));
+    ballsArrayList.add(new Ball(353, 42, 0, 8, "#d53747"));
+    ballsArrayList.add(new Ball(336, 52, 0, 8, "#eb676f"));
+    ballsArrayList.add(new Ball(208, 41, 0, 8, "#f9b125"));
+    ballsArrayList.add(new Ball(321, 70, 0, 8, "#de3646"));
+    ballsArrayList.add(new Ball(8, 60, 0, 8, "#2a59f0"));
+    ballsArrayList.add(new Ball(180, 81, 0, 8, "#eb9c31"));
+    ballsArrayList.add(new Ball(146, 65, 0, 8, "#c41731"));
+    ballsArrayList.add(new Ball(145, 49, 0, 8, "#d82038"));
+    ballsArrayList.add(new Ball(246, 34, 0, 8, "#5f8af8"));
+    ballsArrayList.add(new Ball(169, 69, 0, 8, "#efa11e"));
+    ballsArrayList.add(new Ball(273, 99, 0, 8, "#2e55e2"));
+    ballsArrayList.add(new Ball(248, 120, 0, 8, "#4167e4"));
+    ballsArrayList.add(new Ball(294, 41, 0, 8, "#0b991a"));
+    ballsArrayList.add(new Ball(267, 114, 0, 8, "#4869e3"));
+    ballsArrayList.add(new Ball(78, 67, 0, 8, "#3059e3"));
+    ballsArrayList.add(new Ball(294, 23, 0, 8, "#10a11d"));
+    ballsArrayList.add(new Ball(117, 83, 0, 8, "#cf4055"));
+    ballsArrayList.add(new Ball(137, 80, 0, 8, "#cd4359"));
+    ballsArrayList.add(new Ball(14, 71, 0, 8, "#2855ea"));
+    ballsArrayList.add(new Ball(331, 80, 0, 8, "#ca273c"));
+    ballsArrayList.add(new Ball(25, 82, 0, 8, "#2650e1"));
+    ballsArrayList.add(new Ball(233, 46, 0, 8, "#4a7bf9"));
+    ballsArrayList.add(new Ball(73, 13, 0, 8, "#3d65e7"));
+    ballsArrayList.add(new Ball(327, 35, 0, 6, "#f47875"));
+    ballsArrayList.add(new Ball(319, 46, 0, 6, "#f36764"));
+    ballsArrayList.add(new Ball(256, 81, 0, 6, "#1d4eeb"));
+    ballsArrayList.add(new Ball(244, 88, 0, 6, "#698bf1"));
+    ballsArrayList.add(new Ball(194, 32, 0, 6, "#fac652"));
+    ballsArrayList.add(new Ball(97, 56, 0, 6, "#ee5257"));
+    ballsArrayList.add(new Ball(105, 75, 0, 6, "#cf2a3f"));
+    ballsArrayList.add(new Ball(42, 4, 0, 6, "#5681f5"));
+    ballsArrayList.add(new Ball(10, 27, 0, 6, "#4577f6"));
+    ballsArrayList.add(new Ball(166, 55, 0, 6, "#f7b326"));
+    ballsArrayList.add(new Ball(266, 88, 0, 6, "#2b58e8"));
+    ballsArrayList.add(new Ball(178, 34, 0, 6, "#facb5e"));
+    ballsArrayList.add(new Ball(100, 65, 0, 6, "#e02e3d"));
+    ballsArrayList.add(new Ball(343, 32, 0, 6, "#f16d6f"));
+    ballsArrayList.add(new Ball(59, 5, 0, 6, "#507bf2"));
+    ballsArrayList.add(new Ball(27, 9, 0, 6, "#5683f7"));
+    ballsArrayList.add(new Ball(233, 116, 0, 6, "#3158e2"));
+    ballsArrayList.add(new Ball(123, 32, 0, 6, "#f0696c"));
+    ballsArrayList.add(new Ball(6, 38, 0, 6, "#3769f6"));
+    ballsArrayList.add(new Ball(63, 62, 0, 6, "#6084ef"));
+    ballsArrayList.add(new Ball(6, 49, 0, 6, "#2a5cf4"));
+    ballsArrayList.add(new Ball(108, 36, 0, 6, "#f4716e"));
+    ballsArrayList.add(new Ball(169, 43, 0, 6, "#f8c247"));
+    ballsArrayList.add(new Ball(137, 37, 0, 6, "#e74653"));
+    ballsArrayList.add(new Ball(318, 58, 0, 6, "#ec4147"));
+    ballsArrayList.add(new Ball(226, 100, 0, 5, "#4876f1"));
+    ballsArrayList.add(new Ball(101, 46, 0, 5, "#ef5c5c"));
+    ballsArrayList.add(new Ball(226, 108, 0, 5, "#2552ea"));
+    ballsArrayList.add(new Ball(17, 17, 0, 5, "#4779f7"));
+    ballsArrayList.add(new Ball(232, 93, 0, 5, "#4b78f1"));
+    
+    // adjust sizes for this demo
+    double scale = 0.70f;
+    for (int i = ballsArrayList.size() - 1; i >= 0; i--) {
+      Ball ball = ballsArrayList.get(i);
+      ball.pos.x = width / 2 - scale * 180 + scale * ball.pos.x;
+      ball.pos.y = height / 2 - scale * 65 + scale * ball.pos.y;
+      ball.radius = scale * ball.radius;
+      ball.startRadius = scale * ball.startRadius;
+      ball.startPos.x = ball.pos.x;
+      ball.startPos.y = ball.pos.y;
+    }
+    
+    // add balls to array
+    balls = new Ball[ballsArrayList.size()];
+    for (int i = ballsArrayList.size() - 1; i >= 0; i--) {
+      Ball ball = ballsArrayList.get(i);
+      balls[i] = ball;
+    }
+  }
+  
+  public void update(double mouseX, double mouseY) {
+    Vector d = new Vector(0, 0);
+    for (int i = balls.length - 1; i >= 0; i--) {
+      Ball ball = balls[i];
+      d.x = mouseX - ball.pos.x;
+      d.y = mouseY - ball.pos.y;
+      if (d.magSquared() < 100*100) {
+        ball.goal = Vector.sub(ball.pos, d);
+      } else {
+        ball.goal.set(ball.startPos);
+      }
+      
+      ball.update();
+    }
+  }
+  
+  public void draw(Context2d context) {
+    for(int i = balls.length - 1; i >= 0; i--) {
+      balls[i].draw(context);
+    }
+  }
+}

Added: devicemap/trunk/examples/1.0/java/gwtcanvas/src/org/apache/devicemap/gwt/gwtcanvasdemo/client/DmapGwtCanvas.java
URL: http://svn.apache.org/viewvc/devicemap/trunk/examples/1.0/java/gwtcanvas/src/org/apache/devicemap/gwt/gwtcanvasdemo/client/DmapGwtCanvas.java?rev=1749209&view=auto
==============================================================================
--- devicemap/trunk/examples/1.0/java/gwtcanvas/src/org/apache/devicemap/gwt/gwtcanvasdemo/client/DmapGwtCanvas.java (added)
+++ devicemap/trunk/examples/1.0/java/gwtcanvas/src/org/apache/devicemap/gwt/gwtcanvasdemo/client/DmapGwtCanvas.java Sun Jun 19 21:56:46 2016
@@ -0,0 +1,155 @@
+/*
+ * Copyright 2016 Apache DeviceMap.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package org.apache.devicemap.gwt.gwtcanvasdemo.client;
+
+import com.google.gwt.canvas.client.Canvas;
+import com.google.gwt.canvas.dom.client.Context2d;
+import com.google.gwt.canvas.dom.client.CssColor;
+import com.google.gwt.core.client.EntryPoint;
+import com.google.gwt.dom.client.Touch;
+import com.google.gwt.event.dom.client.GestureStartEvent;
+import com.google.gwt.event.dom.client.GestureStartHandler;
+import com.google.gwt.event.dom.client.MouseMoveEvent;
+import com.google.gwt.event.dom.client.MouseMoveHandler;
+import com.google.gwt.event.dom.client.MouseOutEvent;
+import com.google.gwt.event.dom.client.MouseOutHandler;
+import com.google.gwt.event.dom.client.TouchEndEvent;
+import com.google.gwt.event.dom.client.TouchEndHandler;
+import com.google.gwt.event.dom.client.TouchMoveEvent;
+import com.google.gwt.event.dom.client.TouchMoveHandler;
+import com.google.gwt.user.client.Timer;
+import com.google.gwt.user.client.ui.Label;
+import com.google.gwt.user.client.ui.RootPanel;
+
+public class DmapGwtCanvas implements EntryPoint {
+  static final String holderId = "canvasholder";
+
+  static final String upgradeMessage = "Your browser does not support the HTML5 Canvas. Please upgrade your browser to view this demo.";
+
+  Canvas canvas;
+  Canvas backBuffer;
+  LogoGroup logoGroup;
+  BallGroup ballGroup;
+  Lens lens;
+  
+  // mouse positions relative to canvas
+  int mouseX, mouseY;
+
+  //timer refresh rate, in milliseconds
+  static final int refreshRate = 25;
+  
+  // canvas size, in px
+  static final int height = 400;
+  static final int width = 400;
+  
+  final CssColor redrawColor = CssColor.make("rgba(255,255,255,0.6)");
+  Context2d context;
+  Context2d backBufferContext;
+  
+  public void onModuleLoad() {
+    canvas = Canvas.createIfSupported();
+    backBuffer = Canvas.createIfSupported();
+    if (canvas == null) {
+      RootPanel.get(holderId).add(new Label(upgradeMessage));
+      return;
+    }
+
+    // init the canvases
+    canvas.setWidth(width + "px");
+    canvas.setHeight(height + "px");
+    canvas.setCoordinateSpaceWidth(width);
+    canvas.setCoordinateSpaceHeight(height);
+    backBuffer.setCoordinateSpaceWidth(width);
+    backBuffer.setCoordinateSpaceHeight(height);
+    RootPanel.get(holderId).add(canvas);
+    context = canvas.getContext2d();
+    backBufferContext = backBuffer.getContext2d();
+    
+    // init the objects
+    logoGroup = new LogoGroup(width, height, 18, 165);
+    ballGroup = new BallGroup(width, height);
+    lens = new Lens(35, 15, width, height, new Vector(320, 150), new Vector(1, 1));
+
+    // init handlers
+    initHandlers();
+    
+    // setup timer
+    final Timer timer = new Timer() {
+      @Override
+      public void run() {
+        doUpdate();
+      }
+    };
+    timer.scheduleRepeating(refreshRate);
+  }
+
+  void doUpdate() {
+    // update the back canvas
+    backBufferContext.setFillStyle(redrawColor);
+    backBufferContext.fillRect(0, 0, width, height);
+    logoGroup.update(mouseX, mouseY);
+    ballGroup.update(mouseX, mouseY);
+    logoGroup.draw(backBufferContext);
+    ballGroup.draw(backBufferContext);
+
+    // update the front canvas
+    lens.update();
+    lens.draw(backBufferContext, context);
+  }
+  
+  void initHandlers() {
+    canvas.addMouseMoveHandler(new MouseMoveHandler() {
+      public void onMouseMove(MouseMoveEvent event) {
+        mouseX = event.getRelativeX(canvas.getElement());
+        mouseY = event.getRelativeY(canvas.getElement());
+      }
+    });
+
+    canvas.addMouseOutHandler(new MouseOutHandler() {
+      public void onMouseOut(MouseOutEvent event) {
+        mouseX = -200;
+        mouseY = -200;
+      }
+    });
+
+    canvas.addTouchMoveHandler(new TouchMoveHandler() {
+      public void onTouchMove(TouchMoveEvent event) {
+        event.preventDefault();
+        if (event.getTouches().length() > 0) {
+          Touch touch = event.getTouches().get(0);
+          mouseX = touch.getRelativeX(canvas.getElement());
+          mouseY = touch.getRelativeY(canvas.getElement());
+        }
+        event.preventDefault();
+      }
+    });
+
+    canvas.addTouchEndHandler(new TouchEndHandler() {
+      public void onTouchEnd(TouchEndEvent event) {
+        event.preventDefault();
+        mouseX = -200;
+        mouseY = -200;
+      }
+    });
+
+    canvas.addGestureStartHandler(new GestureStartHandler() {
+      public void onGestureStart(GestureStartEvent event) {
+        event.preventDefault();
+      }
+    });
+  }
+}

Added: devicemap/trunk/examples/1.0/java/gwtcanvas/src/org/apache/devicemap/gwt/gwtcanvasdemo/client/Lens.java
URL: http://svn.apache.org/viewvc/devicemap/trunk/examples/1.0/java/gwtcanvas/src/org/apache/devicemap/gwt/gwtcanvasdemo/client/Lens.java?rev=1749209&view=auto
==============================================================================
--- devicemap/trunk/examples/1.0/java/gwtcanvas/src/org/apache/devicemap/gwt/gwtcanvasdemo/client/Lens.java (added)
+++ devicemap/trunk/examples/1.0/java/gwtcanvas/src/org/apache/devicemap/gwt/gwtcanvasdemo/client/Lens.java Sun Jun 19 21:56:46 2016
@@ -0,0 +1,113 @@
+/*
+ * Copyright 2016 Apache DeviceMap.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package org.apache.devicemap.gwt.gwtcanvasdemo.client;
+
+import com.google.gwt.canvas.dom.client.CanvasPixelArray;
+import com.google.gwt.canvas.dom.client.Context2d;
+import com.google.gwt.canvas.dom.client.CssColor;
+import com.google.gwt.canvas.dom.client.FillStrokeStyle;
+import com.google.gwt.canvas.dom.client.ImageData;
+import com.google.gwt.core.client.GWT;
+
+import java.util.ArrayList;
+
+public class Lens {
+  final int radius;
+  final int mag;
+  final int width; // maximum bounds of canvases
+  final int height;
+  
+  Vector pos;
+  Vector vel;
+  int[][] lensArray;
+  
+  // color of lens outline
+  final FillStrokeStyle strokeStyle = CssColor.make("#333300");
+  
+  public Lens(int radius, int mag, int w, int h, Vector initPos, Vector vel) {
+    this.radius = radius;
+    this.mag = mag;
+    this.width = w;
+    this.height = h;
+    this.pos = initPos;
+    this.vel = vel;
+    
+    // calculate lens array
+    ArrayList<int[]> calcLensArray = new ArrayList<int[]>(0);
+    int a, b;
+    double s = Math.sqrt(radius*radius - mag*mag);
+    for (int y = -radius; y < radius; y++) {
+      for (int x = -radius; x < radius; x++) {
+        if(x*x + y*y < s*s) {
+          double z = Math.sqrt(radius*radius - x*x - y*y);
+          a = (int)(x * mag / z + 0.5);
+          b = (int)(y * mag / z + 0.5);
+          int dstIdx = (y + radius) * 2 * radius + (x + radius);
+          int srcIdx = (b + radius) * 2 * radius + (a + radius);
+          calcLensArray.add(new int[]{dstIdx, srcIdx});
+        }
+      }
+    }
+    // store lens array in an int array
+    lensArray = new int[calcLensArray.size()][2];
+    for(int i = 0; i < calcLensArray.size(); i++) {
+      int[] fromTo = calcLensArray.get(i);
+      lensArray[i][0] = fromTo[0];
+      lensArray[i][1] = fromTo[1];
+    }
+  }
+  
+  public void update() {
+    if (pos.x + radius + vel.x > width || pos.x - radius + vel.x < 0) {
+      vel.x *= -1;
+    }
+    if (pos.y + radius + vel.y > height || pos.y - radius + vel.y < 0) {
+      vel.y *= -1;
+    }
+    
+    pos.x += vel.x;
+    pos.y += vel.y;
+  }
+  
+  public void draw(Context2d back, Context2d front) {
+    front.drawImage(back.getCanvas(), 0, 0);
+    
+    if (!GWT.isScript()) {
+      // in devmode this effect is slow so we disable it here
+    } else {
+      ImageData frontData = front.getImageData((int)(pos.x - radius), (int)(pos.y - radius), 2 * radius, 2 * radius);
+      CanvasPixelArray frontPixels = frontData.getData();
+      ImageData backData = back.getImageData((int)(pos.x - radius), (int)(pos.y - radius), 2 * radius, 2 * radius);
+      CanvasPixelArray backPixels = backData.getData();
+      int srcIdx, dstIdx;
+      for(int i = lensArray.length - 1; i >= 0 ; i--) {
+        dstIdx = 4 * lensArray[i][0];
+        srcIdx = 4 * lensArray[i][1];
+        frontPixels.set(dstIdx + 0, backPixels.get(srcIdx + 0));
+        frontPixels.set(dstIdx + 1, backPixels.get(srcIdx + 1));
+        frontPixels.set(dstIdx + 2, backPixels.get(srcIdx + 2));
+      }
+      front.putImageData(frontData, (int)(pos.x - radius), (int)(pos.y - radius));
+    }
+    
+    front.setStrokeStyle(strokeStyle);
+    front.beginPath();
+    front.arc(pos.x, pos.y, radius, 0, Math.PI * 2, true);
+    front.closePath();
+    front.stroke();
+  }
+}

Added: devicemap/trunk/examples/1.0/java/gwtcanvas/src/org/apache/devicemap/gwt/gwtcanvasdemo/client/Logo.java
URL: http://svn.apache.org/viewvc/devicemap/trunk/examples/1.0/java/gwtcanvas/src/org/apache/devicemap/gwt/gwtcanvasdemo/client/Logo.java?rev=1749209&view=auto
==============================================================================
--- devicemap/trunk/examples/1.0/java/gwtcanvas/src/org/apache/devicemap/gwt/gwtcanvasdemo/client/Logo.java (added)
+++ devicemap/trunk/examples/1.0/java/gwtcanvas/src/org/apache/devicemap/gwt/gwtcanvasdemo/client/Logo.java Sun Jun 19 21:56:46 2016
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2016 Apache DeviceMap.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package org.apache.devicemap.gwt.gwtcanvasdemo.client;
+
+import com.google.gwt.canvas.dom.client.Context2d;
+import com.google.gwt.dom.client.ImageElement;
+
+public class Logo extends SpringObject {
+  ImageElement image;
+  double rot;
+
+  Logo(ImageElement image) {
+    super(new Vector(0,0));
+    this.image = image;
+    this.rot = 0;
+  }
+  
+  void draw(Context2d context) {
+    context.save();
+    context.translate(this.pos.x, this.pos.y);
+    context.rotate(rot);
+    context.drawImage(image, 0, 0);
+    context.restore();
+  }
+}

Added: devicemap/trunk/examples/1.0/java/gwtcanvas/src/org/apache/devicemap/gwt/gwtcanvasdemo/client/LogoGroup.java
URL: http://svn.apache.org/viewvc/devicemap/trunk/examples/1.0/java/gwtcanvas/src/org/apache/devicemap/gwt/gwtcanvasdemo/client/LogoGroup.java?rev=1749209&view=auto
==============================================================================
--- devicemap/trunk/examples/1.0/java/gwtcanvas/src/org/apache/devicemap/gwt/gwtcanvasdemo/client/LogoGroup.java (added)
+++ devicemap/trunk/examples/1.0/java/gwtcanvas/src/org/apache/devicemap/gwt/gwtcanvasdemo/client/LogoGroup.java Sun Jun 19 21:56:46 2016
@@ -0,0 +1,99 @@
+/*
+ * Copyright 2016 Apache DeviceMap.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package org.apache.devicemap.gwt.gwtcanvasdemo.client;
+
+import com.google.gwt.canvas.dom.client.Context2d;
+import com.google.gwt.dom.client.ImageElement;
+import com.google.gwt.event.dom.client.LoadEvent;
+import com.google.gwt.event.dom.client.LoadHandler;
+import com.google.gwt.user.client.ui.Image;
+import com.google.gwt.user.client.ui.RootPanel;
+
+public class LogoGroup {
+  final double width;
+  final double height;
+  final int numLogos;
+  final double radius;
+  Image logoImg;
+  Logo[] logos;
+  boolean imageLoaded;
+  
+  double k;
+  
+  public LogoGroup(double width, double height, int numLogos, double radius) {
+    this.width = width;
+    this.height = height;
+    this.numLogos = numLogos;
+    this.radius = radius;
+
+    // init logos array
+    logos = new Logo[numLogos];
+    
+    // init image
+    logoImg = new Image("gwtlogo40_40.png");
+    logoImg.addLoadHandler(new LoadHandler() {
+      public void onLoad(LoadEvent event) {
+        imageLoaded = true;
+        // once image is loaded, init logo objects
+        ImageElement imageElement = (ImageElement) logoImg.getElement().cast();
+        for (int i = logos.length - 1; i >= 0; i--) {
+          Logo logo = new Logo(imageElement);
+          logo.pos.x = LogoGroup.this.width / 2;
+          logo.pos.y = LogoGroup.this.height / 2;
+          logos[i] = logo;
+        }
+      }
+    });
+    logoImg.setVisible(false);
+    RootPanel.get().add(logoImg); // image must be on page to fire load
+  }
+  
+  public void update(double mouseX, double mouseY) {
+    if (!imageLoaded) {
+      return;
+    }
+    
+    k = (k + Math.PI/2.0* 0.009);
+    
+    for (int i = numLogos - 1; i >= 0; i--) {
+      Logo logo = logos[i];
+      double logoPerTPi = 2 * Math.PI * i / numLogos;
+      Vector goal = new Vector(width / 2 + radius * Math.cos(k + logoPerTPi), 
+          height / 2 + radius * Math.sin(k + logoPerTPi));
+      logo.goal.set(goal);
+      logo.rot = k + logoPerTPi + Math.PI / 2.0;
+      
+      Vector d = new Vector(mouseX, mouseY);
+      d.sub(logo.pos);
+      if (d.magSquared() < 50*50) {
+        logo.goal = Vector.sub(logo.pos, d);
+      }
+      
+      logo.update();
+    }
+  }
+  
+  public void draw(Context2d context) {
+    if (!imageLoaded) {
+      return;
+    }
+    
+    for (int i = numLogos - 1; i >= 0; i--) {
+      logos[i].draw(context);
+    }
+  }
+}

Added: devicemap/trunk/examples/1.0/java/gwtcanvas/src/org/apache/devicemap/gwt/gwtcanvasdemo/client/SpringObject.java
URL: http://svn.apache.org/viewvc/devicemap/trunk/examples/1.0/java/gwtcanvas/src/org/apache/devicemap/gwt/gwtcanvasdemo/client/SpringObject.java?rev=1749209&view=auto
==============================================================================
--- devicemap/trunk/examples/1.0/java/gwtcanvas/src/org/apache/devicemap/gwt/gwtcanvasdemo/client/SpringObject.java (added)
+++ devicemap/trunk/examples/1.0/java/gwtcanvas/src/org/apache/devicemap/gwt/gwtcanvasdemo/client/SpringObject.java Sun Jun 19 21:56:46 2016
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2016 Apache DeviceMap.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package org.apache.devicemap.gwt.gwtcanvasdemo.client;
+
+public class SpringObject {
+  public static final double springStrength = 0.1;
+  public static final double friction = 0.8;
+  public Vector pos, vel, goal;
+  
+  public SpringObject(Vector start) {
+    this.pos = new Vector(start);
+    this.vel = new Vector(0, 0);
+    this.goal = new Vector(start);
+  }
+  
+  public void update() {
+    Vector d = Vector.sub(goal, pos);
+    d.mult(springStrength);
+    vel.add(d);
+    vel.mult(friction);
+    pos.add(vel);
+  }
+}

Added: devicemap/trunk/examples/1.0/java/gwtcanvas/src/org/apache/devicemap/gwt/gwtcanvasdemo/client/Vector.java
URL: http://svn.apache.org/viewvc/devicemap/trunk/examples/1.0/java/gwtcanvas/src/org/apache/devicemap/gwt/gwtcanvasdemo/client/Vector.java?rev=1749209&view=auto
==============================================================================
--- devicemap/trunk/examples/1.0/java/gwtcanvas/src/org/apache/devicemap/gwt/gwtcanvasdemo/client/Vector.java (added)
+++ devicemap/trunk/examples/1.0/java/gwtcanvas/src/org/apache/devicemap/gwt/gwtcanvasdemo/client/Vector.java Sun Jun 19 21:56:46 2016
@@ -0,0 +1,90 @@
+/*
+ * Copyright 2016 Apache DeviceMap.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package org.apache.devicemap.gwt.gwtcanvasdemo.client;
+
+public class Vector {
+  public double x, y;
+  
+  public Vector() {
+    this(0, 0);
+  }
+  
+  public Vector(double x, double y) {
+    this.x = x;
+    this.y = y;
+  }
+  
+  public Vector(Vector v) {
+    this(v.x, v.y);
+  }
+  
+  public void add(double x, double y) {
+    this.x += x;
+    this.y += y;
+  }
+  
+  public void add(Vector v) {
+    add(v.x, v.y);
+  }
+  
+  public void sub(Vector v) {
+    sub(v.x, v.y);
+  }
+  
+  public void sub(double x, double y) {
+    this.x -= x;
+    this.y -= y;
+  }
+  
+  public void mult(double x, double y) {
+    this.x *= x;
+    this.y *= y;
+  }
+  
+  public void mult(Vector v) {
+    mult(v.x, v.y);
+  }
+  
+  public void mult(double c) {
+    mult(c, c);
+  }
+  
+  public double mag() {
+    if (x == 0 && y == 0) {
+      return 0;
+    } else {
+      return Math.sqrt(x * x + y * y);
+    }
+  }
+  
+  public double magSquared() {
+    return x * x + y * y;
+  }
+  
+  public void set(Vector v) {
+    x = v.x;
+    y = v.y;
+  }
+  
+  public static Vector sub(Vector a, Vector b) {
+    return new Vector(a.x - b.x, a.y - b.y);
+  }
+  
+  public static Vector mult(Vector v, double c) {
+    return new Vector(v.x * c, v.y * c);
+  }
+}

Added: devicemap/trunk/examples/1.0/java/gwtcanvas/war/DmapGwtCanvas.css
URL: http://svn.apache.org/viewvc/devicemap/trunk/examples/1.0/java/gwtcanvas/war/DmapGwtCanvas.css?rev=1749209&view=auto
==============================================================================
--- devicemap/trunk/examples/1.0/java/gwtcanvas/war/DmapGwtCanvas.css (added)
+++ devicemap/trunk/examples/1.0/java/gwtcanvas/war/DmapGwtCanvas.css Sun Jun 19 21:56:46 2016
@@ -0,0 +1,23 @@
+body {
+  text-align: center;
+  margin: 0px;
+  padding: 0px;
+}
+
+h1 {
+  font-size: 2em;
+  font-weight: bold;
+  color: #777777;
+  margin: 10px 0px 10px;
+  text-align: center;
+}
+
+#source {
+  font-size: 1em;
+  color: #777777;
+  text-align: center;
+}
+
+#source a {
+  text-decoration: none;
+}
\ No newline at end of file

Added: devicemap/trunk/examples/1.0/java/gwtcanvas/war/DmapGwtCanvas.html
URL: http://svn.apache.org/viewvc/devicemap/trunk/examples/1.0/java/gwtcanvas/war/DmapGwtCanvas.html?rev=1749209&view=auto
==============================================================================
--- devicemap/trunk/examples/1.0/java/gwtcanvas/war/DmapGwtCanvas.html (added)
+++ devicemap/trunk/examples/1.0/java/gwtcanvas/war/DmapGwtCanvas.html Sun Jun 19 21:56:46 2016
@@ -0,0 +1,27 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+  <head>
+    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
+    <meta name="viewport" content="width=device-width, user-scalable=no" />
+    <meta http-equiv="Cache-Control" content="no-cache" /> 
+    <link type="text/css" rel="stylesheet" href="DmapGwtCanvas.css">
+    <title>GWT Canvas Demo</title>
+    <script type="text/javascript" language="javascript" src="gwtcanvasdemo/gwtcanvasdemo.nocache.js"></script>
+  </head>
+  <body>
+    <!-- RECOMMENDED if your web app will not function without JavaScript enabled -->
+    <noscript>
+      <div style="width: 22em; position: absolute; left: 50%; margin-left: -11em; color: red; background-color: white; border: 1px solid red; padding: 4px; font-family: sans-serif">
+        Your web browser must have JavaScript enabled
+        in order for this application to display correctly.
+      </div>
+    </noscript>
+
+    <h1>GWT Canvas Demo</h1>
+    <div id="canvasholder"></div>
+    <br/>
+    <span id="source">
+    <a href="http://code.google.com/p/gwtcanvasdemo/source/browse/#svn%2Ftrunk%2Fsrc%2Fcom%2Fgoogle%2Fgwt%2Fgwtcanvasdemo%2Fclient">View the source</a>
+    </span>
+  </body>
+</html>

Propchange: devicemap/trunk/examples/1.0/java/gwtcanvas/war/WEB-INF/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Sun Jun 19 21:56:46 2016
@@ -0,0 +1,2 @@
+deploy
+classes

Added: devicemap/trunk/examples/1.0/java/gwtcanvas/war/WEB-INF/.gitignore
URL: http://svn.apache.org/viewvc/devicemap/trunk/examples/1.0/java/gwtcanvas/war/WEB-INF/.gitignore?rev=1749209&view=auto
==============================================================================
--- devicemap/trunk/examples/1.0/java/gwtcanvas/war/WEB-INF/.gitignore (added)
+++ devicemap/trunk/examples/1.0/java/gwtcanvas/war/WEB-INF/.gitignore Sun Jun 19 21:56:46 2016
@@ -0,0 +1 @@
+/classes/

Added: devicemap/trunk/examples/1.0/java/gwtcanvas/war/WEB-INF/lib/gwt-servlet.jar
URL: http://svn.apache.org/viewvc/devicemap/trunk/examples/1.0/java/gwtcanvas/war/WEB-INF/lib/gwt-servlet.jar?rev=1749209&view=auto
==============================================================================
Binary file - no diff available.

Propchange: devicemap/trunk/examples/1.0/java/gwtcanvas/war/WEB-INF/lib/gwt-servlet.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: devicemap/trunk/examples/1.0/java/gwtcanvas/war/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/devicemap/trunk/examples/1.0/java/gwtcanvas/war/WEB-INF/web.xml?rev=1749209&view=auto
==============================================================================
--- devicemap/trunk/examples/1.0/java/gwtcanvas/war/WEB-INF/web.xml (added)
+++ devicemap/trunk/examples/1.0/java/gwtcanvas/war/WEB-INF/web.xml Sun Jun 19 21:56:46 2016
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE web-app
+    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
+    "http://java.sun.com/dtd/web-app_2_3.dtd">
+<web-app>
+  <!-- Default page to serve -->
+  <welcome-file-list>
+    <welcome-file>DmapGwtCanvas.html</welcome-file>
+  </welcome-file-list>
+</web-app>