From d0f7b8fbf7b579da1d6b88fe2bfe49d6de70cc6a Mon Sep 17 00:00:00 2001 From: Thomas Peterson Date: Thu, 17 Oct 2024 10:59:52 +0200 Subject: [PATCH] backup --- .../Framework/src/Application/Gui.php | 2 + .../Renderer/src/Widgets/Container.php | 107 ++++++++++++++---- .../Renderer/src/Widgets/Container/Column.php | 59 +++++++++- .../Renderer/src/Widgets/Container/Row.php | 52 +++++++++ 4 files changed, 191 insertions(+), 29 deletions(-) diff --git a/src/PHPNative/Framework/src/Application/Gui.php b/src/PHPNative/Framework/src/Application/Gui.php index 4de8e23..ccdafbd 100644 --- a/src/PHPNative/Framework/src/Application/Gui.php +++ b/src/PHPNative/Framework/src/Application/Gui.php @@ -44,11 +44,13 @@ final readonly class Gui implements Application $lifeCycle->run(); } catch (ArgumentCountError $e) { var_dump($e->getMessage()); + var_dump($e->getLine()); var_dump($e->getFile()); var_dump($e->getTraceAsString()); } } catch (Throwable $throwable) { var_dump($throwable->getMessage()); + var_dump($throwable->getLine()); var_dump($throwable->getFile()); var_dump($throwable->getTraceAsString()); } diff --git a/src/PHPNative/Renderer/src/Widgets/Container.php b/src/PHPNative/Renderer/src/Widgets/Container.php index c703171..76cda1b 100644 --- a/src/PHPNative/Renderer/src/Widgets/Container.php +++ b/src/PHPNative/Renderer/src/Widgets/Container.php @@ -5,26 +5,18 @@ namespace PHPNative\Renderer\Widgets; use PHPNative\Debug\Debug; use PHPNative\Event\EventType; use PHPNative\Renderer\Cache\Styles; -use PHPNative\Renderer\Item; use PHPNative\Renderer\Thread; use PHPNative\Renderer\Viewport; -use PHPNative\Renderer\Widget; use PHPNative\Renderer\Widgets\Container\Column; +use PHPNative\Renderer\Widgets\Container\Row; use PHPNative\Tailwind\LayoutParser; -use PHPNative\Tailwind\Style\Background; -use PHPNative\Tailwind\Style\Basis; use PHPNative\Tailwind\Style\DirectionEnum; use PHPNative\Tailwind\Style\Flex; -use PHPNative\Tailwind\Style\FlexTypeEnum; -use PHPNative\Tailwind\Style\Height; use PHPNative\Tailwind\Style\Margin; use PHPNative\Tailwind\Style\Overflow; use PHPNative\Tailwind\Style\OverflowEnum; use PHPNative\Tailwind\Style\Padding; use PHPNative\Tailwind\Style\StateEnum; -use PHPNative\Tailwind\Style\Unit; -use PHPNative\Tailwind\Style\Width; -use PHPNative\Tailwind\StyleParser; class Container { @@ -32,6 +24,7 @@ class Container { $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; @@ -40,7 +33,6 @@ class Container $viewport->height -= ($m->bottom + $m->top); } - $targetViewport = clone $viewport; \PHPNative\Renderer\Visuals\Visuals::render($view->getId(), $thread, $styles, $viewport, $index); \PHPNative\Renderer\Visuals\Visuals::changeViewport($view->getId(), $thread, $styles, $viewport); @@ -52,14 +44,83 @@ class Container $viewport->height -= ($m->bottom + $m->top); } - $view = LayoutParser::sortByStyles($stylesCache, $view, $viewport); + 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); + } + } + if($view->getViews() != null) { + $view = LayoutParser::sortByStyles($stylesCache, $view, $viewport); if (isset($styles[Flex::class]) && $styles[Flex::class]->direction == DirectionEnum::column) { - //Debug::resolve()->log(['Styles' => $styles]); - Column::render($stylesCache, $thread, $viewport, $view->getViews(), $index); + $resultViewPort = Column::render($stylesCache, $thread, clone $viewport, $view, $index); + + if (isset($styles[Overflow::class]) && $f = $styles[Overflow::class] && ( + $styles[Overflow::class]->y == OverflowEnum::scroll || + ($styles[Overflow::class]->y == OverflowEnum::auto && $viewport->height < $resultViewPort->height) + )) { + + \PHPNative\Renderer\Visuals\Scrollbar::renderBackground($view->getId(), $thread, $styles, $viewport); + + $sliderViewport = clone $viewport; + $sliderViewport->width = 10; + $sliderViewport->x = $viewport->x + $viewport->width - 10; + $ohP = ($viewport->height / 100); + $ratio = ($resultViewPort->height / ($viewport->height+$resultViewPort->height)); + $sliderViewport->y = $viewport->y + (int)($view->getMoveToY()*$ratio); + $sliderViewport->height = (int)($ratio*100 * $ohP); + + \PHPNative\Renderer\Visuals\Scrollbar::renderSlider($view->getId(), $thread, $styles, $sliderViewport); + + if ($thread->getEvent() && $thread->getEvent()->getType() === EventType::MOUSEBUTTON_DOWN) { + if ($sliderViewport->x <= $thread->getEvent()->x && + $thread->getEvent()->x <= $sliderViewport->x + $sliderViewport->width && + $sliderViewport->y <= $thread->getEvent()->y && + $thread->getEvent()->y <= $sliderViewport->y + $sliderViewport->height) { + $view->setDragMode(true); + //$view->setMoveStartX($thread->getEvent()->x); + $view->setMoveStartY($thread->getEvent()->y); + } + } + if ($view->isDragMode() && $thread->getEvent() && $thread->getEvent()->getType() === EventType::MOUSEMOVE) { + //$view->setMoveToX($view->getMoveEndX() + $thread->getEvent()->x - $view->getMoveStartX()); + $view->setMoveToY($view->getMoveEndY() + $thread->getEvent()->y - $view->getMoveStartY()); + + if($view->getMoveToY() <= 0) { + $view->setMoveStartY($thread->getEvent()->y); + // $view->setMoveToX($view->getMoveEndX() + $thread->getEvent()->x - $view->getMoveStartX()); + $view->setMoveToY($view->getMoveEndY() + $thread->getEvent()->y - $view->getMoveStartY()); + + } + if($view->getMoveToY() + ($sliderViewport->height*$ratio) > ($viewport->height)) { + //$view->setMoveToX($view->getMoveEndX() + $thread->getEvent()->x - $view->getMoveStartX()); + $view->setMoveToY($viewport->height - (int)($sliderViewport->height*$ratio) ); + } + } + if ($thread->getEvent() && $thread->getEvent()->getType() === EventType::MOUSEBUTTON_UP) { + $view->setDragMode(false); + //$view->setMoveEndX($view->getMoveToX()); + $view->setMoveEndY($view->getMoveToY()); + } + + } } if (isset($styles[Flex::class]) && $styles[Flex::class]->direction == DirectionEnum::row) { - + $resultViewPort = Row::render($stylesCache, $thread, clone $viewport, $view, $index); } } @@ -220,15 +281,11 @@ class Container } } - if (isset($styles[Overflow::class]) && $f = $styles[Overflow::class] && ( - $styles[Overflow::class]->y == OverflowEnum::scroll || - ($styles[Overflow::class]->y == OverflowEnum::auto && $viewport->height < 0) - )) { + if($view->getViews() != null) { - \PHPNative\Renderer\Visuals\Scrollbar::renderBackground($view->getId(), $thread, $styles, $targetViewport, $index); - - if ($thread->getEvent() && $thread->getEvent()->getType() === EventType::MOUSEBUTTON_DOWN) { - if ($targetViewport->x + $targetViewport->width - 10 <= $thread->getEvent()->x && + /* + * if ($thread->getEvent() && $thread->getEvent()->getType() === EventType::MOUSEBUTTON_DOWN) { + if ($viewport->x + $targetViewport->width - 10 <= $thread->getEvent()->x && $thread->getEvent()->x <= $targetViewport->x + $targetViewport->width && $targetViewport->y <= $thread->getEvent()->y && $thread->getEvent()->y <= $targetViewport->y + $targetViewport->height) { @@ -268,9 +325,9 @@ class Container \PHPNative\Renderer\Visuals\Scrollbar::renderSlider($view->getId(), $thread, $styles, $sliderViewport, $index); } - } -*/ + }*/ - return $viewport; + + return $myViewport; } } \ No newline at end of file diff --git a/src/PHPNative/Renderer/src/Widgets/Container/Column.php b/src/PHPNative/Renderer/src/Widgets/Container/Column.php index 2b0b796..a12258d 100644 --- a/src/PHPNative/Renderer/src/Widgets/Container/Column.php +++ b/src/PHPNative/Renderer/src/Widgets/Container/Column.php @@ -2,20 +2,71 @@ namespace PHPNative\Renderer\Widgets\Container; +use PHPNative\Debug\Debug; +use PHPNative\Event\EventType; use PHPNative\Renderer\Cache\Styles; use PHPNative\Renderer\Thread; use PHPNative\Renderer\Viewport; -use PHPNative\UI\Collection\Views; +use PHPNative\Renderer\Widget; +use PHPNative\Tailwind\LayoutParser; +use PHPNative\Tailwind\Style\Flex; +use PHPNative\Tailwind\Style\FlexTypeEnum; +use PHPNative\Tailwind\Style\Height; +use PHPNative\Tailwind\Style\Overflow; +use PHPNative\Tailwind\Style\OverflowEnum; +use PHPNative\Tailwind\Style\Unit; +use PHPNative\UI\View; class Column { - public static function render(Styles $stylesCache, Thread $thread, Viewport $viewport, Views $views, int $index = 0): Viewport + public static function render(Styles $stylesCache, Thread $thread, Viewport $viewport, View $view, int $index = 0): Viewport { - foreach($views as $view) { + $styles = $stylesCache->getStyle($view->getId(), $viewport->windowMediaQuery, $view->state, $view->style); + $flexStyles = []; + $viewportHeight = $viewport->height; + foreach($view->getViews() as $subView) { + $found = false; + $stylesSubView = $stylesCache->getStyle($subView->getId(), $viewport->windowMediaQuery, $subView->state, $subView->style); + if (isset($stylesSubView[Height::class]) && $h = $stylesSubView[Height::class]) { + if ($h->unit == Unit::Percent) { + $height = round($viewportHeight / 100 * $h->value); + } else { + $height = $h->value; + $viewportHeight -= $h->value; + } + $found = true; + } + if (isset($stylesSubView[Flex::class]) && $stylesSubView[Flex::class]->type == FlexTypeEnum::one + ) { + $height = round($viewportHeight / $view->getViews()->countOne); + $found = true; + } + if ($found) { + $vp = new Viewport($viewport->windowId, $viewport->windowPtr, $viewport->renderPtr, $viewport->x, $viewport->y, $viewport->width, $height, $viewport->windowWidth, $viewport->windowHeight, $viewport->windowMediaQuery); + $flexStyles[$subView->getRenderSort()] = $vp; + } } - + LayoutParser::sortByRenderSort($view); + $viewportY = 0; + $viewportHeight = $viewport->height; + foreach($view->getViews() as $subView) { + if(isset($flexStyles[$subView->getRenderSort()])) { + $subViewPort = $flexStyles[$subView->getRenderSort()]; + $subViewPort->y += $viewportY+($view->getMoveToY()*-1); + }else{ + $subViewPort = clone $viewport; + $subViewPort->y += $viewportY+($view->getMoveToY()*-1); + $subViewPort->height = $viewportHeight; + } + echo sprintf("%s %d %d", $subView->getId(), $subViewPort->y, $subViewPort->height).PHP_EOL; + $vp = Widget::render($stylesCache, $thread, clone $subViewPort, $subView, $index+1); + $viewportY += $vp->height; + $viewportHeight -= $vp->height; + } + echo sprintf("%s %d", $view->getId(), $viewportY).PHP_EOL; + $viewport->height = $viewportY; return $viewport; } } \ No newline at end of file diff --git a/src/PHPNative/Renderer/src/Widgets/Container/Row.php b/src/PHPNative/Renderer/src/Widgets/Container/Row.php index 9474720..bd9bdee 100644 --- a/src/PHPNative/Renderer/src/Widgets/Container/Row.php +++ b/src/PHPNative/Renderer/src/Widgets/Container/Row.php @@ -2,7 +2,59 @@ namespace PHPNative\Renderer\Widgets\Container; +use PHPNative\Debug\Debug; +use PHPNative\Renderer\Cache\Styles; +use PHPNative\Renderer\Thread; +use PHPNative\Renderer\Viewport; +use PHPNative\Renderer\Widget; +use PHPNative\Tailwind\LayoutParser; +use PHPNative\Tailwind\Style\Flex; +use PHPNative\Tailwind\Style\FlexTypeEnum; +use PHPNative\Tailwind\Style\Height; +use PHPNative\Tailwind\Style\Unit; +use PHPNative\Tailwind\Style\Width; +use PHPNative\UI\View; + class Row { + public static function render(Styles $stylesCache, Thread $thread, Viewport $viewport, View $view, int $index = 0): Viewport + { + $flexStyles = []; + $viewportWidth = $viewport->width; + foreach($view->getViews() as $subView) { + $found = false; + $stylesSubView = $stylesCache->getStyle($subView->getId(), $viewport->windowMediaQuery, $subView->state, $subView->style); + if (isset($stylesSubView[Width::class]) && $h = $stylesSubView[Width::class]) { + if ($h->unit == Unit::Percent) { + $width = round($viewportWidth / 100 * $h->value); + } else { + $width = $h->value; + $viewportWidth -= $h->value; + } + $found = true; + } + if (isset($stylesSubView[Flex::class]) && $stylesSubView[Flex::class]->type == FlexTypeEnum::one + ) { + $width = round($viewportWidth / $view->getViews()->countOne); + $found = true; + } + if ($found) { + $vp = new Viewport($viewport->windowId, $viewport->windowPtr, $viewport->renderPtr, $viewport->x, $viewport->y, $width, $viewport->height, $viewport->windowWidth, $viewport->windowHeight, $viewport->windowMediaQuery); + $flexStyles[$subView->getRenderSort()] = $vp; + } else { + $flexStyles[$subView->getRenderSort()] = clone $viewport; + } + } + LayoutParser::sortByRenderSort($view); + $viewportX = 0; + foreach($view->getViews() as $subView) { + $subViewPort = $flexStyles[$subView->getRenderSort()]; + $subViewPort->x += $viewportX; + $vp = Widget::render($stylesCache, $thread, clone $subViewPort, $subView, $index+1); + $viewportX += $vp->width; + } + + return $viewport; + } } \ No newline at end of file