Skip to content

Commit d3fe836

Browse files
authored
Merge pull request #3 from KvColorPallet/feature/get-hsl-of-color
Feature/get hsl of color
2 parents d5d0192 + bff0a6c commit d3fe836

File tree

12 files changed

+434
-154
lines changed

12 files changed

+434
-154
lines changed

README.md

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,13 @@ Add the following dependency to your `build.gradle` / `build.gradle.kts` file:
2424
For Groovy - `build.gradle`:
2525
````
2626
dependencies {
27-
implementation 'com.github.kavi707:kv-android-color-pallet:0.0.3'
27+
implementation 'com.github.kavi707:kv-android-color-pallet:0.0.4'
2828
}
2929
````
3030
For Kotlin DSL - `build.gradle.kts`:
3131
````
3232
dependencies {
33-
implementation("com.github.kavi707:kv-android-color-pallet:0.0.3")
33+
implementation("com.github.kavi707:kv-android-color-pallet:0.0.4")
3434
}
3535
````
3636

@@ -40,14 +40,20 @@ After you integrated the `KvColorPallet-Android` library, you can consume it as
4040
### Basic Usage
4141
If you wants to consume basic features in `KvColorPallet` then use singleton instance as follows. This singleton instance allows consumers to access following basic functionalities.
4242
```
43+
// Generate mat color schem of given color
44+
KvColorPallet.instance.generateColorPallet(givenColor = MatPackage().matGold)
45+
4346
// Generate alpha color schem of given color
44-
KvColorPallet.instance.generateAlphaColorPallet(givenColor: MatPackage().matGold.color)
47+
KvColorPallet.instance.generateAlphaColorPallet(givenColor = MatPackage().matGold.color)
4548
46-
// Generate mat color schem of given color
47-
KvColorPallet.instance.generateColorPallet(givenColor: MatPackage().matGold)
49+
// Generate lightness color schem of given color
50+
KvColorPallet.instance.generateLightnessColorPallet(givenColor = MatPackage().matGold.color)
51+
52+
// Generate saturation color schem of given color
53+
KvColorPallet.instance.generateSaturationColorPallet(givenColor = MatPackage().matGold.color)
4854
4955
// Generate theme color pallet of given color
50-
KvColorPallet.instance.generateThemeColorPallet(givenColor: MatPackage().matGold.color)
56+
KvColorPallet.instance.generateThemeColorPallet(givenColor = MatPackage().matGold.color)
5157
```
5258

5359
### Advance Usage

kv-color-pallet/src/main/kotlin/com/kavi/droid/color/pallet/KvColorPallet.kt

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import com.kavi.droid.color.pallet.color.Mat700Package
1111
import com.kavi.droid.color.pallet.color.Mat800Package
1212
import com.kavi.droid.color.pallet.color.Mat900Package
1313
import com.kavi.droid.color.pallet.color.MatPackage
14+
import com.kavi.droid.color.pallet.extension.hsl
1415
import com.kavi.droid.color.pallet.model.AppThemePallet
1516
import com.kavi.droid.color.pallet.model.KvColor
1617
import com.kavi.droid.color.pallet.util.ColorUtil
@@ -54,7 +55,7 @@ class KvColorPallet {
5455
* this method generate a list of colors with different alpha values.
5556
*
5657
* @param givenColor The color to generate the alpha values for.
57-
* @return A list of colors with alpha values.
58+
* @return A list of colors.
5859
*/
5960
fun generateAlphaColorPallet(givenColor: Color): List<Color> {
6061
return listOf(
@@ -71,6 +72,56 @@ class KvColorPallet {
7172
)
7273
}
7374

75+
/**
76+
* Generate a list of colors with color saturation values. According to the feeding color,
77+
* this method generate a list of color with different saturation values.
78+
*
79+
* @param givenColor The color to generate the saturation values for.
80+
* @return A list of colors.
81+
*/
82+
fun generateSaturationColorPallet(givenColor: Color): List<Color> {
83+
val hue = givenColor.hsl.hue
84+
val lightness = givenColor.hsl.lightness
85+
86+
return listOf(
87+
Color.hsl(hue = hue, saturation = 1f, lightness = lightness),
88+
Color.hsl(hue = hue, saturation = 0.9f, lightness = lightness),
89+
Color.hsl(hue = hue, saturation = 0.8f, lightness = lightness),
90+
Color.hsl(hue = hue, saturation = 0.7f, lightness = lightness),
91+
Color.hsl(hue = hue, saturation = 0.6f, lightness = lightness),
92+
Color.hsl(hue = hue, saturation = 0.5f, lightness = lightness),
93+
Color.hsl(hue = hue, saturation = 0.4f, lightness = lightness),
94+
Color.hsl(hue = hue, saturation = 0.3f, lightness = lightness),
95+
Color.hsl(hue = hue, saturation = 0.2f, lightness = lightness),
96+
Color.hsl(hue = hue, saturation = 0.1f, lightness = lightness)
97+
)
98+
}
99+
100+
/**
101+
* Generate a list of colors with color lightness values. According to the feeding color,
102+
* this method generate a list of color with different lightness values.
103+
*
104+
* @param givenColor The color to generate the lightness values for.
105+
* @return A list of colors.
106+
*/
107+
fun generateLightnessColorPallet(givenColor: Color): List<Color> {
108+
val hue = givenColor.hsl.hue
109+
val saturation = givenColor.hsl.saturation
110+
111+
return listOf(
112+
Color.hsl(hue = hue, saturation = saturation, lightness = 1f),
113+
Color.hsl(hue = hue, saturation = saturation, lightness = 0.9f),
114+
Color.hsl(hue = hue, saturation = saturation, lightness = 0.8f),
115+
Color.hsl(hue = hue, saturation = saturation, lightness = 0.7f),
116+
Color.hsl(hue = hue, saturation = saturation, lightness = 0.6f),
117+
Color.hsl(hue = hue, saturation = saturation, lightness = 0.5f),
118+
Color.hsl(hue = hue, saturation = saturation, lightness = 0.4f),
119+
Color.hsl(hue = hue, saturation = saturation, lightness = 0.3f),
120+
Color.hsl(hue = hue, saturation = saturation, lightness = 0.2f),
121+
Color.hsl(hue = hue, saturation = saturation, lightness = 0.1f)
122+
)
123+
}
124+
74125
/**
75126
* Generate a list of colors with pre-defined color packages. According to the feeding color,
76127
* this method generate a list of colors.

kv-color-pallet/src/main/kotlin/com/kavi/droid/color/pallet/color/KvColorPackage.kt

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import androidx.compose.ui.graphics.Color
44
import com.kavi.droid.color.pallet.model.KvColor
55

66
enum class ColorPackageType {
7-
PK_0, PK_50, PK_100, PK_200, PK_300, PK_400, PK_500, PK_600, PK_700
7+
PK_0, PK_50, PK_100, PK_200, PK_300, PK_400, PK_500, PK_600, PK_700, PK_800, PK_900
88
}
99

1010
/**
@@ -53,21 +53,21 @@ object MatPackage: ColorPackage() {
5353
* This is for internal usage only.
5454
*/
5555
internal object Mat900Package: ColorPackage() {
56-
val MatRed = KvColor(colorName = "MatRed", colorPackage= ColorPackageType.PK_700, color = Color(0xFFB71C1C))
57-
val MatRose = KvColor(colorName = "MatRose", colorPackage= ColorPackageType.PK_700, color = Color(0xFF880E4F))
58-
val MatLPurple = KvColor(colorName = "MatLPurple", colorPackage= ColorPackageType.PK_700, color = Color(0xFF4A148C))
59-
val MatDPurple = KvColor(colorName = "MatDPurple", colorPackage= ColorPackageType.PK_700, color = Color(0xFF311B92))
60-
val MatDBlue = KvColor(colorName = "MatDBlue", colorPackage= ColorPackageType.PK_700, color = Color(0xFF1A237E))
61-
val MatLBlue = KvColor(colorName = "MatLBlue", colorPackage= ColorPackageType.PK_700, color = Color(0xFF0D47A1))
62-
val MatLLBlue = KvColor(colorName = "MatLLBlue", colorPackage= ColorPackageType.PK_700, color = Color(0xFF01579B))
63-
val MatLCyan = KvColor(colorName = "MatLCyan", colorPackage= ColorPackageType.PK_700, color = Color(0xFF006064))
64-
val MatDCyan = KvColor(colorName = "MatDCyan", colorPackage= ColorPackageType.PK_700, color = Color(0xFF004D40))
65-
val MatDGreen = KvColor(colorName = "MatDGreen", colorPackage= ColorPackageType.PK_700, color = Color(0xFF1B5E20))
66-
val MatLGreen = KvColor(colorName = "MatLGreen", colorPackage= ColorPackageType.PK_700, color = Color(0xFF33691E))
67-
val MatLLGreen = KvColor(colorName = "MatLLGreen", colorPackage= ColorPackageType.PK_700, color = Color(0xFF827717))
68-
val MatYellow = KvColor(colorName = "MatYellow", colorPackage= ColorPackageType.PK_700, color = Color(0xFFF57F17))
69-
val MatGold = KvColor(colorName = "MatGold", colorPackage= ColorPackageType.PK_700, color = Color(0xFFFF6F00))
70-
val MatOrange = KvColor(colorName = "MatOrange", colorPackage= ColorPackageType.PK_700, color = Color(0xFFE65100))
56+
val MatRed = KvColor(colorName = "MatRed", colorPackage= ColorPackageType.PK_900, color = Color(0xFFB71C1C))
57+
val MatRose = KvColor(colorName = "MatRose", colorPackage= ColorPackageType.PK_900, color = Color(0xFF880E4F))
58+
val MatLPurple = KvColor(colorName = "MatLPurple", colorPackage= ColorPackageType.PK_900, color = Color(0xFF4A148C))
59+
val MatDPurple = KvColor(colorName = "MatDPurple", colorPackage= ColorPackageType.PK_900, color = Color(0xFF311B92))
60+
val MatDBlue = KvColor(colorName = "MatDBlue", colorPackage= ColorPackageType.PK_900, color = Color(0xFF1A237E))
61+
val MatLBlue = KvColor(colorName = "MatLBlue", colorPackage= ColorPackageType.PK_900, color = Color(0xFF0D47A1))
62+
val MatLLBlue = KvColor(colorName = "MatLLBlue", colorPackage= ColorPackageType.PK_900, color = Color(0xFF01579B))
63+
val MatLCyan = KvColor(colorName = "MatLCyan", colorPackage= ColorPackageType.PK_900, color = Color(0xFF006064))
64+
val MatDCyan = KvColor(colorName = "MatDCyan", colorPackage= ColorPackageType.PK_900, color = Color(0xFF004D40))
65+
val MatDGreen = KvColor(colorName = "MatDGreen", colorPackage= ColorPackageType.PK_900, color = Color(0xFF1B5E20))
66+
val MatLGreen = KvColor(colorName = "MatLGreen", colorPackage= ColorPackageType.PK_900, color = Color(0xFF33691E))
67+
val MatLLGreen = KvColor(colorName = "MatLLGreen", colorPackage= ColorPackageType.PK_900, color = Color(0xFF827717))
68+
val MatYellow = KvColor(colorName = "MatYellow", colorPackage= ColorPackageType.PK_900, color = Color(0xFFF57F17))
69+
val MatGold = KvColor(colorName = "MatGold", colorPackage= ColorPackageType.PK_900, color = Color(0xFFFF6F00))
70+
val MatOrange = KvColor(colorName = "MatOrange", colorPackage= ColorPackageType.PK_900, color = Color(0xFFE65100))
7171

7272
override fun getColorList(): List<KvColor> = listOf(
7373
MatRed,
@@ -93,21 +93,21 @@ internal object Mat900Package: ColorPackage() {
9393
* This is for internal usage only.
9494
*/
9595
internal object Mat800Package: ColorPackage() {
96-
val MatRed = KvColor(colorName = "MatRed", colorPackage= ColorPackageType.PK_700, color = Color(0xFFC62828))
97-
val MatRose = KvColor(colorName = "MatRose", colorPackage= ColorPackageType.PK_700, color = Color(0xFFAD1457))
98-
val MatLPurple = KvColor(colorName = "MatLPurple", colorPackage= ColorPackageType.PK_700, color = Color(0xFF6A1B9A))
99-
val MatDPurple = KvColor(colorName = "MatDPurple", colorPackage= ColorPackageType.PK_700, color = Color(0xFF4527A0))
100-
val MatDBlue = KvColor(colorName = "MatDBlue", colorPackage= ColorPackageType.PK_700, color = Color(0xFF283593))
101-
val MatLBlue = KvColor(colorName = "MatLBlue", colorPackage= ColorPackageType.PK_700, color = Color(0xFF1565C0))
102-
val MatLLBlue = KvColor(colorName = "MatLLBlue", colorPackage= ColorPackageType.PK_700, color = Color(0xFF0277BD))
103-
val MatLCyan = KvColor(colorName = "MatLCyan", colorPackage= ColorPackageType.PK_700, color = Color(0xFF00838F))
104-
val MatDCyan = KvColor(colorName = "MatDCyan", colorPackage= ColorPackageType.PK_700, color = Color(0xFF00695C))
105-
val MatDGreen = KvColor(colorName = "MatDGreen", colorPackage= ColorPackageType.PK_700, color = Color(0xFF2E7D32))
106-
val MatLGreen = KvColor(colorName = "MatLGreen", colorPackage= ColorPackageType.PK_700, color = Color(0xFF558B2F))
107-
val MatLLGreen = KvColor(colorName = "MatLLGreen", colorPackage= ColorPackageType.PK_700, color = Color(0xFF9E9D24))
108-
val MatYellow = KvColor(colorName = "MatYellow", colorPackage= ColorPackageType.PK_700, color = Color(0xFFF9A825))
109-
val MatGold = KvColor(colorName = "MatGold", colorPackage= ColorPackageType.PK_700, color = Color(0xFFFF8F00))
110-
val MatOrange = KvColor(colorName = "MatOrange", colorPackage= ColorPackageType.PK_700, color = Color(0xFFEF6C00))
96+
val MatRed = KvColor(colorName = "MatRed", colorPackage= ColorPackageType.PK_800, color = Color(0xFFC62828))
97+
val MatRose = KvColor(colorName = "MatRose", colorPackage= ColorPackageType.PK_800, color = Color(0xFFAD1457))
98+
val MatLPurple = KvColor(colorName = "MatLPurple", colorPackage= ColorPackageType.PK_800, color = Color(0xFF6A1B9A))
99+
val MatDPurple = KvColor(colorName = "MatDPurple", colorPackage= ColorPackageType.PK_800, color = Color(0xFF4527A0))
100+
val MatDBlue = KvColor(colorName = "MatDBlue", colorPackage= ColorPackageType.PK_800, color = Color(0xFF283593))
101+
val MatLBlue = KvColor(colorName = "MatLBlue", colorPackage= ColorPackageType.PK_800, color = Color(0xFF1565C0))
102+
val MatLLBlue = KvColor(colorName = "MatLLBlue", colorPackage= ColorPackageType.PK_800, color = Color(0xFF0277BD))
103+
val MatLCyan = KvColor(colorName = "MatLCyan", colorPackage= ColorPackageType.PK_800, color = Color(0xFF00838F))
104+
val MatDCyan = KvColor(colorName = "MatDCyan", colorPackage= ColorPackageType.PK_800, color = Color(0xFF00695C))
105+
val MatDGreen = KvColor(colorName = "MatDGreen", colorPackage= ColorPackageType.PK_800, color = Color(0xFF2E7D32))
106+
val MatLGreen = KvColor(colorName = "MatLGreen", colorPackage= ColorPackageType.PK_800, color = Color(0xFF558B2F))
107+
val MatLLGreen = KvColor(colorName = "MatLLGreen", colorPackage= ColorPackageType.PK_800, color = Color(0xFF9E9D24))
108+
val MatYellow = KvColor(colorName = "MatYellow", colorPackage= ColorPackageType.PK_800, color = Color(0xFFF9A825))
109+
val MatGold = KvColor(colorName = "MatGold", colorPackage= ColorPackageType.PK_800, color = Color(0xFFFF8F00))
110+
val MatOrange = KvColor(colorName = "MatOrange", colorPackage= ColorPackageType.PK_800, color = Color(0xFFEF6C00))
111111

112112
override fun getColorList(): List<KvColor> = listOf(
113113
MatRed,
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package com.kavi.droid.color.pallet.extension
2+
3+
import androidx.compose.ui.graphics.Color
4+
import androidx.compose.ui.graphics.toArgb
5+
import androidx.core.graphics.ColorUtils
6+
7+
/**
8+
* Extension function to get HSL properties of a [Color]
9+
*
10+
* This [hsl] attribute to the [androidx.compose.ui.graphics.Color] object will provide hue, saturation and lightness properties of the color.
11+
*/
12+
internal val Color.hsl: HSL
13+
get() = getHslProperties(this)
14+
15+
/**
16+
* Data class to hold the hue, saturation and lightness properties of a [Color]
17+
*/
18+
data class HSL(
19+
val hue: Float,
20+
val saturation: Float,
21+
val lightness: Float
22+
)
23+
24+
/**
25+
* This method extract and returns the hue, saturation and lightness properties of a [Color]
26+
*
27+
* @param color The color to extract the hue, saturation and lightness properties from.
28+
* @return A [HSL] object containing the hue, saturation and lightness properties of the given [Color].
29+
*/
30+
private fun getHslProperties(color: Color): HSL {
31+
val outHsl = floatArrayOf(0f, 0f, 0f)
32+
33+
val colorInt = color.toArgb()
34+
val red = android.graphics.Color.red(colorInt)
35+
val green = android.graphics.Color.green(colorInt)
36+
val blue = android.graphics.Color.blue(colorInt)
37+
38+
ColorUtils.RGBToHSL(red, green, blue, outHsl)
39+
40+
return HSL(outHsl[0], outHsl[1], outHsl[2])
41+
}

ui-app/src/main/kotlin/com/kavi/droid/color/pallet/app/ui/common/CommonComposable.kt renamed to ui-app/src/main/kotlin/com/kavi/droid/color/pallet/app/ui/common/PalletCommonComposable.kt

File renamed without changes.
Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
package com.kavi.droid.color.pallet.app.ui.common
2+
3+
import androidx.compose.foundation.Canvas
4+
import androidx.compose.foundation.background
5+
import androidx.compose.foundation.border
6+
import androidx.compose.foundation.layout.Arrangement
7+
import androidx.compose.foundation.layout.Box
8+
import androidx.compose.foundation.layout.Column
9+
import androidx.compose.foundation.layout.Row
10+
import androidx.compose.foundation.layout.fillMaxWidth
11+
import androidx.compose.foundation.layout.height
12+
import androidx.compose.foundation.layout.padding
13+
import androidx.compose.foundation.layout.size
14+
import androidx.compose.foundation.layout.width
15+
import androidx.compose.foundation.shape.RoundedCornerShape
16+
import androidx.compose.material3.MaterialTheme
17+
import androidx.compose.material3.Text
18+
import androidx.compose.runtime.Composable
19+
import androidx.compose.ui.Alignment
20+
import androidx.compose.ui.Modifier
21+
import androidx.compose.ui.draw.shadow
22+
import androidx.compose.ui.graphics.Color
23+
import androidx.compose.ui.text.font.FontWeight
24+
import androidx.compose.ui.unit.dp
25+
import com.kavi.droid.color.pallet.KvColorPallet
26+
import com.kavi.droid.color.pallet.model.KvColor
27+
28+
@Composable
29+
fun ColorCircle(givenColor: Color, colorLetter: String = "", letterColor: Color = MaterialTheme.colorScheme.onPrimary) {
30+
31+
val circleSize = 48.dp
32+
33+
Box(
34+
modifier = Modifier
35+
.padding(8.dp)
36+
) {
37+
Canvas(
38+
modifier = Modifier.size(circleSize)
39+
) {
40+
drawCircle(color = givenColor, radius = circleSize.toPx() / 2)
41+
}
42+
43+
Text(colorLetter, modifier = Modifier
44+
.padding(8.dp)
45+
.align(Alignment.Center),
46+
style = MaterialTheme.typography.bodyLarge,
47+
color = letterColor
48+
)
49+
}
50+
}
51+
52+
@Composable
53+
fun ThemeColorRow(givenColor: KvColor) {
54+
Box(
55+
modifier = Modifier
56+
.padding(10.dp)
57+
) {
58+
Row(modifier = Modifier
59+
.border(1.dp, Color.White, shape = RoundedCornerShape(8.dp))
60+
.shadow(
61+
elevation = 10.dp,
62+
shape = RoundedCornerShape(8.dp)
63+
)
64+
.background(Color.White),
65+
verticalAlignment = Alignment.CenterVertically
66+
) {
67+
Box (modifier = Modifier
68+
.width(60.dp)
69+
.height(220.dp)
70+
.padding(top = 16.dp, start = 16.dp, end = 4.dp, bottom = 16.dp)
71+
.background(givenColor.color)
72+
) {
73+
Text("BASE",
74+
modifier = Modifier
75+
.padding(8.dp)
76+
.width(2.dp),
77+
style = MaterialTheme.typography.bodySmall,
78+
fontWeight = FontWeight.ExtraBold,
79+
color = MaterialTheme.colorScheme.onPrimary
80+
)
81+
}
82+
83+
Column(modifier = Modifier
84+
.fillMaxWidth(),
85+
verticalArrangement = Arrangement.Center,
86+
) {
87+
val appThemeColorSet = KvColorPallet.instance.generateThemeColorPallet(
88+
givenColor = givenColor.color,
89+
)
90+
91+
Text("Light Theme", Modifier.padding(top = 8.dp, start = 8.dp), style = MaterialTheme.typography.bodyMedium, fontWeight = FontWeight.ExtraBold,)
92+
93+
Row(
94+
modifier = Modifier
95+
.fillMaxWidth()
96+
.padding(top = 4.dp, start = 8.dp, end = 8.dp, bottom = 4.dp),
97+
//horizontalArrangement = Arrangement.Center
98+
) {
99+
ColorCircle(appThemeColorSet.light.primary, colorLetter = "P")
100+
ColorCircle(appThemeColorSet.light.secondary, colorLetter = "S")
101+
ColorCircle(appThemeColorSet.light.tertiary, colorLetter = "T")
102+
ColorCircle(appThemeColorSet.light.background, colorLetter = "B", letterColor = Color.Black)
103+
}
104+
105+
Text("Dark Theme", Modifier.padding(top = 8.dp, start = 8.dp), style = MaterialTheme.typography.bodyMedium, fontWeight = FontWeight.ExtraBold,)
106+
107+
Row(
108+
modifier = Modifier
109+
.fillMaxWidth()
110+
.padding(top = 4.dp, start = 8.dp, end = 8.dp, bottom = 4.dp),
111+
//horizontalArrangement = Arrangement.Center
112+
) {
113+
ColorCircle(appThemeColorSet.dark.primary, colorLetter = "P")
114+
ColorCircle(appThemeColorSet.dark.secondary, colorLetter = "S", letterColor = Color.Black)
115+
ColorCircle(appThemeColorSet.dark.tertiary, colorLetter = "T")
116+
ColorCircle(appThemeColorSet.dark.background, colorLetter = "B")
117+
}
118+
}
119+
}
120+
}
121+
}

0 commit comments

Comments
 (0)