Benoît Minisini f65184802d [CONFIGURATION]
* NEW: Update copyright and license string in all source files.


git-svn-id: svn://localhost/gambas/trunk@2241 867c0c6c-44f3-4631-809d-bfa615b0a4ec
2009-08-17 10:41:51 +00:00

183 lines
3.4 KiB
C++

/***************************************************************************
gmouse.cpp
(c) 2004-2006 - Daniel Campos Fernández <dcamposf@gmail.com>
(c) 2000-2009 Benoît Minisini <gambas@users.sourceforge.net>
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, 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., 675 Mass Ave, Cambridge, MA 02139, USA.
***************************************************************************/
#define __GMOUSE_CPP
#include "widgets.h"
#include "widgets_private.h"
#include "gmouse.h"
#ifndef GAMBAS_DIRECTFB
#ifdef GDK_WINDOWING_X11
#include <gdk/gdkx.h>
#include <X11/X.h>
#include <X11/Xlib.h>
#endif
#endif
int gMouse::_isValid = 0;
int gMouse::_x;
int gMouse::_y;
int gMouse::_button;
int gMouse::_state;
int gMouse::_delta;
int gMouse::_orientation;
int gMouse::_start_x;
int gMouse::_start_y;
void gMouse::move(int x, int y)
{
GdkDisplay* dpy;
GdkWindow* win=gdk_get_default_root_window();
#ifdef GAMBAS_DIRECTFB
stub("DIRECTFB/gMouse::move");
#else
#ifdef GDK_WINDOWING_X11
dpy=gdk_display_get_default();
XWarpPointer(GDK_DISPLAY_XDISPLAY(dpy),GDK_WINDOW_XID(win),GDK_WINDOW_XID(win),0, 0,0, 0,x, y);
#else
stub("no-X11/gMouse::move");
#endif
#endif
}
int gMouse::button()
{
if (_isValid)
return _button;
else
return 0;
}
bool gMouse::left()
{
return _isValid ? (_button & 1) : false;
}
bool gMouse::right()
{
return _isValid ? (_button & 2) : false;
}
bool gMouse::middle()
{
return _isValid ? (_button & 4) : false;
}
bool gMouse::shift()
{
return _isValid ? (_state & GDK_SHIFT_MASK) : false;
}
bool gMouse::control()
{
return _isValid ? (_state & GDK_CONTROL_MASK) : false;
}
bool gMouse::alt()
{
return _isValid ? (_state & GDK_MOD1_MASK) : false;
}
bool gMouse::meta()
{
return _isValid ? (_state & GDK_MOD2_MASK) : false;
}
bool gMouse::normal()
{
return _isValid ? (_state & 0xFF) : false;
}
int gMouse::x()
{
return _isValid ? _x : -1;
}
int gMouse::y()
{
return _isValid ? _y : -1;
}
int gMouse::screenX()
{
gint x;
gdk_display_get_pointer(gdk_display_get_default(), NULL, &x, NULL, NULL);
return x;
}
int gMouse::screenY()
{
gint y;
gdk_display_get_pointer(gdk_display_get_default(), NULL, NULL, &y, NULL);
return y;
}
int gMouse::delta()
{
return _isValid ? _delta : -1;
}
int gMouse::orientation()
{
return _isValid ? _orientation : -1;
}
//"Private"
void gMouse::setWheel(int dt,int orn)
{
_delta = dt;
_orientation = orn;
}
void gMouse::setStart(int sx, int sy)
{
_start_x = sx;
_start_y = sy;
}
void gMouse::setMouse(int x, int y, int button, int state)
{
_delta = 0;
_orientation = 0;
_x = x;
_y = y;
_state = state;
switch(button)
{
case 1: _button = 1; break;
case 2: _button = 4; break;
case 3: _button = 2; break;
default:
_button = 0;
if (_state & GDK_BUTTON1_MASK) _button += 1;
if (_state & GDK_BUTTON2_MASK) _button += 4;
if (_state & GDK_BUTTON3_MASK) _button += 2;
}
}