diff Android/java/org/madbutterfly/MBView.java @ 572:dcd7adb2c0fc

Merge from Android_Skia
author Thinker K.F. Li <thinker@branda.to>
date Wed, 09 Jun 2010 17:30:09 +0800
parents c468e397614d
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Android/java/org/madbutterfly/MBView.java	Wed Jun 09 17:30:09 2010 +0800
@@ -0,0 +1,77 @@
+package org.madbutterfly;
+
+import android.view.SurfaceView;
+import android.view.SurfaceHolder;
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Bitmap;
+import android.graphics.Paint;
+import android.graphics.Xfermode;
+import android.graphics.PorterDuff;
+import android.graphics.PorterDuffXfermode;
+
+public class MBView extends SurfaceView {
+    redraw_man rdman;
+    Canvas cr, backend;
+    Bitmap cr_bmap, backend_bmap;
+    Paint copy_pnt;
+    int w, h;
+    
+    public MBView(Context context) {
+	super(context);
+	Paint paint;
+	Xfermode mode;
+	
+	rdman = null;
+	cr = null;
+	backend = null;
+	
+	mode = new PorterDuffXfermode(PorterDuff.Mode.SRC);
+	copy_pnt = new Paint();
+	copy_pnt.setXfermode(mode);
+	w = 100;
+	h = 100;
+    }
+    
+    public redraw_man get_rdman() {
+	if(rdman != null)
+	    return rdman;
+
+	w = getWidth();
+	h = getHeight();
+
+	cr_bmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
+	cr = new Canvas(cr_bmap);
+	backend_bmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
+	backend = new Canvas(backend_bmap);
+	
+	rdman = new redraw_man(cr, backend, this);
+
+	return rdman;
+    }
+
+    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
+	this.w = w;
+	this.h = h;
+
+	if(rdman == null) {
+	    get_rdman();
+	    return;
+	}
+	
+	cr_bmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
+	cr.setBitmap(cr_bmap);
+	backend_bmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
+	backend.setBitmap(backend_bmap);
+    }
+
+    public void redraw() {
+	SurfaceHolder holder;
+	Canvas canvas;
+
+	holder = getHolder();
+	canvas = holder.lockCanvas();
+	canvas.drawBitmap(backend_bmap, 0, 0, copy_pnt);
+	holder.unlockCanvasAndPost(canvas);
+    }
+}