diff --git a/app-android/res/menu/activity_canvas.xml b/app-android/res/menu/activity_canvas.xml index 6aa78a8..9f53ab3 100644 --- a/app-android/res/menu/activity_canvas.xml +++ b/app-android/res/menu/activity_canvas.xml @@ -1,13 +1,20 @@ + + + android:title="@string/menu_settings" + android:onClick="showSettings"/> - - + android:title="@string/menu_about" + android:onClick="showAbout"/> + \ No newline at end of file diff --git a/app-android/res/values/strings.xml b/app-android/res/values/strings.xml index 8e01210..a82a91a 100644 --- a/app-android/res/values/strings.xml +++ b/app-android/res/values/strings.xml @@ -2,12 +2,17 @@ GfxTablet + + Clear Settings - Network host - Sense stylus only - Fullscreen About / Help - Title bar will only be hidden when hardware menu button is present + + Network host + + Sense stylus only Ignores touch events from fingers + Fullscreen + Title bar will only be hidden when hardware menu button is present + diff --git a/app-android/src/at/bitfire/gfxtablet/CanvasActivity.java b/app-android/src/at/bitfire/gfxtablet/CanvasActivity.java index ea128e2..0291f0c 100644 --- a/app-android/src/at/bitfire/gfxtablet/CanvasActivity.java +++ b/app-android/src/at/bitfire/gfxtablet/CanvasActivity.java @@ -66,6 +66,10 @@ public class CanvasActivity extends Activity { startActivityForResult(new Intent(this, SettingsActivity.class), 0); } + public void clearDraw(MenuItem item) { + this.canvas.clearDraw(); + } + @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == SettingsActivity.RESULT_RESTART) { diff --git a/app-android/src/at/bitfire/gfxtablet/CanvasView.java b/app-android/src/at/bitfire/gfxtablet/CanvasView.java index 52cb10d..aedfb91 100644 --- a/app-android/src/at/bitfire/gfxtablet/CanvasView.java +++ b/app-android/src/at/bitfire/gfxtablet/CanvasView.java @@ -5,6 +5,11 @@ import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.OnSharedPreferenceChangeListener; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Path; +import android.graphics.PorterDuff.Mode; import android.os.AsyncTask; import android.preference.PreferenceManager; import android.view.MotionEvent; @@ -17,6 +22,12 @@ public class CanvasView extends View implements OnSharedPreferenceChangeListener NetworkClient netClient; SharedPreferences settings; boolean acceptStylusOnly; + + Bitmap bitmap; + Canvas canvas; + Path path; + Paint paint_bitmap, paint; + int maxX, maxY; public CanvasView(Context context, NetworkClient netClient) { @@ -24,8 +35,13 @@ public class CanvasView extends View implements OnSharedPreferenceChangeListener // disable until networking has been configured setEnabled(false); - setBackgroundColor(0xFFD0D0D0); + this.path = new Path(); + this.paint_bitmap = new Paint(Paint.DITHER_FLAG); + this.paint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG); + this.paint.setColor(0xFF000000); + this.paint.setStyle(Paint.Style.STROKE); + settings = PreferenceManager.getDefaultSharedPreferences(context); settings.registerOnSharedPreferenceChangeListener(this); reconfigureAcceptedInputDevices(); @@ -50,8 +66,16 @@ public class CanvasView extends View implements OnSharedPreferenceChangeListener protected void onSizeChanged (int w, int h, int oldw, int oldh) { maxX = w; maxY = h; + this.bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); + this.canvas = new Canvas(this.bitmap); } + @Override + protected void onDraw(Canvas canvas) { + canvas.drawColor(0xFFD0D0D0); + canvas.drawBitmap(this.bitmap, 0, 0, this.paint_bitmap); + canvas.drawPath(this.path, this.paint); + } @Override public boolean onGenericMotionEvent(MotionEvent event) { @@ -79,20 +103,28 @@ public class CanvasView extends View implements OnSharedPreferenceChangeListener short nx = normalizeX(event.getX(ptr)), ny = normalizeY(event.getY(ptr)), npressure = normalizePressure(event.getPressure(ptr)); + float x = event.getX(); + float y = event.getY(); //Log.i("XorgTablet", String.format("Touch event logged: %f|%f, pressure %f", event.getX(ptr), event.getY(ptr), event.getPressure(ptr))); switch (event.getActionMasked()) { case MotionEvent.ACTION_MOVE: netClient.getQueue().add(new NetEvent(Type.TYPE_MOTION, nx, ny, npressure)); + this.path.lineTo(x, y); break; case MotionEvent.ACTION_DOWN: netClient.getQueue().add(new NetEvent(Type.TYPE_BUTTON, nx, ny, npressure, 0, true)); + this.path.reset(); + this.path.moveTo(x, y); break; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: netClient.getQueue().add(new NetEvent(Type.TYPE_BUTTON, nx, ny, npressure, 0, false)); + this.path.lineTo(x, y); + this.canvas.drawPath(this.path, this.paint); + this.path.reset(); break; } - + invalidate(); } return true; } @@ -112,6 +144,10 @@ public class CanvasView extends View implements OnSharedPreferenceChangeListener return (short)(Math.min(Math.max(0, x), 2.0) * Short.MAX_VALUE/2.0); } + void clearDraw() { + this.canvas.drawColor(0, Mode.CLEAR); + invalidate(); + } private class ConfigureNetworkingTask extends AsyncTask { @Override