source: trunk/src/gui/kernel/qcursor_qws.cpp

Last change on this file was 846, checked in by Dmitry A. Kuminov, 14 years ago

trunk: Merged in qt 4.7.2 sources from branches/vendor/nokia/qt.

  • Property svn:eol-style set to native
File size: 4.2 KB
Line 
1/****************************************************************************
2**
3** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
4** All rights reserved.
5** Contact: Nokia Corporation (qt-info@nokia.com)
6**
7** This file is part of the QtGui module of the Qt Toolkit.
8**
9** $QT_BEGIN_LICENSE:LGPL$
10** Commercial Usage
11** Licensees holding valid Qt Commercial licenses may use this file in
12** accordance with the Qt Commercial License Agreement provided with the
13** Software or, alternatively, in accordance with the terms contained in
14** a written agreement between you and Nokia.
15**
16** GNU Lesser General Public License Usage
17** Alternatively, this file may be used under the terms of the GNU Lesser
18** General Public License version 2.1 as published by the Free Software
19** Foundation and appearing in the file LICENSE.LGPL included in the
20** packaging of this file. Please review the following information to
21** ensure the GNU Lesser General Public License version 2.1 requirements
22** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
23**
24** In addition, as a special exception, Nokia gives you certain additional
25** rights. These rights are described in the Nokia Qt LGPL Exception
26** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
27**
28** GNU General Public License Usage
29** Alternatively, this file may be used under the terms of the GNU
30** General Public License version 3.0 as published by the Free Software
31** Foundation and appearing in the file LICENSE.GPL included in the
32** packaging of this file. Please review the following information to
33** ensure the GNU General Public License version 3.0 requirements will be
34** met: http://www.gnu.org/copyleft/gpl.html.
35**
36** If you have questions regarding the use of this file, please contact
37** Nokia at qt-info@nokia.com.
38** $QT_END_LICENSE$
39**
40****************************************************************************/
41
42#include <qcursor.h>
43#include <private/qcursor_p.h>
44#include <qbitmap.h>
45#include <qwsdisplay_qws.h>
46
47QT_BEGIN_NAMESPACE
48
49QT_USE_NAMESPACE
50
51#ifndef QT_NO_CURSOR
52
53static int nextCursorId = Qt::BitmapCursor;
54
55/*****************************************************************************
56 Internal QCursorData class
57 *****************************************************************************/
58
59QCursorData::QCursorData(Qt::CursorShape s)
60 : cshape(s), bm(0), bmm(0), hx(0), hy(0), id(s)
61{
62 ref = 1;
63}
64
65QCursorData::~QCursorData()
66{
67 delete bm;
68 delete bmm;
69 QT_TRY {
70 QPaintDevice::qwsDisplay()->destroyCursor(id);
71 } QT_CATCH(const std::bad_alloc &) {
72 // do nothing.
73 }
74}
75
76
77/*****************************************************************************
78 Global cursors
79 *****************************************************************************/
80
81int QCursor::handle() const
82{
83 return d->id;
84}
85
86
87QCursorData *QCursorData::setBitmap(const QBitmap &bitmap, const QBitmap &mask, int hotX, int hotY)
88{
89 if (!QCursorData::initialized)
90 QCursorData::initialize();
91 if (bitmap.depth() != 1 || mask.depth() != 1 || bitmap.size() != mask.size()) {
92 qWarning("QCursor: Cannot create bitmap cursor; invalid bitmap(s)");
93 QCursorData *c = qt_cursorTable[0];
94 c->ref.ref();
95 return c;
96 }
97 QCursorData *d = new QCursorData;
98 d->bm = new QBitmap(bitmap);
99 d->bmm = new QBitmap(mask);
100 d->cshape = Qt::BitmapCursor;
101 d->id = ++nextCursorId;
102 d->hx = hotX >= 0 ? hotX : bitmap.width() / 2;
103 d->hy = hotY >= 0 ? hotY : bitmap.height() / 2;
104
105 QPaintDevice::qwsDisplay()->defineCursor(d->id, *d->bm, *d->bmm, d->hx, d->hy);
106 return d;
107}
108
109void QCursorData::update()
110{
111}
112
113#endif //QT_NO_CURSOR
114
115extern int *qt_last_x,*qt_last_y;
116
117QPoint QCursor::pos()
118{
119 // This doesn't know about hotspots yet so we disable it
120 //qt_accel_update_cursor();
121 if (qt_last_x)
122 return QPoint(*qt_last_x, *qt_last_y);
123 else
124 return QPoint();
125}
126
127void QCursor::setPos(int x, int y)
128{
129 // Need to check, since some X servers generate null mouse move
130 // events, causing looping in applications which call setPos() on
131 // every mouse move event.
132 //
133 if (pos() == QPoint(x, y))
134 return;
135 QPaintDevice::qwsDisplay()->setCursorPosition(x, y);
136}
137
138QT_END_NAMESPACE
Note: See TracBrowser for help on using the repository browser.