mirror of
git://source.winehq.org/git/wine.git
synced 2024-09-14 19:45:39 +00:00
winemac: Keep stable surface for layered windows using UpdateLayeredWindow().
This commit is contained in:
parent
7eec5ad781
commit
4ec2809e73
|
@ -127,6 +127,7 @@ static inline RECT rect_from_cgrect(CGRect cgrect)
|
||||||
BOOL on_screen : 1; /* is window ordered in? (minimized or not) */
|
BOOL on_screen : 1; /* is window ordered in? (minimized or not) */
|
||||||
BOOL shaped : 1; /* is window using a custom region shape? */
|
BOOL shaped : 1; /* is window using a custom region shape? */
|
||||||
BOOL layered : 1; /* is window layered and with valid attributes? */
|
BOOL layered : 1; /* is window layered and with valid attributes? */
|
||||||
|
BOOL ulw_layered : 1; /* has UpdateLayeredWindow() been called for window? */
|
||||||
BOOL per_pixel_alpha : 1; /* is window using per-pixel alpha? */
|
BOOL per_pixel_alpha : 1; /* is window using per-pixel alpha? */
|
||||||
BOOL minimized : 1; /* is window minimized? */
|
BOOL minimized : 1; /* is window minimized? */
|
||||||
struct window_surface *surface;
|
struct window_surface *surface;
|
||||||
|
|
|
@ -971,6 +971,7 @@ void CDECL macdrv_SetWindowStyle(HWND hwnd, INT offset, STYLESTRUCT *style)
|
||||||
if (offset == GWL_EXSTYLE && (changed & WS_EX_LAYERED)) /* changing WS_EX_LAYERED resets attributes */
|
if (offset == GWL_EXSTYLE && (changed & WS_EX_LAYERED)) /* changing WS_EX_LAYERED resets attributes */
|
||||||
{
|
{
|
||||||
data->layered = FALSE;
|
data->layered = FALSE;
|
||||||
|
data->ulw_layered = FALSE;
|
||||||
sync_window_opacity(data, 0, 0, FALSE, 0);
|
sync_window_opacity(data, 0, 0, FALSE, 0);
|
||||||
if (data->surface) set_surface_use_alpha(data->surface, FALSE);
|
if (data->surface) set_surface_use_alpha(data->surface, FALSE);
|
||||||
}
|
}
|
||||||
|
@ -1092,6 +1093,7 @@ BOOL CDECL macdrv_UpdateLayeredWindow(HWND hwnd, const UPDATELAYEREDWINDOWINFO *
|
||||||
if (!(data = get_win_data(hwnd))) return FALSE;
|
if (!(data = get_win_data(hwnd))) return FALSE;
|
||||||
|
|
||||||
data->layered = TRUE;
|
data->layered = TRUE;
|
||||||
|
data->ulw_layered = TRUE;
|
||||||
|
|
||||||
rect = *window_rect;
|
rect = *window_rect;
|
||||||
OffsetRect(&rect, -window_rect->left, -window_rect->top);
|
OffsetRect(&rect, -window_rect->left, -window_rect->top);
|
||||||
|
@ -1271,6 +1273,7 @@ void CDECL macdrv_WindowPosChanging(HWND hwnd, HWND insert_after, UINT swp_flags
|
||||||
/* create the window surface if necessary */
|
/* create the window surface if necessary */
|
||||||
if (!data->cocoa_window) goto done;
|
if (!data->cocoa_window) goto done;
|
||||||
if (swp_flags & SWP_HIDEWINDOW) goto done;
|
if (swp_flags & SWP_HIDEWINDOW) goto done;
|
||||||
|
if (data->ulw_layered) goto done;
|
||||||
|
|
||||||
if (*surface) window_surface_release(*surface);
|
if (*surface) window_surface_release(*surface);
|
||||||
*surface = NULL;
|
*surface = NULL;
|
||||||
|
@ -1318,11 +1321,13 @@ void CDECL macdrv_WindowPosChanged(HWND hwnd, HWND insert_after, UINT swp_flags,
|
||||||
data->window_rect = *window_rect;
|
data->window_rect = *window_rect;
|
||||||
data->whole_rect = *visible_rect;
|
data->whole_rect = *visible_rect;
|
||||||
data->client_rect = *client_rect;
|
data->client_rect = *client_rect;
|
||||||
if (surface)
|
if (!data->ulw_layered)
|
||||||
window_surface_add_ref(surface);
|
{
|
||||||
set_window_surface(data->cocoa_window, surface);
|
if (surface) window_surface_add_ref(surface);
|
||||||
if (data->surface) window_surface_release(data->surface);
|
set_window_surface(data->cocoa_window, surface);
|
||||||
data->surface = surface;
|
if (data->surface) window_surface_release(data->surface);
|
||||||
|
data->surface = surface;
|
||||||
|
}
|
||||||
|
|
||||||
TRACE("win %p/%p window %s whole %s client %s style %08x flags %08x surface %p\n",
|
TRACE("win %p/%p window %s whole %s client %s style %08x flags %08x surface %p\n",
|
||||||
hwnd, data->cocoa_window, wine_dbgstr_rect(window_rect),
|
hwnd, data->cocoa_window, wine_dbgstr_rect(window_rect),
|
||||||
|
|
Loading…
Reference in a new issue