Skip to content

Commit

Permalink
win32: add --window-corners
Browse files Browse the repository at this point in the history
Allows to set preference for window corners rounding for DWM.
  • Loading branch information
kasper93 committed Sep 21, 2023
1 parent e4199f4 commit 5a15895
Show file tree
Hide file tree
Showing 5 changed files with 33 additions and 0 deletions.
1 change: 1 addition & 0 deletions DOCS/interface-changes.rst
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ Interface changes
- `--drm-connector` no longer allows selecting the card number (use `--drm-device`
instead)
- add `--title-bar` option
- add `--window-corners` option
--- mpv 0.36.0 ---
- add `--target-contrast`
- Target luminance value is now also applied when ICC profile is used.
Expand Down
9 changes: 9 additions & 0 deletions DOCS/man/options.rst
Original file line number Diff line number Diff line change
Expand Up @@ -3131,6 +3131,15 @@ Window
Focus the video window on creation and makes it the front most window. This
is on by default.

``--window-corners=<default|donotround|round|roundsmall>``
(Windows only)
Set the preference for window corner rounding.

:default: Let the system decide whether or not to round window corners
:donotround: Never round window corners
:round: Round the corners if appropriate
:roundsmall: Round the corners if appropriate, with a small radius

``--border``, ``--no-border``
Play video with window border and decorations. Since this is on by
default, use ``--no-border`` to disable the standard window decorations.
Expand Down
11 changes: 11 additions & 0 deletions options/options.c
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@

#ifdef _WIN32
#include <windows.h>
#include <dwmapi.h>
#endif

#include "options.h"
Expand Down Expand Up @@ -190,6 +191,16 @@ static const m_option_t mp_vo_opt_list[] = {
{"window-affinity", OPT_CHOICE(window_affinity, {"default", WDA_NONE},
{"excludefromcapture", WDA_EXCLUDEFROMCAPTURE}, {"monitor", WDA_MONITOR})},
{"vo-mmcss-profile", OPT_STRING(mmcss_profile)},
// For old MinGW-w64 compatibility
#define DWMWCP_DEFAULT 0
#define DWMWCP_DONOTROUND 1
#define DWMWCP_ROUND 2
#define DWMWCP_ROUNDSMALL 3
{"window-corners", OPT_CHOICE(window_corners,
{"default", DWMWCP_DEFAULT},
{"donotround", DWMWCP_DONOTROUND},
{"round", DWMWCP_ROUND},
{"roundsmall", DWMWCP_ROUNDSMALL})},
#endif
#if HAVE_EGL_ANDROID
{"android-surface-size", OPT_SIZE_BOX(android_surface_size)},
Expand Down
1 change: 1 addition & 0 deletions options/options.h
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ typedef struct mp_vo_opts {

int window_affinity;
char *mmcss_profile;
int window_corners;

double override_display_fps;
double timing_offset;
Expand Down
11 changes: 11 additions & 0 deletions video/out/w32_common.c
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,8 @@ EXTERN_C IMAGE_DOS_HEADER __ImageBase;
#define DWMWA_USE_IMMERSIVE_DARK_MODE 20
#endif

#define DWMWA_WINDOW_CORNER_PREFERENCE 33

#ifndef DPI_ENUMS_DECLARED
typedef enum MONITOR_DPI_TYPE {
MDT_EFFECTIVE_DPI = 0,
Expand Down Expand Up @@ -1090,6 +1092,12 @@ static void update_dark_mode(const struct vo_w32_state *w32)
&use_dark_mode, sizeof(use_dark_mode));
}

static void update_corners_pref(const struct vo_w32_state *w32) {
DwmSetWindowAttribute(w32->window, DWMWA_WINDOW_CORNER_PREFERENCE,
&w32->opts->window_corners,
sizeof(w32->opts->window_corners));
}

static LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam,
LPARAM lParam)
{
Expand Down Expand Up @@ -1666,6 +1674,7 @@ static void *gui_thread(void *ptr)
}

update_dark_mode(w32);
update_corners_pref(w32);
if (w32->opts->window_affinity)
update_affinity(w32);

Expand Down Expand Up @@ -1855,6 +1864,8 @@ static int gui_thread_control(struct vo_w32_state *w32, int request, void *arg)
update_minimized_state(w32);
} else if (changed_option == &vo_opts->window_maximized) {
update_maximized_state(w32);
} else if (changed_option == &vo_opts->window_corners) {
update_corners_pref(w32);
}
}

Expand Down

0 comments on commit 5a15895

Please sign in to comment.