mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-30 22:07:57 +01:00 
			
		
		
		
	Reader grayscale filter (closes #2822)
This commit is contained in:
		| @@ -49,6 +49,8 @@ object PreferenceKeys { | ||||
|  | ||||
|     const val colorFilterMode = "color_filter_mode" | ||||
|  | ||||
|     const val grayscale = "pref_grayscale" | ||||
|  | ||||
|     const val defaultReadingMode = "pref_default_reading_mode_key" | ||||
|  | ||||
|     const val defaultOrientationType = "pref_default_orientation_type_key" | ||||
|   | ||||
| @@ -121,6 +121,8 @@ class PreferencesHelper(val context: Context) { | ||||
|  | ||||
|     fun colorFilterMode() = flowPrefs.getInt(Keys.colorFilterMode, 0) | ||||
|  | ||||
|     fun grayscale() = flowPrefs.getBoolean(Keys.grayscale, false) | ||||
|  | ||||
|     fun defaultReadingMode() = prefs.getInt(Keys.defaultReadingMode, ReadingModeType.RIGHT_TO_LEFT.flagValue) | ||||
|  | ||||
|     fun defaultOrientationType() = prefs.getInt(Keys.defaultOrientationType, OrientationType.FREE.flagValue) | ||||
|   | ||||
| @@ -8,12 +8,16 @@ import android.content.Context | ||||
| import android.content.Intent | ||||
| import android.graphics.Bitmap | ||||
| import android.graphics.Color | ||||
| import android.graphics.ColorMatrix | ||||
| import android.graphics.ColorMatrixColorFilter | ||||
| import android.graphics.Paint | ||||
| import android.os.Build | ||||
| import android.os.Bundle | ||||
| import android.view.KeyEvent | ||||
| import android.view.Menu | ||||
| import android.view.MenuItem | ||||
| import android.view.MotionEvent | ||||
| import android.view.View.LAYER_TYPE_HARDWARE | ||||
| import android.view.WindowManager | ||||
| import android.view.animation.Animation | ||||
| import android.view.animation.AnimationUtils | ||||
| @@ -789,6 +793,16 @@ class ReaderActivity : BaseRxActivity<ReaderActivityBinding, ReaderPresenter>() | ||||
|      */ | ||||
|     private inner class ReaderConfig { | ||||
|  | ||||
|         private val grayscalePaint by lazy { | ||||
|             Paint().apply { | ||||
|                 colorFilter = ColorMatrixColorFilter( | ||||
|                     ColorMatrix().apply { | ||||
|                         setSaturation(0f) | ||||
|                     } | ||||
|                 ) | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         /** | ||||
|          * Initializes the reader subscriptions. | ||||
|          */ | ||||
| @@ -827,6 +841,10 @@ class ReaderActivity : BaseRxActivity<ReaderActivityBinding, ReaderPresenter>() | ||||
|             preferences.colorFilterMode().asFlow() | ||||
|                 .onEach { setColorFilter(preferences.colorFilter().get()) } | ||||
|                 .launchIn(lifecycleScope) | ||||
|  | ||||
|             preferences.grayscale().asFlow() | ||||
|                 .onEach { setGrayscale(it) } | ||||
|                 .launchIn(lifecycleScope) | ||||
|         } | ||||
|  | ||||
|         /** | ||||
| @@ -934,5 +952,10 @@ class ReaderActivity : BaseRxActivity<ReaderActivityBinding, ReaderPresenter>() | ||||
|             binding.colorOverlay.isVisible = true | ||||
|             binding.colorOverlay.setFilterColor(value, preferences.colorFilterMode().get()) | ||||
|         } | ||||
|  | ||||
|         private fun setGrayscale(enabled: Boolean) { | ||||
|             val paint = if (enabled) grayscalePaint else null | ||||
|             binding.viewerContainer.setLayerType(LAYER_TYPE_HARDWARE, paint) | ||||
|         } | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -14,7 +14,7 @@ import androidx.lifecycle.lifecycleScope | ||||
| import eu.kanade.tachiyomi.data.preference.PreferencesHelper | ||||
| import eu.kanade.tachiyomi.databinding.ReaderColorFilterSettingsBinding | ||||
| import eu.kanade.tachiyomi.ui.reader.ReaderActivity | ||||
| import eu.kanade.tachiyomi.widget.IgnoreFirstSpinnerListener | ||||
| import eu.kanade.tachiyomi.util.preference.bindToPreference | ||||
| import eu.kanade.tachiyomi.widget.SimpleSeekBarListener | ||||
| import kotlinx.coroutines.flow.launchIn | ||||
| import kotlinx.coroutines.flow.onEach | ||||
| @@ -63,20 +63,10 @@ class ReaderColorFilterSettings @JvmOverloads constructor(context: Context, attr | ||||
|         binding.seekbarColorFilterBlue.progress = argb[3] | ||||
|  | ||||
|         // Set listeners | ||||
|         binding.switchColorFilter.isChecked = preferences.colorFilter().get() | ||||
|         binding.switchColorFilter.setOnCheckedChangeListener { _, isChecked -> | ||||
|             preferences.colorFilter().set(isChecked) | ||||
|         } | ||||
|  | ||||
|         binding.customBrightness.isChecked = preferences.customBrightness().get() | ||||
|         binding.customBrightness.setOnCheckedChangeListener { _, isChecked -> | ||||
|             preferences.customBrightness().set(isChecked) | ||||
|         } | ||||
|  | ||||
|         binding.colorFilterMode.onItemSelectedListener = IgnoreFirstSpinnerListener { position -> | ||||
|             preferences.colorFilterMode().set(position) | ||||
|         } | ||||
|         binding.colorFilterMode.setSelection(preferences.colorFilterMode().get(), false) | ||||
|         binding.switchColorFilter.bindToPreference(preferences.colorFilter()) | ||||
|         binding.customBrightness.bindToPreference(preferences.customBrightness()) | ||||
|         binding.colorFilterMode.bindToPreference(preferences.colorFilterMode()) | ||||
|         binding.grayscale.bindToPreference(preferences.grayscale()) | ||||
|  | ||||
|         binding.seekbarColorFilterAlpha.setOnSeekBarChangeListener( | ||||
|             object : SimpleSeekBarListener() { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user