CustomPaint
Animation
Engine\Native\CustomPaint est l'équivalent natif d'Engine\Canvas (la version HTML) : une boîte de taille fixe dans laquelle vous dessinez vous-même, rejouée comme des commandes Canvas plates décalées à l'endroit où le layout a placé cette boîte. Contrairement à un widget composé (qui délègue son dessin à des enfants), il enregistre une liste d'opérations (rect/circle/line/text) via une API fluide, puis les rejoue telles quelles au moment du paint() — un seul dessin, sans diffing, exactement le contrat "one-shot" qu'Engine\Canvas a déjà côté HTML (il dessine une fois au montage, pas à chaque changement d'état).
Exemple
<?php
use Engine\Native\CustomPaint;
$sparkline = CustomPaint::make(120.0, 48.0)
->rect(0.0, 0.0, 120.0, 48.0, '#F3F4F6', radius: 8.0)
->line(8.0, 32.0, 40.0, 20.0, '#4F46E5', width: 2.0)
->line(40.0, 20.0, 72.0, 28.0, '#4F46E5', width: 2.0)
->line(72.0, 28.0, 112.0, 10.0, '#4F46E5', width: 2.0)
->circle(112.0, 10.0, 3.0, '#4F46E5')
->text(8.0, 44.0, '+12%', '#111827', size: 11.0);Un fond arrondi de 120×48px sert de support à un mini-graphique en ligne brisée dessiné à la main, avec un point final et une légende — la même approche qu'un sparkline HTML/Canvas, mais rejouée par le moteur natif.
Constructeur
| Paramètre | Type | Défaut | Description |
|---|---|---|---|
| width | float | — | Largeur fixe de la boîte peinte, passée à static::make(). |
| height | float | — | Hauteur fixe de la boîte, passée à static::make(). |
Méthodes
| Méthode | Description |
|---|---|
static make(width, height) | Seul moyen d'instancier la classe — le constructeur est privé. |
rect(x, y, width, height, color, radius = 0.0) | Empile un rectangle, coordonnées relatives à la boîte. |
circle(cx, cy, radius, color) | Empile un cercle plein. |
line(x1, y1, x2, y2, color, width = 1.0) | Empile un segment de droite. |
text(x, y, text, color = '#000000', size = 16.0) | Empile un texte. |
À savoir. Toutes les coordonnées passées aux méthodes de dessin sont relatives au coin haut-gauche de la boîte —
paint()ajoute lui-même le$x/$yabsolu reçu du layout, exactement commeCanvasle fait pour tous les autresWidget.