Signatur
Beschreibung
UI\Draw\Brush\LinearGradient ist Teil der experimentellen PHP-UI-Erweiterung (php-ui) und ermöglicht es, Zeichenoperationen mit einem linearen Farbverlauf auszuführen. Dabei werden Farbe und Transparenz gleichmäßig entlang einer Linie zwischen zwei definierten Punkten interpoliert.
Der lineare Farbverlauf wird durch einen Start- und einen Endpunkt definiert, zwischen denen beliebig viele Farbstopps (Stops) gesetzt werden können. Jeder Farb-Stop erhält eine Position im Bereich 0.0 (Startpunkt) bis 1.0 (Endpunkt) sowie eine RGBA-Farbe (UI\Draw\Color).
Diese Klasse eignet sich besonders für Benutzeroberflächen-Elemente, die einen weichen Farbübergang benötigen – etwa Hintergründe, Schaltflächen oder dekorative Elemente innerhalb einer UI\Window-basierten Anwendung.
- Instanzen dieser Klasse werden als Pinsel (
brush-Parameter) an Zeichenmethoden wieUI\Draw\Path::fill()oderUI\Draw\Path::stroke()übergeben. - Die Erweiterung ist experimentell und muss separat installiert werden (
pecl install ui).
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $start Pflicht | UI\Point | Der Startpunkt des linearen Farbverlaufs als UI\Point-Instanz. Hier beginnt der erste Farb-Stop (Position 0.0). |
|
| $end Pflicht | UI\Point | Der Endpunkt des linearen Farbverlaufs als UI\Point-Instanz. Hier liegt der letzte Farb-Stop (Position 1.0). |
Beispiele
Einfacher linearer Farbverlauf von Blau nach Rot
<?php
use UI\Draw\Brush\LinearGradient;
use UI\Draw\Color;
use UI\Draw\Path;
use UI\Draw\Pen;
use UI\Point;
use UI\Size;
use UI\Window;
use UI\Area;
$window = new Window('Linearer Farbverlauf', new Size(400, 300));
$area = new class extends Area {
public function onDraw(Pen $pen, Size $areaSize, Point $clipPoint, Size $clipSize): void
{
// Verlauf von links (Blau) nach rechts (Rot)
$gradient = new LinearGradient(
new Point(0, 0),
new Point($areaSize->width, 0)
);
// Farb-Stopps hinzufügen
$gradient->addStop(0.0, new Color(0x0000FFFF)); // Blau bei Position 0
$gradient->addStop(1.0, new Color(0xFF0000FF)); // Rot bei Position 1
// Rechteck zeichnen und mit Verlauf füllen
$path = new Path();
$path->addRectangle(new Point(10, 10), new Size(380, 280));
$path->end();
$pen->fill($path, $gradient);
}
};
$window->add($area);
$window->show();
UI\run();
Verlauf mit mehreren Farbstopps (Regenbogen-Effekt)
<?php
use UI\Draw\Brush\LinearGradient;
use UI\Draw\Color;
use UI\Draw\Path;
use UI\Draw\Pen;
use UI\Point;
use UI\Size;
use UI\Window;
use UI\Area;
$window = new Window('Regenbogen-Verlauf', new Size(500, 100));
$area = new class extends Area {
public function onDraw(Pen $pen, Size $areaSize, Point $clipPoint, Size $clipSize): void
{
$gradient = new LinearGradient(
new Point(0, 50),
new Point($areaSize->width, 50)
);
// Mehrere Farbstopps für Regenbogeneffekt
$gradient->addStop(0.0, new Color(0xFF0000FF)); // Rot
$gradient->addStop(0.17, new Color(0xFF7F00FF)); // Orange
$gradient->addStop(0.33, new Color(0xFFFF00FF)); // Gelb
$gradient->addStop(0.50, new Color(0x00FF00FF)); // Grün
$gradient->addStop(0.67, new Color(0x0000FFFF)); // Blau
$gradient->addStop(0.83, new Color(0x4B0082FF)); // Indigo
$gradient->addStop(1.0, new Color(0x8B00FFFF)); // Violett
$path = new Path();
$path->addRectangle(new Point(0, 0), new Size($areaSize->width, $areaSize->height));
$path->end();
$pen->fill($path, $gradient);
}
};
$window->add($area);
$window->show();
UI\run();
// Wichtig · Fallstricke
Experimentelle Erweiterung: Die php-ui-Erweiterung ist experimentell und nicht Teil des PHP-Kerns. Sie muss über PECL installiert werden (pecl install ui) und ist nur für PHP 7.x und 8.x verfügbar, je nach Build der Erweiterung. Die API kann sich ohne Vorankündigung ändern.
Farb-Stop-Reihenfolge: Die Stopps sollten in aufsteigender Reihenfolge ihrer Position (0.0 bis 1.0) hinzugefügt werden. Eine falsche Reihenfolge kann zu unerwarteten visuellen Ergebnissen führen.
Plattformabhängigkeit: Das Rendering basiert auf der jeweiligen nativen UI-Bibliothek (Windows: Direct2D, macOS: CoreGraphics, Linux: Cairo) und kann plattformspezifische Unterschiede aufweisen.