Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 0 additions & 11 deletions input_viewer_electron/src/main/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -433,12 +433,6 @@ ipcMain.handle('diag-log', (event, lines) => {
}
})

ipcMain.handle('diag-log-reset', () => {
const file = diagLogPath()
try { fs.writeFileSync(file, '') } catch { /* first run */ }
return file
})

// Art-Net reactive mode (issue #59).
//
// The POST lives here rather than in the renderer for two reasons. In production
Expand Down Expand Up @@ -562,11 +556,6 @@ ipcMain.handle('save-settings', (event, settings) => {
return saveSettings(settings)
})

// Get settings file path (for debugging)
ipcMain.handle('get-settings-path', () => {
return settingsPath
})

// Get app version for display in UI
ipcMain.handle('get-app-version', () => {
return getAppVersion()
Expand Down
2 changes: 0 additions & 2 deletions input_viewer_electron/src/preload/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,10 @@ contextBridge.exposeInMainWorld('electronAPI', {

// Diagnostic log (temporary; see the no-signal detection investigation)
diagLog: (lines) => ipcRenderer.invoke('diag-log', lines),
diagLogReset: () => ipcRenderer.invoke('diag-log-reset'),

// Settings persistence
loadSettings: () => ipcRenderer.invoke('load-settings'),
saveSettings: (settings) => ipcRenderer.invoke('save-settings', settings),
getSettingsPath: () => ipcRenderer.invoke('get-settings-path'),

// App info
getAppVersion: () => ipcRenderer.invoke('get-app-version'),
Expand Down
5 changes: 0 additions & 5 deletions input_viewer_electron/src/renderer/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,6 @@
<img src="./logo.png" alt="Input Viewer" class="divider-logo">
</div>

<!-- Bottom Logo (shown in single view) -->
<div id="bottom-logo" class="hidden">
<img src="./logo.png" alt="Input Viewer" class="divider-logo">
</div>

<div id="right-feed" class="video-feed">
<video id="right-video" autoplay playsinline muted></video>
<div class="no-signal-overlay hidden">
Expand Down
25 changes: 1 addition & 24 deletions input_viewer_electron/src/renderer/renderer.js
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,6 @@ const elements = {
rightVideo: document.getElementById('right-video'),
videoWrapper: document.getElementById('video-wrapper'),
centerDivider: document.getElementById('center-divider'),
bottomLogo: document.getElementById('bottom-logo'),
leftBorder: document.getElementById('left-border'),
rightBorder: document.getElementById('right-border'),
inputNameOverlay: document.getElementById('input-name-overlay'),
Expand Down Expand Up @@ -237,8 +236,6 @@ const elements = {
dropdownSystemVolume: document.getElementById('dropdown-system-volume'),
dropdownSystemVolumeValue: document.getElementById('dropdown-system-volume-value'),
// Cached label references (avoids DOM queries in hot paths)
leftLabel: document.querySelector('#left-feed .input-label'),
rightLabel: document.querySelector('#right-feed .input-label'),
// DVD screensaver overlay
dvdOverlay: document.getElementById('dvd-overlay'),
screensaverCanvas: document.getElementById('screensaver-canvas'),
Expand Down Expand Up @@ -824,10 +821,6 @@ async function startVideoStream(deviceId, videoElement, side) {
// leaves it up in forced mode.
hideNoSignal(side)

const label = side === 'left' ? elements.leftLabel : elements.rightLabel
if (label && device) {
label.textContent = getInputName(deviceId, device.label || 'Mock Input')
}
state.health[side].opened(performance.now())
resetCrop(side)
return mock.stream
Expand Down Expand Up @@ -957,14 +950,6 @@ async function startVideoStream(deviceId, videoElement, side) {

hideNoSignal(side)

// Update input label using cached reference
const device = state.devices.find(d => d.deviceId === deviceId)
const label = side === 'left' ? elements.leftLabel : elements.rightLabel
if (label && device) {
const name = getInputName(deviceId, device.label || 'Unknown Input')
label.textContent = name
}

attachStreamHealth(side, deviceId, stream)
return stream
} catch (error) {
Expand Down Expand Up @@ -2134,7 +2119,6 @@ function setLayout(mode) {
void elements.rightFeed.offsetWidth
elements.rightFeed.classList.remove('collapsed')
elements.centerDivider.classList.remove('hidden', 'overlay')
elements.bottomLogo.classList.add('hidden')
ensureRightStream()
break
case 'single':
Expand All @@ -2151,7 +2135,6 @@ function setLayout(mode) {
if (state.layoutMode === 'single') elements.rightFeed.classList.add('hidden')
}, animMs)
elements.centerDivider.classList.add('overlay')
elements.bottomLogo.classList.add('hidden')
break
}

Expand Down Expand Up @@ -2912,11 +2895,6 @@ function buildPickerVolume(side) {
return row
}

/** Volume lives in the pickers now; kept so existing callers still refresh it. */
function renderDropdownVolumeControls() {
renderDropdownInputLists()
}

/**
* Put one input on both halves, as the number keys do, but with the same fade a
* click on one half gets.
Expand Down Expand Up @@ -5076,9 +5054,8 @@ async function init() {
console.error('[Detection] Initialization error:', err)
})

// Render dropdown input lists and volume controls
// Render the dropdown's pickers (each carries its half's volume)
renderDropdownInputLists()
renderDropdownVolumeControls()

// Label the view-mode buttons and fill the Settings shortcut table from the
// shared list (#258). After renderDropdownInputLists, which paints the rows
Expand Down
38 changes: 0 additions & 38 deletions input_viewer_electron/src/renderer/styles.css
Original file line number Diff line number Diff line change
Expand Up @@ -193,22 +193,6 @@ body.single-view .video-feed.single video {
object-fit: contain;
}

.input-label {
position: absolute;
bottom: 20px;
left: 20px;
padding: 8px 16px;
background-color: rgba(0, 0, 0, 0.7);
border-radius: 6px;
font-size: 14px;
opacity: 0;
transition: opacity 0.3s ease;
}

body.cursor-visible .input-label {
opacity: 1;
}

/* =============================================================================
No Signal Overlay
============================================================================= */
Expand Down Expand Up @@ -464,28 +448,6 @@ body.gpu-compositing #right-video {
filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.5));
}

/* Bottom Logo (shown in single view) */
#bottom-logo {
position: fixed;
bottom: 0;
left: 0;
right: 0;
height: 60px;
display: flex;
align-items: center;
justify-content: center;
background-color: var(--bg-color);
z-index: 15;
}

#bottom-logo .divider-logo {
opacity: 1;
}

#bottom-logo.hidden {
display: none;
}

/* =============================================================================
Freeze Frame
============================================================================= */
Expand Down
6 changes: 2 additions & 4 deletions input_viewer_electron/test/helpers/renderer-dom.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,11 +36,9 @@ export function requiredElementIds() {
}

// Nodes the renderer reaches for with a descendant selector rather than an id.
// These mirror src/renderer/index.html, where each feed contains both a label
// and a no-signal overlay.
// These mirror src/renderer/index.html, where each feed contains a no-signal
// overlay.
const NESTED = [
{ parent: 'left-feed', className: 'input-label' },
{ parent: 'right-feed', className: 'input-label' },
{ parent: 'left-feed', className: 'no-signal-overlay hidden' },
{ parent: 'right-feed', className: 'no-signal-overlay hidden' },
]
Expand Down
2 changes: 1 addition & 1 deletion settings.example.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"_comment": "Example of the settings file the app writes, for reference only. The real file lives in the app's user data directory (Settings shows the exact path) -- nothing reads this copy. Keys mirror getDefaultSettings() in src/renderer/renderer.js.",
"_comment": "Example of the settings file the app writes, for reference only. The real file is settings.json in the app's user data folder, next to the logs folder whose path the log's startup line prints -- nothing reads this copy. Keys mirror getDefaultSettings() in src/renderer/renderer.js.",

"leftDeviceId": null,
"rightDeviceId": null,
Expand Down
Loading