mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-11-04 08:08:55 +01:00 
			
		
		
		
	Add color filter blend modes (#2013)
* Add color filter blend modes * Only show modes supported by currently used API level. * Fix arrays.xml for API level <=27.
This commit is contained in:
		@@ -29,6 +29,8 @@ object PreferenceKeys {
 | 
			
		||||
 | 
			
		||||
    const val colorFilterValue = "color_filter_value"
 | 
			
		||||
 | 
			
		||||
    const val colorFilterMode = "color_filter_mode"
 | 
			
		||||
 | 
			
		||||
    const val defaultViewer = "pref_default_viewer_key"
 | 
			
		||||
 | 
			
		||||
    const val imageScaleType = "pref_image_scale_type_key"
 | 
			
		||||
 
 | 
			
		||||
@@ -57,6 +57,8 @@ class PreferencesHelper(val context: Context) {
 | 
			
		||||
 | 
			
		||||
    fun colorFilterValue() = rxPrefs.getInteger(Keys.colorFilterValue, 0)
 | 
			
		||||
 | 
			
		||||
    fun colorFilterMode() = rxPrefs.getInteger(Keys.colorFilterMode, 0)
 | 
			
		||||
 | 
			
		||||
    fun defaultViewer() = prefs.getInt(Keys.defaultViewer, 1)
 | 
			
		||||
 | 
			
		||||
    fun imageScaleType() = rxPrefs.getInteger(Keys.imageScaleType, 1)
 | 
			
		||||
 
 | 
			
		||||
@@ -574,6 +574,9 @@ class ReaderActivity : BaseRxActivity<ReaderPresenter>() {
 | 
			
		||||
 | 
			
		||||
            subscriptions += preferences.colorFilter().asObservable()
 | 
			
		||||
                .subscribe { setColorFilter(it) }
 | 
			
		||||
 | 
			
		||||
            subscriptions += preferences.colorFilterMode().asObservable()
 | 
			
		||||
                .subscribe { setColorFilter(preferences.colorFilter().getOrDefault()) }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
@@ -722,7 +725,7 @@ class ReaderActivity : BaseRxActivity<ReaderPresenter>() {
 | 
			
		||||
         */
 | 
			
		||||
        private fun setColorFilterValue(value: Int) {
 | 
			
		||||
            color_overlay.visibility = View.VISIBLE
 | 
			
		||||
            color_overlay.setBackgroundColor(value)
 | 
			
		||||
            color_overlay.setFilterColor(value, preferences.colorFilterMode().getOrDefault())
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -11,6 +11,7 @@ import eu.kanade.tachiyomi.R
 | 
			
		||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
 | 
			
		||||
import eu.kanade.tachiyomi.data.preference.getOrDefault
 | 
			
		||||
import eu.kanade.tachiyomi.util.plusAssign
 | 
			
		||||
import eu.kanade.tachiyomi.widget.IgnoreFirstSpinnerListener
 | 
			
		||||
import eu.kanade.tachiyomi.widget.SimpleSeekBarListener
 | 
			
		||||
import kotlinx.android.synthetic.main.reader_color_filter.*
 | 
			
		||||
import kotlinx.android.synthetic.main.reader_color_filter_sheet.*
 | 
			
		||||
@@ -54,6 +55,9 @@ class ReaderColorFilterSheet(activity: ReaderActivity) : BottomSheetDialog(activ
 | 
			
		||||
        subscriptions += preferences.colorFilter().asObservable()
 | 
			
		||||
            .subscribe { setColorFilter(it, view) }
 | 
			
		||||
 | 
			
		||||
        subscriptions += preferences.colorFilterMode().asObservable()
 | 
			
		||||
            .subscribe { setColorFilter(preferences.colorFilter().getOrDefault(), view) }
 | 
			
		||||
 | 
			
		||||
        subscriptions += preferences.customBrightness().asObservable()
 | 
			
		||||
            .subscribe { setCustomBrightness(it, view) }
 | 
			
		||||
 | 
			
		||||
@@ -84,6 +88,11 @@ class ReaderColorFilterSheet(activity: ReaderActivity) : BottomSheetDialog(activ
 | 
			
		||||
            preferences.customBrightness().set(isChecked)
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        color_filter_mode.onItemSelectedListener = IgnoreFirstSpinnerListener { position ->
 | 
			
		||||
            preferences.colorFilterMode().set(position)
 | 
			
		||||
        }
 | 
			
		||||
        color_filter_mode.setSelection(preferences.colorFilterMode().getOrDefault(), false)
 | 
			
		||||
 | 
			
		||||
        seekbar_color_filter_alpha.setOnSeekBarChangeListener(object : SimpleSeekBarListener() {
 | 
			
		||||
            override fun onProgressChanged(seekBar: SeekBar, value: Int, fromUser: Boolean) {
 | 
			
		||||
                if (fromUser) {
 | 
			
		||||
@@ -248,7 +257,7 @@ class ReaderColorFilterSheet(activity: ReaderActivity) : BottomSheetDialog(activ
 | 
			
		||||
     */
 | 
			
		||||
    private fun setColorFilterValue(@ColorInt color: Int, view: View) = with(view) {
 | 
			
		||||
        color_overlay.visibility = View.VISIBLE
 | 
			
		||||
        color_overlay.setBackgroundColor(color)
 | 
			
		||||
        color_overlay.setFilterColor(color, preferences.colorFilterMode().getOrDefault())
 | 
			
		||||
        setValues(color, view)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,32 @@
 | 
			
		||||
package eu.kanade.tachiyomi.ui.reader
 | 
			
		||||
 | 
			
		||||
import android.content.Context
 | 
			
		||||
import android.graphics.*
 | 
			
		||||
import android.util.AttributeSet
 | 
			
		||||
import android.view.View
 | 
			
		||||
 | 
			
		||||
class ReaderColorFilterView(
 | 
			
		||||
        context: Context,
 | 
			
		||||
        attrs: AttributeSet? = null
 | 
			
		||||
) : View(context, attrs) {
 | 
			
		||||
 | 
			
		||||
    private val colorFilterPaint: Paint = Paint()
 | 
			
		||||
 | 
			
		||||
    fun setFilterColor(color: Int, filterMode: Int) {
 | 
			
		||||
        colorFilterPaint.setColor(color)
 | 
			
		||||
        colorFilterPaint.xfermode = PorterDuffXfermode(when (filterMode) {
 | 
			
		||||
            1 -> PorterDuff.Mode.MULTIPLY
 | 
			
		||||
            2 -> PorterDuff.Mode.SCREEN
 | 
			
		||||
            3 -> PorterDuff.Mode.OVERLAY
 | 
			
		||||
            4 -> PorterDuff.Mode.LIGHTEN
 | 
			
		||||
            5 -> PorterDuff.Mode.DARKEN
 | 
			
		||||
            else -> PorterDuff.Mode.SRC_OVER
 | 
			
		||||
        })
 | 
			
		||||
        invalidate()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun onDraw(canvas: Canvas) {
 | 
			
		||||
        super.onDraw(canvas)
 | 
			
		||||
        canvas.drawPaint(colorFilterPaint)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user