Material Icons Mapping for VT_Player
Using Google Material Icons for clean, professional UI.
Icon Sources
- Material Symbols: https://fonts.google.com/icons
- Format: We'll use Material Symbols (variable font with fill/weight options)
- License: Apache 2.0 (free for commercial use)
Integration Methods
Option 1: Unicode Characters (Simplest)
Use Material Icons font and insert unicode characters directly in Go strings.
Option 2: SVG Downloads (Recommended)
Download SVG files from Google Fonts and bundle with app.
Option 3: Icon Font (Best for scaling)
Use Material Symbols variable font with Fyne's text rendering.
Icon Mappings (Material Symbols Names)
Playback Controls
| Function |
Material Icon |
Unicode |
Ligature |
| Play |
play_arrow |
U+E037 |
play_arrow |
| Pause |
pause |
U+E034 |
pause |
| Stop |
stop |
U+E047 |
stop |
| Previous |
skip_previous |
U+E045 |
skip_previous |
| Next |
skip_next |
U+E044 |
skip_next |
| Rewind |
fast_rewind |
U+E020 |
fast_rewind |
| Fast Forward |
fast_forward |
U+E01F |
fast_forward |
Frame Navigation (Frame-Accurate Mode)
| Function |
Material Icon |
Unicode |
Notes |
| Frame Previous |
navigate_before |
U+E408 |
Or chevron_left |
| Frame Next |
navigate_next |
U+E409 |
Or chevron_right |
| Keyframe Previous |
first_page |
U+E5DC |
Double chevron left |
| Keyframe Next |
last_page |
U+E5DD |
Double chevron right |
Volume Controls
| Function |
Material Icon |
Unicode |
Ligature |
| Volume High |
volume_up |
U+E050 |
volume_up |
| Volume Medium |
volume_down |
U+E04D |
volume_down |
| Volume Low |
volume_mute |
U+E04E |
volume_mute |
| Volume Muted |
volume_off |
U+E04F |
volume_off |
Playlist Management
| Function |
Material Icon |
Unicode |
Ligature |
| Playlist/Menu |
menu |
U+E5D2 |
menu |
| Add to Playlist |
playlist_add |
U+E03B |
playlist_add |
| Remove from Playlist |
playlist_remove |
U+E958 |
playlist_remove |
| Clear Playlist |
clear_all |
U+E0B8 |
clear_all |
| Playlist Play |
playlist_play |
U+E05F |
playlist_play |
Cut/Edit Tools
| Function |
Material Icon |
Unicode |
Ligature |
| Set In Point |
first_page |
U+E5DC |
Or start |
| Set Out Point |
last_page |
U+E5DD |
Or end |
| Cut/Scissors |
content_cut |
U+E14E |
content_cut |
| Export |
file_download |
U+E2C4 |
file_download |
| Clear Markers |
clear |
U+E14C |
clear |
File Operations
| Function |
Material Icon |
Unicode |
Ligature |
| Open File |
folder_open |
U+E2C8 |
folder_open |
| Open Folder |
folder |
U+E2C7 |
folder |
| Save |
save |
U+E161 |
save |
| Screenshot |
photo_camera |
U+E412 |
photo_camera |
View/Display
| Function |
Material Icon |
Unicode |
Ligature |
| Fullscreen |
fullscreen |
U+E5D0 |
fullscreen |
| Fullscreen Exit |
fullscreen_exit |
U+E5D1 |
fullscreen_exit |
| Aspect Ratio |
aspect_ratio |
U+E85B |
aspect_ratio |
| Subtitles |
closed_caption |
U+E01C |
closed_caption |
| Chapters |
list |
U+E896 |
list |
Settings/Options
| Function |
Material Icon |
Unicode |
Ligature |
| Settings |
settings |
U+E8B8 |
settings |
| Audio Track |
audiotrack |
U+E3A1 |
audiotrack |
| Video Track |
videocam |
U+E04B |
videocam |
| Speed |
speed |
U+E9E4 |
speed |
| Loop |
repeat |
U+E040 |
repeat |
| Loop One |
repeat_one |
U+E041 |
repeat_one |
Navigation/UI
| Function |
Material Icon |
Unicode |
Ligature |
| Back |
arrow_back |
U+E5C4 |
arrow_back |
| Forward |
arrow_forward |
U+E5C8 |
arrow_forward |
| Up |
arrow_upward |
U+E5D8 |
arrow_upward |
| Down |
arrow_downward |
U+E5DB |
arrow_downward |
| Close |
close |
U+E5CD |
close |
| More Options |
more_vert |
U+E5D4 |
more_vert |
Status Indicators
| Function |
Material Icon |
Unicode |
Ligature |
| Info |
info |
U+E88E |
info |
| Warning |
warning |
U+E002 |
warning |
| Error |
error |
U+E000 |
error |
| Success |
check_circle |
U+E86C |
check_circle |
| Loading |
hourglass_empty |
U+E88B |
hourglass_empty |
Implementation Plan
Phase 1: Font Integration
- Download Material Symbols font from Google Fonts
- Bundle font file in
assets/fonts/MaterialSymbols.ttf
- Load font in Fyne application startup
- Create helper functions for icon rendering
Phase 2: Icon Helper Package
Create internal/ui/icons.go:
package ui
import (
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/canvas"
)
// Material icon unicode constants
const (
IconPlayArrow = "\ue037"
IconPause = "\ue034"
IconStop = "\ue047"
IconSkipPrevious = "\ue045"
IconSkipNext = "\ue044"
IconMenu = "\ue5d2"
IconVolumeUp = "\ue050"
IconVolumeOff = "\ue04f"
// ... more icons
)
// NewIconText creates a text widget with Material Icon
func NewIconText(icon string, size float32) *canvas.Text {
text := canvas.NewText(icon, color.White)
text.TextSize = size
text.TextStyle = fyne.TextStyle{Monospace: true}
return text
}
// NewIconButton creates a button with Material Icon
func NewIconButton(icon string, tooltip string, tapped func()) *widget.Button {
btn := widget.NewButton(icon, tapped)
btn.Importance = widget.LowImportance
return btn
}
Phase 3: Replace Current Icons
Update all emoji-based icons with Material Icons:
- Play/Pause: ▶/⏸ → play_arrow/pause
- Previous/Next: ⏮/⏭ → skip_previous/skip_next
- Volume: 🔊/🔇 → volume_up/volume_off
- Menu: ☰ → menu
Download Instructions
Material Symbols Font
- Go to: https://fonts.google.com/icons
- Select "Material Symbols Rounded" (recommended for modern look)
- Click "Download all" or select specific icons
- Extract font file: MaterialSymbolsRounded-VariableFont.ttf
Individual SVG Icons (Alternative)
- Browse icons at https://fonts.google.com/icons
- Click icon → Download SVG
- Save to
assets/icons/[icon-name].svg
Advantages of Material Icons
✅ Consistent Design: All icons follow same design language
✅ Professional: Industry-standard, used by Google/Android
✅ Comprehensive: 2500+ icons cover all use cases
✅ Free: Apache 2.0 license (no attribution required)
✅ Scalable: Vector format scales to any size
✅ Variable: Can adjust weight, fill, optical size
✅ Accessible: Widely recognized symbols
Next Steps
- Download Material Symbols font
- Create icon helper package
- Update all buttons to use Material Icons
- Test rendering on Linux (Fyne + GTK)
- Add icon customization (size, color themes)