diff --git a/DOCS/man/mpv.rst b/DOCS/man/mpv.rst index e82996c3758e5..b3c3d191a5b2f 100644 --- a/DOCS/man/mpv.rst +++ b/DOCS/man/mpv.rst @@ -327,6 +327,9 @@ g-b g-r Show the values of all properties. +MENU + Show a menu with miscellaneous entries. + (The following keys are valid if you have a keyboard with multimedia keys.) PAUSE diff --git a/DOCS/man/osc.rst b/DOCS/man/osc.rst index a0cb7a7b113c6..774bfba27d6f1 100644 --- a/DOCS/man/osc.rst +++ b/DOCS/man/osc.rst @@ -21,7 +21,7 @@ The Interface :: +---------+----------+------------------------------------------+----------+ - | pl prev | pl next | title | cache | + | pl prev | menu | pl next | title cache | +------+--+---+------+---------+-----------+------+-------+-----+-----+----+ | play | skip | skip | time | seekbar | time | audio | sub | vol | fs | | | back | frwd | elapsed | | left | | | | | @@ -36,6 +36,11 @@ pl prev right-click open the playlist selector ============= ================================================ +menu + ============= ================================================ + left-click open the menu + ============= ================================================ + pl next ============= ================================================ left-click play next file in playlist @@ -510,6 +515,12 @@ clicked. ``mbtn_mid`` commands are also triggered with ``shift+mbtn_left``. ``playlist_prev_mbtn_right_command=script-binding select/select-playlist; script-message-to osc osc-hide`` +``menu_mbtn_left_command=script-binding select/menu; script-message-to osc osc-hide`` + +``menu_mbtn_mid_command=`` + +``menu_mbtn_right_command=`` + ``playlist_next_mbtn_left_command=playlist-next; show-text ${playlist} 3000`` ``playlist_next_mbtn_mid_command=show-text ${playlist} 3000`` diff --git a/TOOLS/mpv-osd-symbols.sfdir/README.md b/TOOLS/mpv-osd-symbols.sfdir/README.md new file mode 100644 index 0000000000000..9a6d39e900600 --- /dev/null +++ b/TOOLS/mpv-osd-symbols.sfdir/README.md @@ -0,0 +1,16 @@ +Steps to add new icons: + +- Install `fontforge` +- Install the last freely licensed version of symbola (`ttf-symbola-free` in the + AUR) +- `fontforge /usr/share/fonts/TTF/Symbola.ttf TOOLS/mpv-osd-symbols.sfdir` +- Check the Unicode hex value of the desired character (`g-a` in vim) +- Scroll until that value in the Symbola window and click it +- Press Ctrl+c +- Focus the window with TOOLS/mpv-osd-symbols.sfdir +- Click an unused character slot +- Press Ctrl+v +- Press Ctrl+s +- Close fontforge +- Figure out the Lua sequence of the new character by copying that of the + previous character and incrementing the last 3 digits diff --git a/TOOLS/mpv-osd-symbols.sfdir/font.props b/TOOLS/mpv-osd-symbols.sfdir/font.props index 8198d27e62e80..ae2cec146e990 100644 --- a/TOOLS/mpv-osd-symbols.sfdir/font.props +++ b/TOOLS/mpv-osd-symbols.sfdir/font.props @@ -1,4 +1,4 @@ -SplineFontDB: 3.0 +SplineFontDB: 3.2 FontName: mpv-osd-symbols-Regular FullName: mpv-osd-symbols Regular FamilyName: mpv-osd-symbols @@ -22,7 +22,7 @@ OS2Version: 3 OS2_WeightWidthSlopeOnly: 0 OS2_UseTypoMetrics: 0 CreationTime: 1408646554 -ModificationTime: 1576096543 +ModificationTime: 1735420479 PfmFamily: 81 TTFWeight: 400 TTFWidth: 5 @@ -63,7 +63,7 @@ NameList: AGL For New Fonts DisplaySize: -72 AntiAlias: 1 FitToEm: 0 -WinInfo: 57600 8 2 +WinInfo: 57540 14 11 BeginPrivate: 8 BlueValues 31 [-10 0 640 650 720 730 800 810] BlueScale 5 0.037 diff --git a/TOOLS/mpv-osd-symbols.sfdir/uniE00D.glyph b/TOOLS/mpv-osd-symbols.sfdir/uniE00D.glyph index 237825c17feed..1e2a3377d0b21 100644 --- a/TOOLS/mpv-osd-symbols.sfdir/uniE00D.glyph +++ b/TOOLS/mpv-osd-symbols.sfdir/uniE00D.glyph @@ -1,7 +1,7 @@ StartChar: uniE00D Encoding: 57357 57357 34 Width: 880 -Flags: HWO +Flags: HW HStem: 780 20G<200 200> VStem: 200 375<400 400 400 800> LayerCount: 2 diff --git a/TOOLS/mpv-osd-symbols.sfdir/uniE102.glyph b/TOOLS/mpv-osd-symbols.sfdir/uniE102.glyph new file mode 100644 index 0000000000000..347b9c5939d10 --- /dev/null +++ b/TOOLS/mpv-osd-symbols.sfdir/uniE102.glyph @@ -0,0 +1,25 @@ +StartChar: uniE102 +Encoding: 57602 57602 35 +Width: 2048 +VWidth: 2048 +Flags: HW +LayerCount: 2 +Fore +SplineSet +1724 1060 m 1 + 324 1060 l 1 + 324 1252 l 1 + 1724 1252 l 1 + 1724 1060 l 1 +1724 636 m 1 + 324 636 l 1 + 324 828 l 1 + 1724 828 l 1 + 1724 636 l 1 +1724 212 m 1 + 324 212 l 1 + 324 404 l 1 + 1724 404 l 1 + 1724 212 l 1 +EndSplineSet +EndChar diff --git a/TOOLS/mpv-osd-symbols.sfdir/uniE10A.glyph b/TOOLS/mpv-osd-symbols.sfdir/uniE10A.glyph index 029bf74d015fb..6ebbfc58b8c48 100644 --- a/TOOLS/mpv-osd-symbols.sfdir/uniE10A.glyph +++ b/TOOLS/mpv-osd-symbols.sfdir/uniE10A.glyph @@ -2,7 +2,7 @@ StartChar: uniE10A Encoding: 57610 57610 23 Width: 1977 GlyphClass: 2 -Flags: HMWO +Flags: HMW HStem: 242 248<2 155 2 156> LayerCount: 2 Fore diff --git a/etc/input.conf b/etc/input.conf index 2407e23f44ed6..8848a57dd4462 100644 --- a/etc/input.conf +++ b/etc/input.conf @@ -188,6 +188,7 @@ #g-d script-binding select/select-audio-device #g-b script-binding select/select-binding #g-r script-binding select/show-properties +#MENU script-binding select/menu #Alt+KP1 add video-rotate -1 # rotate video counterclockwise by 1 degree #Alt+KP5 set video-rotate 0 # reset rotation diff --git a/player/lua/osc.lua b/player/lua/osc.lua index 72d3948da6351..71f34efb9a059 100644 --- a/player/lua/osc.lua +++ b/player/lua/osc.lua @@ -75,6 +75,10 @@ local user_opts = { playlist_prev_mbtn_mid_command = "show-text ${playlist} 3000", playlist_prev_mbtn_right_command = "script-binding select/select-playlist; script-message-to osc osc-hide", + menu_mbtn_left_command = "script-binding select/menu; script-message-to osc osc-hide", + menu_mbtn_mid_command = "", + menu_mbtn_right_command = "", + playlist_next_mbtn_left_command = "playlist-next", playlist_next_mbtn_mid_command = "show-text ${playlist} 3000", playlist_next_mbtn_right_command = "script-binding select/select-playlist; script-message-to osc osc-hide", @@ -1556,13 +1560,20 @@ local function bar_layout(direction) lo.alpha[1] = user_opts.boxalpha - -- Playlist prev/next + -- Playlist prev geo = { x = osc_geo.x + padX, y = line1, an = 4, w = 18, h = 18 - padY } lo = add_layout("playlist_prev") lo.geometry = geo lo.style = osc_styles.topButtonsBar + -- Menu + geo = { x = geo.x + geo.w + padX, y = geo.y, an = geo.an, w = geo.w, h = geo.h } + lo = add_layout("menu") + lo.geometry = geo + lo.style = osc_styles.topButtonsBar + + -- Playlist next geo = { x = geo.x + geo.w + padX, y = geo.y, an = geo.an, w = geo.w, h = geo.h } lo = add_layout("playlist_next") lo.geometry = geo @@ -1775,16 +1786,19 @@ local function osc_init() end bind_mouse_buttons("title") - -- playlist buttons - - -- prev + -- playlist prev ne = new_element("playlist_prev", "button") ne.content = "\238\132\144" ne.enabled = (pl_pos > 1) or (loop ~= "no") bind_mouse_buttons("playlist_prev") - --next + -- menu + ne = new_element("menu", "button") + ne.content = "\238\132\130" + bind_mouse_buttons("menu") + + -- playlist next ne = new_element("playlist_next", "button") ne.content = "\238\132\129" diff --git a/player/lua/select.lua b/player/lua/select.lua index 3ac2f00180291..8244290d5a3b3 100644 --- a/player/lua/select.lua +++ b/player/lua/select.lua @@ -427,3 +427,58 @@ mp.add_key_binding(nil, "show-properties", function () end, }) end) + +mp.add_key_binding(nil, "menu", function () + local sub_track_count = 0 + local audio_track_count = 0 + local video_track_count = 0 + local text_sub_selected = false + + local image_sub_codecs = {["dvd_subtitle"] = true, ["hdmv_pgs_subtitle"] = true} + + for _, track in pairs(mp.get_property_native("track-list")) do + if track.type == "sub" then + sub_track_count = sub_track_count + 1 + if track["main-selection"] == 0 and not image_sub_codecs[track.codec] then + text_sub_selected = true + end + elseif track.type == "audio" then + audio_track_count = audio_track_count + 1 + elseif track.type == "video" then + video_track_count = video_track_count + 1 + end + end + + local menu = { + {"Subtitles", "script-binding select/select-sid", sub_track_count > 0}, + {"Secondary subtitles", "script-binding select/select-secondary-sid", sub_track_count > 1}, + {"Subtitle lines", "script-binding select/select-subtitle-line", text_sub_selected}, + {"Audio tracks", "script-binding select/select-aid", audio_track_count > 1}, + {"Video tracks", "script-binding select/select-vid", video_track_count > 1}, + {"Playlist", "script-binding select/select-playlist", + mp.get_property_native("playlist-count") > 1}, + {"Chapters", "script-binding select/select-chapter", mp.get_property("chapter")}, + {"Editions/Titles", "script-binding select/select-edition", + mp.get_property_native("edition-list/count", 0) > 1}, + {"Audio devices", "script-binding select/select-audio-device", audio_track_count > 0}, + {"Key bindings", "script-binding select/select-binding", true}, + } + + local labels = {} + local commands = {} + + for _, entry in ipairs(menu) do + if entry[3] then + labels[#labels + 1] = entry[1] + commands[#commands + 1] = entry[2] + end + end + + input.select({ + prompt = "", + items = labels, + submit = function (i) + mp.command(commands[i]) + end, + }) +end) diff --git a/sub/osd_font.otf b/sub/osd_font.otf index c5eff7c93d091..0d8be9cfb4723 100644 Binary files a/sub/osd_font.otf and b/sub/osd_font.otf differ