Add Big Picture mode and multi-target build

Introduce a Big Picture mode and support building two app targets. CMakeLists was refactored to add a helper (add_nebula_app_target) and now registers NebulaBrowser and NebulaBigPicture executables, moving UI/assets post-build copying into the helper. A new app/main_bigpicture.cpp entry was added and RunNebula now accepts LaunchOptions (AppMode) with a new LaunchOptions struct. NebulaController was extended heavily to manage a BigPicture browser role: creation, enter/exit mode, layout logic, cursor injection/removal, remote input handlers (mouse move/click/wheel/text), and state syncing. Cef/browser_client updated for the new BigPicture role and message filtering. Platform API gained MoveCursorToBrowserPoint with platform stubs/Win implementation. Big-picture UI files (CSS/JS/HTML) were also updated to support the new mode.
This commit is contained in:
Andrew Zambazos
2026-05-18 22:07:41 +12:00
parent b4d93f24cd
commit d6f15c5dce
16 changed files with 1745 additions and 2903 deletions
+38 -7
View File
@@ -26,6 +26,10 @@
<div class="bg-particles"></div>
<div class="bg-glow"></div>
</div>
<div id="browser-stage-frame" class="browser-stage-frame hidden" aria-hidden="true"></div>
<div id="virtual-cursor" class="virtual-cursor hidden" aria-hidden="true">
<div class="virtual-cursor-dot"></div>
</div>
<!-- Top header bar -->
<header class="bp-header">
@@ -41,6 +45,9 @@
</div>
<div class="header-right">
<div class="status-icons">
<span id="bp-controller-status" class="status-icon controller-status disconnected" title="Controller disconnected">
<span class="material-symbols-outlined">sports_esports</span>
</span>
<span id="bp-wifi" class="status-icon" title="Connected">
<span class="material-symbols-outlined">wifi</span>
</span>
@@ -72,6 +79,10 @@
<span class="material-symbols-outlined">bookmarks</span>
<span class="nav-label">Bookmarks</span>
</button>
<button class="nav-item" data-section="history" data-focusable tabindex="0">
<span class="material-symbols-outlined">history</span>
<span class="nav-label">History</span>
</button>
<button class="nav-item" data-section="downloads" data-focusable tabindex="0">
<span class="material-symbols-outlined">download</span>
<span class="nav-label">Downloads</span>
@@ -147,6 +158,26 @@
</div>
</section>
<!-- History section -->
<section id="section-history" class="bp-section">
<div class="section-header">
<h1 class="section-title">History</h1>
<p class="section-subtitle">Recently visited sites from this profile</p>
</div>
<div class="section-actions">
<button class="action-btn danger" id="bp-clear-history" data-focusable tabindex="0">
<span class="material-symbols-outlined">delete</span>
<span>Clear History</span>
</button>
</div>
<div class="list-container" id="historyList">
<div class="empty-state">
<span class="material-symbols-outlined">history</span>
<p>No browsing history</p>
</div>
</div>
</section>
<!-- Downloads section -->
<section id="section-downloads" class="bp-section">
<div class="section-header">
@@ -332,7 +363,7 @@
</div>
</div>
<div class="option-control">
<button class="action-button" id="bp-clear-history" data-focusable tabindex="0">
<button class="action-button" id="bp-clear-history-settings" data-focusable tabindex="0">
<span class="material-symbols-outlined">delete</span>
<span>Clear</span>
</button>
@@ -403,28 +434,28 @@
<!-- Bottom controller hints -->
<footer class="bp-footer">
<div class="controller-hints">
<div class="controller-hints" id="controller-hints">
<div class="hint">
<span class="controller-btn dpad">
<span class="material-symbols-outlined">gamepad</span>
</span>
<span>Navigate</span>
<span id="hint-navigate">Navigate</span>
</div>
<div class="hint">
<span class="controller-btn a-btn">A</span>
<span>Select</span>
<span id="hint-a">Select</span>
</div>
<div class="hint">
<span class="controller-btn b-btn">B</span>
<span>Back</span>
<span id="hint-b">Back</span>
</div>
<div class="hint">
<span class="controller-btn y-btn">Y</span>
<span>Search</span>
<span id="hint-y">Search</span>
</div>
<div class="hint">
<span class="controller-btn menu-btn"></span>
<span>Menu</span>
<span id="hint-menu">Menu</span>
</div>
</div>
</footer>