mirror of
https://github.com/SimpleMobileTools/Simple-Draw.git
synced 2025-02-03 10:17:29 +01:00
fix #71, allow Undoing Clear
This commit is contained in:
parent
0208a424e2
commit
cd8fd8cb8f
@ -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 {
|
||||
|
@ -0,0 +1,5 @@
|
||||
package com.simplemobiletools.draw.interfaces
|
||||
|
||||
interface CanvasListener {
|
||||
fun toggleUndoVisibility(visible: Boolean)
|
||||
}
|
@ -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<MyPath, PaintOptions>()
|
||||
var mBackgroundBitmap: Bitmap? = null
|
||||
var mListener: PathsChangedListener? = null
|
||||
var mListener: CanvasListener? = null
|
||||
|
||||
// allow undoing Clear
|
||||
var mLastPaths = LinkedHashMap<MyPath, PaintOptions>()
|
||||
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<MyPath, PaintOptions>
|
||||
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<MyPath, PaintOptions>
|
||||
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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user