[vlc-commits] vout:win32: simplify the size/position checks using a RECT
Steve Lhomme
git at videolan.org
Mon Apr 1 12:03:33 CEST 2019
vlc | branch: master | Steve Lhomme <robux4 at ycbcr.xyz> | Fri Mar 22 09:19:04 2019 +0100| [799deffa0e3da54c187c6248bbdd2a7b3a0b0c18] | committer: Steve Lhomme
vout:win32: simplify the size/position checks using a RECT
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=799deffa0e3da54c187c6248bbdd2a7b3a0b0c18
---
modules/video_output/win32/common.c | 14 ++++++-------
modules/video_output/win32/events.c | 39 +++++++++++++++----------------------
modules/video_output/win32/events.h | 3 +--
3 files changed, 24 insertions(+), 32 deletions(-)
diff --git a/modules/video_output/win32/common.c b/modules/video_output/win32/common.c
index 4b4757a19d..7e6d7492e6 100644
--- a/modules/video_output/win32/common.c
+++ b/modules/video_output/win32/common.c
@@ -164,8 +164,8 @@ void UpdateRects(vout_display_t *vd, vout_display_sys_win32_t *sys, bool is_forc
/* If nothing changed, we can return */
bool moved_or_resized;
#if VLC_WINSTORE_APP
- moved_or_resized = rect.right != RECTWidth(sys->rect_display) ||
- rect.bottom != RECTHeight(sys->rect_display);
+ moved_or_resized = RECTWidth(rect) != RECTWidth(sys->rect_display) ||
+ RECTHeight(rect) != RECTHeight(sys->rect_display);
sys->rect_display = rect;
#else
if (sys->b_windowless)
@@ -177,9 +177,9 @@ void UpdateRects(vout_display_t *vd, vout_display_sys_win32_t *sys, bool is_forc
/* Retrieve the window position */
ClientToScreen(sys->hwnd, &point);
- EventThreadUpdateWindowPosition(sys->event, &moved_or_resized,
- point.x, point.y,
- rect.right, rect.bottom);
+ OffsetRect(&rect, point.x, point.y);
+
+ moved_or_resized = EventThreadUpdateWindowPosition(sys->event, &rect);
}
#endif
if (!is_forced && !moved_or_resized)
@@ -187,8 +187,8 @@ void UpdateRects(vout_display_t *vd, vout_display_sys_win32_t *sys, bool is_forc
/* Update the window position and size */
vout_display_cfg_t place_cfg = *cfg;
- place_cfg.display.width = rect.right;
- place_cfg.display.height = rect.bottom;
+ place_cfg.display.width = RECTWidth(rect);
+ place_cfg.display.height = RECTHeight(rect);
#if (defined(MODULE_NAME_IS_glwin32))
/* Reverse vertical alignment as the GL tex are Y inverted */
diff --git a/modules/video_output/win32/events.c b/modules/video_output/win32/events.c
index d31162f219..971da2ef4b 100644
--- a/modules/video_output/win32/events.c
+++ b/modules/video_output/win32/events.c
@@ -77,8 +77,7 @@ struct event_thread_t
char *psz_title;
int i_window_style;
- int x, y;
- unsigned width, height;
+ RECT window_area;
/* */
vout_window_t *parent_window;
@@ -410,19 +409,13 @@ int EventThreadGetWindowStyle( event_thread_t *p_event )
return p_event->i_window_style;
}
-void EventThreadUpdateWindowPosition( event_thread_t *p_event,
- bool *pb_moved_or_resized,
- int x, int y, unsigned w, unsigned h )
+bool EventThreadUpdateWindowPosition( event_thread_t *p_event, const RECT *area )
{
vlc_mutex_lock( &p_event->lock );
- *pb_moved_or_resized = x != p_event->x || y != p_event->y ||
- w != p_event->width || h != p_event->height;
-
- p_event->x = x;
- p_event->y = y;
- p_event->width = w;
- p_event->height = h;
+ bool changed = !EqualRect(&p_event->window_area, area);
+ p_event->window_area = *area;
vlc_mutex_unlock( &p_event->lock );
+ return changed;
}
void EventThreadUpdateSourceAndPlace( event_thread_t *p_event,
@@ -489,10 +482,10 @@ void EventThreadDestroy( event_thread_t *p_event )
int EventThreadStart( event_thread_t *p_event, event_hwnd_t *p_hwnd, const event_cfg_t *p_cfg )
{
p_event->use_desktop = p_cfg->use_desktop;
- p_event->x = p_cfg->x;
- p_event->y = p_cfg->y;
- p_event->width = p_cfg->width;
- p_event->height = p_cfg->height;
+ p_event->window_area.left = p_cfg->x;
+ p_event->window_area.top = p_cfg->y;
+ p_event->window_area.right = p_cfg->x + p_cfg->width;
+ p_event->window_area.bottom = p_cfg->y + p_cfg->height;
atomic_store(&p_event->has_moved, false);
@@ -663,7 +656,6 @@ static int Win32VoutCreateWindow( event_thread_t *p_event )
vout_display_t *vd = p_event->vd;
HINSTANCE hInstance;
HMENU hMenu;
- RECT rect_window;
WNDCLASS wc; /* window class components */
TCHAR vlc_path[MAX_PATH+1];
int i_style;
@@ -740,10 +732,11 @@ static int Win32VoutCreateWindow( event_thread_t *p_event )
* have. Unfortunatly these dimensions will include the borders and
* titlebar. We use the following function to find out the size of
* the window corresponding to the useable surface we want */
+ RECT rect_window;
rect_window.left = 10;
rect_window.top = 10;
- rect_window.right = rect_window.left + p_event->width;
- rect_window.bottom = rect_window.top + p_event->height;
+ rect_window.right = rect_window.left + RECTWidth(p_event->window_area);
+ rect_window.bottom = rect_window.top + RECTHeight(p_event->window_area);
i_style = var_GetBool( vd, "video-deco" )
/* Open with window decoration */
@@ -772,10 +765,10 @@ static int Win32VoutCreateWindow( event_thread_t *p_event )
p_event->class_main, /* name of window class */
_T(VOUT_TITLE) _T(" (VLC Video Output)"),/* window title */
i_style, /* window style */
- (!p_event->x) ? (UINT)CW_USEDEFAULT :
- (UINT)p_event->x, /* default X coordinate */
- (!p_event->y) ? (UINT)CW_USEDEFAULT :
- (UINT)p_event->y, /* default Y coordinate */
+ (!p_event->window_area.left) ? (UINT)CW_USEDEFAULT :
+ (UINT)p_event->window_area.left, /* default X coordinate */
+ (!p_event->window_area.top) ? (UINT)CW_USEDEFAULT :
+ (UINT)p_event->window_area.top, /* default Y coordinate */
RECTWidth(rect_window), /* window width */
RECTHeight(rect_window), /* window height */
p_event->hparent, /* parent window */
diff --git a/modules/video_output/win32/events.h b/modules/video_output/win32/events.h
index 859c712ff4..25c9a27041 100644
--- a/modules/video_output/win32/events.h
+++ b/modules/video_output/win32/events.h
@@ -52,8 +52,7 @@ void EventThreadStop( event_thread_t * );
void EventThreadUpdateTitle( event_thread_t *, const char *psz_fallback );
int EventThreadGetWindowStyle( event_thread_t * );
-void EventThreadUpdateWindowPosition( event_thread_t *, bool *pb_moved_or_resized,
- int x, int y, unsigned w, unsigned h );
+bool EventThreadUpdateWindowPosition( event_thread_t *, const RECT * );
void EventThreadUpdateSourceAndPlace( event_thread_t *p_event,
const video_format_t *p_source,
const vout_display_place_t *p_place );
More information about the vlc-commits
mailing list