~ubuntu-branches/ubuntu/lucid/kdebase/lucid

« back to all changes in this revision

Viewing changes to khotkeys/shared/gestures.h

  • Committer: Bazaar Package Importer
  • Author(s): Ana Beatriz Guerrero Lopez
  • Date: 2009-04-05 05:22:13 UTC
  • mfrom: (0.4.2 experimental) (0.2.2 upstream)
  • mto: This revision was merged to the branch mainline in revision 235.
  • Revision ID: james.westby@ubuntu.com-20090405052213-39thr4l6p2ss07uj
Tags: 4:4.2.2-1
* New upstream release:
  - khtml fixes. (Closes: #290285, #359680)
  - Default konsole sessions can be deleted. (Closes: #286342)
  - Tag widget uses standard application palette. (Closes: #444800)
  - ... and surely many more but we have lost track...

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/****************************************************************************
2
 
 
3
 
 KHotKeys
4
 
 
5
 
 Copyright (C) 1999-2002 Lubos Lunak <l.lunak@kde.org>
6
 
 
7
 
 Distributed under the terms of the GNU General Public License version 2.
8
 
 
9
 
****************************************************************************/
10
 
 
11
 
#ifndef _GESTURES_H_
12
 
#define _GESTURES_H_
13
 
 
14
 
#include <qwidget.h>
15
 
#include <qtimer.h>
16
 
 
17
 
#include <X11/Xlib.h>
18
 
#include <fixx11h.h>
19
 
 
20
 
#include "windows.h"
21
 
 
22
 
namespace KHotKeys
23
 
{
24
 
 
25
 
class Gesture;
26
 
KDE_EXPORT extern Gesture* gesture_handler;
27
 
 
28
 
class KDE_EXPORT Stroke
29
 
    {
30
 
    public:
31
 
    // maximum number of numbers in stroke
32
 
        enum { MAX_SEQUENCE = 25 };
33
 
    // largest number of points allowed to be sampled
34
 
        enum { MAX_POINTS = 5000 };
35
 
    // default percentage of sample points in a bin from all points to be valid
36
 
        enum { MIN_BIN_POINTS_PERCENTAGE = 5 };
37
 
    // default threshold of size of smaller axis needed for it to define its own bin size
38
 
        enum { SCALE_RATIO = 4 };
39
 
    // default number of sample points required to have a valid stroke
40
 
        enum { MIN_POINTS = 10 };
41
 
        Stroke();
42
 
        ~Stroke();
43
 
        bool record( int x, int y );
44
 
        char* translate( int min_bin_points_percentage_P = MIN_BIN_POINTS_PERCENTAGE,
45
 
            int scale_ratio_P = SCALE_RATIO, int min_points_P = MIN_POINTS ); // CHECKME returns ret_val ( see below )
46
 
        void reset();
47
 
    protected:
48
 
        int bin( int x, int y );
49
 
        // metrics for input stroke
50
 
        int min_x, min_y;
51
 
        int max_x, max_y;
52
 
        int point_count;
53
 
        int delta_x, delta_y;
54
 
        int bound_x_1, bound_x_2;
55
 
        int bound_y_1, bound_y_2;
56
 
        struct point
57
 
            {
58
 
            int x;
59
 
            int y;
60
 
            };
61
 
        point* points;
62
 
        char ret_val[ MAX_SEQUENCE ];
63
 
    };
64
 
 
65
 
class KDE_EXPORT Gesture
66
 
    : public QWidget // not QObject because of x11EventFilter()
67
 
    {
68
 
    Q_OBJECT
69
 
    public:
70
 
        Gesture( bool enabled_P, QObject* parent_P );
71
 
        virtual ~Gesture();
72
 
        void enable( bool enable_P );
73
 
        void set_mouse_button( unsigned int button_P );
74
 
        void set_timeout( int time_P );
75
 
        void set_exclude( Windowdef_list* windows_P );
76
 
        void register_handler( QObject* receiver_P, const char* slot_P );
77
 
        void unregister_handler( QObject* receiver_P, const char* slot_P );
78
 
    protected:
79
 
        virtual bool x11Event( XEvent* ev_P );
80
 
    private slots:
81
 
        void stroke_timeout();
82
 
        void active_window_changed( WId window_P );
83
 
    signals:
84
 
        void handle_gesture( const QString &gesture, WId window );
85
 
    private:
86
 
        void update_grab();
87
 
        void grab_mouse( bool grab_P );
88
 
        void mouse_replay( bool release_P );
89
 
        bool _enabled;
90
 
        Stroke stroke;
91
 
        int start_x, start_y;
92
 
        QTimer nostroke_timer;
93
 
        bool recording;
94
 
        unsigned int button;
95
 
        int timeout;
96
 
        WId gesture_window;
97
 
        Windowdef_list* exclude;
98
 
        QMap< QObject*, bool > handlers; // bool is just a dummy
99
 
    };
100
 
 
101
 
// Gesture class must be QWidget derived because of x11Event()
102
 
// but it should be QObject owned -> use a QObject proxy that will delete it
103
 
class DeleteObject
104
 
    : public QObject
105
 
    {
106
 
    Q_OBJECT
107
 
    public:
108
 
        DeleteObject( QWidget* widget_P, QObject* parent_P )
109
 
            : QObject( parent_P ), widget( widget_P ) {}
110
 
        virtual ~DeleteObject() { delete widget; }
111
 
    private:
112
 
        QWidget* widget;
113
 
    };
114
 
    
115
 
 
116
 
//***************************************************************************
117
 
// Inline
118
 
//***************************************************************************
119
 
 
120
 
} // namespace KHotKeys
121
 
 
122
 
#endif