[vlc-devel] commit: Centralized mouse auto-hiding code. (Laurent Aimar )
git version control
git at videolan.org
Mon Sep 14 20:20:04 CEST 2009
vlc | branch: master | Laurent Aimar <fenrir at videolan.org> | Wed Sep 9 22:46:41 2009 +0200| [07c6122ae72a891bb716c9d2e79c28a916b60441] | committer: Laurent Aimar
Centralized mouse auto-hiding code.
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=07c6122ae72a891bb716c9d2e79c28a916b60441
---
modules/video_output/msw/common.c | 5 ----
modules/video_output/msw/direct3d.c | 20 +---------------
modules/video_output/msw/directx.c | 20 +---------------
modules/video_output/msw/events.c | 43 +++++++++++++++++++++++++++++-----
modules/video_output/msw/glwin32.c | 20 +---------------
modules/video_output/msw/vout.h | 12 +++++----
modules/video_output/msw/wingdi.c | 20 +---------------
7 files changed, 47 insertions(+), 93 deletions(-)
diff --git a/modules/video_output/msw/common.c b/modules/video_output/msw/common.c
index eefcae9..0b56da2 100644
--- a/modules/video_output/msw/common.c
+++ b/modules/video_output/msw/common.c
@@ -86,11 +86,6 @@ int CommonInit( vout_thread_t *p_vout )
SetRectEmpty( &p_sys->rect_parent );
vlc_mutex_init( &p_sys->lock );
- p_sys->b_cursor_hidden = 0;
- p_sys->i_lastmoved = mdate();
- p_sys->i_mouse_hide_timeout =
- var_GetInteger(p_vout, "mouse-hide-timeout") * 1000;
-
var_Create( p_vout, "video-title", VLC_VAR_STRING | VLC_VAR_DOINHERIT );
/* Set main window's size */
diff --git a/modules/video_output/msw/direct3d.c b/modules/video_output/msw/direct3d.c
index 0abb633..d0ba09e 100644
--- a/modules/video_output/msw/direct3d.c
+++ b/modules/video_output/msw/direct3d.c
@@ -442,25 +442,7 @@ static int Manage( vout_thread_t *p_vout )
/*
* Pointer change
*/
- if( p_vout->b_fullscreen && !p_vout->p_sys->b_cursor_hidden &&
- (mdate() - p_vout->p_sys->i_lastmoved) >
- p_vout->p_sys->i_mouse_hide_timeout )
- {
- POINT point;
- HWND hwnd;
-
- /* Hide the cursor only if it is inside our window */
- GetCursorPos( &point );
- hwnd = WindowFromPoint(point);
- if( hwnd == p_vout->p_sys->hwnd || hwnd == p_vout->p_sys->hvideownd )
- {
- PostMessage( p_vout->p_sys->hwnd, WM_VLC_HIDE_MOUSE, 0, 0 );
- }
- else
- {
- p_vout->p_sys->i_lastmoved = mdate();
- }
- }
+ EventThreadMouseAutoHide( p_vout->p_sys->p_event );
/*
* "Always on top" status change
diff --git a/modules/video_output/msw/directx.c b/modules/video_output/msw/directx.c
index eff8777..041e7bc 100644
--- a/modules/video_output/msw/directx.c
+++ b/modules/video_output/msw/directx.c
@@ -554,25 +554,7 @@ static int Manage( vout_thread_t *p_vout )
/*
* Pointer change
*/
- if( p_vout->b_fullscreen && !p_vout->p_sys->b_cursor_hidden &&
- (mdate() - p_vout->p_sys->i_lastmoved) >
- p_vout->p_sys->i_mouse_hide_timeout )
- {
- POINT point;
- HWND hwnd;
-
- /* Hide the cursor only if it is inside our window */
- GetCursorPos( &point );
- hwnd = WindowFromPoint(point);
- if( hwnd == p_vout->p_sys->hwnd || hwnd == p_vout->p_sys->hvideownd )
- {
- PostMessage( p_vout->p_sys->hwnd, WM_VLC_HIDE_MOUSE, 0, 0 );
- }
- else
- {
- p_vout->p_sys->i_lastmoved = mdate();
- }
- }
+ EventThreadMouseAutoHide( p_vout->p_sys->p_event );
/*
* "Always on top" status change
diff --git a/modules/video_output/msw/events.c b/modules/video_output/msw/events.c
index 774cc94..642ae91 100644
--- a/modules/video_output/msw/events.c
+++ b/modules/video_output/msw/events.c
@@ -200,26 +200,26 @@ static void *EventThread( void *p_this )
(abs(mouse_pos.y - old_mouse_pos.y)) > 2 ) )
{
GetCursorPos( &old_mouse_pos );
- p_event->p_vout->p_sys->i_lastmoved = mdate();
+ p_event->i_lastmoved = mdate();
- if( p_event->p_vout->p_sys->b_cursor_hidden )
+ if( p_event->b_cursor_hidden )
{
- p_event->p_vout->p_sys->b_cursor_hidden = 0;
+ p_event->b_cursor_hidden = 0;
ShowCursor( TRUE );
}
}
break;
case WM_VLC_HIDE_MOUSE:
- if( p_event->p_vout->p_sys->b_cursor_hidden ) break;
- p_event->p_vout->p_sys->b_cursor_hidden = true;
+ if( p_event->b_cursor_hidden ) break;
+ p_event->b_cursor_hidden = true;
GetCursorPos( &old_mouse_pos );
ShowCursor( FALSE );
break;
case WM_VLC_SHOW_MOUSE:
- if( !p_event->p_vout->p_sys->b_cursor_hidden ) break;
- p_event->p_vout->p_sys->b_cursor_hidden = false;
+ if( !p_event->b_cursor_hidden ) break;
+ p_event->b_cursor_hidden = false;
GetCursorPos( &old_mouse_pos );
ShowCursor( TRUE );
break;
@@ -895,6 +895,30 @@ static int DirectXConvertKey( int i_key )
return 0;
}
+void EventThreadMouseAutoHide( event_thread_t *p_event )
+{
+ vout_thread_t *p_vout = p_event->p_vout;
+
+ if( p_vout->b_fullscreen &&
+ !p_event->b_cursor_hidden &&
+ (mdate() - p_event->i_lastmoved) > p_event->i_mouse_hide_timeout )
+ {
+ /* Hide the cursor only if it is inside our window */
+ POINT point;
+ GetCursorPos( &point );
+
+ HWND hwnd = WindowFromPoint(point);
+ if( hwnd == p_vout->p_sys->hwnd || hwnd == p_vout->p_sys->hvideownd )
+ {
+ PostMessage( p_vout->p_sys->hwnd, WM_VLC_HIDE_MOUSE, 0, 0 );
+ }
+ else
+ {
+ p_event->i_lastmoved = mdate();
+ }
+ }
+}
+
event_thread_t *EventThreadCreate( vout_thread_t *p_vout )
{
/* Create the Vout EventThread, this thread is created by us to isolate
@@ -912,6 +936,11 @@ event_thread_t *EventThreadCreate( vout_thread_t *p_vout )
p_event->p_vout = p_vout;
vlc_mutex_init( &p_event->lock );
vlc_cond_init( &p_event->wait );
+
+ p_event->b_cursor_hidden = false;
+ p_event->i_lastmoved = mdate();
+ p_event->i_mouse_hide_timeout =
+ var_GetInteger(p_vout, "mouse-hide-timeout") * 1000;
return p_event;
}
diff --git a/modules/video_output/msw/glwin32.c b/modules/video_output/msw/glwin32.c
index 34e5e0d..1a29662 100644
--- a/modules/video_output/msw/glwin32.c
+++ b/modules/video_output/msw/glwin32.c
@@ -283,25 +283,7 @@ static int Manage( vout_thread_t *p_vout )
/*
* Pointer change
*/
- if( p_vout->b_fullscreen && !p_vout->p_sys->b_cursor_hidden &&
- (mdate() - p_vout->p_sys->i_lastmoved) >
- p_vout->p_sys->i_mouse_hide_timeout )
- {
- POINT point;
- HWND hwnd;
-
- /* Hide the cursor only if it is inside our window */
- GetCursorPos( &point );
- hwnd = WindowFromPoint(point);
- if( hwnd == p_vout->p_sys->hwnd || hwnd == p_vout->p_sys->hvideownd )
- {
- PostMessage( p_vout->p_sys->hwnd, WM_VLC_HIDE_MOUSE, 0, 0 );
- }
- else
- {
- p_vout->p_sys->i_lastmoved = mdate();
- }
- }
+ EventThreadMouseAutoHide( p_vout->p_sys->p_event );
/*
* "Always on top" status change
diff --git a/modules/video_output/msw/vout.h b/modules/video_output/msw/vout.h
index d01fde0..2d92e13 100644
--- a/modules/video_output/msw/vout.h
+++ b/modules/video_output/msw/vout.h
@@ -37,6 +37,11 @@ typedef struct
bool b_done;
bool b_error;
+ /* Mouse */
+ volatile bool b_cursor_hidden;
+ volatile mtime_t i_lastmoved;
+ mtime_t i_mouse_hide_timeout;
+
} event_thread_t;
#ifdef MODULE_NAME_IS_wingapi
@@ -112,11 +117,6 @@ struct vout_sys_t
volatile uint16_t i_changes; /* changes made to the video display */
- /* Mouse */
- volatile bool b_cursor_hidden;
- volatile mtime_t i_lastmoved;
- mtime_t i_mouse_hide_timeout;
-
/* Misc */
bool b_on_top_change;
@@ -266,6 +266,8 @@ void EventThreadDestroy( event_thread_t * );
int EventThreadStart( event_thread_t * );
void EventThreadStop( event_thread_t * );
+void EventThreadMouseAutoHide( event_thread_t * );
+
/*****************************************************************************
* Prototypes from common.c
*****************************************************************************/
diff --git a/modules/video_output/msw/wingdi.c b/modules/video_output/msw/wingdi.c
index 22d4f88..35d587b 100644
--- a/modules/video_output/msw/wingdi.c
+++ b/modules/video_output/msw/wingdi.c
@@ -411,25 +411,7 @@ static int Manage( vout_thread_t *p_vout )
/*
* Pointer change
*/
- if( p_vout->b_fullscreen && !p_vout->p_sys->b_cursor_hidden &&
- (mdate() - p_vout->p_sys->i_lastmoved) >
- p_vout->p_sys->i_mouse_hide_timeout )
- {
- POINT point;
- HWND hwnd;
-
- /* Hide the cursor only if it is inside our window */
- GetCursorPos( &point );
- hwnd = WindowFromPoint(point);
- if( hwnd == p_vout->p_sys->hwnd || hwnd == p_vout->p_sys->hvideownd )
- {
- PostMessage( p_vout->p_sys->hwnd, WM_VLC_HIDE_MOUSE, 0, 0 );
- }
- else
- {
- p_vout->p_sys->i_lastmoved = mdate();
- }
- }
+ EventThreadMouseAutoHide( p_vout->p_sys->p_event );
/*
* "Always on top" status change
More information about the vlc-devel
mailing list