Signatur
Beschreibung
UI\Draw\Path ist ein zentrales Objekt der PHP-UI-Erweiterung (php-ui / libui-Binding). Ein Pfad beschreibt eine Abfolge von geometrischen Formen – Linien, Bögen, Rechtecke und Bezier-Kurven –, die anschließend von einem UI\Draw\Pen entweder gefüllt oder gezeichnet (gestrokt) werden können.
Der Pfad selbst enthält keine visuelle Darstellung; er definiert lediglich die Geometrie. Erst wenn der Pfad mit UI\Draw\Pen::fill() oder UI\Draw\Pen::stroke() auf einer UI\Area gerendert wird, werden Farbe, Linienstärke und andere Stil-Eigenschaften angewandt.
Ein UI\Draw\Path kann entweder im Modus Winding (UI\Draw\Path::Winding) oder Alternate (UI\Draw\Path::Alternate) erstellt werden. Der Modus bestimmt, wie überlagernde Flächen bei der Füll-Berechnung behandelt werden. Nach dem Aufbau des Pfades muss end() aufgerufen werden, bevor der Pfad gerendert wird.
Typische Verwendung ist das Zeichnen von Benutzeroberflächen-Komponenten in einem UI\Area::onDraw-Callback: Pfad anlegen, Formen hinzufügen, end() aufrufen, dann mit dem Pen rendern.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $mode | int | UI\Draw\Path::Winding | Füllmodus des Pfades. Mögliche Werte sind UI\Draw\Path::Winding (Standard) und UI\Draw\Path::Alternate. Bestimmt, wie sich überschneidende Teilpfade beim Füllen verhalten. |
Beispiele
Einfaches Rechteck auf einer UI\Area zeichnen
<?php
use UI\Draw\Path;
use UI\Draw\Pen;
use UI\Draw\Brush;
use UI\Draw\Brush\Type;
use UI\Area;
use UI\Window;
use UI\Size;
use UI\Point;
$window = new Window('Rechteck-Demo', new Size(400, 300), false);
$area = new class extends Area {
protected function onDraw(Pen $pen, Size $areaSize, Point $clipPoint, Size $clipSize): void {
// Pfad anlegen
$path = new Path(Path::Winding);
$path->addRectangle(new Point(50, 50), new Size(200, 100));
$path->end();
// Pinsel (einfarbig rot)
$brush = new Brush(Type::Solid, 1.0, 0.0, 0.0, 1.0);
// Pfad füllen
$pen->fill($path, $brush);
}
};
$window->add($area);
$window->show();
UI\run();
Linie von Punkt zu Punkt zeichnen
<?php
use UI\Draw\Path;
use UI\Draw\Pen;
use UI\Draw\Brush;
use UI\Draw\Brush\Type;
use UI\Draw\Stroke;
use UI\Draw\Line\Cap;
use UI\Draw\Line\Join;
use UI\Area;
use UI\Window;
use UI\Size;
use UI\Point;
$window = new Window('Linien-Demo', new Size(400, 300), false);
$area = new class extends Area {
protected function onDraw(Pen $pen, Size $areaSize, Point $clipPoint, Size $clipSize): void {
$path = new Path(Path::Winding);
// Figur beginnen und Linie ziehen
$path->newFigure(new Point(10, 10));
$path->lineTo(new Point(300, 200));
$path->end();
$brush = new Brush(Type::Solid, 0.0, 0.0, 1.0, 1.0); // blau
$stroke = new Stroke(Cap::Flat, Join::Miter, 2.0, 10.0);
$pen->stroke($path, $brush, $stroke);
}
};
$window->add($area);
$window->show();
UI\run();
// Wichtig · Fallstricke
Wichtig: end() muss zwingend aufgerufen werden, bevor der Pfad mit dem Pen gerendert wird. Ein nicht abgeschlossener Pfad führt zu undefiniertem Verhalten oder einem Fehler.
Die PHP-UI-Erweiterung (ui) ist nicht Bestandteil der PHP-Standardinstallation und muss separat über PECL installiert werden (pecl install ui). Sie erfordert die native libui-Bibliothek.
Die Konstantenwerte UI\Draw\Path::Winding und UI\Draw\Path::Alternate entsprechen den libui-Füllregeln NonZero bzw. EvenOdd und beeinflussen nur die Ausgabe bei Füll-Operationen (fill()), nicht bei Strich-Operationen (stroke()).