Nouveau groupe "Ombre" dans le panneau de propriétés, à côté de "Bordure" (même universalité — voir UNIVERSAL_CONTROLS) : décalage X/Y, flou, étendue, couleur et opacité, combinés en une seule valeur CSS box-shadow (couleur+opacité fusionnées en rgba(), un <input type="color"> seul ne portant pas de canal alpha). Décalages/flou/étendue tous à 0 = pas d'ombre, même convention que border-width à 0 = pas de bordure. Nouveau ctype "shadow" (c_shadow.py), suit exactement le même principe que le ctype "size" déjà existant (size_override_controls.py) : plusieurs entrées de formulaire pour un seul réglage, composées/décomposées dans save_element_controls.py et control_value.py plutôt que passées par le chemin générique clé->valeur. Ajoute tests/test_shadow_controls.py (présence dans le panneau, composition de la valeur CSS, aller-retour dans le formulaire, remise à zéro qui retire l'ombre). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
13 lines
701 B
Python
13 lines
701 B
Python
def c_shadow(key, label, target, default=None, group=None):
|
|
"""Ombre portée composée de 6 sous-réglages (décalage X/Y, flou,
|
|
étendue, couleur, opacité) — voir save_element_controls.py (ctype
|
|
"shadow") pour comment ils se combinent en une seule valeur CSS
|
|
"box-shadow", et control_value.py pour comment elle se décompose à
|
|
nouveau pour l'affichage. Décalages/flou/étendue tous à 0 = pas
|
|
d'ombre, comme border-width à 0 = pas de bordure."""
|
|
return {
|
|
"key": key, "label": label, "type": "shadow", "target": target,
|
|
"default": default or {"x": 0, "y": 4, "blur": 12, "spread": 0, "color": "#000000", "opacity": 0.4},
|
|
"group": group,
|
|
}
|