Skip to content

Conversation

@DustyShoe
Copy link
Contributor

@DustyShoe DustyShoe commented Jan 18, 2026

Summary

This PR adds a set of radial and linear gradients to available toolset on canvas.
Adds parent and child custom buttons.
Tool respects color transparency and both color swatches. It draws gradient in direction of mouse movement: from active color to inactive. Gradient is rasterized on mouse release on current active layer.
It is also possible to activate clipping by drag start-stop points.
Gradient is clipped by bbox to save on performance.

2026-01-18.16-30-16.mp4

Related Issues / Discussions

QA Instructions

  • Verify buttons display is correct.
  • Verify gradient direction follows mouse movement from active color to inactive color.
  • Change both color swatches and confirm both are used in the gradient.
  • Set opacity on one or both colors and verify transparency is respected.
  • Draw gradients of different sizes and confirm rendering is clipped to the bounding box.
  • Activate "Clip Gradient" and verify clip by start-end points is applied.
  • Use Undo/Redo and verify each gradient application is a single history step.

Merge Plan

PR merge should be painless. Though, code might need a proper check.

Checklist

  • The PR has a short but descriptive title, suitable for a changelog
  • Tests added / updated (if applicable)
  • ❗Changes to a redux slice have a corresponding migration
  • Documentation added / updated (if applicable)
  • Updated What's New copy (if doing a release after this PR)

@github-actions github-actions bot added the frontend PRs that change frontend files label Jan 18, 2026
@DustyShoe
Copy link
Contributor Author

Also would like an advise on what icon should "Gradient Clip" button have.
Right now it uses "Crop" icon:
image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

frontend PRs that change frontend files

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant