Skip to content

Commit b4944f7

Browse files
add color picker with ring and hex
1 parent 6917bcf commit b4944f7

14 files changed

+326
-43
lines changed

app/src/main/java/com/smarttoolfactory/composecolorpicker/demo/ColorPickerDemo.kt

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,19 @@ fun ColorPickerDemo() {
105105
}
106106
)
107107

108+
// Ring Hue, Rect Saturation-Value selector HexHSV Picker
109+
DialogRingHexHSV(
110+
modifier = buttonModifier,
111+
color = color,
112+
onPreviousColorChange = {
113+
previousColor = it
114+
},
115+
onCurrentColorChange = { colorChange, hexChange ->
116+
color = colorChange
117+
hexString = hexChange
118+
}
119+
)
120+
108121
DialogCircleHSV(
109122
modifier = buttonModifier,
110123
color = color,
@@ -284,6 +297,38 @@ private fun DialogRingRectHSV(
284297
}
285298
}
286299

300+
@Composable
301+
private fun DialogRingHexHSV(
302+
modifier: Modifier,
303+
color: Color,
304+
onPreviousColorChange: (Color) -> Unit,
305+
onCurrentColorChange: (Color, String) -> Unit
306+
) {
307+
var showDialog by remember { mutableStateOf(false) }
308+
309+
OutlinedButton(
310+
modifier = modifier,
311+
onClick = { showDialog = !showDialog },
312+
colors = ButtonDefaults.outlinedButtonColors(
313+
backgroundColor = Color.Transparent
314+
)
315+
316+
) {
317+
Text(text = "Hue Ring-Hex HSV Dialog")
318+
}
319+
320+
if (showDialog) {
321+
onPreviousColorChange(color.copy())
322+
323+
ColorPickerRingHexHSVDialog(
324+
initialColor = color
325+
) { colorChange, hexChange ->
326+
showDialog = !showDialog
327+
onCurrentColorChange(colorChange, hexChange)
328+
}
329+
}
330+
}
331+
287332
@Composable
288333
private fun DialogCircleHSV(
289334
modifier: Modifier,

app/src/main/java/com/smarttoolfactory/composecolorpicker/demo/HexConversionDemo.kt

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,13 @@ import androidx.compose.foundation.rememberScrollState
77
import androidx.compose.foundation.verticalScroll
88
import androidx.compose.material.Text
99
import androidx.compose.runtime.*
10+
import androidx.compose.ui.Alignment
1011
import androidx.compose.ui.Modifier
1112
import androidx.compose.ui.graphics.Color
13+
import androidx.compose.ui.text.TextStyle
1214
import androidx.compose.ui.text.font.FontWeight
1315
import androidx.compose.ui.unit.dp
1416
import androidx.compose.ui.unit.sp
15-
import com.smarttoolfactory.colorpicker.util.colorToHex
1617
import com.smarttoolfactory.colorpicker.util.colorToHexAlpha
1718
import com.smarttoolfactory.colorpicker.widget.HexAlphaTextField
1819
import com.smarttoolfactory.composecolorpicker.ui.theme.backgroundColor
@@ -23,8 +24,9 @@ fun HexConversionDemo() {
2324
modifier = Modifier
2425
.background(backgroundColor)
2526
.fillMaxSize()
26-
.padding(8.dp)
27-
.verticalScroll(rememberScrollState())
27+
.padding(12.dp)
28+
.verticalScroll(rememberScrollState()),
29+
horizontalAlignment = Alignment.CenterHorizontally
2830
) {
2931

3032
var color by remember {
@@ -39,15 +41,13 @@ fun HexConversionDemo() {
3941
"HEX: $hexString",
4042
color = color,
4143
fontWeight = FontWeight.Bold,
42-
fontSize = 20.sp
44+
fontSize = 30.sp
4345
)
44-
Spacer(modifier = Modifier.height(10.dp))
46+
Spacer(modifier = Modifier.height(16.dp))
4547

4648
HexAlphaTextField(
47-
modifier = Modifier
48-
.wrapContentWidth()
49-
.border(1.dp, Color.Red),
5049
hexString = hexString,
50+
5151
onTextChange = {
5252
hexString = it
5353
}, onColorChange = {

colorpicker/src/main/java/com/smarttoolfactory/colorpicker/dialog/ColorPickerDialog.kt

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,44 @@ fun ColorPickerRingRectHSVDialog(
188188
}
189189
}
190190

191+
@Composable
192+
fun ColorPickerRingHexHSVDialog(
193+
modifier: Modifier = Modifier,
194+
initialColor: Color,
195+
selectionRadius: Dp = 8.dp,
196+
dialogBackgroundColor: Color = Color.White,
197+
dialogShape: Shape = RoundedCornerShape(5.dp),
198+
onDismiss: (Color, String) -> Unit
199+
) {
200+
201+
var color by remember { mutableStateOf(initialColor.copy()) }
202+
var hexString by remember { mutableStateOf(colorToHex(color)) }
203+
204+
Dialog(
205+
onDismissRequest = {
206+
onDismiss(color, hexString)
207+
}
208+
) {
209+
Surface(
210+
modifier = modifier,
211+
color = dialogBackgroundColor,
212+
shape = dialogShape,
213+
elevation = 2.dp
214+
) {
215+
ColorPickerRingRectHex(
216+
modifier = Modifier
217+
.fillMaxWidth()
218+
.padding(horizontal = 8.dp, vertical = 12.dp),
219+
initialColor = initialColor,
220+
selectionRadius = selectionRadius
221+
) { colorChange, hexChange ->
222+
color = colorChange
223+
hexString = hexChange
224+
}
225+
}
226+
}
227+
}
228+
191229
@Composable
192230
fun ColorPickerCircleHSVDialog(
193231
modifier: Modifier = Modifier,

colorpicker/src/main/java/com/smarttoolfactory/colorpicker/picker/ColorPickerCircleValueHSV.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import com.smarttoolfactory.colorpicker.selector.SelectorCircleHueSaturationHSV
1313
import com.smarttoolfactory.colorpicker.slider.SliderCircleColorDisplayValueHSV
1414
import com.smarttoolfactory.colorpicker.util.colorToHSV
1515
import com.smarttoolfactory.colorpicker.util.colorToHex
16-
import com.smarttoolfactory.colorpicker.widget.HexDisplay
16+
import com.smarttoolfactory.colorpicker.widget.ColorDisplayExposedSelectionMenu
1717

1818
/**
1919
*
@@ -69,7 +69,7 @@ fun ColorPickerCircleValueHSV(
6969
}
7070
)
7171

72-
HexDisplay(
72+
ColorDisplayExposedSelectionMenu(
7373
color = currentColor,
7474
colorModel = colorModel,
7575
onColorModelChange = {

colorpicker/src/main/java/com/smarttoolfactory/colorpicker/picker/ColorPickerRectHueLightnessHSL.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import com.smarttoolfactory.colorpicker.selector.SelectorRectHueLightnessHSL
1515
import com.smarttoolfactory.colorpicker.slider.SliderCircleColorDisplaySaturationHSL
1616
import com.smarttoolfactory.colorpicker.util.colorToHSL
1717
import com.smarttoolfactory.colorpicker.util.colorToHex
18-
import com.smarttoolfactory.colorpicker.widget.HexDisplay
18+
import com.smarttoolfactory.colorpicker.widget.ColorDisplayExposedSelectionMenu
1919

2020
@Composable
2121
fun ColorPickerRectHueLightnessHSL(
@@ -71,7 +71,7 @@ fun ColorPickerRectHueLightnessHSL(
7171
}
7272
)
7373

74-
HexDisplay(
74+
ColorDisplayExposedSelectionMenu(
7575
color = currentColor,
7676
colorModel = colorModel,
7777
onColorModelChange = {

colorpicker/src/main/java/com/smarttoolfactory/colorpicker/picker/ColorPickerRectHueSaturationHSL.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import com.smarttoolfactory.colorpicker.selector.SelectorRectHueSaturationHSL
1515
import com.smarttoolfactory.colorpicker.slider.SliderCircleColorDisplayLightnessHSL
1616
import com.smarttoolfactory.colorpicker.util.colorToHSL
1717
import com.smarttoolfactory.colorpicker.util.colorToHex
18-
import com.smarttoolfactory.colorpicker.widget.HexDisplay
18+
import com.smarttoolfactory.colorpicker.widget.ColorDisplayExposedSelectionMenu
1919

2020
@Composable
2121
fun ColorPickerRectHueSaturationHSL(
@@ -70,7 +70,7 @@ fun ColorPickerRectHueSaturationHSL(
7070
}
7171
)
7272

73-
HexDisplay(
73+
ColorDisplayExposedSelectionMenu(
7474
color = currentColor,
7575
colorModel = colorModel,
7676
onColorModelChange = {

colorpicker/src/main/java/com/smarttoolfactory/colorpicker/picker/ColorPickerRectHueSaturationHSV.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import com.smarttoolfactory.colorpicker.selector.SelectorRectHueSaturationHSV
1515
import com.smarttoolfactory.colorpicker.slider.SliderCircleColorDisplayValueHSV
1616
import com.smarttoolfactory.colorpicker.util.colorToHSV
1717
import com.smarttoolfactory.colorpicker.util.colorToHex
18-
import com.smarttoolfactory.colorpicker.widget.HexDisplay
18+
import com.smarttoolfactory.colorpicker.widget.ColorDisplayExposedSelectionMenu
1919

2020
@Composable
2121
fun ColorPickerRectHueSaturationHSV(
@@ -70,7 +70,7 @@ fun ColorPickerRectHueSaturationHSV(
7070
}
7171
)
7272

73-
HexDisplay(
73+
ColorDisplayExposedSelectionMenu(
7474
color = currentColor,
7575
colorModel = colorModel,
7676
onColorModelChange = {

colorpicker/src/main/java/com/smarttoolfactory/colorpicker/picker/ColorPickerRectHueValueHSV.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import com.smarttoolfactory.colorpicker.selector.SelectorRectHueValueHSV
1515
import com.smarttoolfactory.colorpicker.slider.SliderCircleColorDisplaySaturationHSV
1616
import com.smarttoolfactory.colorpicker.util.colorToHSV
1717
import com.smarttoolfactory.colorpicker.util.colorToHex
18-
import com.smarttoolfactory.colorpicker.widget.HexDisplay
18+
import com.smarttoolfactory.colorpicker.widget.ColorDisplayExposedSelectionMenu
1919

2020
@Composable
2121
fun ColorPickerRectHueValueHSV(
@@ -69,7 +69,7 @@ fun ColorPickerRectHueValueHSV(
6969
}
7070
)
7171

72-
HexDisplay(
72+
ColorDisplayExposedSelectionMenu(
7373
color = currentColor,
7474
colorModel = colorModel,
7575
onColorModelChange = {

colorpicker/src/main/java/com/smarttoolfactory/colorpicker/picker/ColorPickerRectSaturationLightnessHSL.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import com.smarttoolfactory.colorpicker.selector.SelectorRectSaturationLightness
1515
import com.smarttoolfactory.colorpicker.slider.SliderCircleColorDisplayHueHSL
1616
import com.smarttoolfactory.colorpicker.util.colorToHSL
1717
import com.smarttoolfactory.colorpicker.util.colorToHex
18-
import com.smarttoolfactory.colorpicker.widget.HexDisplay
18+
import com.smarttoolfactory.colorpicker.widget.ColorDisplayExposedSelectionMenu
1919

2020
@Composable
2121
fun ColorPickerRectSaturationLightnessHSL(
@@ -71,7 +71,7 @@ fun ColorPickerRectSaturationLightnessHSL(
7171
}
7272
)
7373

74-
HexDisplay(
74+
ColorDisplayExposedSelectionMenu(
7575
color = currentColor,
7676
colorModel = colorModel,
7777
onColorModelChange = {

colorpicker/src/main/java/com/smarttoolfactory/colorpicker/picker/ColorPickerRectSaturationValueHSV.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import com.smarttoolfactory.colorpicker.selector.SelectorRectSaturationValueHSV
1515
import com.smarttoolfactory.colorpicker.slider.SliderCircleColorDisplayHueHSV
1616
import com.smarttoolfactory.colorpicker.util.colorToHSV
1717
import com.smarttoolfactory.colorpicker.util.colorToHex
18-
import com.smarttoolfactory.colorpicker.widget.HexDisplay
18+
import com.smarttoolfactory.colorpicker.widget.ColorDisplayExposedSelectionMenu
1919

2020
@Composable
2121
fun ColorPickerRectSaturationValueHSV(
@@ -70,7 +70,7 @@ fun ColorPickerRectSaturationValueHSV(
7070
}
7171
)
7272

73-
HexDisplay(
73+
ColorDisplayExposedSelectionMenu(
7474
color = currentColor,
7575
colorModel = colorModel,
7676
onColorModelChange = {

0 commit comments

Comments
 (0)