diff options
author | Mike Reed <reed@google.com> | 2009-11-12 12:49:34 -0500 |
---|---|---|
committer | Mike Reed <reed@google.com> | 2009-12-17 14:53:37 -0500 |
commit | d5a80a5295438be18cfaebf197088d7c15f6d0ba (patch) | |
tree | d2f396ba8246001c57f42a3f9f84a032b99b3092 /src | |
parent | c6343adff2abb5ae8ec2cc7ba613dd7e48ba7e9a (diff) | |
download | packages_apps_browser-d5a80a5295438be18cfaebf197088d7c15f6d0ba.zip packages_apps_browser-d5a80a5295438be18cfaebf197088d7c15f6d0ba.tar.gz packages_apps_browser-d5a80a5295438be18cfaebf197088d7c15f6d0ba.tar.bz2 |
add initial dragtrackers
deleted: src/com/android/browser/TestTracker.java
Diffstat (limited to 'src')
-rw-r--r-- | src/com/android/browser/MeshTracker.java | 147 | ||||
-rw-r--r-- | src/com/android/browser/TabControl.java | 3 |
2 files changed, 150 insertions, 0 deletions
diff --git a/src/com/android/browser/MeshTracker.java b/src/com/android/browser/MeshTracker.java new file mode 100644 index 0000000..a02f451 --- /dev/null +++ b/src/com/android/browser/MeshTracker.java @@ -0,0 +1,147 @@ + + +package com.android.browser; + +import android.graphics.Bitmap; +import android.graphics.utils.BoundaryPatch; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.webkit.WebView; + +/*package*/ class MeshTracker extends WebView.DragTracker { + + private static class Mesh { + private int mRows; + private int mCols; + private BoundaryPatch mPatch = new BoundaryPatch(); + private float[] mCubics = new float[24]; + private float[] mOrig = new float[24]; + private float mStretchX, mStretchY; + + Mesh(int rows, int cols) { + mRows = rows; + mCols = cols; + } + + private void rebuildPatch() { + mPatch.setCubicBoundary(mCubics, 0, mRows, mCols); + } + + private void setSize(float w, float h) { + float[] pts = mCubics; + float x1 = w*0.3333f; + float y1 = h*0.3333f; + float x2 = w*0.6667f; + float y2 = h*0.6667f; + pts[0*2+0] = 0; pts[0*2+1] = 0; + pts[1*2+0] = x1; pts[1*2+1] = 0; + pts[2*2+0] = x2; pts[2*2+1] = 0; + + pts[3*2+0] = w; pts[3*2+1] = 0; + pts[4*2+0] = w; pts[4*2+1] = y1; + pts[5*2+0] = w; pts[5*2+1] = y2; + + pts[6*2+0] = w; pts[6*2+1] = h; + pts[7*2+0] = x2; pts[7*2+1] = h; + pts[8*2+0] = x1; pts[8*2+1] = h; + + pts[9*2+0] = 0; pts[9*2+1] = h; + pts[10*2+0] = 0; pts[10*2+1] = y2; + pts[11*2+0] = 0; pts[11*2+1] = y1; + + System.arraycopy(pts, 0, mOrig, 0, 24); + + // recall our stretcher + setStretch(mStretchX, mStretchY); + } + + public void setBitmap(Bitmap bm) { + mPatch.setTexture(bm); + setSize(bm.getWidth(), bm.getHeight()); + } + + // first experimental behavior + private void doit0(float dx, float dy) { + int index; + + if (dx < 0) { + index = 10; + } else { + index = 4; + } + mCubics[index*2 + 0] = mOrig[index*2 + 0] + dx; + mCubics[index*2 + 2] = mOrig[index*2 + 2] + dx; + + if (dy < 0) { + index = 1; + } else { + index = 7; + } + mCubics[index*2 + 1] = mOrig[index*2 + 1] + dy; + mCubics[index*2 + 3] = mOrig[index*2 + 3] + dy; + } + + private void doit1(float dx, float dy) { + int index; + + if (dx < 0) { + index = 4; + } else { + index = 10; + } + mCubics[index*2 + 0] = mOrig[index*2 + 0] + dx; + mCubics[index*2 + 2] = mOrig[index*2 + 2] + dx; + + if (dy < 0) { + index = 7; + } else { + index = 1; + } + mCubics[index*2 + 1] = mOrig[index*2 + 1] + dy; + mCubics[index*2 + 3] = mOrig[index*2 + 3] + dy; + } + + public void setStretch(float dx, float dy) { + mStretchX = dx; + mStretchY = dy; + doit1(dx, dy); + rebuildPatch(); + } + + public void draw(Canvas canvas) { + mPatch.draw(canvas); + } + } + + private Mesh mMesh; + private Bitmap mBitmap; + + public MeshTracker() {} + + @Override public void onStartDrag(float x, float y) { + mMesh = new Mesh(16, 16); + } + + @Override public void onBitmapChange(Bitmap bm) { + mBitmap = bm; + mMesh.setBitmap(bm); + } + + @Override public boolean onStretchChange(float sx, float sy) { + mMesh.setStretch(-sx, -sy); + return true; + } + + @Override public void onStopDrag() { + mMesh = null; + } + + @Override public void onDraw(Canvas canvas) { + canvas.drawColor(0xFF000000); + Paint paint = new Paint(); + paint.setAlpha(0x80); + canvas.drawBitmap(mBitmap, 0, 0, paint); + mMesh.draw(canvas); + } +} + diff --git a/src/com/android/browser/TabControl.java b/src/com/android/browser/TabControl.java index 8373182..07cf2ac 100644 --- a/src/com/android/browser/TabControl.java +++ b/src/com/android/browser/TabControl.java @@ -520,6 +520,9 @@ class TabControl { // settings final BrowserSettings s = BrowserSettings.getInstance(); s.addObserver(w.getSettings()).update(s, null); + + // disable for now + //w.setDragTracker(new MeshTracker()); return w; } |