mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-30 22:07:57 +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