diff --git a/android/android-base/src/main/java/org/isoron/androidbase/utils/ColorUtils.java b/android/android-base/src/main/java/org/isoron/androidbase/utils/ColorUtils.java deleted file mode 100644 index 58199d2dd..000000000 --- a/android/android-base/src/main/java/org/isoron/androidbase/utils/ColorUtils.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (C) 2016 Álinson Santos Xavier - * - * This file is part of Loop Habit Tracker. - * - * Loop Habit Tracker is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by the - * Free Software Foundation, either version 3 of the License, or (at your - * option) any later version. - * - * Loop Habit Tracker is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ - -package org.isoron.androidbase.utils; - -import android.graphics.*; - -public abstract class ColorUtils -{ - public static int mixColors(int color1, int color2, float amount) - { - final byte ALPHA_CHANNEL = 24; - final byte RED_CHANNEL = 16; - final byte GREEN_CHANNEL = 8; - final byte BLUE_CHANNEL = 0; - - final float inverseAmount = 1.0f - amount; - - int a = ((int) (((float) (color1 >> ALPHA_CHANNEL & 0xff) * amount) + - ((float) (color2 >> ALPHA_CHANNEL & 0xff) * - inverseAmount))) & 0xff; - int r = ((int) (((float) (color1 >> RED_CHANNEL & 0xff) * amount) + - ((float) (color2 >> RED_CHANNEL & 0xff) * - inverseAmount))) & 0xff; - int g = ((int) (((float) (color1 >> GREEN_CHANNEL & 0xff) * amount) + - ((float) (color2 >> GREEN_CHANNEL & 0xff) * - inverseAmount))) & 0xff; - int b = ((int) (((float) (color1 & 0xff) * amount) + - ((float) (color2 & 0xff) * inverseAmount))) & 0xff; - - return a << ALPHA_CHANNEL | r << RED_CHANNEL | g << GREEN_CHANNEL | - b << BLUE_CHANNEL; - } - - public static int setAlpha(int color, float newAlpha) - { - int intAlpha = (int) (newAlpha * 255); - return Color.argb(intAlpha, Color.red(color), Color.green(color), - Color.blue(color)); - } - - public static int setMinValue(int color, float newValue) - { - float hsv[] = new float[3]; - Color.colorToHSV(color, hsv); - hsv[2] = Math.max(hsv[2], newValue); - return Color.HSVToColor(hsv); - } - -} \ No newline at end of file diff --git a/android/android-base/src/main/java/org/isoron/androidbase/utils/ColorUtils.kt b/android/android-base/src/main/java/org/isoron/androidbase/utils/ColorUtils.kt new file mode 100644 index 000000000..5f3d3e9e8 --- /dev/null +++ b/android/android-base/src/main/java/org/isoron/androidbase/utils/ColorUtils.kt @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2016 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * Loop Habit Tracker is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ +package org.isoron.androidbase.utils + +import android.graphics.Color +import kotlin.math.max + +object ColorUtils { + private const val ALPHA_CHANNEL = 24 + private const val RED_CHANNEL = 16 + private const val GREEN_CHANNEL = 8 + private const val BLUE_CHANNEL = 0 + + @JvmStatic + fun mixColors(color1: Int, color2: Int, amount: Float): Int { + val a = mixColorChannel(color1, color2, amount, ALPHA_CHANNEL) + val r = mixColorChannel(color1, color2, amount, RED_CHANNEL) + val g = mixColorChannel(color1, color2, amount, GREEN_CHANNEL) + val b = mixColorChannel(color1, color2, amount, BLUE_CHANNEL) + return a or r or g or b + } + + @JvmStatic + fun setAlpha(color: Int, newAlpha: Float): Int { + val intAlpha = (newAlpha * 255).toInt() + return Color.argb(intAlpha, Color.red(color), Color.green(color), Color.blue(color)) + } + + @JvmStatic + fun setMinValue(color: Int, newValue: Float): Int { + val hsv = FloatArray(3) + Color.colorToHSV(color, hsv) + hsv[2] = max(hsv[2], newValue) + return Color.HSVToColor(hsv) + } + + private fun mixColorChannel(color1: Int, color2: Int, amount: Float, channel: Int): Int { + val fl = (color1 shr channel and 0xff).toFloat() * amount + val f2 = (color2 shr channel and 0xff).toFloat() * (1.0f - amount) + return (fl + f2).toInt() and 0xff shl channel + } +} \ No newline at end of file