Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
videolan
vlc
Commits
c0a203df
Commit
c0a203df
authored
Apr 15, 2003
by
Olivier Teulière
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
* basic event handling
parent
e989b3be
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
155 additions
and
219 deletions
+155
-219
modules/gui/skins/gtk2/gtk2_bitmap.cpp
modules/gui/skins/gtk2/gtk2_bitmap.cpp
+2
-2
modules/gui/skins/gtk2/gtk2_graphics.cpp
modules/gui/skins/gtk2/gtk2_graphics.cpp
+1
-2
modules/gui/skins/gtk2/gtk2_run.cpp
modules/gui/skins/gtk2/gtk2_run.cpp
+63
-92
modules/gui/skins/gtk2/gtk2_theme.cpp
modules/gui/skins/gtk2/gtk2_theme.cpp
+1
-78
modules/gui/skins/gtk2/gtk2_window.cpp
modules/gui/skins/gtk2/gtk2_window.cpp
+76
-41
modules/gui/skins/gtk2/gtk2_window.h
modules/gui/skins/gtk2/gtk2_window.h
+9
-3
modules/gui/skins/src/window.cpp
modules/gui/skins/src/window.cpp
+3
-1
No files found.
modules/gui/skins/gtk2/gtk2_bitmap.cpp
View file @
c0a203df
...
...
@@ -2,7 +2,7 @@
* gtk2_bitmap.cpp: GTK2 implementation of the Bitmap class
*****************************************************************************
* Copyright (C) 2003 VideoLAN
* $Id: gtk2_bitmap.cpp,v 1.
7 2003/04/14 20:07:49 asmax
Exp $
* $Id: gtk2_bitmap.cpp,v 1.
8 2003/04/15 01:19:11 ipkiss
Exp $
*
* Authors: Cyril Deguet <asmax@videolan.org>
*
...
...
@@ -98,7 +98,7 @@ GTK2Bitmap::GTK2Bitmap( intf_thread_t *p_intf, string FileName, int AColor )
// Delete objects
DeleteObject( HBitmap );*/
// Load the bitmap image
Bmp
=
gdk_pixbuf_new_from_file
(
FileName
.
c_str
(),
NULL
);
if
(
Bmp
==
NULL
)
...
...
modules/gui/skins/gtk2/gtk2_graphics.cpp
View file @
c0a203df
...
...
@@ -2,7 +2,7 @@
* gtk2_graphics.cpp: GTK2 implementation of the Graphics and Region classes
*****************************************************************************
* Copyright (C) 2003 VideoLAN
* $Id: gtk2_graphics.cpp,v 1.
6 2003/04/14 20:07:49 asmax
Exp $
* $Id: gtk2_graphics.cpp,v 1.
7 2003/04/15 01:19:11 ipkiss
Exp $
*
* Authors: Cyril Deguet <asmax@videolan.org>
*
...
...
@@ -79,7 +79,6 @@ void GTK2Graphics::CopyFrom( int dx, int dy, int dw, int dh, Graphics *Src,
{
/* BitBlt( Image, dx, dy, dw, dh, ( (GTK2Graphics *)Src )->GetImageHandle(),
sx, sy, Flag );*/
fprintf
(
stderr
,
"%d %d %d %d %d %d
\n
"
,
sx
,
sy
,
dx
,
dy
,
dw
,
dh
);
gdk_draw_drawable
(
Image
,
Gc
,
((
GTK2Graphics
*
)
Src
)
->
GetImage
(),
sx
,
sy
,
dx
,
dy
,
dw
,
dh
);
}
...
...
modules/gui/skins/gtk2/gtk2_run.cpp
View file @
c0a203df
...
...
@@ -2,7 +2,7 @@
* gtk2_run.cpp:
*****************************************************************************
* Copyright (C) 2003 VideoLAN
* $Id: gtk2_run.cpp,v 1.
4 2003/04/13 19:09:59 asmax
Exp $
* $Id: gtk2_run.cpp,v 1.
5 2003/04/15 01:19:11 ipkiss
Exp $
*
* Authors: Cyril Deguet <asmax@videolan.org>
*
...
...
@@ -63,121 +63,93 @@ int SkinManage( intf_thread_t *p_intf );
}*/
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
// GTK2 interface
//---------------------------------------------------------------------------
void
OSRun
(
intf_thread_t
*
p_intf
)
void
GTK2Proc
(
GdkEvent
*
event
,
gpointer
data
)
{
#if 0
VlcProc *Proc = new VlcProc( p_intf );
MSG msg;
list<Window *>::const_iterator win;
Event *ProcessEvent;
int KeyModifier = 0;
GdkWindow
*
gwnd
=
((
GdkEventAny
*
)
event
)
->
window
;
// Create refresh timer
SetTimer( ((OSTheme *)p_intf->p_sys->p_theme)->GetParentWindow(), 42, 200,
(TIMERPROC)RefreshTimer );
// Get pointer to thread info
intf_thread_t
*
p_intf
=
(
intf_thread_t
*
)
data
;
//
Compute windows message list
while( GetMessage( &msg, NULL, 0, 0 )
)
{
//
If doesn't exist, treat windows message normally
// if( p_intf == NULL
)
// return DefWindowProc( hwnd, uMsg, wParam, lParam );
// Translate keys
TranslateMessage( &msg );
// Create event to dispatch in windows
Event
*
evt
=
(
Event
*
)
new
OSEvent
(
p_intf
,
((
GdkEventAny
*
)
event
)
->
window
,
event
->
type
,
0
,
(
long
)
event
);
// Create event
ProcessEvent = (Event *)new OSEvent( p_intf, msg.hwnd, msg.message,
msg.wParam, msg.lParam );
/*****************************
* Process keyboard shortcuts *
*****************************/
if( msg.message == WM_KEYUP )
// Find window matching with gwnd
list
<
Window
*>::
const_iterator
win
;
for
(
win
=
p_intf
->
p_sys
->
p_theme
->
WindowList
.
begin
();
win
!=
p_intf
->
p_sys
->
p_theme
->
WindowList
.
end
();
win
++
)
{
// If it is the correct window
if
(
gwnd
==
(
(
GTK2Window
*
)(
*
win
)
)
->
GetHandle
()
)
{
msg_Err( p_intf, "Key : %i (%i)", msg.wParam, KeyModifier );
// If key is CTRL
if( msg.wParam == 17 )
KeyModifier = 0;
else if( KeyModifier == 0 )
// Send event and check if processed
if
(
(
*
win
)
->
ProcessEvent
(
evt
)
)
{
p_intf->p_sys->p_theme->EvtBank->TestShortcut(
msg.wParam, 0 );
delete
(
OSEvent
*
)
evt
;
return
;
}
else
{
break
;
}
}
else if( msg.message == WM_KEYDOWN )
{
// If key is control
if( msg.wParam == 17 )
KeyModifier = 2;
else if( KeyModifier > 0 )
p_intf->p_sys->p_theme->EvtBank->TestShortcut(
msg.wParam, KeyModifier );
}
else if( msg.message == WM_SYSKEYDOWN )
}
delete
(
OSEvent
*
)
evt
;
#if 0
// If Window is parent window
if( hwnd == ( (GTK2Theme *)p_intf->p_sys->p_theme )->GetParentWindow() )
{
if( uMsg == WM_SYSCOMMAND )
{
// If key is ALT
if( msg.wParam == 18 )
KeyModifier = 1
;
if( (Event *)wParam != NULL )
( (Event *)wParam )->SendEvent();
return 0
;
}
else if( msg.message == WM_SYSKEYUP )
else if( uMsg == WM_RBUTTONDOWN && wParam == 42 &&
lParam == WM_RBUTTONDOWN )
{
// If key is a system key
KeyModifier = 0;
int x, y;
OSAPI_GetMousePos( x, y );
TrackPopupMenu(
( (GTK2Theme *)p_intf->p_sys->p_theme )->GetSysMenu(),
0, x, y, 0, hwnd, NULL );
}
}
/************************
* Process timer message *
************************/
else if( msg.message == WM_TIMER )
{
DispatchMessage( &msg );
}
/***********************
* VLC specific message *
***********************/
else if( IsVLCEvent( msg.message ) )
{
if( !Proc->EventProc( ProcessEvent ) )
break; // Exit VLC !
}
// If closing parent window
if( uMsg == WM_CLOSE )
{
OSAPI_PostMessage( NULL, VLC_HIDE, VLC_QUIT, 0 );
return 0;
}
/**********************
* Broadcsated message *
**********************/
else if( msg.hwnd == NULL )
{
for( win = p_intf->p_sys->p_theme->WindowList.begin();
win != p_intf->p_sys->p_theme->WindowList.end(); win++ )
{
(*win)->ProcessEvent( ProcessEvent );
}
}
// If hwnd does not match any window or message not processed
return DefWindowProc( hwnd, uMsg, wParam, lParam );
#endif
}
//---------------------------------------------------------------------------
/***********************
* Process window event *
***********************/
else
{
DispatchMessage( &msg );
}
// Delete event
ProcessEvent->DestructParameters();
delete (OSEvent *)ProcessEvent;
// Check if vlc is closing
Proc->IsClosing();
}
#endif
//---------------------------------------------------------------------------
// GTK2 interface
//---------------------------------------------------------------------------
void
OSRun
(
intf_thread_t
*
p_intf
)
{
gdk_event_handler_set
(
GTK2Proc
,
(
gpointer
)
p_intf
,
NULL
);
// Main event loop
GMainLoop
*
loop
=
g_main_loop_new
(
NULL
,
TRUE
);
g_main_loop_run
(
loop
);
}
//---------------------------------------------------------------------------
bool
IsVLCEvent
(
unsigned
int
msg
)
...
...
@@ -186,5 +158,4 @@ bool IsVLCEvent( unsigned int msg )
}
//---------------------------------------------------------------------------
#endif
modules/gui/skins/gtk2/gtk2_theme.cpp
View file @
c0a203df
...
...
@@ -2,7 +2,7 @@
* gtk2_theme.cpp: GTK2 implementation of the Theme class
*****************************************************************************
* Copyright (C) 2003 VideoLAN
* $Id: gtk2_theme.cpp,v 1.
9 2003/04/14 20:17:33 asmax
Exp $
* $Id: gtk2_theme.cpp,v 1.
10 2003/04/15 01:19:11 ipkiss
Exp $
*
* Authors: Cyril Deguet <asmax@videolan.org>
*
...
...
@@ -49,83 +49,6 @@
//---------------------------------------------------------------------------
void
SkinManage
(
intf_thread_t
*
p_intf
);
/*
//---------------------------------------------------------------------------
// GTK2 interface
//---------------------------------------------------------------------------
LRESULT CALLBACK GTK2Proc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
// Get pointer to thread info
intf_thread_t *p_intf = (intf_thread_t *)GetWindowLongPtr( hwnd,
GWLP_USERDATA );
// If doesn't exist, treat windows message normally
if( p_intf == NULL )
return DefWindowProc( hwnd, uMsg, wParam, lParam );
// Create event to dispatch in windows
Event *evt = (Event *)new OSEvent( p_intf, hwnd, uMsg, wParam, lParam );
// Find window matching with hwnd
list<Window *>::const_iterator win;
for( win = p_intf->p_sys->p_theme->WindowList.begin();
win != p_intf->p_sys->p_theme->WindowList.end(); win++ )
{
// If it is the correct window
if( hwnd == ( (GTK2Window *)(*win) )->GetHandle() )
{
// Send event and check if processed
if( (*win)->ProcessEvent( evt ) )
{
delete (OSEvent *)evt;
return 0;
}
else
{
break;
}
}
}
delete (OSEvent *)evt;
// If Window is parent window
if( hwnd == ( (GTK2Theme *)p_intf->p_sys->p_theme )->GetParentWindow() )
{
if( uMsg == WM_SYSCOMMAND )
{
if( (Event *)wParam != NULL )
( (Event *)wParam )->SendEvent();
return 0;
}
else if( uMsg == WM_RBUTTONDOWN && wParam == 42 &&
lParam == WM_RBUTTONDOWN )
{
int x, y;
OSAPI_GetMousePos( x, y );
TrackPopupMenu(
( (GTK2Theme *)p_intf->p_sys->p_theme )->GetSysMenu(),
0, x, y, 0, hwnd, NULL );
}
}
// If closing parent window
if( uMsg == WM_CLOSE )
{
OSAPI_PostMessage( NULL, VLC_HIDE, VLC_QUIT, 0 );
return 0;
}
// If hwnd does not match any window or message not processed
return DefWindowProc( hwnd, uMsg, wParam, lParam );
}
//---------------------------------------------------------------------------
*/
//---------------------------------------------------------------------------
// THEME
...
...
modules/gui/skins/gtk2/gtk2_window.cpp
View file @
c0a203df
...
...
@@ -2,7 +2,7 @@
* gtk2_window.cpp: GTK2 implementation of the Window class
*****************************************************************************
* Copyright (C) 2003 VideoLAN
* $Id: gtk2_window.cpp,v 1.
8 2003/04/14 20:17:33 asmax
Exp $
* $Id: gtk2_window.cpp,v 1.
9 2003/04/15 01:19:11 ipkiss
Exp $
*
* Authors: Cyril Deguet <asmax@videolan.org>
*
...
...
@@ -32,6 +32,7 @@
//--- GTK2 ------------------------------------------------------------------
#include <gdk/gdk.h>
#include <glib.h>
//--- SKIN ------------------------------------------------------------------
#include "os_api.h"
...
...
@@ -47,7 +48,6 @@
#include "theme.h"
//---------------------------------------------------------------------------
// Fading API
//---------------------------------------------------------------------------
...
...
@@ -71,6 +71,9 @@ GTK2Window::GTK2Window( intf_thread_t *p_intf, GdkWindow *gwnd, int x, int y,
// Set handles
gWnd
=
gwnd
;
gc
=
gdk_gc_new
(
gwnd
);
LButtonDown
=
false
;
RButtonDown
=
false
;
/*
// Set position parameters
CursorPos = new POINT;
...
...
@@ -155,46 +158,80 @@ void GTK2Window::OSShow( bool show )
//---------------------------------------------------------------------------
bool
GTK2Window
::
ProcessOSEvent
(
Event
*
evt
)
{
/*
unsigned int msg = evt->GetMessage();
unsigned
int
msg
=
evt
->
GetMessage
();
unsigned
int
p1
=
evt
->
GetParam1
();
int
p2
=
evt
->
GetParam2
();
fprintf
(
stderr
,
"salut %li
\n
"
,
evt
->
GetMessage
()
);
switch
(
msg
)
{
case WM_PAINT:
HDC DC;
PAINTSTRUCT Infos;
DC = BeginPaint( hWnd , &Infos );
EndPaint( hWnd , &Infos );
case
GDK_EXPOSE
:
RefreshFromImage
(
0
,
0
,
Width
,
Height
);
return
true
;
case WM_MOUSEMOVE:
TRACKMOUSEEVENT TrackEvent;
TrackEvent.cbSize = sizeof( TRACKMOUSEEVENT );
TrackEvent.dwFlags = TME_LEAVE;
TrackEvent.hwndTrack = hWnd;
TrackEvent.dwHoverTime = 1;
TrackMouseEvent( &TrackEvent );
if( p1 == MK_LBUTTON )
MouseMove( LOWORD( p2 ), HIWORD( p2 ), 1 );
else if( p1 == MK_RBUTTON )
MouseMove( LOWORD( p2 ), HIWORD( p2 ), 2 );
case
GDK_MOTION_NOTIFY
:
// TRACKMOUSEEVENT TrackEvent;
// TrackEvent.cbSize = sizeof( TRACKMOUSEEVENT );
// TrackEvent.dwFlags = TME_LEAVE;
// TrackEvent.hwndTrack = hWnd;
// TrackEvent.dwHoverTime = 1;
// TrackMouseEvent( &TrackEvent );
if
(
LButtonDown
)
MouseMove
(
((
GdkEventButton
*
)
p2
)
->
x_root
,
((
GdkEventButton
*
)
p2
)
->
y_root
,
1
);
else
if
(
RButtonDown
)
MouseMove
(
((
GdkEventButton
*
)
p2
)
->
x_root
,
((
GdkEventButton
*
)
p2
)
->
y_root
,
2
);
else
MouseMove( LOWORD( p2 ), HIWORD( p2 ), 0 );
MouseMove
(
((
GdkEventButton
*
)
p2
)
->
x_root
,
((
GdkEventButton
*
)
p2
)
->
y_root
,
0
);
return
true
;
case WM_LBUTTONDOWN:
SetCapture( hWnd );
MouseDown( LOWORD( p2 ), HIWORD( p2 ), 1 );
case
GDK_BUTTON_PRESS
:
switch
(
((
GdkEventButton
*
)
p2
)
->
button
)
{
case
1
:
// Left button
LButtonDown
=
true
;
MouseDown
(
((
GdkEventButton
*
)
p2
)
->
x_root
,
((
GdkEventButton
*
)
p2
)
->
y_root
,
1
);
break
;
case
3
:
// Right button
RButtonDown
=
true
;
MouseDown
(
((
GdkEventButton
*
)
p2
)
->
x_root
,
((
GdkEventButton
*
)
p2
)
->
y_root
,
2
);
break
;
default:
break
;
}
return
true
;
case WM_LBUTTONUP:
ReleaseCapture();
MouseUp( LOWORD( p2 ), HIWORD( p2 ), 1 );
case
GDK_BUTTON_RELEASE
:
switch
(
((
GdkEventButton
*
)
p2
)
->
button
)
{
case
1
:
// Left button
LButtonDown
=
false
;
MouseUp
(
((
GdkEventButton
*
)
p2
)
->
x_root
,
((
GdkEventButton
*
)
p2
)
->
y_root
,
1
);
break
;
case
3
:
// Right button
RButtonDown
=
false
;
MouseUp
(
((
GdkEventButton
*
)
p2
)
->
x_root
,
((
GdkEventButton
*
)
p2
)
->
y_root
,
2
);
break
;
default:
break
;
}
return
true
;
/*
case WM_RBUTTONDOWN:
MouseDown( LOWORD( p2 ), HIWORD( p2 ), 2 );
return true;
...
...
@@ -210,10 +247,10 @@ bool GTK2Window::ProcessOSEvent( Event *evt )
case WM_MOUSELEAVE:
OSAPI_PostMessage( this, WINDOW_LEAVE, 0, 0 );
return true;
*/
default:
return
false
;
}
*/
}
}
//---------------------------------------------------------------------------
void
GTK2Window
::
SetTransparency
(
int
Value
)
...
...
@@ -235,9 +272,9 @@ void GTK2Window::RefreshFromImage( int x, int y, int w, int h )
// Release window device context
ReleaseDC( hWnd, DC );
*/
fprintf
(
stderr
,
"window %d %d %d %d
\n
"
,
x
,
y
,
w
,
h
);
gdk_draw_drawable
(
gWnd
,
gc
,
((
GTK2Graphics
*
)
Image
)
->
GetImage
(),
x
,
y
,
x
,
y
,
w
,
h
);
...
...
@@ -245,25 +282,23 @@ void GTK2Window::RefreshFromImage( int x, int y, int w, int h )
//---------------------------------------------------------------------------
void
GTK2Window
::
WindowManualMove
()
{
/*
// Get mouse cursor position
LPPOINT NewPos = new POINT
;
GetCursorPos( NewPos
);
// Get mouse cursor position
int
x
,
y
;
gdk_display_get_pointer
(
gdk_display_get_default
(),
NULL
,
&
x
,
&
y
,
NULL
);
// Move window and chek for magnetism
p_intf
->
p_sys
->
p_theme
->
MoveSkinMagnet
(
this
,
WindowPos->x + NewPos->x - CursorPos->x,
WindowPos->y + NewPos->y - CursorPos->y );
WindowX
+
x
-
CursorX
,
WindowY
+
y
-
CursorY
);
// Free memory
delete[] NewPos;
*/
fprintf
(
stderr
,
"---------
\n
"
);
}
//---------------------------------------------------------------------------
void
GTK2Window
::
WindowManualMoveInit
()
{
/* GetCursorPos( CursorPos );
WindowPos->x = Left;
WindowPos->y = Top;*/
gdk_display_get_pointer
(
gdk_display_get_default
(),
NULL
,
&
CursorX
,
&
CursorY
,
NULL
);
WindowX
=
Left
;
WindowY
=
Top
;
}
//---------------------------------------------------------------------------
void
GTK2Window
::
Move
(
int
left
,
int
top
)
...
...
modules/gui/skins/gtk2/gtk2_window.h
View file @
c0a203df
...
...
@@ -2,7 +2,7 @@
* gtk2_window.h: GTK2 implementation of the Window class
*****************************************************************************
* Copyright (C) 2003 VideoLAN
* $Id: gtk2_window.h,v 1.
3 2003/04/14 20:07:49 asmax
Exp $
* $Id: gtk2_window.h,v 1.
4 2003/04/15 01:19:11 ipkiss
Exp $
*
* Authors: Cyril Deguet <asmax@videolan.org>
*
...
...
@@ -40,8 +40,10 @@ class GTK2Window : public Window
// General parameters
GdkWindow
*
gWnd
;
GdkGC
*
gc
;
// LPPOINT CursorPos;
// LPPOINT WindowPos;
int
CursorX
;
int
CursorY
;
int
WindowX
;
int
WindowY
;
// Tooltip texts
GdkWindow
*
ToolTipWindow
;
...
...
@@ -50,6 +52,10 @@ class GTK2Window : public Window
// Drag & drop
// LPDROPTARGET DropTarget;
// Left button down
bool
LButtonDown
;
bool
RButtonDown
;
public:
// Cosntructors
GTK2Window
(
intf_thread_t
*
_p_intf
,
GdkWindow
*
gwnd
,
int
x
,
int
y
,
...
...
modules/gui/skins/src/window.cpp
View file @
c0a203df
...
...
@@ -2,7 +2,7 @@
* window.cpp: Window class
*****************************************************************************
* Copyright (C) 2003 VideoLAN
* $Id: window.cpp,v 1.
8 2003/04/14 20:07:49 asmax
Exp $
* $Id: window.cpp,v 1.
9 2003/04/15 01:19:11 ipkiss
Exp $
*
* Authors: Olivier Teulire <ipkiss@via.ecp.fr>
* Emmanuel Puig <karibu@via.ecp.fr>
...
...
@@ -322,6 +322,8 @@ void Window::MouseMove( int x, int y, int button )
{
int
i
;
fprintf
(
stderr
,
"pouet %i
\n
"
,
button
);
// Move window if selected !
if
(
WindowMoving
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment