source: trunk/examples/qws/mousecalibration/calibration.cpp@ 932

Last change on this file since 932 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.3 KB
Line 
1/****************************************************************************
2**
3** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
4** All rights reserved.
5** Contact: Nokia Corporation ([email protected])
6**
7** This file is part of the examples of the Qt Toolkit.
8**
9** $QT_BEGIN_LICENSE:BSD$
10** You may use this file under the terms of the BSD license as follows:
11**
12** "Redistribution and use in source and binary forms, with or without
13** modification, are permitted provided that the following conditions are
14** met:
15** * Redistributions of source code must retain the above copyright
16** notice, this list of conditions and the following disclaimer.
17** * Redistributions in binary form must reproduce the above copyright
18** notice, this list of conditions and the following disclaimer in
19** the documentation and/or other materials provided with the
20** distribution.
21** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
22** the names of its contributors may be used to endorse or promote
23** products derived from this software without specific prior written
24** permission.
25**
26** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
27** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
28** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
29** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
30** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
31** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
32** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
33** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
34** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
35** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
36** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
37** $QT_END_LICENSE$
38**
39****************************************************************************/
40
41#include "calibration.h"
42
43#include <QWSPointerCalibrationData>
44#include <QPainter>
45#include <QFile>
46#include <QTimer>
47#include <QApplication>
48#include <QDesktopWidget>
49#include <QMouseEvent>
50#include <QScreen>
51#include <QWSServer>
52
53//! [0]
54Calibration::Calibration()
55{
56 QRect desktop = QApplication::desktop()->geometry();
57 desktop.moveTo(QPoint(0, 0));
58 setGeometry(desktop);
59
60 setFocusPolicy(Qt::StrongFocus);
61 setFocus();
62 setModal(true);
63//! [0]
64
65//! [1]
66 int width = qt_screen->deviceWidth();
67 int height = qt_screen->deviceHeight();
68
69 int dx = width / 10;
70 int dy = height / 10;
71
72 QPoint *points = data.screenPoints;
73 points[QWSPointerCalibrationData::TopLeft] = QPoint(dx, dy);
74 points[QWSPointerCalibrationData::BottomLeft] = QPoint(dx, height - dy);
75 points[QWSPointerCalibrationData::BottomRight] = QPoint(width - dx, height - dy);
76 points[QWSPointerCalibrationData::TopRight] = QPoint(width - dx, dy);
77 points[QWSPointerCalibrationData::Center] = QPoint(width / 2, height / 2);
78//! [1]
79
80//! [2]
81 pressCount = 0;
82}
83//! [2]
84
85//! [3]
86Calibration::~Calibration()
87{
88}
89//! [3]
90
91//! [4]
92int Calibration::exec()
93{
94 QWSServer::mouseHandler()->clearCalibration();
95 grabMouse();
96 activateWindow();
97 int ret = QDialog::exec();
98 releaseMouse();
99 return ret;
100}
101//! [4]
102
103//! [5]
104void Calibration::paintEvent(QPaintEvent*)
105{
106 QPainter p(this);
107 p.fillRect(rect(), Qt::white);
108
109 QPoint point = data.screenPoints[pressCount];
110
111 // Map to logical coordinates in case the screen is transformed
112 QSize screenSize(qt_screen->deviceWidth(), qt_screen->deviceHeight());
113 point = qt_screen->mapFromDevice(point, screenSize);
114
115 p.fillRect(point.x() - 6, point.y() - 1, 13, 3, Qt::black);
116 p.fillRect(point.x() - 1, point.y() - 6, 3, 13, Qt::black);
117}
118//! [5]
119
120//! [6]
121void Calibration::mouseReleaseEvent(QMouseEvent *event)
122{
123 // Map from device coordinates in case the screen is transformed
124 QSize screenSize(qt_screen->width(), qt_screen->height());
125 QPoint p = qt_screen->mapToDevice(event->pos(), screenSize);
126
127 data.devPoints[pressCount] = p;
128
129 if (++pressCount < 5)
130 repaint();
131 else
132 accept();
133}
134//! [6]
135
136//! [7]
137void Calibration::accept()
138{
139 Q_ASSERT(pressCount == 5);
140 QWSServer::mouseHandler()->calibrate(&data);
141 QDialog::accept();
142}
143//! [7]
144
Note: See TracBrowser for help on using the repository browser.