From: <sp...@us...> - 2008-03-27 16:57:45
|
Revision: 3587 http://fuse-emulator.svn.sourceforge.net/fuse-emulator/?rev=3587&view=rev Author: specu Date: 2008-03-27 09:55:08 -0700 (Thu, 27 Mar 2008) Log Message: ----------- Win32: Implementation of the mouse functions (Marek). Modified Paths: -------------- trunk/fuse/hacking/ChangeLog trunk/fuse/ui/win32/Makefile.am trunk/fuse/ui/win32/win32internals.h trunk/fuse/ui/win32/win32ui.c Added Paths: ----------- trunk/fuse/ui/win32/win32mouse.c Modified: trunk/fuse/hacking/ChangeLog =================================================================== --- trunk/fuse/hacking/ChangeLog 2008-03-26 18:43:54 UTC (rev 3586) +++ trunk/fuse/hacking/ChangeLog 2008-03-27 16:55:08 UTC (rev 3587) @@ -2590,3 +2590,5 @@ 20080326 configure.in,windres.rc,ui/win32/{win32ui.c,win32joystick.{c,h,rc}, Makefile.am}: Win32: Implementation of the Configure Joystick dialog. Joystick will be read using Windows' mmsystem library (Marek). +20080327 ui/win32/{win32ui.c,win32mouse.c,win32internals.h,Makefile.am}: Win32: + Implementation of the mouse functions (Marek). Modified: trunk/fuse/ui/win32/Makefile.am =================================================================== --- trunk/fuse/ui/win32/Makefile.am 2008-03-26 18:43:54 UTC (rev 3586) +++ trunk/fuse/ui/win32/Makefile.am 2008-03-27 16:55:08 UTC (rev 3587) @@ -55,6 +55,7 @@ win32joystick.c \ win32joystick.rc \ win32keyboard.c \ + win32mouse.c \ win32ui.c BUILT_SOURCES = keysyms.c \ Modified: trunk/fuse/ui/win32/win32internals.h =================================================================== --- trunk/fuse/ui/win32/win32internals.h 2008-03-26 18:43:54 UTC (rev 3586) +++ trunk/fuse/ui/win32/win32internals.h 2008-03-27 16:55:08 UTC (rev 3587) @@ -61,6 +61,13 @@ int win32ui_picture( const char *filename, int border ); /* + * Mouse routines (win32mouse.c) + */ + +void win32mouse_position( LPARAM lParam ); +void win32mouse_button( int button, int down ); + +/* * Dialog box reset */ Added: trunk/fuse/ui/win32/win32mouse.c =================================================================== --- trunk/fuse/ui/win32/win32mouse.c (rev 0) +++ trunk/fuse/ui/win32/win32mouse.c 2008-03-27 16:55:08 UTC (rev 3587) @@ -0,0 +1,97 @@ +/* win32mouse.c: Win32 routines for emulating Spectrum mice + Copyright (c) 2008 Marek Januszewski + + $Id$ + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + Author contact information: + + E-mail: phi...@sh... + +*/ + +#include <config.h> + +#include <windows.h> +#include <windowsx.h> /* for GET_X_LPARAM and GET_Y_LPARAM */ + +#include "ui/ui.h" +#include "win32internals.h" + +static void +win32mouse_reset_pointer( void ) +{ + RECT rect; + POINT point; + + GetClientRect( fuse_hWnd, &rect ); + + point.x = rect.left + 128; + point.y = rect.top + 128; + + ClientToScreen( fuse_hWnd, &point ); + SetCursorPos( point.x, point.y ); +} + +void +win32mouse_position( LPARAM lParam ) +{ + int x,y; + + if( !ui_mouse_grabbed ) return; + + x = GET_X_LPARAM( lParam ); + y = GET_Y_LPARAM( lParam ); + + if( x != 128 || y != 128 ) + win32mouse_reset_pointer(); + ui_mouse_motion( x - 128, y - 128 ); + return; +} + +void +win32mouse_button( int button, int down ) +/* button is: 1 - left, 2 - middle, 3 - right, down is: 1 - down, 0 - up */ +{ + ui_mouse_button( button, down ); + return; +} + +int +ui_mouse_grab( int startup ) +{ + if( startup ) return 0; + + SetCursor( NULL ); + SetCapture( fuse_hWnd ); + ui_statusbar_update( UI_STATUSBAR_ITEM_MOUSE, UI_STATUSBAR_STATE_ACTIVE ); + return 1; + +/* doesn't seem like SetCapture can return an error */ +/* + ui_error( UI_ERROR_WARNING, "Mouse grab failed" ); + return 0; +*/ +} + +int +ui_mouse_release( int suspend ) +{ + ReleaseCapture(); + SetCursor( LoadCursor( NULL, IDC_ARROW ) ); + ui_statusbar_update( UI_STATUSBAR_ITEM_MOUSE, UI_STATUSBAR_STATE_INACTIVE ); + return 0; +} Property changes on: trunk/fuse/ui/win32/win32mouse.c ___________________________________________________________________ Name: svn:executable + * Modified: trunk/fuse/ui/win32/win32ui.c =================================================================== --- trunk/fuse/ui/win32/win32ui.c 2008-03-26 18:43:54 UTC (rev 3586) +++ trunk/fuse/ui/win32/win32ui.c 2008-03-27 16:55:08 UTC (rev 3587) @@ -254,7 +254,40 @@ fuse_emulation_unpause(); break; } + + case WM_LBUTTONUP: + win32mouse_button( 1, 0 ); + return 0; + + case WM_LBUTTONDOWN: + win32mouse_button( 1, 1 ); + return 0; + case WM_MBUTTONUP: + win32mouse_button( 2, 0 ); + return 0; + + case WM_MBUTTONDOWN: + win32mouse_button( 2, 1 ); + return 0; + + case WM_RBUTTONUP: + win32mouse_button( 3, 0 ); + return 0; + + case WM_RBUTTONDOWN: + win32mouse_button( 3, 1 ); + return 0; + + case WM_MOUSEMOVE: + win32mouse_position( lParam ); + return 0; + + case WM_SETCURSOR: + /* prevent the cursor from being redrawn if fuse has grabbed the mouse */ + if( ui_mouse_grabbed ) + return TRUE; + default: return( DefWindowProc( hWnd, msg, wParam, lParam ) ); } @@ -312,6 +345,8 @@ if( win32display_init() ) return 1; win32statusbar_set_visibility( settings_current.statusbar ); + ui_mouse_present = 1; + return 0; } @@ -376,20 +411,6 @@ } int -ui_mouse_grab( int startup ) -{ - STUB; - return 0; -} - -int -ui_mouse_release( int suspend ) -{ - STUB; - return 0; -} - -int ui_joystick_init( void ) { STUB; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |