Skip to content

Commit 7a47c37

Browse files
rename ColorGradient to GradientColorState
1 parent 987eb76 commit 7a47c37

File tree

3 files changed

+132
-104
lines changed

3 files changed

+132
-104
lines changed

colorpicker/src/main/java/com/smarttoolfactory/colorpicker/model/GradientColor.kt renamed to colorpicker/src/main/java/com/smarttoolfactory/colorpicker/model/GradientColorState.kt

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,30 +14,37 @@ import com.smarttoolfactory.colorpicker.ui.GradientAngle
1414
import com.smarttoolfactory.colorpicker.ui.GradientOffset
1515

1616
@Composable
17-
fun rememberGradientColor(dpSize: DpSize = DpSize.Zero): GradientColor {
17+
fun rememberGradientColorState(
18+
color: Color = Color.Unspecified,
19+
size: DpSize = DpSize.Zero
20+
): GradientColorState {
1821

1922
val density = LocalDensity.current
2023

2124
return remember {
2225

23-
val size = if (dpSize == DpSize.Zero) {
26+
val sizePx = if (size == DpSize.Zero) {
2427
Size.Zero
2528
} else {
2629
with(density) {
2730
Size(
28-
dpSize.width.toPx(),
29-
dpSize.height.toPx()
31+
size.width.toPx(),
32+
size.height.toPx()
3033
)
3134
}
3235
}
33-
GradientColor(size)
36+
GradientColorState(color, sizePx)
3437
}
3538
}
3639

37-
class GradientColor(size: Size) {
40+
class GradientColorState internal constructor(initialColor: Color, size: Size) {
3841

3942
var size by mutableStateOf(size)
40-
val brushColor: BrushColor
43+
44+
var color: Color = initialColor
45+
internal set
46+
47+
val brush: Brush
4148
get() {
4249

4350
val colorStops = if (colorStops.size == 1) {
@@ -71,8 +78,14 @@ class GradientColor(size: Size) {
7178
),
7279
)
7380
}
74-
return BrushColor(brush = brush)
81+
return brush
82+
}
83+
84+
val brushColor: BrushColor
85+
get() {
86+
return BrushColor(color = color, brush = brush)
7587
}
88+
7689
var gradientType: GradientType by mutableStateOf(GradientType.Linear)
7790
var colorStops = mutableStateListOf(
7891
0.0f to Color.Red,

colorpicker/src/main/java/com/smarttoolfactory/colorpicker/picker/ColorPickerRingDimondGradientHSL.kt renamed to colorpicker/src/main/java/com/smarttoolfactory/colorpicker/picker/gradient/ColorPickerRingDimondGradientHSL.kt

Lines changed: 78 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
package com.smarttoolfactory.colorpicker.picker
1+
package com.smarttoolfactory.colorpicker.picker.gradient
22

3-
import androidx.compose.foundation.clickable
43
import androidx.compose.foundation.layout.*
54
import androidx.compose.foundation.rememberScrollState
65
import androidx.compose.foundation.verticalScroll
@@ -10,19 +9,15 @@ import androidx.compose.ui.Modifier
109
import androidx.compose.ui.graphics.Color
1110
import androidx.compose.ui.unit.Dp
1211
import androidx.compose.ui.unit.dp
13-
import com.smarttoolfactory.colorpicker.model.BrushColor
14-
import com.smarttoolfactory.colorpicker.model.ColorHSL
15-
import com.smarttoolfactory.colorpicker.model.ColorModel
16-
import com.smarttoolfactory.colorpicker.model.rememberGradientColor
12+
import com.smarttoolfactory.colorpicker.model.*
1713
import com.smarttoolfactory.colorpicker.selector.SelectorDiamondSaturationLightnessHSL
1814
import com.smarttoolfactory.colorpicker.selector.SelectorRingHue
1915
import com.smarttoolfactory.colorpicker.selector.gradient.BrushDisplay
2016
import com.smarttoolfactory.colorpicker.selector.gradient.GradientSelector
2117
import com.smarttoolfactory.colorpicker.slider.CompositeSliderPanel
2218
import com.smarttoolfactory.colorpicker.util.colorToHSL
2319
import com.smarttoolfactory.colorpicker.widget.ColorDisplayRoundedRect
24-
import com.smarttoolfactory.colorpicker.widget.ColorModelChangeTabRow
25-
import com.smarttoolfactory.colorpicker.widget.ColorWheel
20+
import com.smarttoolfactory.colorpicker.widget.ColorGradientModeChangeTabRow
2621

2722
/**
2823
* ColorPicker with [SelectorRingHue] hue selector and [SelectorDiamondSaturationLightnessHSL]
@@ -40,26 +35,25 @@ import com.smarttoolfactory.colorpicker.widget.ColorWheel
4035
* @param ringBorderStrokeColor stroke color for drawing borders around inner or outer radius.
4136
* @param ringBorderStrokeWidth stroke width of borders.
4237
* @param selectionRadius radius of white and black circle selector.
43-
* @param onColorChange callback that is triggered when [Color] is changed using [SelectorRingHue],
38+
* @param onBrushColorChange callback that is triggered when [Color] is changed using [SelectorRingHue],
4439
* [SelectorDiamondSaturationLightnessHSL] or [CompositeSliderPanel]
4540
*/
4641
@Composable
4742
fun ColorPickerRingDiamondGradientHSL(
4843
modifier: Modifier = Modifier,
4944
initialColor: Color,
45+
gradientColorState: GradientColorState = rememberGradientColorState(),
5046
ringOuterRadiusFraction: Float = .9f,
5147
ringInnerRadiusFraction: Float = .6f,
5248
ringBackgroundColor: Color = Color.Black,
5349
ringBorderStrokeColor: Color = Color.Black,
5450
ringBorderStrokeWidth: Dp = 4.dp,
5551
selectionRadius: Dp = 8.dp,
56-
onColorChange: (BrushColor) -> Unit
52+
onBrushColorChange: (BrushColor) -> Unit
5753
) {
5854

59-
val gradientColor = rememberGradientColor()
60-
var isGradientMode by remember { mutableStateOf(false) }
61-
6255
var inputColorModel by remember { mutableStateOf(ColorModel.HSL) }
56+
var colorMode by remember { mutableStateOf(ColorMode.HSL) }
6357

6458
val hslArray = colorToHSL(initialColor)
6559

@@ -71,22 +65,18 @@ fun ColorPickerRingDiamondGradientHSL(
7165
val currentColor =
7266
Color.hsl(hue = hue, saturation = saturation, lightness = lightness, alpha = alpha)
7367

74-
gradientColor.brushColor.color = currentColor
75-
onColorChange(gradientColor.brushColor)
76-
7768
Column(
7869
modifier = modifier,
7970
horizontalAlignment = Alignment.CenterHorizontally,
8071
) {
8172

8273
Spacer(modifier = Modifier.height(10.dp))
8374

84-
// Initial and Current Colors
85-
Box(modifier=Modifier.height(80.dp), contentAlignment = Alignment.Center) {
86-
if (isGradientMode) {
87-
BrushDisplay(gradientColor = gradientColor)
88-
} else {
89-
ColorDisplayRoundedRect(
75+
// Initial-Current Colors/Gradient Color
76+
Box(modifier = Modifier.height(80.dp), contentAlignment = Alignment.Center) {
77+
when (colorMode) {
78+
ColorMode.Gradient -> BrushDisplay(gradientColorState = gradientColorState)
79+
else -> ColorDisplayRoundedRect(
9080
modifier = Modifier
9181
.fillMaxWidth()
9282
.padding(horizontal = 50.dp, vertical = 10.dp),
@@ -125,59 +115,83 @@ fun ColorPickerRingDiamondGradientHSL(
125115
}
126116
}
127117

128-
// HSL-HSV-RGB Color Model Change Tabs
118+
// HSL-HSV-RGB-Gradient Color Model Change Tabs
129119
Row(
130120
modifier = Modifier.fillMaxWidth(),
131121
verticalAlignment = Alignment.CenterVertically
132122
) {
133-
ColorModelChangeTabRow(
134-
modifier = Modifier.weight(3f),
135-
colorModel = inputColorModel,
136-
onColorModelChange = {
137-
isGradientMode = false
138-
inputColorModel = it
123+
ColorGradientModeChangeTabRow(
124+
colorMode = colorMode,
125+
onColorModeChange = {
126+
colorMode = it
127+
when (colorMode) {
128+
ColorMode.HSL -> {
129+
inputColorModel = ColorModel.HSL
130+
}
131+
ColorMode.HSV -> {
132+
inputColorModel = ColorModel.HSL
133+
}
134+
ColorMode.RGB -> {
135+
inputColorModel = ColorModel.RGB
136+
}
137+
else -> Unit
138+
}
139139
}
140140
)
141-
142-
Column(modifier = Modifier.weight(1f)) {
143-
ColorWheel(modifier = Modifier
144-
.size(16.dp)
145-
.clickable {
146-
isGradientMode = true
147-
})
148-
}
149141
}
150142

151143
// HSL-HSV-RGB Sliders
152-
if (!isGradientMode) {
153-
CompositeSliderPanel(
154-
compositeColor = ColorHSL(
155-
hue = hue,
156-
saturation = saturation,
157-
lightness = lightness,
158-
alpha = alpha
159-
),
160-
onColorChange = {
161-
(it as? ColorHSL)?.let { color ->
162-
hue = color.hue
163-
saturation = color.saturation
164-
lightness = color.lightness
165-
alpha = color.alpha
144+
when (colorMode) {
145+
ColorMode.Gradient -> {
146+
Column(
147+
modifier = Modifier
148+
.fillMaxHeight()
149+
.verticalScroll(rememberScrollState())
150+
) {
151+
GradientSelector(
152+
color = currentColor,
153+
gradientColorState = gradientColorState
154+
) {
155+
onBrushColorChange(
156+
BrushColor(brush = it)
157+
)
166158
}
167-
},
168-
showAlphaSlider = true,
169-
inputColorModel = inputColorModel,
170-
outputColorModel = ColorModel.HSL
171-
)
172-
173-
} else {
174-
Column(
175-
modifier = Modifier
176-
.fillMaxHeight()
177-
.verticalScroll(rememberScrollState())
178-
) {
179-
GradientSelector(color = currentColor, gradientColor = gradientColor)
159+
}
160+
}
161+
else -> {
162+
CompositeSliderPanel(
163+
compositeColor = ColorHSL(
164+
hue = hue,
165+
saturation = saturation,
166+
lightness = lightness,
167+
alpha = alpha
168+
),
169+
onColorChange = {
170+
(it as? ColorHSL)?.let { color ->
171+
hue = color.hue
172+
saturation = color.saturation
173+
lightness = color.lightness
174+
alpha = color.alpha
175+
176+
gradientColorState.color = Color.hsl(
177+
hue = hue,
178+
saturation = saturation,
179+
lightness = lightness,
180+
alpha = alpha
181+
)
182+
183+
onBrushColorChange(
184+
BrushColor(color = gradientColorState.color)
185+
)
186+
187+
}
188+
},
189+
showAlphaSlider = true,
190+
inputColorModel = inputColorModel,
191+
outputColorModel = ColorModel.HSL
192+
)
180193
}
181194
}
195+
182196
}
183197
}

0 commit comments

Comments
 (0)