Fixes
This commit is contained in:
parent
f4d6e3abdb
commit
3654670954
@ -35,6 +35,7 @@ final readonly class Gui implements Application
|
||||
|
||||
public function run(): void
|
||||
{
|
||||
|
||||
try {
|
||||
$application = $this->container->get(App::class);
|
||||
$lifeCycle = $this->container->get(Lifecycle::class);
|
||||
|
||||
@ -21,6 +21,8 @@ class OrderedEventLoop extends EventLoop
|
||||
{
|
||||
$this->render->rate($frameRate)->touch();
|
||||
$this->updates->rate($updateRate)->touch();
|
||||
$tray = new \Tray("Demo App", __DIR__ .'/../../../../../../app/app/Assets/icon.png');
|
||||
$tray->init();
|
||||
|
||||
while ($this->running) {
|
||||
$now = \microtime(true);
|
||||
@ -31,6 +33,10 @@ class OrderedEventLoop extends EventLoop
|
||||
|
||||
if (($delta = $this->render->next($now)) !== null) {
|
||||
$this->render($delta);
|
||||
$poll = $tray->poll();
|
||||
if($poll != null) {
|
||||
echo sprintf("%s", $poll).PHP_EOL;
|
||||
}
|
||||
}
|
||||
|
||||
while ($event = $this->eventDriver->pollEvent()) {
|
||||
@ -38,5 +44,6 @@ class OrderedEventLoop extends EventLoop
|
||||
$this->poll($event);
|
||||
}
|
||||
}
|
||||
$tray->close();
|
||||
}
|
||||
}
|
||||
@ -17,6 +17,7 @@ final class PHPNative
|
||||
|
||||
\SDL_Init(\SDL_INIT_VIDEO);
|
||||
\SDL_TTF_Init();
|
||||
|
||||
// Kernel
|
||||
return (new Kernel(
|
||||
root: $root,
|
||||
|
||||
@ -3,6 +3,7 @@
|
||||
namespace PHPNative\Renderer;
|
||||
|
||||
use PHPNative\Renderer\Cache\Styles;
|
||||
use PHPNative\UI\Widget\Checkbox;
|
||||
use PHPNative\UI\Widget\Icon;
|
||||
use PHPNative\UI\Widget\Image;
|
||||
use PHPNative\UI\Widget\TextEdit;
|
||||
@ -28,6 +29,9 @@ class Widget
|
||||
if($view instanceof TextEdit) {
|
||||
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) {
|
||||
return \PHPNative\Renderer\Widgets\Container::render($styleCache, $thread, $viewPort, $view, $index);
|
||||
}
|
||||
|
||||
79
src/PHPNative/Renderer/src/Widgets/Checkbox.php
Normal file
79
src/PHPNative/Renderer/src/Widgets/Checkbox.php
Normal 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;
|
||||
}
|
||||
}
|
||||
@ -17,12 +17,12 @@ use PHPNative\Tailwind\Style\Overflow;
|
||||
use PHPNative\Tailwind\Style\OverflowEnum;
|
||||
use PHPNative\Tailwind\Style\Padding;
|
||||
use PHPNative\Tailwind\Style\StateEnum;
|
||||
use PhpParser\Builder\Class_;
|
||||
|
||||
class Container
|
||||
{
|
||||
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);
|
||||
$myViewport = clone $viewport;
|
||||
|
||||
@ -42,25 +42,6 @@ class Container
|
||||
$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;
|
||||
if($view->getViews() != null) {
|
||||
$view = LayoutParser::sortByStyles($stylesCache, $view, $viewport);
|
||||
@ -123,22 +104,49 @@ class Container
|
||||
}
|
||||
}
|
||||
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] && (
|
||||
$styles[Overflow::class]->y == OverflowEnum::scroll ||
|
||||
($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{
|
||||
if(isset($styles[Margin::class]) && $m = $styles[Margin::class]) {
|
||||
if(isset($styles[Padding::class]) && $m = $styles[Padding::class]) {
|
||||
$resultViewPort->x -= $m->left;
|
||||
$resultViewPort->width += ($m->right + $m->left);
|
||||
$resultViewPort->y -= $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{
|
||||
\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;
|
||||
|
||||
@ -44,7 +44,8 @@ class Column
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -42,7 +42,8 @@ class Row
|
||||
}
|
||||
|
||||
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;
|
||||
} else {
|
||||
$flexStyles[$subView->getRenderSort()] = clone $viewport;
|
||||
@ -54,7 +55,7 @@ class Row
|
||||
$subViewPort = $flexStyles[$subView->getRenderSort()];
|
||||
$subViewPort->x += $viewportX;
|
||||
$vp = Widget::render($stylesCache, $thread, clone $subViewPort, $subView, $index+1);
|
||||
$viewportX += $vp->width;
|
||||
$viewportX += ($vp->width);
|
||||
$viewportHeight = $vp->height > $viewportHeight ? $vp->height : $viewportHeight;
|
||||
}
|
||||
|
||||
|
||||
@ -39,7 +39,11 @@ class Text
|
||||
$font = \SDL_TTF_OpenFont(__DIR__ . DIRECTORY_SEPARATOR . '../../../../../assets/segoe-ui.ttf' , 16);
|
||||
$color = new \SDL_Color(0, 0, 0, 255);
|
||||
}
|
||||
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])) {
|
||||
$viewport->width = $surface->w;
|
||||
@ -48,22 +52,30 @@ class Text
|
||||
$viewport->height = $surface->h;
|
||||
}
|
||||
|
||||
$returnViewport = clone $viewport;
|
||||
$backdropViewport = clone $viewport;
|
||||
|
||||
if(isset($styles[Margin::class]) && $m = $styles[Margin::class]) {
|
||||
$viewport->x += $m->left;
|
||||
$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])) {
|
||||
$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])) {
|
||||
$viewport->height -= ($m->bottom + $m->top);
|
||||
$backdropViewport->height -= ($m->bottom + $m->top);
|
||||
}else{
|
||||
$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( $viewport->x <= $thread->getEvent()->x &&
|
||||
$thread->getEvent()->x <= $viewport->x + $viewport->width &&
|
||||
@ -77,15 +89,21 @@ class Text
|
||||
|
||||
if(isset($styles[Padding::class]) && $m = $styles[Padding::class]) {
|
||||
$viewport->x += $m->left;
|
||||
$viewport->width += ($m->right + $m->left);
|
||||
$viewport->y += $m->top;
|
||||
if(!isset($styles[Height::class])) {
|
||||
$viewport->height += ($m->bottom + $m->top);
|
||||
}
|
||||
$backdropViewport->height += ($m->top + $m->bottom);
|
||||
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);
|
||||
}else{
|
||||
$viewport->width += ($m->right + $m->left);
|
||||
$returnViewport->width += ($m->right + $m->left);
|
||||
$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);
|
||||
@ -94,7 +112,7 @@ class Text
|
||||
|
||||
$textureFont = \SDL_CreateTextureFromSurface($viewport->renderPtr, $surface);
|
||||
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(0, 0, $viewport->width, $surface->h)
|
||||
));
|
||||
@ -126,7 +144,7 @@ class Text
|
||||
}
|
||||
}
|
||||
|
||||
return $viewport;
|
||||
return $returnViewport;
|
||||
}
|
||||
|
||||
}
|
||||
@ -32,6 +32,8 @@ class TextEdit
|
||||
|
||||
$styles = $stylesCache->getStyle($view->getId(), $viewport->windowMediaQuery, $view->state, $view->style);
|
||||
|
||||
$myViewport = clone $viewport;
|
||||
|
||||
if(isset($styles[Text::class]) && $t = $styles[Text::class]) {
|
||||
$font = \SDL_TTF_OpenFont(__DIR__ . DIRECTORY_SEPARATOR . '../../../../../assets/segoe-ui.ttf' , $t->size);
|
||||
if($t->color->red != -1) {
|
||||
@ -43,6 +45,7 @@ class TextEdit
|
||||
$font = \SDL_TTF_OpenFont(__DIR__ . DIRECTORY_SEPARATOR . '../../../../../assets/segoe-ui.ttf' , 16);
|
||||
$color = new \SDL_Color(0, 0, 0, 255);
|
||||
}
|
||||
|
||||
if($view->value == "" && $view->placeholder != null) {
|
||||
$color = new \SDL_Color(0, 0, 0, 128);
|
||||
$surface = \SDL_TTF_RenderText_Blended($font, $view->placeholder, $color);
|
||||
@ -55,12 +58,14 @@ class TextEdit
|
||||
}
|
||||
|
||||
$viewport->height = $surface->h;
|
||||
$myViewport->height = $surface->h;
|
||||
|
||||
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);
|
||||
$myViewport->height += ($m->bottom + $m->top);
|
||||
}
|
||||
|
||||
$backdropViewport = clone $viewport;
|
||||
@ -131,7 +136,9 @@ class TextEdit
|
||||
$viewport->width -= ($m->right + $m->left);
|
||||
$viewport->y += $m->top;
|
||||
$viewport->height += ($m->bottom + $m->top);
|
||||
$myViewport->height += ($m->bottom + $m->top);
|
||||
$backdropViewport->height += ($m->top + $m->bottom);
|
||||
|
||||
}
|
||||
|
||||
\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);
|
||||
}
|
||||
|
||||
if((isset($styles[Width::class]) && $m = $styles[Width::class]) || (isset($styles[Basis::class]) && $m = $styles[Basis::class])) {
|
||||
|
||||
$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) {
|
||||
$thread->addToRenderStack(new Item($view->getId(), $textureFont,
|
||||
new \SDL_FRect($viewport->x, $viewport->y, $viewport->width, $surface->h), 3,
|
||||
@ -164,10 +171,16 @@ class TextEdit
|
||||
}
|
||||
|
||||
}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) {
|
||||
|
||||
@ -12,9 +12,9 @@ class Button extends Container implements View
|
||||
{
|
||||
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
|
||||
|
||||
33
src/PHPNative/UI/src/Widget/Checkbox.php
Normal file
33
src/PHPNative/UI/src/Widget/Checkbox.php
Normal 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
|
||||
{
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user