From cd8fd8cb8f0513344ddd47414b6cb1d762f2abc8 Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 20 Nov 2017 23:12:29 +0100 Subject: [PATCH] fix #71, allow Undoing Clear --- .../draw/activities/MainActivity.kt | 8 +++---- .../draw/interfaces/CanvasListener.kt | 5 ++++ .../simplemobiletools/draw/views/MyCanvas.kt | 24 ++++++++++++++----- 3 files changed, 27 insertions(+), 10 deletions(-) create mode 100644 app/src/main/kotlin/com/simplemobiletools/draw/interfaces/CanvasListener.kt diff --git a/app/src/main/kotlin/com/simplemobiletools/draw/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/draw/activities/MainActivity.kt index 0d9a543..2610245 100644 --- a/app/src/main/kotlin/com/simplemobiletools/draw/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/draw/activities/MainActivity.kt @@ -25,14 +25,14 @@ import com.simplemobiletools.draw.extensions.config import com.simplemobiletools.draw.helpers.JPG import com.simplemobiletools.draw.helpers.PNG import com.simplemobiletools.draw.helpers.SVG +import com.simplemobiletools.draw.interfaces.CanvasListener import com.simplemobiletools.draw.models.Svg -import com.simplemobiletools.draw.views.MyCanvas import kotlinx.android.synthetic.main.activity_main.* import java.io.ByteArrayOutputStream import java.io.File import java.io.FileOutputStream -class MainActivity : SimpleActivity(), MyCanvas.PathsChangedListener { +class MainActivity : SimpleActivity(), CanvasListener { private val FOLDER_NAME = "images" private val FILE_NAME = "simple-draw.png" @@ -329,8 +329,8 @@ class MainActivity : SimpleActivity(), MyCanvas.PathsChangedListener { updateEraserState() } - override fun pathsChanged(cnt: Int) { - undo.beVisibleIf(cnt > 0) + override fun toggleUndoVisibility(visible: Boolean) { + undo.beVisibleIf(visible) } private var onStrokeWidthBarChangeListener: SeekBar.OnSeekBarChangeListener = object : SeekBar.OnSeekBarChangeListener { diff --git a/app/src/main/kotlin/com/simplemobiletools/draw/interfaces/CanvasListener.kt b/app/src/main/kotlin/com/simplemobiletools/draw/interfaces/CanvasListener.kt new file mode 100644 index 0000000..1647dee --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/draw/interfaces/CanvasListener.kt @@ -0,0 +1,5 @@ +package com.simplemobiletools.draw.interfaces + +interface CanvasListener { + fun toggleUndoVisibility(visible: Boolean) +} diff --git a/app/src/main/kotlin/com/simplemobiletools/draw/views/MyCanvas.kt b/app/src/main/kotlin/com/simplemobiletools/draw/views/MyCanvas.kt index 2d2280f..67cae78 100644 --- a/app/src/main/kotlin/com/simplemobiletools/draw/views/MyCanvas.kt +++ b/app/src/main/kotlin/com/simplemobiletools/draw/views/MyCanvas.kt @@ -13,6 +13,7 @@ import com.bumptech.glide.request.RequestOptions import com.simplemobiletools.commons.extensions.getContrastColor import com.simplemobiletools.commons.extensions.toast import com.simplemobiletools.draw.R +import com.simplemobiletools.draw.interfaces.CanvasListener import com.simplemobiletools.draw.models.MyParcelable import com.simplemobiletools.draw.models.MyPath import com.simplemobiletools.draw.models.PaintOptions @@ -24,7 +25,11 @@ class MyCanvas(context: Context, attrs: AttributeSet) : View(context, attrs) { var mPaths = LinkedHashMap() var mBackgroundBitmap: Bitmap? = null - var mListener: PathsChangedListener? = null + var mListener: CanvasListener? = null + + // allow undoing Clear + var mLastPaths = LinkedHashMap() + var mLastBackgroundBitmap: Bitmap? = null private var mPaint = Paint() private var mPath = MyPath() @@ -53,6 +58,15 @@ class MyCanvas(context: Context, attrs: AttributeSet) : View(context, attrs) { } fun undo() { + if (mPaths.isEmpty() && mLastPaths.isNotEmpty()) { + mPaths = mLastPaths.clone() as LinkedHashMap + mBackgroundBitmap = mLastBackgroundBitmap + mLastPaths.clear() + pathsUpdated() + invalidate() + return + } + if (mPaths.isEmpty()) return @@ -182,6 +196,8 @@ class MyCanvas(context: Context, attrs: AttributeSet) : View(context, attrs) { } fun clearCanvas() { + mLastPaths = mPaths.clone() as LinkedHashMap + mLastBackgroundBitmap = mBackgroundBitmap mBackgroundBitmap = null mPath.reset() mPaths.clear() @@ -219,7 +235,7 @@ class MyCanvas(context: Context, attrs: AttributeSet) : View(context, attrs) { } private fun pathsUpdated() { - mListener?.pathsChanged(mPaths.size) + mListener?.toggleUndoVisibility(mPaths.isNotEmpty() || mLastPaths.isNotEmpty()) } override fun onTouchEvent(event: MotionEvent): Boolean { @@ -240,10 +256,6 @@ class MyCanvas(context: Context, attrs: AttributeSet) : View(context, attrs) { return true } - interface PathsChangedListener { - fun pathsChanged(cnt: Int) - } - public override fun onSaveInstanceState(): Parcelable { val superState = super.onSaveInstanceState() val savedState = MyParcelable(superState)