[PATCH 0/3] MR6947: win32u: Improve experience with emulated display mode.
Keep fullscreen window aspect ratio, with opaque window padding on X11. Use bilinear filtering for XRender blits. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/6947
From: Rémi Bernon <rbernon(a)codeweavers.com> --- dlls/winex11.drv/window.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dlls/winex11.drv/window.c b/dlls/winex11.drv/window.c index b99c96f644b..404c308bf4e 100644 --- a/dlls/winex11.drv/window.c +++ b/dlls/winex11.drv/window.c @@ -475,12 +475,13 @@ static int get_window_attributes( struct x11drv_win_data *data, XSetWindowAttrib attr->bit_gravity = NorthWestGravity; attr->backing_store = NotUseful; attr->border_pixel = 0; + attr->background_pixel = 0; attr->event_mask = (ExposureMask | PointerMotionMask | ButtonPressMask | ButtonReleaseMask | EnterWindowMask | KeyPressMask | KeyReleaseMask | FocusChangeMask | KeymapStateMask | StructureNotifyMask | PropertyChangeMask); - return (CWOverrideRedirect | CWSaveUnder | CWColormap | CWBorderPixel | + return (CWOverrideRedirect | CWSaveUnder | CWColormap | CWBorderPixel | CWBackPixel | CWEventMask | CWBitGravity | CWBackingStore); } -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/6947
From: Rémi Bernon <rbernon(a)codeweavers.com> --- dlls/win32u/sysparams.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/dlls/win32u/sysparams.c b/dlls/win32u/sysparams.c index 4eeb999c891..01342cd4c9f 100644 --- a/dlls/win32u/sysparams.c +++ b/dlls/win32u/sysparams.c @@ -2512,11 +2512,19 @@ RECT map_rect_virt_to_raw( RECT rect, UINT dpi_from ) struct window_rects map_window_rects_virt_to_raw( struct window_rects rects, UINT dpi_from ) { struct monitor *monitor; + RECT rect, monitor_rect; + BOOL is_fullscreen; if (!lock_display_devices()) return rects; if ((monitor = get_monitor_from_rect( rects.window, MONITOR_DEFAULTTONEAREST, dpi_from, MDT_DEFAULT ))) { - rects.visible = map_monitor_rect( monitor, rects.visible, dpi_from, MDT_DEFAULT, 0, MDT_RAW_DPI ); + /* if the visible rect is fullscreen, make it cover the full raw monitor, regardless of aspect ratio */ + monitor_rect = monitor_get_rect( monitor, dpi_from, MDT_DEFAULT ); + + is_fullscreen = intersect_rect( &rect, &monitor_rect, &rects.visible ) && EqualRect( &rect, &monitor_rect ); + if (is_fullscreen) rects.visible = monitor_get_rect( monitor, 0, MDT_RAW_DPI ); + else rects.visible = map_monitor_rect( monitor, rects.visible, dpi_from, MDT_DEFAULT, 0, MDT_RAW_DPI ); + rects.window = map_monitor_rect( monitor, rects.window, dpi_from, MDT_DEFAULT, 0, MDT_RAW_DPI ); rects.client = map_monitor_rect( monitor, rects.client, dpi_from, MDT_DEFAULT, 0, MDT_RAW_DPI ); } -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/6947
From: Rémi Bernon <rbernon(a)codeweavers.com> --- dlls/winex11.drv/xrender.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dlls/winex11.drv/xrender.c b/dlls/winex11.drv/xrender.c index a59653871fd..bac3e6fac4b 100644 --- a/dlls/winex11.drv/xrender.c +++ b/dlls/winex11.drv/xrender.c @@ -177,6 +177,7 @@ MAKE_FUNCPTR(XRenderComposite) MAKE_FUNCPTR(XRenderCompositeText16) MAKE_FUNCPTR(XRenderCreateGlyphSet) MAKE_FUNCPTR(XRenderCreatePicture) +MAKE_FUNCPTR(XRenderSetPictureFilter) MAKE_FUNCPTR(XRenderFillRectangle) MAKE_FUNCPTR(XRenderFindFormat) MAKE_FUNCPTR(XRenderFindVisualFormat) @@ -332,6 +333,7 @@ const struct gdi_dc_funcs *X11DRV_XRender_Init(void) LOAD_FUNCPTR(XRenderCompositeText16); LOAD_FUNCPTR(XRenderCreateGlyphSet); LOAD_FUNCPTR(XRenderCreatePicture); + LOAD_FUNCPTR(XRenderSetPictureFilter); LOAD_FUNCPTR(XRenderFillRectangle); LOAD_FUNCPTR(XRenderFindFormat); LOAD_FUNCPTR(XRenderFindVisualFormat); @@ -1493,6 +1495,7 @@ static void xrender_blit( int op, Picture src_pict, Picture mask_pict, Picture d y_offset = y_src; set_xrender_transformation(src_pict, 1, 1, 0, 0); } + pXRenderSetPictureFilter( gdi_display, src_pict, FilterBilinear, 0, 0 ); pXRenderComposite( gdi_display, op, src_pict, mask_pict, dst_pict, x_offset, y_offset, 0, 0, x_dst, y_dst, width_dst, height_dst ); } -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/6947
participants (1)
-
Rémi Bernon