This commit is contained in:
Thomas Peterson 2024-10-28 09:54:08 +01:00
parent f4d6e3abdb
commit 3654670954
12 changed files with 211 additions and 45 deletions

View File

@ -35,6 +35,7 @@ final readonly class Gui implements Application
public function run(): void public function run(): void
{ {
try { try {
$application = $this->container->get(App::class); $application = $this->container->get(App::class);
$lifeCycle = $this->container->get(Lifecycle::class); $lifeCycle = $this->container->get(Lifecycle::class);

View File

@ -21,6 +21,8 @@ class OrderedEventLoop extends EventLoop
{ {
$this->render->rate($frameRate)->touch(); $this->render->rate($frameRate)->touch();
$this->updates->rate($updateRate)->touch(); $this->updates->rate($updateRate)->touch();
$tray = new \Tray("Demo App", __DIR__ .'/../../../../../../app/app/Assets/icon.png');
$tray->init();
while ($this->running) { while ($this->running) {
$now = \microtime(true); $now = \microtime(true);
@ -31,6 +33,10 @@ class OrderedEventLoop extends EventLoop
if (($delta = $this->render->next($now)) !== null) { if (($delta = $this->render->next($now)) !== null) {
$this->render($delta); $this->render($delta);
$poll = $tray->poll();
if($poll != null) {
echo sprintf("%s", $poll).PHP_EOL;
}
} }
while ($event = $this->eventDriver->pollEvent()) { while ($event = $this->eventDriver->pollEvent()) {
@ -38,5 +44,6 @@ class OrderedEventLoop extends EventLoop
$this->poll($event); $this->poll($event);
} }
} }
$tray->close();
} }
} }

View File

@ -17,6 +17,7 @@ final class PHPNative
\SDL_Init(\SDL_INIT_VIDEO); \SDL_Init(\SDL_INIT_VIDEO);
\SDL_TTF_Init(); \SDL_TTF_Init();
// Kernel // Kernel
return (new Kernel( return (new Kernel(
root: $root, root: $root,

View File

@ -3,6 +3,7 @@
namespace PHPNative\Renderer; namespace PHPNative\Renderer;
use PHPNative\Renderer\Cache\Styles; use PHPNative\Renderer\Cache\Styles;
use PHPNative\UI\Widget\Checkbox;
use PHPNative\UI\Widget\Icon; use PHPNative\UI\Widget\Icon;
use PHPNative\UI\Widget\Image; use PHPNative\UI\Widget\Image;
use PHPNative\UI\Widget\TextEdit; use PHPNative\UI\Widget\TextEdit;
@ -28,6 +29,9 @@ class Widget
if($view instanceof TextEdit) { if($view instanceof TextEdit) {
return \PHPNative\Renderer\Widgets\TextEdit::render($styleCache, $thread, $viewPort, $view, $index); return \PHPNative\Renderer\Widgets\TextEdit::render($styleCache, $thread, $viewPort, $view, $index);
} }
if($view instanceof Checkbox) {
return \PHPNative\Renderer\Widgets\Checkbox::render($styleCache, $thread, $viewPort, $view, $index);
}
if($view instanceof Container) { if($view instanceof Container) {
return \PHPNative\Renderer\Widgets\Container::render($styleCache, $thread, $viewPort, $view, $index); return \PHPNative\Renderer\Widgets\Container::render($styleCache, $thread, $viewPort, $view, $index);
} }

View File

@ -0,0 +1,79 @@
<?php
namespace PHPNative\Renderer\Widgets;
use PHPNative\Event\EventType;
use PHPNative\Event\Key;
use PHPNative\Renderer\Cache\Styles;
use PHPNative\Renderer\GFX;
use PHPNative\Renderer\Item;
use PHPNative\Renderer\Thread;
use PHPNative\Renderer\Viewport;
use PHPNative\Renderer\Visuals\Cursor;
use PHPNative\Renderer\Widget;
use PHPNative\Tailwind\Style\AlignEnum;
use PHPNative\Tailwind\Style\Background;
use PHPNative\Tailwind\Style\Basis;
use PHPNative\Tailwind\Style\Border;
use PHPNative\Tailwind\Style\Height;
use PHPNative\Tailwind\Style\Margin;
use PHPNative\Tailwind\Style\MediaQueryEnum;
use PHPNative\Tailwind\Style\Padding;
use PHPNative\Tailwind\Style\StateEnum;
use PHPNative\Tailwind\Style\Text;
use PHPNative\Tailwind\Style\Unit;
use PHPNative\Tailwind\Style\Width;
use PHPNative\Tailwind\StyleParser;
class Checkbox
{
public static function render(Styles $stylesCache, Thread $thread, Viewport $viewport, \PHPNative\UI\Widget\Checkbox $view, int $index = 0): Viewport
{
$styles = $stylesCache->getStyle($view->getId(), $viewport->windowMediaQuery, $view->state, $view->style);
$myViewport = clone $viewport;
if(isset($styles[Margin::class]) && $m = $styles[Margin::class]) {
$viewport->x += $m->left;
$viewport->width -= ($m->right + $m->left);
$viewport->y += $m->top;
$viewport->height += ($m->bottom + $m->top);
}
if(isset($styles[Width::class]) && $m = $styles[Width::class]) {
$viewport->width = $m->value;
}
if(isset($styles[Height::class]) && $m = $styles[Height::class]) {
$viewport->height = $m->value;
}
if($thread->getEvent() && $thread->getEvent()->getType() === EventType::MOUSEBUTTON_UP) {
if( $viewport->x <= $thread->getEvent()->x &&
$thread->getEvent()->x <= $viewport->x + $viewport->width &&
$viewport->y <= $thread->getEvent()->y && $thread->getEvent()->y <=
$viewport->y + $viewport->height ) {
$view->checked = !$view->checked;
$view->onClick($thread->worker);
}
}
\PHPNative\Renderer\Visuals\Visuals::render($view->getId(), $thread, $styles, $viewport, $index);
if($view->checked) {
$texture = \SDL_CreateTexture($viewport->renderPtr, \SDL_PIXELFORMAT_RGBA8888, \SDL_TEXTUREACCESS_TARGET, $viewport->width, $viewport->height);
\SDL_SetRenderTarget($viewport->renderPtr, $texture);
\SDL_SetRenderDrawColor($viewport->renderPtr, 255, 255, 255, 0);
\SDL_RenderClear($viewport->renderPtr);
\SDL_SetRenderDrawColor($viewport->renderPtr, 0, 0, 0, 255);
\SDL_RenderLine($viewport->renderPtr, 2, 2, $viewport->width-4, $viewport->height-4);
\SDL_RenderLine($viewport->renderPtr, 2, $viewport->height-2, $viewport->width-4, 2);
$thread->addToRenderStack(new Item($view->getId(), $texture, new \SDL_FRect($viewport->x, $viewport->y, $viewport->width, $viewport->height), $index));
}
return $viewport;
}
}

View File

@ -17,12 +17,12 @@ use PHPNative\Tailwind\Style\Overflow;
use PHPNative\Tailwind\Style\OverflowEnum; use PHPNative\Tailwind\Style\OverflowEnum;
use PHPNative\Tailwind\Style\Padding; use PHPNative\Tailwind\Style\Padding;
use PHPNative\Tailwind\Style\StateEnum; use PHPNative\Tailwind\Style\StateEnum;
use PhpParser\Builder\Class_;
class Container class Container
{ {
public static function render(Styles $stylesCache, Thread $thread, Viewport $viewport, \PHPNative\UI\Widget\Container $view, int $index = 0): Viewport public static function render(Styles $stylesCache, Thread $thread, Viewport $viewport, \PHPNative\UI\Widget\Container $view, int $index = 0): Viewport
{ {
$styles = $stylesCache->getStyle($view->getId(), $viewport->windowMediaQuery, $view->state, $view->style); $styles = $stylesCache->getStyle($view->getId(), $viewport->windowMediaQuery, $view->state, $view->style);
$myViewport = clone $viewport; $myViewport = clone $viewport;
@ -42,25 +42,6 @@ class Container
$viewport->height -= ($m->bottom + $m->top); $viewport->height -= ($m->bottom + $m->top);
} }
if($thread->getEvent() && $thread->getEvent()->getType() === EventType::MOUSEMOVE) {
if( $viewport->x <= $thread->getEvent()->x &&
$thread->getEvent()->x <= $viewport->x + $viewport->width &&
$viewport->y <= $thread->getEvent()->y &&
$thread->getEvent()->y <= $viewport->y + $viewport->height ) {
$view->state = StateEnum::hover;
}else{
$view->state = StateEnum::normal;
}
}
if($view instanceof \PHPNative\UI\Widget\Button && $thread->getEvent() && $thread->getEvent()->getType() === EventType::MOUSEBUTTON_UP) {
if( $viewport->x <= $thread->getEvent()->x &&
$thread->getEvent()->x <= $viewport->x + $viewport->width &&
$viewport->y <= $thread->getEvent()->y && $thread->getEvent()->y <=
$viewport->y + $viewport->height ) {
$view->onClick($thread->worker);
}
}
$resultViewPort = null; $resultViewPort = null;
if($view->getViews() != null) { if($view->getViews() != null) {
$view = LayoutParser::sortByStyles($stylesCache, $view, $viewport); $view = LayoutParser::sortByStyles($stylesCache, $view, $viewport);
@ -123,22 +104,49 @@ class Container
} }
} }
if($resultViewPort != null) { if($resultViewPort != null) {
if($view instanceof \PHPNative\UI\Widget\Button && $thread->getEvent() && $thread->getEvent()->getType() === EventType::MOUSEBUTTON_UP) {
if( $resultViewPort->x <= $thread->getEvent()->x &&
$thread->getEvent()->x <= $resultViewPort->x + $resultViewPort->width &&
$resultViewPort->y <= $thread->getEvent()->y && $thread->getEvent()->y <=
$resultViewPort->y + $resultViewPort->height ) {
$view->onClick($thread->worker);
}
}
if($thread->getEvent() && $thread->getEvent()->getType() === EventType::MOUSEMOVE) {
if( $resultViewPort->x <= $thread->getEvent()->x &&
$thread->getEvent()->x <= $resultViewPort->x + $resultViewPort->width &&
$resultViewPort->y <= $thread->getEvent()->y &&
$thread->getEvent()->y <= $resultViewPort->y + $resultViewPort->height ) {
$view->state = StateEnum::hover;
}else{
$view->state = StateEnum::normal;
}
}
if (isset($styles[Overflow::class]) && $f = $styles[Overflow::class] && ( if (isset($styles[Overflow::class]) && $f = $styles[Overflow::class] && (
$styles[Overflow::class]->y == OverflowEnum::scroll || $styles[Overflow::class]->y == OverflowEnum::scroll ||
($styles[Overflow::class]->y == OverflowEnum::auto) ($styles[Overflow::class]->y == OverflowEnum::auto)
)) { )) {
\PHPNative\Renderer\Visuals\Visuals::render($view->getId(), $thread, $styles, $backgroundViewport, $index); \PHPNative\Renderer\Visuals\Visuals::render($view->getId(), $thread, $styles, clone $backgroundViewport, $index);
}else{ }else{
if(isset($styles[Margin::class]) && $m = $styles[Margin::class]) { if(isset($styles[Padding::class]) && $m = $styles[Padding::class]) {
$resultViewPort->x -= $m->left; $resultViewPort->x -= $m->left;
$resultViewPort->width += ($m->right + $m->left); $resultViewPort->width += ($m->right + $m->left);
$resultViewPort->y -= $m->top; $resultViewPort->y -= $m->top;
$resultViewPort->height += ($m->bottom + $m->top); $resultViewPort->height += ($m->bottom + $m->top);
} }
\PHPNative\Renderer\Visuals\Visuals::render($view->getId(), $thread, $styles, $resultViewPort, $index); \PHPNative\Renderer\Visuals\Visuals::render($view->getId(), $thread, $styles, clone $resultViewPort, $index);
if(isset($styles[Margin::class]) && $m = $styles[Margin::class]) {
//$resultViewPort->x -= $m->left;
$resultViewPort->width += ($m->right + $m->left);
//$resultViewPort->y -= $m->top;
$resultViewPort->height += ($m->bottom + $m->top);
}
return $resultViewPort;
} }
}else{ }else{
\PHPNative\Renderer\Visuals\Visuals::render($view->getId(), $thread, $styles, $viewport, $index); \PHPNative\Renderer\Visuals\Visuals::render($view->getId(), $thread, $styles, clone $viewport, $index);
} }
return $myViewport; return $myViewport;

View File

@ -44,7 +44,8 @@ class Column
} }
if ($found) { if ($found) {
$vp = new Viewport($viewport->windowId, $viewport->windowPtr, $viewport->renderPtr, $viewport->x, $viewport->y, $viewport->width, $height, $viewport->windowWidth, $viewport->windowHeight, $viewport->windowMediaQuery); $vp = new Viewport($viewport->windowId, $viewport->windowPtr, $viewport->renderPtr, $viewport->x, $viewport->y, $viewport->width, $height,
$viewport->windowWidth, $viewport->windowHeight, 0,0, $viewport->windowMediaQuery);
$flexStyles[$subView->getRenderSort()] = $vp; $flexStyles[$subView->getRenderSort()] = $vp;
} }
} }

View File

@ -42,7 +42,8 @@ class Row
} }
if ($found) { if ($found) {
$vp = new Viewport($viewport->windowId, $viewport->windowPtr, $viewport->renderPtr, $viewport->x, $viewport->y, $width, $viewport->height, $viewport->windowWidth, $viewport->windowHeight, $viewport->windowMediaQuery); $vp = new Viewport($viewport->windowId, $viewport->windowPtr, $viewport->renderPtr, $viewport->x, $viewport->y, $width,
$viewport->height, $viewport->windowWidth, $viewport->windowHeight, 0,0, $viewport->windowMediaQuery);
$flexStyles[$subView->getRenderSort()] = $vp; $flexStyles[$subView->getRenderSort()] = $vp;
} else { } else {
$flexStyles[$subView->getRenderSort()] = clone $viewport; $flexStyles[$subView->getRenderSort()] = clone $viewport;
@ -54,7 +55,7 @@ class Row
$subViewPort = $flexStyles[$subView->getRenderSort()]; $subViewPort = $flexStyles[$subView->getRenderSort()];
$subViewPort->x += $viewportX; $subViewPort->x += $viewportX;
$vp = Widget::render($stylesCache, $thread, clone $subViewPort, $subView, $index+1); $vp = Widget::render($stylesCache, $thread, clone $subViewPort, $subView, $index+1);
$viewportX += $vp->width; $viewportX += ($vp->width);
$viewportHeight = $vp->height > $viewportHeight ? $vp->height : $viewportHeight; $viewportHeight = $vp->height > $viewportHeight ? $vp->height : $viewportHeight;
} }

View File

@ -39,7 +39,11 @@ class Text
$font = \SDL_TTF_OpenFont(__DIR__ . DIRECTORY_SEPARATOR . '../../../../../assets/segoe-ui.ttf' , 16); $font = \SDL_TTF_OpenFont(__DIR__ . DIRECTORY_SEPARATOR . '../../../../../assets/segoe-ui.ttf' , 16);
$color = new \SDL_Color(0, 0, 0, 255); $color = new \SDL_Color(0, 0, 0, 255);
} }
$surface = \SDL_TTF_RenderText_Blended($font, $view->text, $color); if($view->text == "") {
$surface = \SDL_TTF_RenderText_Blended($font, " ", $color);
}else{
$surface = \SDL_TTF_RenderText_Blended($font, $view->text, $color);
}
if(!isset($styles[Basis::class]) && !isset($styles[Width::class]) && !isset($styles[Flex::class])) { if(!isset($styles[Basis::class]) && !isset($styles[Width::class]) && !isset($styles[Flex::class])) {
$viewport->width = $surface->w; $viewport->width = $surface->w;
@ -48,22 +52,30 @@ class Text
$viewport->height = $surface->h; $viewport->height = $surface->h;
} }
$returnViewport = clone $viewport;
$backdropViewport = clone $viewport;
if(isset($styles[Margin::class]) && $m = $styles[Margin::class]) { if(isset($styles[Margin::class]) && $m = $styles[Margin::class]) {
$viewport->x += $m->left; $viewport->x += $m->left;
$viewport->y += $m->top; $viewport->y += $m->top;
$backdropViewport->x += $m->left;
$backdropViewport->y += $m->top;
if(isset($styles[Basis::class]) || isset($styles[Width::class]) || isset($styles[Flex::class])) { if(isset($styles[Basis::class]) || isset($styles[Width::class]) || isset($styles[Flex::class])) {
$viewport->width -= ($m->right + $m->left); $viewport->width -= ($m->right + $m->left);
$backdropViewport->width -= ($m->right + $m->left);
}else{
$viewport->width += ($m->right + $m->left);
$returnViewport->width += ($m->right + $m->left);
} }
if(isset($styles[Height::class])) { if(isset($styles[Height::class])) {
$viewport->height -= ($m->bottom + $m->top); $viewport->height -= ($m->bottom + $m->top);
$backdropViewport->height -= ($m->bottom + $m->top);
}else{ }else{
$viewport->height += ($m->bottom + $m->top); $viewport->height += ($m->bottom + $m->top);
$returnViewport->height += ($m->bottom + $m->top);
} }
} }
$backdropViewport = clone $viewport;
$backdropViewport->height = $surface->h;
if($thread->getEvent() && $thread->getEvent()->getType() === EventType::MOUSEMOVE) { if($thread->getEvent() && $thread->getEvent()->getType() === EventType::MOUSEMOVE) {
if( $viewport->x <= $thread->getEvent()->x && if( $viewport->x <= $thread->getEvent()->x &&
$thread->getEvent()->x <= $viewport->x + $viewport->width && $thread->getEvent()->x <= $viewport->x + $viewport->width &&
@ -77,15 +89,21 @@ class Text
if(isset($styles[Padding::class]) && $m = $styles[Padding::class]) { if(isset($styles[Padding::class]) && $m = $styles[Padding::class]) {
$viewport->x += $m->left; $viewport->x += $m->left;
$viewport->width += ($m->right + $m->left);
$viewport->y += $m->top; $viewport->y += $m->top;
if(!isset($styles[Height::class])) { if(isset($styles[Basis::class]) || isset($styles[Width::class]) || isset($styles[Flex::class])) {
$viewport->height += ($m->bottom + $m->top); $viewport->width -= ($m->right + $m->left);
} }else{
$backdropViewport->height += ($m->top + $m->bottom); $viewport->width += ($m->right + $m->left);
if(!isset($styles[Basis::class]) && !isset($styles[Width::class]) && !isset($styles[Flex::class])) { $returnViewport->width += ($m->right + $m->left);
$backdropViewport->width += ($m->left + $m->right); $backdropViewport->width += ($m->left + $m->right);
} }
if(isset($styles[Height::class])) {
$viewport->height -= ($m->bottom + $m->top);
}else{
$viewport->height += ($m->bottom + $m->top);
$returnViewport->height += ($m->bottom + $m->top);
$backdropViewport->height += ($m->bottom + $m->top);
}
} }
\PHPNative\Renderer\Visuals\Visuals::render($view->getId(), $thread, $styles, $backdropViewport, $index); \PHPNative\Renderer\Visuals\Visuals::render($view->getId(), $thread, $styles, $backdropViewport, $index);
@ -94,7 +112,7 @@ class Text
$textureFont = \SDL_CreateTextureFromSurface($viewport->renderPtr, $surface); $textureFont = \SDL_CreateTextureFromSurface($viewport->renderPtr, $surface);
if($surface->w > $viewport->width) { if($surface->w > $viewport->width) {
$thread->addToRenderStack(new Item($textureFont, $thread->addToRenderStack(new Item($view->getId(), $textureFont,
new \SDL_FRect($viewport->x, $viewport->y, $surface->w, $surface->h), 3, new \SDL_FRect($viewport->x, $viewport->y, $surface->w, $surface->h), 3,
new \SDL_FRect(0, 0, $viewport->width, $surface->h) new \SDL_FRect(0, 0, $viewport->width, $surface->h)
)); ));
@ -126,7 +144,7 @@ class Text
} }
} }
return $viewport; return $returnViewport;
} }
} }

View File

@ -32,6 +32,8 @@ class TextEdit
$styles = $stylesCache->getStyle($view->getId(), $viewport->windowMediaQuery, $view->state, $view->style); $styles = $stylesCache->getStyle($view->getId(), $viewport->windowMediaQuery, $view->state, $view->style);
$myViewport = clone $viewport;
if(isset($styles[Text::class]) && $t = $styles[Text::class]) { if(isset($styles[Text::class]) && $t = $styles[Text::class]) {
$font = \SDL_TTF_OpenFont(__DIR__ . DIRECTORY_SEPARATOR . '../../../../../assets/segoe-ui.ttf' , $t->size); $font = \SDL_TTF_OpenFont(__DIR__ . DIRECTORY_SEPARATOR . '../../../../../assets/segoe-ui.ttf' , $t->size);
if($t->color->red != -1) { if($t->color->red != -1) {
@ -43,6 +45,7 @@ class TextEdit
$font = \SDL_TTF_OpenFont(__DIR__ . DIRECTORY_SEPARATOR . '../../../../../assets/segoe-ui.ttf' , 16); $font = \SDL_TTF_OpenFont(__DIR__ . DIRECTORY_SEPARATOR . '../../../../../assets/segoe-ui.ttf' , 16);
$color = new \SDL_Color(0, 0, 0, 255); $color = new \SDL_Color(0, 0, 0, 255);
} }
if($view->value == "" && $view->placeholder != null) { if($view->value == "" && $view->placeholder != null) {
$color = new \SDL_Color(0, 0, 0, 128); $color = new \SDL_Color(0, 0, 0, 128);
$surface = \SDL_TTF_RenderText_Blended($font, $view->placeholder, $color); $surface = \SDL_TTF_RenderText_Blended($font, $view->placeholder, $color);
@ -55,12 +58,14 @@ class TextEdit
} }
$viewport->height = $surface->h; $viewport->height = $surface->h;
$myViewport->height = $surface->h;
if(isset($styles[Margin::class]) && $m = $styles[Margin::class]) { if(isset($styles[Margin::class]) && $m = $styles[Margin::class]) {
$viewport->x += $m->left; $viewport->x += $m->left;
$viewport->width -= ($m->right + $m->left); $viewport->width -= ($m->right + $m->left);
$viewport->y += $m->top; $viewport->y += $m->top;
$viewport->height += ($m->bottom + $m->top); $viewport->height += ($m->bottom + $m->top);
$myViewport->height += ($m->bottom + $m->top);
} }
$backdropViewport = clone $viewport; $backdropViewport = clone $viewport;
@ -131,7 +136,9 @@ class TextEdit
$viewport->width -= ($m->right + $m->left); $viewport->width -= ($m->right + $m->left);
$viewport->y += $m->top; $viewport->y += $m->top;
$viewport->height += ($m->bottom + $m->top); $viewport->height += ($m->bottom + $m->top);
$myViewport->height += ($m->bottom + $m->top);
$backdropViewport->height += ($m->top + $m->bottom); $backdropViewport->height += ($m->top + $m->bottom);
} }
\PHPNative\Renderer\Visuals\Visuals::render($view->getId(), $thread, $styles, $backdropViewport, $index); \PHPNative\Renderer\Visuals\Visuals::render($view->getId(), $thread, $styles, $backdropViewport, $index);
@ -145,9 +152,9 @@ class TextEdit
Cursor::render($view->getId(), $thread, $styles, $viewportCorsor, $index); Cursor::render($view->getId(), $thread, $styles, $viewportCorsor, $index);
} }
if((isset($styles[Width::class]) && $m = $styles[Width::class]) || (isset($styles[Basis::class]) && $m = $styles[Basis::class])) { $textureFont = \SDL_CreateTextureFromSurface($viewport->renderPtr, $surface);
$textureFont = \SDL_CreateTextureFromSurface($viewport->renderPtr, $surface); if((isset($styles[Width::class]) && $m = $styles[Width::class]) || (isset($styles[Basis::class]) && $m = $styles[Basis::class])) {
if($surface->w > $viewport->width) { if($surface->w > $viewport->width) {
$thread->addToRenderStack(new Item($view->getId(), $textureFont, $thread->addToRenderStack(new Item($view->getId(), $textureFont,
new \SDL_FRect($viewport->x, $viewport->y, $viewport->width, $surface->h), 3, new \SDL_FRect($viewport->x, $viewport->y, $viewport->width, $surface->h), 3,
@ -164,10 +171,16 @@ class TextEdit
} }
}else{ }else{
if(isset($styles[Text::class]) && $styles[Text::class]->align == AlignEnum::center) {
$thread->addToRenderStack(new Item($view->getId(), $textureFont, new \SDL_FRect($viewport->x + (($viewport->width - $surface->w) /2), $viewport->y, $surface->w, $surface->h), ++$index));
}elseif(isset($styles[Text::class]) && $styles[Text::class]->align == AlignEnum::right) {
$thread->addToRenderStack(new Item($view->getId(), $textureFont, new \SDL_FRect($viewport->x + ($viewport->width - $surface->w), $viewport->y, $surface->w, $surface->h), ++$index));
}else{
$thread->addToRenderStack(new Item($view->getId(), $textureFont, new \SDL_FRect($viewport->x, $viewport->y, $surface->w, $surface->h), ++$index));
}
} }
return $viewport; return $myViewport;
} }
private static function str_delete(string $str, int $pos = 0) { private static function str_delete(string $str, int $pos = 0) {

View File

@ -12,9 +12,9 @@ class Button extends Container implements View
{ {
use Click; use Click;
public function __construct(public ?Views $views = null, string $style = "") public function __construct(public ?string $id = null, public ?Views $views = null, string $style = "")
{ {
parent::__construct(style: $style, views: $views); parent::__construct(id: $id, style: $style, views: $views);
} }
public function getViews(): ?\PHPNative\UI\Collection\Views public function getViews(): ?\PHPNative\UI\Collection\Views

View File

@ -0,0 +1,33 @@
<?php
declare(strict_types=1);
namespace PHPNative\UI\Widget;
use PHPNative\UI\Trait\Action\Click;
use PHPNative\UI\Trait\Id;
use PHPNative\UI\Trait\RenderSort;
use PHPNative\UI\Trait\State;
use PHPNative\UI\Trait\Style;
use PHPNative\UI\View;
class Checkbox implements View
{
use Style;
use State;
use Id;
use RenderSort;
use Click;
public int $textEditIndex = 0;
public function __construct(public bool &$checked = false, string $style = '')
{
$this->style = $style;
return $this;
}
public function getViews(): ?\PHPNative\UI\Collection\Views
{
}
}