diff --git a/app/src/main/java/com/itsaky/androidide/preferences/editorPrefExts.kt b/app/src/main/java/com/itsaky/androidide/preferences/editorPrefExts.kt index f23e90c04a..59f7cc621b 100644 --- a/app/src/main/java/com/itsaky/androidide/preferences/editorPrefExts.kt +++ b/app/src/main/java/com/itsaky/androidide/preferences/editorPrefExts.kt @@ -94,7 +94,7 @@ private class TextSize( override fun onConfigureDialog(preference: Preference, dialog: MaterialAlertDialogBuilder) { val binding = LayoutTextSizeSliderBinding.inflate(LayoutInflater.from(preference.context)) var size = EditorPreferences.fontSize - if (size < 6 || size > 32) { + if (size !in 8.0..32.0) { size = 14f } changeTextSize(binding, size) diff --git a/app/src/main/java/com/itsaky/androidide/ui/CodeEditorView.kt b/app/src/main/java/com/itsaky/androidide/ui/CodeEditorView.kt index 787c3e9a43..ee676d2f23 100644 --- a/app/src/main/java/com/itsaky/androidide/ui/CodeEditorView.kt +++ b/app/src/main/java/com/itsaky/androidide/ui/CodeEditorView.kt @@ -25,6 +25,8 @@ import android.view.InputDevice import android.view.KeyEvent import android.view.LayoutInflater import android.view.MotionEvent +import android.view.ScaleGestureDetector +import android.view.ScaleGestureDetector.SimpleOnScaleGestureListener import androidx.appcompat.widget.LinearLayoutCompat import androidx.core.view.isVisible import com.blankj.utilcode.util.SizeUtils @@ -79,7 +81,7 @@ import org.slf4j.LoggerFactory import java.io.Closeable import java.io.File -private const val MIN_FONT_SIZE = 6f +private const val MIN_FONT_SIZE = 8f private const val DEFAULT_FONT_SIZE = 14f private const val MAX_FONT_SIZE = 32f private val ARCHIVE_EXTENSIONS = setOf("apk", "cgp", "zip") @@ -108,6 +110,8 @@ class CodeEditorView( Dispatchers.Default + CoroutineName("CodeEditorView"), ) + private lateinit var scaleGestureDetector: ScaleGestureDetector + /** * The [CoroutineContext][kotlin.coroutines.CoroutineContext] used to reading and writing the file * in this editor. We use a separate, single-threaded context assuming that the file will be either @@ -234,7 +238,31 @@ class CodeEditorView( addView(searchLayout, LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)) readFileAndApplySelection(file, selection) - } + + scaleGestureDetector = + ScaleGestureDetector(context, object : SimpleOnScaleGestureListener() { + override fun onScale(detector: ScaleGestureDetector): Boolean { + val scaleFactor = detector.scaleFactor + val delta = when { + scaleFactor > 1f -> 1f + scaleFactor < 1f -> -1f + else -> 0f + } + + if (delta != 0f) { + changeFontSizeBy(delta) + } + + return true + } + }) + + } + + override fun onTouchEvent(event: MotionEvent): Boolean { + scaleGestureDetector.onTouchEvent(event) + return super.onTouchEvent(event) + } override fun onHighlightLine( file: String, @@ -736,11 +764,9 @@ class CodeEditorView( private fun changeFontSizeBy(delta: Float) { val current = EditorPreferences.fontSize val newSize = computeNewEditorFontSize(current, delta) - // HJE 2026-03-03 This works, but it seems weird that we set binding.editor.setTextSize(newSize) every time OUTSIDE the if () - if (newSize != current) { - EditorPreferences.fontSize = newSize - } - binding.editor.setTextSize(newSize) + if (newSize == current) return + binding.editor.setTextSize(newSize) + EditorPreferences.fontSize = newSize } } diff --git a/app/src/main/res/layout/layout_text_size_slider.xml b/app/src/main/res/layout/layout_text_size_slider.xml index 91af9c9529..a431791f35 100755 --- a/app/src/main/res/layout/layout_text_size_slider.xml +++ b/app/src/main/res/layout/layout_text_size_slider.xml @@ -16,7 +16,7 @@ android:layout_height="wrap_content" android:stepSize="1.0" android:value="14.0" - android:valueFrom="6.0" + android:valueFrom="8.0" android:valueTo="32.0" app:thumbElevation="4dp" /> diff --git a/editor-treesitter/src/main/java/io/github/rosemoe/sora/editor/ts/LineSpansGenerator.kt b/editor-treesitter/src/main/java/io/github/rosemoe/sora/editor/ts/LineSpansGenerator.kt index ca2a36248a..625e81c06a 100644 --- a/editor-treesitter/src/main/java/io/github/rosemoe/sora/editor/ts/LineSpansGenerator.kt +++ b/editor-treesitter/src/main/java/io/github/rosemoe/sora/editor/ts/LineSpansGenerator.kt @@ -83,7 +83,7 @@ class LineSpansGenerator(internal var tree: TSTree, internal var lineCount: Int, companion object { - const val CACHE_THRESHOLD = 60 + const val CACHE_THRESHOLD = 100 const val TAG = "LineSpansGenerator" /** * Delay in milliseconds to batch UI redraws, preventing frame drops