Fixes
This commit is contained in:
parent
3654670954
commit
f1fc721894
@ -2,9 +2,12 @@
|
|||||||
|
|
||||||
namespace PHPNative\Framework;
|
namespace PHPNative\Framework;
|
||||||
|
|
||||||
|
use PHPNative\UI\TrayIcon;
|
||||||
|
|
||||||
interface App
|
interface App
|
||||||
{
|
{
|
||||||
public function getName(): string;
|
public function getName(): string;
|
||||||
|
|
||||||
public function getStartWindow(): string;
|
public function getStartWindow(): string;
|
||||||
|
public function getTrayIcon(): ?TrayIcon;
|
||||||
}
|
}
|
||||||
@ -42,6 +42,7 @@ final readonly class Gui implements Application
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
$lifeCycle->show($application->getStartWindow());
|
$lifeCycle->show($application->getStartWindow());
|
||||||
|
$lifeCycle->addTrayIcon($application->getTrayIcon());
|
||||||
$lifeCycle->run();
|
$lifeCycle->run();
|
||||||
} catch (ArgumentCountError $e) {
|
} catch (ArgumentCountError $e) {
|
||||||
var_dump($e->getMessage());
|
var_dump($e->getMessage());
|
||||||
|
|||||||
@ -10,10 +10,13 @@ use PHPNative\Framework\Application\Window;
|
|||||||
use PHPNative\Framework\Loop\OrderedEventLoop;
|
use PHPNative\Framework\Loop\OrderedEventLoop;
|
||||||
use PHPNative\Framework\Loop\WorkerInterface;
|
use PHPNative\Framework\Loop\WorkerInterface;
|
||||||
use PHPNative\Renderer\Thread;
|
use PHPNative\Renderer\Thread;
|
||||||
|
use PHPNative\UI\TrayIcon;
|
||||||
|
|
||||||
#[Singleton]
|
#[Singleton]
|
||||||
class Lifecycle implements WorkerInterface
|
class Lifecycle implements WorkerInterface
|
||||||
{
|
{
|
||||||
|
private ?\Tray $trayIcon = null;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
private OrderedEventLoop $loop,
|
private OrderedEventLoop $loop,
|
||||||
private ContextCollection $contextCollection,
|
private ContextCollection $contextCollection,
|
||||||
@ -22,6 +25,18 @@ class Lifecycle implements WorkerInterface
|
|||||||
$this->loop->use($this);
|
$this->loop->use($this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function is_windows() {
|
||||||
|
return strncasecmp(PHP_OS, "WIN", 3) === 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function addTrayIcon(?TrayIcon $trayIcon):void
|
||||||
|
{
|
||||||
|
if($trayIcon) {
|
||||||
|
$this->trayIcon = new \Tray($trayIcon->name, $this->is_windows()? $trayIcon->iconWindows: $trayIcon->iconLinux);
|
||||||
|
$this->trayIcon->init();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public function show(string $window, array $arguments = [], ?callable $onClose = null): void
|
public function show(string $window, array $arguments = [], ?callable $onClose = null): void
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -44,6 +59,7 @@ class Lifecycle implements WorkerInterface
|
|||||||
public function onUpdate(float $delta): void
|
public function onUpdate(float $delta): void
|
||||||
{
|
{
|
||||||
$this->contextCollection->map(fn(Context $context) => $context->update($delta));
|
$this->contextCollection->map(fn(Context $context) => $context->update($delta));
|
||||||
|
$this->trayIcon?->poll();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function onRender(float $delta): void
|
public function onRender(float $delta): void
|
||||||
|
|||||||
@ -11,6 +11,7 @@ class OrderedEventLoop extends EventLoop
|
|||||||
|
|
||||||
public Timer $updates;
|
public Timer $updates;
|
||||||
|
|
||||||
|
|
||||||
public function __construct(private Driver $eventDriver)
|
public function __construct(private Driver $eventDriver)
|
||||||
{
|
{
|
||||||
$this->render = new Timer(self::DEFAULT_FRAME_RATE);
|
$this->render = new Timer(self::DEFAULT_FRAME_RATE);
|
||||||
@ -21,8 +22,6 @@ 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);
|
||||||
@ -33,10 +32,6 @@ 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()) {
|
||||||
@ -44,6 +39,5 @@ class OrderedEventLoop extends EventLoop
|
|||||||
$this->poll($event);
|
$this->poll($event);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$tray->close();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue
Block a user