Fixed Square Brush, Improve Brush Hardness and Smoothing Precision (#4519)

* Fixed square brush with hardness <1; improved the effect of hardness, improved the effect of smoothing precision

* Improved square hardness and code quality with performance optimizations

* Fix brush rendering anti-aliasing and optimized square brushes using texture caching

* Switched to QuickLRU for brush cache

* Cleaned up exports from testing

* Removed SOFT_BRUSH_STEPS unused variable
This commit is contained in:
brucew4yn3rp
2025-08-31 18:29:24 -04:00
committed by GitHub
parent e731f3b833
commit ddd7b4866f
2 changed files with 261 additions and 74 deletions

View File

@@ -59,6 +59,59 @@ export function hexToRgb(hex: string): RGB {
return { r, g, b }
}
export function parseToRgb(color: string): RGB {
const format = identifyColorFormat(color)
if (!format) return { r: 0, g: 0, b: 0 }
const hsla = parseToHSLA(color, format)
if (!isHSLA(hsla)) return { r: 0, g: 0, b: 0 }
// Convert HSL to RGB
const h = hsla.h / 360
const s = hsla.s / 100
const l = hsla.l / 100
const c = (1 - Math.abs(2 * l - 1)) * s
const x = c * (1 - Math.abs(((h * 6) % 2) - 1))
const m = l - c / 2
let r = 0,
g = 0,
b = 0
if (h < 1 / 6) {
r = c
g = x
b = 0
} else if (h < 2 / 6) {
r = x
g = c
b = 0
} else if (h < 3 / 6) {
r = 0
g = c
b = x
} else if (h < 4 / 6) {
r = 0
g = x
b = c
} else if (h < 5 / 6) {
r = x
g = 0
b = c
} else {
r = c
g = 0
b = x
}
return {
r: Math.round((r + m) * 255),
g: Math.round((g + m) * 255),
b: Math.round((b + m) * 255)
}
}
const identifyColorFormat = (color: string): ColorFormat | null => {
if (!color) return null
if (color.startsWith('#') && (color.length === 4 || color.length === 7))