| Age | Commit message (Collapse) | Author | Files | Lines |
|
A boolean goes wrong as soon as two sliders of the same kind share a
controller: the first one to leave the composition clears it while the
other is still on screen, and the surviving slider stops reaching the
color. The controller counts them now, and the last one out is what
hands the component back to the palette color.
Adds regression tests for both, four of which fail when a slider that
leaves stays attached, and two when one leaving speaks for the other.
|
|
|
|
Resolutions:
- Took main for the Spotless bump, the ktlint reformats, the version
catalog and the wheel bitmap property, all of which landed separately.
- Kept the benchmark build type and the baselineProfile dependency on
:demo:androidApp, which the baseline-profile workflow needs.
- ObserveColorChanges now uses rememberCoroutineScope as well, so the
picker and the sliders collect the same way, and ColorPicker just
delegates to it.
- Tests build the controller without a scope, and the ones that read a
callback wait for idle first, since a color change now arrives on the
composition's own scope rather than Dispatchers.Main.
|
|
AGP 9.3.2 to 9.4.0, Kotlin 2.4.10 to 2.4.20, Compose Multiplatform
1.11.1 to 1.12.0, binary compatibility validator 0.18.1 to 0.18.2,
macrobenchmark off its alpha, Spotless 6.21.0 to 8.10.2 and the Gradle
wrapper 9.6.1 to 9.7.1.
Compose 1.12.0 asks for compileSdk 37. Spotless 8 brings a newer ktlint,
which reformats a few files, wants screaming snake case for a const in
the benchmark, and needs to be told that a Composable is named like a
type.
|
|
onColorChanged fires for every step of a drag, so there was no way to
tell a live preview apart from a finished choice. HsvColorPicker and
ImageColorPicker now take onColorPickingFinished, which fires once when
a tap lands or a drag ends, with the color the pick settled on.
|
|
- The thumb was centered on the track ends, so half of it was clipped
away. It now reserves its radius at each end, and the tap and drag
mapping uses the same travel.
- The track paint took its color, and so its alpha, from the controller.
A controller with nothing selected is transparent, which left a slider
used without a picker drawing nothing at all.
- The brightness ramp assumed full saturation and painted red instead of
a grey ramp when nothing was selected.
- AlphaSlider, BrightnessSlider and SaturationSlider take onColorChanged
so they report without a picker beside them.
- Every slider takes an orientation and can run bottom to top.
- The slider and tile backgrounds are no longer rebuilt on every
recomposition, and the initial value is no longer written during the
draw phase.
|
|
A palette scaled to fit leaves bands beside it, and the picker used to
clamp a tap there onto the nearest edge pixel and report it as a color.
Fully transparent pixels came back as a selection too, which is the
transparent pixel TODO the original Android version handled by skipping
them. Both now leave the selection alone.
|
|
- The canvas size setter divided by a zero size on the first layout pass
and produced Offset(NaN, NaN), which is Offset.Unspecified, so drawing
the wheel threw whenever setup could not overwrite it.
- setup() now leaves the current selection alone when a picker registers
itself again, which happens on every recomposition if the palette is
built inline.
- HsvColorPicker replays initialColor so its value and alpha survive.
- selectByColor before the first layout is held and applied once the
picker is ready instead of being dropped.
- wheelImageBitmap is kept in step with the controller and is snapshot
state, so a new bitmap repaints.
|
|
Wires up commonTest and desktopTest with kotlin-test and the Compose
multiplatform ui-test artifact, and covers the color math, the geometry
helpers, the controller, both pickers, the sliders and the alpha tile.
The web targets skip tests because ColorPickerController builds a Paint
eagerly and Kotlin/JS cannot load Skiko in a Node or headless run.
CI gains a job for them, and drops the branch filter on pull_request so
that a pull request stacked on another one gets checked too.
|
|
|
|
- Fix 'of th wheel' typo in AlphaSlider, BrightnessSlider, Slider
- Fix stray word in Slider's class-level KDoc
- Fix 'Crop ths source' typo in PaletteContentScale
- Fix 'sider' -> 'slider' typo (x3) in README
- Move misplaced initialColor KDoc sentence in AlphaSlider
|
|
- Add :demo:desktopApp (Compose JVM desktop application) consuming the
shared MainScreen.
- Move :wasmApp under :demo:wasmApp and consume the shared MainScreen.
- Migrate demo image picking from peekaboo-image-picker to FileKit.
- Set the demo Res class package to
com.github.skydoves.colorpickercomposedemo.shared via packageOfResClass.
- Drop the GlobalScope/CoroutineScope constructor from ColorPickerController;
ColorPicker now collects on a rememberCoroutineScope.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
|
Spotless 6.21.0 bundled an old ktlint whose adapter could not parse the
editorConfig overrides against the newer ktlint-rule-engine-core on the
classpath, so spotlessCheck/spotlessApply failed before formatting any file.
- Bump spotless 6.21.0 -> 8.6.0 (ships ktlint 1.x).
- Exempt @Composable functions from the function-naming rule.
- Rename benchmark `packageName` const to `PACKAGE_NAME` (ktlint 1.x
property-naming rule; not auto-fixable).
- Reformat library/docs/benchmark sources for ktlint 1.x defaults
(single-line signatures, expression bodies, blank lines between when
branches).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Fix selectByColor not updating alpha
|
|
quickfix for occasional color reset to white on recomposition
|
|
On rare occasions, (was seen using a color picker in an animated
widget) the color picker will reset the selected color to white after a
recomposition.
This seems to be due to onSizeChanged() being called, even though the
color picker did not really change size.
For the HSV color picker it is possible to re-select automatically the
previously picked color, since the coordinates can be calculated. For
the ImageColorPicker, a more elaborate fix would be needed.
|
|
This commit fixes this warning message which happens with the HSV
color picker:
"Called getWidth() on a recycle()'d bitmap! This is undefined behavior!"
It is likely due to the fact that createScaledBitmap() will usually
return a new bitmap, but will return the source bitmap if the dimensions
are the same.
This commit makes sure that scaleBitmap() will always return a new
bitmap.
|
|
|
|
Expose setBrightness to public
|
|
|
|
After a thorough refactoring of the BrightnessSlider somewhere after
release 1.0.4, the slider background would falsely show a gradient going
from full transparency to zero transparency.
This commit removes the alpha logic and replaces it with the previously
used shader going from pure black to the (pure) selected colour.
Fixes #42
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|