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