Add fullscreen mode with F11 and ESC keyboard shortcuts

Implements basic fullscreen toggle functionality for immersive video playback.

Fullscreen Features:
- F11 key toggles fullscreen on/off
- ESC key exits fullscreen mode
- Window.SetFullScreen() for native fullscreen
- isFullscreen state tracking in appState

Keyboard Shortcuts:
- F11: Toggle fullscreen (globally available)
- ESC: Exit fullscreen (only when in fullscreen mode)
- Shortcuts work from any screen in the app

Implementation:
- Added isFullscreen bool to appState
- Created toggleFullscreen() method
- Global keyboard handler in runGUI()
- SetOnTypedKey handles F11 and ESC

Usage:
1. Load a video in VT_Player
2. Press F11 to enter fullscreen
3. Press F11 or ESC to exit fullscreen

Next Steps:
- Add fullscreen button to player controls
- Auto-hide controls after 3 seconds in fullscreen
- Show controls on mouse movement in fullscreen
- Double-click video to toggle fullscreen

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Stu 2025-12-09 11:19:44 -05:00
parent 30899b3512
commit b73beb1fef
2 changed files with 82 additions and 0 deletions

19
main.go
View File

@ -199,6 +199,7 @@ type appState struct {
compareFile1 *videoSource
compareFile2 *videoSource
keyframingMode bool // Toggle for frame-accurate editing features
isFullscreen bool // Fullscreen mode state
}
func (s *appState) stopPreview() {
@ -208,6 +209,11 @@ func (s *appState) stopPreview() {
}
}
func (s *appState) toggleFullscreen() {
s.isFullscreen = !s.isFullscreen
s.window.SetFullScreen(s.isFullscreen)
}
func (s *appState) updateStatsBar() {
if s.statsBar == nil || s.jobQueue == nil {
return
@ -2024,6 +2030,19 @@ func runGUI() {
w.SetOnDropped(func(pos fyne.Position, items []fyne.URI) {
state.handleDropPlayer(items)
})
// Global keyboard shortcuts (F11 for fullscreen, ESC to exit fullscreen)
w.Canvas().SetOnTypedKey(func(key *fyne.KeyEvent) {
switch key.Name {
case fyne.KeyF11:
state.toggleFullscreen()
case fyne.KeyEscape:
if state.isFullscreen {
state.toggleFullscreen()
}
}
})
state.showMainMenu()
logging.Debug(logging.CatUI, "main menu rendered with %d modules", len(modulesList))

63
scripts/build.sh.old Executable file
View File

@ -0,0 +1,63 @@
#!/bin/bash
# VT Player Build Script
# Cleans dependencies and builds the application with proper error handling
set -e
PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
BUILD_OUTPUT="$PROJECT_ROOT/VTPlayer"
echo "════════════════════════════════════════════════════════════════"
echo " VT Player Build Script"
echo "════════════════════════════════════════════════════════════════"
echo ""
# Check if go is installed
if ! command -v go &> /dev/null; then
echo "❌ ERROR: Go is not installed. Please install Go 1.21 or later."
exit 1
fi
echo "📦 Go version:"
go version
echo ""
# Change to project directory
cd "$PROJECT_ROOT"
echo "🧹 Cleaning previous builds and cache..."
go clean -cache -modcache -testcache 2>/dev/null || true
rm -f "$BUILD_OUTPUT" 2>/dev/null || true
echo "✓ Cache cleaned"
echo ""
echo "⬇️ Downloading and verifying dependencies..."
go mod download
go mod verify
echo "✓ Dependencies verified"
echo ""
echo "🔨 Building VT Player..."
# Fyne needs cgo for GLFW/OpenGL bindings; build with CGO enabled.
export CGO_ENABLED=1
if go build -o "$BUILD_OUTPUT" .; then
echo "✓ Build successful!"
echo ""
echo "════════════════════════════════════════════════════════════════"
echo "✅ BUILD COMPLETE"
echo "════════════════════════════════════════════════════════════════"
echo ""
echo "Output: $BUILD_OUTPUT"
echo "Size: $(du -h "$BUILD_OUTPUT" | cut -f1)"
echo ""
echo "To run:"
echo " $PROJECT_ROOT/VTPlayer"
echo ""
echo "Or use the convenience script:"
echo " source $PROJECT_ROOT/scripts/alias.sh"
echo " VTPlayer"
echo ""
else
echo "❌ Build failed!"
exit 1
fi