Revision: 4745
http://sourceforge.net/p/vexi/code/4745
Author: mkpg2
Date: 2014-11-12 13:16:54 +0000 (Wed, 12 Nov 2014)
Log Message:
-----------
ui:Canvas. Drawable area.
- accidentally saved in gen folder so not committed.
Modified Paths:
--------------
branches/vexi3/org.vexi-core.main/src/main/jpp/org/vexi/core/Vexi.jpp
Added Paths:
-----------
branches/vexi3/org.vexi-core.main/src/main/java/org/vexi/core/Canvas.java
Added: branches/vexi3/org.vexi-core.main/src/main/java/org/vexi/core/Canvas.java
===================================================================
--- branches/vexi3/org.vexi-core.main/src/main/java/org/vexi/core/Canvas.java
(rev 0)
+++ branches/vexi3/org.vexi-core.main/src/main/java/org/vexi/core/Canvas.java
2014-11-12 13:16:54 UTC (rev 4745)
@@ -0,0 +1,133 @@
+package org.vexi.core;
+
+import java.awt.BasicStroke;
+import java.awt.Graphics2D;
+import java.awt.Image;
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.ObjectOutputStream;
+
+import javax.imageio.ImageIO;
+
+import org.ibex.js.Fountain;
+import org.ibex.js.JS;
+import org.ibex.js.JSExn;
+import org.ibex.js.JSU;
+import org.vexi.graphics.Color;
+import org.vexi.graphics.Texture;
+
+public class Canvas extends Box implements Texture{
+ static final public JS.Constructor Constructor = new
JS.Constructor("Canvas") {
+ public JS new_(JS[] args) { return new Canvas(); }
+ };
+
+
+ // SHOULD theoretically use pixel buffer to be platform independent ...
+ private BufferedImage buffer;
+ private float strokeWidth = 1;
+ private int drawColor = 0xffffffff;
+
+ public Canvas(){
+ visual = new BoxVisual();
+ visual.texture = this;
+ }
+ public Object getImage() { return getBuffer(); }
+ public int getWidth() { return width; }
+ public int getHeight() { return height; }
+
+ @Override public JS get(JS name) throws JSExn {
+ String nameStr = JSU.toString(name);
+ if("drawLine".equals(nameStr)) return METHOD;
+ if("drawColor".equals(nameStr)) return
JSU.S(Color.colorToString(drawColor));
+ if("drawWidth".equals(nameStr)) return JSU.N(strokeWidth);
+ return super.get(name);
+ }
+
+ @Override public void put(JS name, JS value) throws JSExn {
+ String nameStr = JSU.toString(name);
+ if("drawColor".equals(nameStr)) {
+ drawColor = Color.stringToColor(JSU.toString(value));
+ return;
+ }
+ if("drawWidth".equals(nameStr)) {
+ strokeWidth = (float)JSU.toDouble(value);
+ return;
+ }
+ super.put(name, value);
+ }
+
+ @Override public JS callMethod(JS this_, JS method, JS[] args) throws
JSExn {
+ String nameStr = JSU.toString(method);
+ if("drawLine".equals(nameStr)) {
+ int x1 = JSU.expectArg_int(args, 0);
+ int y1 = JSU.expectArg_int(args, 1);
+ int x2 = JSU.expectArg_int(args, 2);
+ int y2 = JSU.expectArg_int(args, 3);
+ Graphics2D graphics2D =
(Graphics2D)getBuffer().getGraphics();
+ graphics2D.setColor(Color.intToColor(drawColor));
+ graphics2D.setStroke(new BasicStroke(strokeWidth));
+ graphics2D.drawLine(x1, y1, x2, y2);
+ dirty();
+// dirty(this, x1-1,y1-1,x2+1,y2+1);
+ return null;
+ }
+ return super.callMethod(this_, method, args);
+ }
+
+ private BufferedImage getBuffer(){
+ if(width==0 || height==0){
+ buffer = null;
+ }else if(buffer==null){
+ buffer = new BufferedImage(width, height,
BufferedImage.TYPE_INT_ARGB);
+ }else{
+ if(buffer.getHeight()!=height ||
buffer.getWidth()!=width){
+ BufferedImage buffer1 = new
BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
+ Graphics2D g0 =
(Graphics2D)buffer.getGraphics();
+ Graphics2D g1 =
(Graphics2D)buffer1.getGraphics();
+ g1.drawImage(buffer, 0, 0, null);
+ g1.setColor(g0.getColor());
+ g1.setStroke(g0.getStroke());
+ buffer = buffer1;
+ }
+ // SHOULD resize the buffer if necessary
+ }
+ return buffer;
+ }
+
+ public void init() {
+ getBuffer();
+ }
+
+ public JS getStream() {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ try{
+ ObjectOutputStream oos = new ObjectOutputStream(baos);
+
ImageIO.write(getBuffer(),"png",ImageIO.createImageOutputStream(oos));
+ oos.flush();
+ oos.close();
+ return new Fountain.ByteArray(baos.toByteArray());
+ }catch(Exception e){
+ throw new Error(e);
+ }
+ }
+
+ synchronized public void setStream(JS f) throws IOException{
+ InputStream is = JSU.getInputStream(f);
+ Image img= ImageIO.read(ImageIO.createImageInputStream(is));
+
+ BufferedImage bimage = new BufferedImage(img.getWidth(null),
img.getHeight(null), BufferedImage.TYPE_INT_ARGB);
+
+ // Draw the image on to the buffered image
+ Graphics2D bGr = bimage.createGraphics();
+ bGr.drawImage(img, 0, 0, null);
+ bGr.dispose();
+
+ // Return the buffered image
+ buffer = bimage;
+ }
+
+ public boolean isLoaded() { return true; }
+ public JSExn getLoadFailed() { return null; }
+}
Property changes on:
branches/vexi3/org.vexi-core.main/src/main/java/org/vexi/core/Canvas.java
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Modified: branches/vexi3/org.vexi-core.main/src/main/jpp/org/vexi/core/Vexi.jpp
===================================================================
--- branches/vexi3/org.vexi-core.main/src/main/jpp/org/vexi/core/Vexi.jpp
2014-11-10 21:07:42 UTC (rev 4744)
+++ branches/vexi3/org.vexi-core.main/src/main/jpp/org/vexi/core/Vexi.jpp
2014-11-12 13:16:54 UTC (rev 4745)
@@ -15,8 +15,8 @@
import org.ibex.util.Encode;
import org.vexi.graphics.Font;
import org.vexi.graphics.Picture;
+import org.vexi.graphics.Color;
import org.vexi.plat.Platform;
-import org.vexi.graphics.Color;
import org.vexi.util.Log;
import java.util.List;
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Comprehensive Server Monitoring with Site24x7.
Monitor 10 servers for $9/Month.
Get alerted through email, SMS, voice calls or mobile push notifications.
Take corrective actions from your mobile device.
http://pubads.g.doubleclick.net/gampad/clk?id=154624111&iu=/4140/ostg.clktrk
_______________________________________________
Vexi-svn mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/vexi-svn