1
0
mirror of https://github.com/mpv-player/mpv synced 2025-02-16 12:17:12 +00:00

command: make current-window-scale writeable, 2nd attempt

The window-scale property mirrors the respective option (not the
effective scale derived from the current window size), and as such
setting its value to the same value it had before has no effect.
Specifically - the window will not resize.

This is consistent as far as property-option bridge behavior goes,
but we do end up with an issue that we can't set an arbitrary scale
and expect the window to always resize accordingly.

We do also have a current-window-scale property which does reflect
the actual window size, however, it's been read-only till now.

This commit makes current-window-scale RW so that it's now always
possible to set an arbitrary scale and expect the window to resize
accordingly (without affecting window-scale - like manual resize).

Also, mention window-scale no-effect-if-not-changed at the docs.

Based on code by @Dudemanguy from commit 873ae0d, with same effect.
This commit is contained in:
Dudemanguy 2020-11-07 18:36:26 -06:00 committed by avih
parent 2667dd6643
commit a0441ddb5e
4 changed files with 21 additions and 4 deletions

View File

@ -42,6 +42,7 @@ Interface changes
instead be used to specifically set the contrast to any value.
- add a `--watch-later-options` option to allow configuring which
options quit-watch-later saves
- make `current-window-scale` writeable and use it in the default input.conf
--- mpv 0.33.0 ---
- add `--d3d11-exclusive-fs` flag to enable D3D11 exclusive fullscreen mode
when the player enters fullscreen.

View File

@ -2525,6 +2525,10 @@ Property list
(or to be exact, the size the video filters output). ``2`` will set the
double size, ``0.5`` halves the size.
Note that setting a value identical to its previous value will not resize
the window. That's because this property mirrors the ``window-scale``
option, and setting an option to its previous value is ignored.
See ``current-window-scale`` for the value derived from the actual window
size.
@ -2533,12 +2537,15 @@ Property list
Before mpv 0.31.0, this returned what ``current-window-scale`` returns now,
after the window was created.
``current-window-scale``
``current-window-scale`` (RW)
The ``window-scale`` value calculated from the current window size. This
has the same value as ``window-scale`` if the window size was not changed
since setting the option, and the window size was not restricted in other
ways. The property is unavailable if no video is active.
Setting the value of this property will always resize the window
accordingly if possible, without affecting the value of ``window-scale``.
``focused``
Whether the window has focus. Might not be supported by all VOs.

View File

@ -118,9 +118,9 @@
#6 add gamma 1
#7 add saturation -1
#8 add saturation 1
#Alt+0 set window-scale 0.5
#Alt+1 set window-scale 1.0
#Alt+2 set window-scale 2.0
#Alt+0 set current-window-scale 0.5
#Alt+1 set current-window-scale 1.0
#Alt+2 set current-window-scale 2.0
# toggle deinterlacer (automatically inserts or removes required filter)
#d cycle deinterlace
#r add sub-pos -1 # move subtitles up

View File

@ -2330,6 +2330,15 @@ static int mp_property_current_window_scale(void *ctx, struct m_property *prop,
if (vid_w < 1 || vid_h < 1)
return M_PROPERTY_UNAVAILABLE;
if (action == M_PROPERTY_SET) {
double scale = *(double *)arg;
int s[2] = {vid_w * scale, vid_h * scale};
if (s[0] <= 0 || s[1] <= 0)
return M_PROPERTY_INVALID_FORMAT;
vo_control(vo, VOCTRL_SET_UNFS_WINDOW_SIZE, s);
return M_PROPERTY_OK;
}
int s[2];
if (vo_control(vo, VOCTRL_GET_UNFS_WINDOW_SIZE, s) <= 0 ||
s[0] < 1 || s[1] < 1)