From a1891aa229e048d284316ac9d0f23a8395392f81 Mon Sep 17 00:00:00 2001 From: tibbi Date: Tue, 29 Aug 2017 16:45:21 +0200 Subject: [PATCH] properly handle exporting and importing eraser, by setting "none" stroke --- .../kotlin/com/simplemobiletools/draw/MyCanvas.kt | 5 +++-- .../com/simplemobiletools/draw/PaintOptions.kt | 6 +++++- .../main/kotlin/com/simplemobiletools/draw/Svg.kt | 12 +++++++----- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/draw/MyCanvas.kt b/app/src/main/kotlin/com/simplemobiletools/draw/MyCanvas.kt index 800d47e..250b167 100644 --- a/app/src/main/kotlin/com/simplemobiletools/draw/MyCanvas.kt +++ b/app/src/main/kotlin/com/simplemobiletools/draw/MyCanvas.kt @@ -200,7 +200,7 @@ class MyCanvas(context: Context, attrs: AttributeSet) : View(context, attrs) { mPaths.put(mPath, mPaintOptions) pathsUpdated() mPath = MyPath() - mPaintOptions = PaintOptions(mPaintOptions.color, mPaintOptions.strokeWidth) + mPaintOptions = PaintOptions(mPaintOptions.color, mPaintOptions.strokeWidth, mPaintOptions.isEraser) } private fun pathsUpdated() { @@ -256,7 +256,7 @@ class MyCanvas(context: Context, attrs: AttributeSet) : View(context, attrs) { val size = parcel.readInt() for (i in 0 until size) { val key = parcel.readSerializable() as MyPath - val paintOptions = PaintOptions(parcel.readInt(), parcel.readFloat()) + val paintOptions = PaintOptions(parcel.readInt(), parcel.readFloat(), parcel.readInt() == 1) paths.put(key, paintOptions) } } @@ -268,6 +268,7 @@ class MyCanvas(context: Context, attrs: AttributeSet) : View(context, attrs) { out.writeSerializable(path) out.writeInt(paintOptions.color) out.writeFloat(paintOptions.strokeWidth) + out.writeInt(if (paintOptions.isEraser) 1 else 0) } } diff --git a/app/src/main/kotlin/com/simplemobiletools/draw/PaintOptions.kt b/app/src/main/kotlin/com/simplemobiletools/draw/PaintOptions.kt index 935b20b..96aede7 100644 --- a/app/src/main/kotlin/com/simplemobiletools/draw/PaintOptions.kt +++ b/app/src/main/kotlin/com/simplemobiletools/draw/PaintOptions.kt @@ -5,11 +5,15 @@ import android.graphics.Color class PaintOptions { var color = Color.BLACK var strokeWidth = 5f + var isEraser = false constructor() - constructor(color: Int, strokeWidth: Float) { + constructor(color: Int, strokeWidth: Float, isEraser: Boolean) { this.color = color this.strokeWidth = strokeWidth + this.isEraser = isEraser } + + fun getColorToExport() = if (isEraser) "none" else Integer.toHexString(color).substring(2) } diff --git a/app/src/main/kotlin/com/simplemobiletools/draw/Svg.kt b/app/src/main/kotlin/com/simplemobiletools/draw/Svg.kt index ce8dcec..97504b5 100644 --- a/app/src/main/kotlin/com/simplemobiletools/draw/Svg.kt +++ b/app/src/main/kotlin/com/simplemobiletools/draw/Svg.kt @@ -44,7 +44,7 @@ object Svg { } write("\" fill=\"none\" stroke=\"#") - write(Integer.toHexString(options.color).substring(2)) + write(options.getColorToExport()) write("\" stroke-width=\"") write(options.strokeWidth.toString()) write("\" stroke-linecap=\"round\"/>") @@ -60,7 +60,7 @@ object Svg { svg.paths.forEach { val path = MyPath() path.readObject(it.data, activity) - val options = PaintOptions(it.color, it.strokeWidth) + val options = PaintOptions(it.color, it.strokeWidth, it.isEraser) canvas.addPath(path, options) } @@ -96,9 +96,11 @@ object Svg { pathElement.setStartElementListener { attributes -> val d = attributes.getValue("d") - val color = Color.parseColor(attributes.getValue("stroke")) val width = attributes.getValue("stroke-width").toFloat() - svg.paths.add(SPath(d, color, width)) + val stroke = attributes.getValue("stroke") + val isEraser = stroke == "none" + val color = if (isEraser) 0 else Color.parseColor(stroke) + svg.paths.add(SPath(d, color, width, isEraser)) } Xml.parse(inputStream, Xml.Encoding.UTF_8, root.contentHandler) @@ -122,5 +124,5 @@ object Svg { private class SRect(val width: Int, val height: Int, val color: Int) : Serializable - private class SPath(var data: String, var color: Int, var strokeWidth: Float) : Serializable + private class SPath(var data: String, var color: Int, var strokeWidth: Float, var isEraser: Boolean) : Serializable }