package ui import ( "image/color" "fyne.io/fyne/v2" "fyne.io/fyne/v2/canvas" "fyne.io/fyne/v2/widget" ) // Material Icons unicode constants // Using Material Symbols from Google Fonts // https://fonts.google.com/icons const ( // Playback controls (ASCII fallback until custom icons) IconPlayArrow = "▶" // play_arrow IconPause = "||" // pause IconStop = "■" // stop IconSkipPrevious = "|◀" // skip_previous IconSkipNext = "▶|" // skip_next IconFastRewind = "◀◀" // fast_rewind IconFastForward = "▶▶" // fast_forward // Frame navigation (for frame-accurate mode) IconFramePrevious = "◀" // navigate_before / chevron_left IconFrameNext = "▶" // navigate_next / chevron_right IconKeyframePrevious = "◀◀" // first_page (double chevron left) IconKeyframeNext = "▶▶" // last_page (double chevron right) // Volume controls IconVolumeUp = "🔊" // volume_up IconVolumeDown = "🔉" // volume_down IconVolumeMute = "🔇" // volume_mute IconVolumeOff = "🔇" // volume_off // Playlist management IconMenu = "☰" // menu (hamburger) IconPlaylistAdd = "\ue03b" // playlist_add IconPlaylistRemove = "\ue958" // playlist_remove IconClearAll = "\ue0b8" // clear_all IconPlaylistPlay = "\ue05f" // playlist_play // Cut/edit tools IconContentCut = "\ue14e" // content_cut (scissors) IconFileDownload = "\ue2c4" // file_download (export) IconClear = "\ue14c" // clear // File operations IconFolderOpen = "\ue2c8" // folder_open IconFolder = "\ue2c7" // folder IconSave = "\ue161" // save IconPhotoCamera = "\ue412" // photo_camera (screenshot) // View/display IconFullscreen = "\ue5d0" // fullscreen IconFullscreenExit = "\ue5d1" // fullscreen_exit IconAspectRatio = "\ue85b" // aspect_ratio IconClosedCaption = "\ue01c" // closed_caption (subtitles) IconList = "\ue896" // list (chapters) // Settings/options IconSettings = "\ue8b8" // settings IconAudiotrack = "\ue3a1" // audiotrack IconVideocam = "\ue04b" // videocam IconSpeed = "\ue9e4" // speed IconRepeat = "\ue040" // repeat (loop) IconRepeatOne = "\ue041" // repeat_one // Navigation/UI IconArrowBack = "\ue5c4" // arrow_back IconArrowForward = "\ue5c8" // arrow_forward IconArrowUpward = "\ue5d8" // arrow_upward IconArrowDown = "\ue5db" // arrow_downward IconClose = "\ue5cd" // close IconMoreVert = "\ue5d4" // more_vert (3 dots vertical) // Status indicators IconInfo = "\ue88e" // info IconWarning = "\ue002" // warning IconError = "\ue000" // error IconCheckCircle = "\ue86c" // check_circle (success) IconHourglass = "\ue88b" // hourglass_empty (loading) ) // NewIconText creates a canvas.Text widget with a Material Icon // The icon parameter should be one of the Icon* constants above // Size is the font size in points (e.g., 20, 24, 32) func NewIconText(icon string, size float32, col color.Color) *canvas.Text { text := canvas.NewText(icon, col) text.TextSize = size text.TextStyle = fyne.TextStyle{Monospace: true} return text } // NewIconButton creates a button with a Material Icon // Uses the same signature as utils.MakeIconButton for easy replacement func NewIconButton(icon, tooltip string, tapped func()) *widget.Button { btn := widget.NewButton(icon, tapped) btn.Importance = widget.LowImportance return btn } // IconButtonWithStyle creates a button with custom styling func IconButtonWithStyle(icon, tooltip string, importance widget.ButtonImportance, tapped func()) *widget.Button { btn := widget.NewButton(icon, tapped) btn.Importance = importance return btn } // GetPlayPauseIcon returns the appropriate icon based on paused state func GetPlayPauseIcon(isPaused bool) string { if isPaused { return IconPlayArrow } return IconPause } // GetVolumeIcon returns the appropriate volume icon based on volume level func GetVolumeIcon(volume float64, muted bool) string { if muted || volume == 0 { return IconVolumeOff } if volume < 30 { return IconVolumeMute } if volume < 70 { return IconVolumeDown } return IconVolumeUp } // MaterialIconsAvailable checks if Material Icons font is loaded // This can be extended to actually check font availability func MaterialIconsAvailable() bool { // For now, return true - icons will render as unicode // Later: check if Material Symbols font is loaded return true }