From de1548388a25d06b144030c4f86efaffb939e744 Mon Sep 17 00:00:00 2001
From: CactiChameleon9 <51231053+CactiChameleon9@users.noreply.github.com>
Date: Mon, 22 Jan 2024 15:40:01 +0000
Subject: [PATCH] Add a relative brush size option
---
.../org/fossify/draw/activities/MainActivity.kt | 1 +
.../fossify/draw/activities/SettingsActivity.kt | 11 +++++++++++
.../kotlin/org/fossify/draw/helpers/Config.kt | 4 ++++
.../kotlin/org/fossify/draw/helpers/Constants.kt | 1 +
.../kotlin/org/fossify/draw/views/MyCanvas.kt | 11 ++++++++++-
app/src/main/res/layout/activity_settings.xml | 15 +++++++++++++++
app/src/main/res/values/strings.xml | 1 +
7 files changed, 43 insertions(+), 1 deletion(-)
diff --git a/app/src/main/kotlin/org/fossify/draw/activities/MainActivity.kt b/app/src/main/kotlin/org/fossify/draw/activities/MainActivity.kt
index ab5abe8e..a8fd66e0 100644
--- a/app/src/main/kotlin/org/fossify/draw/activities/MainActivity.kt
+++ b/app/src/main/kotlin/org/fossify/draw/activities/MainActivity.kt
@@ -147,6 +147,7 @@ class MainActivity : SimpleActivity(), CanvasListener {
strokeWidthBar.beVisibleIf(isShowBrushSizeEnabled)
strokeWidthPreview.beVisibleIf(isShowBrushSizeEnabled)
myCanvas.setAllowZooming(config.allowZoomingCanvas)
+ myCanvas.setRelativeBrushSize(config.relativeBrushSize)
updateTextColors(mainHolder)
if (isBlackAndWhiteTheme()) {
strokeWidthBar.setColors(0, config.canvasBackgroundColor.getContrastColor(), 0)
diff --git a/app/src/main/kotlin/org/fossify/draw/activities/SettingsActivity.kt b/app/src/main/kotlin/org/fossify/draw/activities/SettingsActivity.kt
index ffb7bf62..1c620366 100644
--- a/app/src/main/kotlin/org/fossify/draw/activities/SettingsActivity.kt
+++ b/app/src/main/kotlin/org/fossify/draw/activities/SettingsActivity.kt
@@ -35,6 +35,7 @@ class SettingsActivity : SimpleActivity() {
setupPreventPhoneFromSleeping()
setupBrushSize()
setupAllowZoomingCanvas()
+ setupRelativeBrushSize()
setupForcePortraitMode()
updateTextColors(binding.settingsHolder)
@@ -101,6 +102,16 @@ class SettingsActivity : SimpleActivity() {
}
}
+ private fun setupAllowZoomingCanvas() {
+ binding.apply {
+ settingsRelativeBrushSize.isChecked = config.relativeBrushSize
+ settingsRelativeBrushSizeHolder.setOnClickListener {
+ settingsRelativeBrushSize.toggle()
+ config.relativeBrushSize = settingsRelativeBrushSize.isChecked
+ }
+ }
+ }
+
private fun setupForcePortraitMode() {
binding.apply {
settingsForcePortrait.isChecked = config.forcePortraitMode
diff --git a/app/src/main/kotlin/org/fossify/draw/helpers/Config.kt b/app/src/main/kotlin/org/fossify/draw/helpers/Config.kt
index ac34f0a0..49d323e8 100644
--- a/app/src/main/kotlin/org/fossify/draw/helpers/Config.kt
+++ b/app/src/main/kotlin/org/fossify/draw/helpers/Config.kt
@@ -38,6 +38,10 @@ class Config(context: Context) : BaseConfig(context) {
get() = prefs.getBoolean(ALLOW_ZOOMING_CANVAS, true)
set(allowZoomingCanvas) = prefs.edit().putBoolean(ALLOW_ZOOMING_CANVAS, allowZoomingCanvas).apply()
+ var relativeBrushSize: Boolean
+ get() = prefs.getBoolean(RELATIVE_BRUSH_SIZE, true)
+ set(relativeBrushSize) = prefs.edit().putBoolean(RELATIVE_BRUSH_SIZE, relativeBrushSize).apply()
+
var forcePortraitMode: Boolean
get() = prefs.getBoolean(FORCE_PORTRAIT_MODE, false)
set(forcePortraitMode) = prefs.edit().putBoolean(FORCE_PORTRAIT_MODE, forcePortraitMode).apply()
diff --git a/app/src/main/kotlin/org/fossify/draw/helpers/Constants.kt b/app/src/main/kotlin/org/fossify/draw/helpers/Constants.kt
index a4a19e0a..0bc6c47b 100644
--- a/app/src/main/kotlin/org/fossify/draw/helpers/Constants.kt
+++ b/app/src/main/kotlin/org/fossify/draw/helpers/Constants.kt
@@ -7,6 +7,7 @@ const val BRUSH_SIZE = "brush_size_2"
const val LAST_SAVE_FOLDER = "last_save_folder"
const val LAST_SAVE_EXTENSION = "last_save_extension"
const val ALLOW_ZOOMING_CANVAS = "allow_zooming_canvas"
+const val RELATIVE_BRUSH_SIZE = "relative_brush_size"
const val FORCE_PORTRAIT_MODE = "force_portrait_mode"
const val PNG = "png"
diff --git a/app/src/main/kotlin/org/fossify/draw/views/MyCanvas.kt b/app/src/main/kotlin/org/fossify/draw/views/MyCanvas.kt
index acabbff8..ce724df4 100644
--- a/app/src/main/kotlin/org/fossify/draw/views/MyCanvas.kt
+++ b/app/src/main/kotlin/org/fossify/draw/views/MyCanvas.kt
@@ -54,6 +54,7 @@ class MyCanvas(context: Context, attrs: AttributeSet) : View(context, attrs) {
private var mCurrBrushSize = 0f
private var mAllowMovingZooming = true
+ private var mRelativeBrushSize = true
private var mIsEraserOn = false
private var mIsBucketFillOn = false
private var mWasMultitouch = false
@@ -282,13 +283,21 @@ class MyCanvas(context: Context, attrs: AttributeSet) : View(context, attrs) {
fun setBrushSize(newBrushSize: Float) {
mCurrBrushSize = newBrushSize
- mPaintOptions.strokeWidth = resources.getDimension(R.dimen.full_brush_size) * (mCurrBrushSize / mScaleFactor / 100f)
+ mPaintOptions.strokeWidth = resources.getDimension(R.dimen.full_brush_size) * (mCurrBrushSize / 100f)
+ if (mRelativeBrushSize) {
+ mPaintOptions.strokeWidth /= mScaleFactor
+ }
}
fun setAllowZooming(allowZooming: Boolean) {
mAllowMovingZooming = allowZooming
}
+ fun setRelativeBrushSize(relativeBrushSize: Boolean) {
+ mRelativeBrushSize = relativeBrushSize
+ setBrushSize(mCurrBrushSize)
+ }
+
fun getBitmap(): Bitmap {
val bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888)
val canvas = Canvas(bitmap)
diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml
index cf4c0c7c..b0f776dc 100644
--- a/app/src/main/res/layout/activity_settings.xml
+++ b/app/src/main/res/layout/activity_settings.xml
@@ -146,6 +146,21 @@
+
+
+
+
+
+
Show brush size tool
Allow zooming and moving the canvas with gestures
+ Use a relative (to zoom) brush size
Clear
Change background color