Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[GH-8] Implement RGB SeekBars #16

Merged
merged 17 commits into from
Mar 29, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,10 @@ object ColorConverterHub {
ColorKey.CMYK,
IntegerCMYKColorConverter()
)
registerConverter(
ColorKey.RGB,
IntegerRGBColorConverter()
)
registerConverter(
ColorKey.LAB,
IntegerLABColorConverter()
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package codes.side.andcolorpicker.converter

import codes.side.andcolorpicker.model.Color
import codes.side.andcolorpicker.model.IntegerRGBColor

class IntegerRGBColorConverter : ColorConverter {

override fun convertToOpaqueColorInt(color: Color): Int {
TODO("Not yet implemented")
}

override fun convertToColorInt(color: Color): Int {
require(color is IntegerRGBColor) { "Unsupported color type supplied" }

return android.graphics.Color.argb(
color.intA,
color.intR,
color.intG,
color.intB
)
}

override fun convertToPureHueColorInt(color: Color): Int {
TODO("Not yet implemented")
}

override fun setFromColorInt(color: Color, value: Int) {
require(color is IntegerRGBColor) { "Unsupported color type supplied" }

color.copyValuesFrom(
intArrayOf(
android.graphics.Color.alpha(value),
android.graphics.Color.red(value),
android.graphics.Color.green(value),
android.graphics.Color.blue(value)
)
)
}
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,157 @@
package codes.side.andcolorpicker.model

class IntegerRGBColor : IntegerColor(COMPONENTS_COUNT) {
class IntegerRGBColor : IntegerColor(
COMPONENTS_COUNT,
DEFAULT_RGB_VALUES
) {
companion object {
private const val TAG = "IntegerRGBColor"
private const val COMPONENTS_COUNT = 3
private val COMPONENTS_COUNT = Component.values().size

private val DEFAULT_RGB_VALUES = Component
.values().map { it.defaultValue }.toIntArray()
}

override val colorKey = ColorKey.RGB

override val alpha: Float
get() = TODO("Not yet implemented")
get() {
return intA / Component.A.maxValue.toFloat()
}
var intA: Int
get() {
return intValues[Component.A.index]
}
set(value) {
setValue(
Component.A.index,
value,
Component.A.minValue,
Component.A.maxValue
)
}

var floatR: Float
get() {
return intR.toFloat()
}
set(value) {
intR = value.toInt()
}
var intR: Int
get() {
return intValues[Component.R.index]
}
set(value) {
setValue(
Component.R.index,
value,
Component.R.minValue,
Component.R.maxValue
)
}

var floatG: Float
get() {
return intG.toFloat()
}
set(value) {
intG = value.toInt()
}
var intG: Int
get() {
return intValues[Component.G.index]
}
set(value) {
setValue(
Component.G.index,
value,
Component.G.minValue,
Component.G.maxValue
)
}

var floatB: Float
get() {
return intB.toFloat()
}
set(value) {
intB = value.toInt()
}
var intB: Int
get() {
return intValues[Component.B.index]
}
set(value) {
setValue(
Component.B.index,
value,
Component.B.minValue,
Component.B.maxValue
)
}

override fun clone(): IntegerRGBColor {
return super.clone() as IntegerRGBColor
}

override fun equals(other: Any?): Boolean {
if (this === other) return true
if (javaClass != other?.javaClass) return false
if (!super.equals(other)) return false

other as IntegerRGBColor

if (colorKey != other.colorKey) return false

return true
}

override fun hashCode(): Int {
var result = super.hashCode()
result = 31 * result + colorKey.hashCode()
return result
}

// TODO: Make Component top-level?
// TODO: Make tree?
// TODO: Use range?
enum class Component(
val defaultValue: Int,
val minValue: Int,
val maxValue: Int
) {
R(
0,
0,
255
),
G(
0,
0,
255
),
B(
0,
0,
255
),
A(
255,
0,
255
);

// TODO: Review approach
val index: Int
get() {
return ordinal
}

// TODO: Adapt for non-zero min values
val normalizedDefaultValue: Float
get() {
return defaultValue / maxValue.toFloat()
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package codes.side.andcolorpicker.model.factory

import codes.side.andcolorpicker.model.IntegerRGBColor

class RGBColorFactory : ColorFactory<IntegerRGBColor>() {
override fun create(): IntegerRGBColor {
return IntegerRGBColor()
}

override fun createColorFrom(color: IntegerRGBColor): IntegerRGBColor {
return color.clone()
}
}
Loading