3 package com.android.browser;
5 import android.graphics.Bitmap;
6 import android.graphics.utils.BoundaryPatch;
7 import android.graphics.Canvas;
8 import android.graphics.Paint;
9 import android.webkit.WebView;
11 /*package*/ class MeshTracker extends WebView.DragTracker {
13 private static class Mesh {
17 private BoundaryPatch mPatch = new BoundaryPatch();
18 private float[] mCubics = new float[24];
19 private float[] mOrig = new float[24];
20 private float mStretchX, mStretchY;
22 Mesh(int which, int rows, int cols) {
28 private void rebuildPatch() {
29 mPatch.setCubicBoundary(mCubics, 0, mRows, mCols);
32 private void setSize(float w, float h) {
33 float[] pts = mCubics;
38 pts[0*2+0] = 0; pts[0*2+1] = 0;
39 pts[1*2+0] = x1; pts[1*2+1] = 0;
40 pts[2*2+0] = x2; pts[2*2+1] = 0;
42 pts[3*2+0] = w; pts[3*2+1] = 0;
43 pts[4*2+0] = w; pts[4*2+1] = y1;
44 pts[5*2+0] = w; pts[5*2+1] = y2;
46 pts[6*2+0] = w; pts[6*2+1] = h;
47 pts[7*2+0] = x2; pts[7*2+1] = h;
48 pts[8*2+0] = x1; pts[8*2+1] = h;
50 pts[9*2+0] = 0; pts[9*2+1] = h;
51 pts[10*2+0] = 0; pts[10*2+1] = y2;
52 pts[11*2+0] = 0; pts[11*2+1] = y1;
54 System.arraycopy(pts, 0, mOrig, 0, 24);
56 // recall our stretcher
57 setStretch(mStretchX, mStretchY);
60 public void setBitmap(Bitmap bm) {
61 mPatch.setTexture(bm);
62 setSize(bm.getWidth(), bm.getHeight());
65 // first experimental behavior
66 private void doit1(float dx, float dy) {
74 mCubics[index*2 + 0] = mOrig[index*2 + 0] + dx;
75 mCubics[index*2 + 2] = mOrig[index*2 + 2] + dx;
82 mCubics[index*2 + 1] = mOrig[index*2 + 1] + dy;
83 mCubics[index*2 + 3] = mOrig[index*2 + 3] + dy;
86 private void doit2(float dx, float dy) {
94 mCubics[index*2 + 0] = mOrig[index*2 + 0] + dx;
95 mCubics[index*2 + 2] = mOrig[index*2 + 2] + dx;
102 mCubics[index*2 + 1] = mOrig[index*2 + 1] + dy;
103 mCubics[index*2 + 3] = mOrig[index*2 + 3] + dy;
106 public void setStretch(float dx, float dy) {
120 public void draw(Canvas canvas) {
126 private Bitmap mBitmap;
129 public MeshTracker(int which) {
133 @Override public void onStartDrag(float x, float y) {
134 mMesh = new Mesh(mWhich, 16, 16);
137 @Override public void onBitmapChange(Bitmap bm) {
142 @Override public boolean onStretchChange(float sx, float sy) {
143 mMesh.setStretch(-sx, -sy);
147 @Override public void onStopDrag() {
151 @Override public void onDraw(Canvas canvas) {
152 canvas.drawColor(0xFF000000);
153 Paint paint = new Paint();
154 paint.setAlpha(0x80);
155 canvas.drawBitmap(mBitmap, 0, 0, paint);