summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDenis Dzyubenko <denis.dzyubenko@nokia.com>2009-11-11 11:44:51 (GMT)
committerDenis Dzyubenko <denis.dzyubenko@nokia.com>2009-11-11 11:44:51 (GMT)
commitf1342b0697705b6424ba201854622f87f22484f7 (patch)
treee7b782e9d439a74754ddc91bf6d4ae6080879798
parentb111d0bb1f0483d507c758810a0f247cb8dd82c0 (diff)
parent791c4035c28257e5a8426e6519866546faaf5286 (diff)
downloadQt-f1342b0697705b6424ba201854622f87f22484f7.zip
Qt-f1342b0697705b6424ba201854622f87f22484f7.tar.gz
Qt-f1342b0697705b6424ba201854622f87f22484f7.tar.bz2
Merge branch '4.6-platform' into 4.6
-rw-r--r--examples/dialogs/findfiles/window.cpp2
-rw-r--r--examples/multitouch/pinchzoom/graphicsview.cpp20
-rw-r--r--examples/multitouch/pinchzoom/graphicsview.h3
-rw-r--r--src/corelib/kernel/qeventdispatcher_win.cpp14
-rw-r--r--tests/manual/windowflags/previewwindow.cpp20
-rw-r--r--tests/manual/windowflags/previewwindow.h6
6 files changed, 56 insertions, 9 deletions
diff --git a/examples/dialogs/findfiles/window.cpp b/examples/dialogs/findfiles/window.cpp
index f8fc00b..afe6399 100644
--- a/examples/dialogs/findfiles/window.cpp
+++ b/examples/dialogs/findfiles/window.cpp
@@ -243,7 +243,7 @@ void Window::openFileOfItem(int row, int /* column */)
{
QTableWidgetItem *item = filesTable->item(row, 0);
- QDesktopServices::openUrl(currentDir.absoluteFilePath(item->text()));
+ QDesktopServices::openUrl(QUrl::fromLocalFile(currentDir.absoluteFilePath(item->text())));
}
//! [12]
diff --git a/examples/multitouch/pinchzoom/graphicsview.cpp b/examples/multitouch/pinchzoom/graphicsview.cpp
index 0c79073..00e620a 100644
--- a/examples/multitouch/pinchzoom/graphicsview.cpp
+++ b/examples/multitouch/pinchzoom/graphicsview.cpp
@@ -45,7 +45,7 @@
#include <QTouchEvent>
GraphicsView::GraphicsView(QGraphicsScene *scene, QWidget *parent)
- : QGraphicsView(scene, parent)
+ : QGraphicsView(scene, parent), totalScaleFactor(1)
{
viewport()->setAttribute(Qt::WA_AcceptTouchEvents);
setDragMode(ScrollHandDrag);
@@ -58,14 +58,24 @@ bool GraphicsView::viewportEvent(QEvent *event)
case QEvent::TouchUpdate:
case QEvent::TouchEnd:
{
- QList<QTouchEvent::TouchPoint> touchPoints = static_cast<QTouchEvent *>(event)->touchPoints();
+ QTouchEvent *touchEvent = static_cast<QTouchEvent *>(event);
+ QList<QTouchEvent::TouchPoint> touchPoints = touchEvent->touchPoints();
if (touchPoints.count() == 2) {
// determine scale factor
const QTouchEvent::TouchPoint &touchPoint0 = touchPoints.first();
const QTouchEvent::TouchPoint &touchPoint1 = touchPoints.last();
- const qreal scaleFactor = QLineF(touchPoint0.pos(), touchPoint1.pos()).length()
- / QLineF(touchPoint0.startPos(), touchPoint1.startPos()).length();
- setTransform(QTransform().scale(scaleFactor, scaleFactor));
+ qreal currentScaleFactor =
+ QLineF(touchPoint0.pos(), touchPoint1.pos()).length()
+ / QLineF(touchPoint0.startPos(), touchPoint1.startPos()).length();
+ if (touchEvent->touchPointStates() & Qt::TouchPointReleased) {
+ // if one of the fingers is released, remember the current scale
+ // factor so that adding another finger later will continue zooming
+ // by adding new scale factor to the existing remembered value.
+ totalScaleFactor *= currentScaleFactor;
+ currentScaleFactor = 1;
+ }
+ setTransform(QTransform().scale(totalScaleFactor * currentScaleFactor,
+ totalScaleFactor * currentScaleFactor));
}
return true;
}
diff --git a/examples/multitouch/pinchzoom/graphicsview.h b/examples/multitouch/pinchzoom/graphicsview.h
index c5195cd..81a115d 100644
--- a/examples/multitouch/pinchzoom/graphicsview.h
+++ b/examples/multitouch/pinchzoom/graphicsview.h
@@ -50,4 +50,7 @@ public:
GraphicsView(QGraphicsScene *scene = 0, QWidget *parent = 0);
bool viewportEvent(QEvent *event);
+
+private:
+ qreal totalScaleFactor;
};
diff --git a/src/corelib/kernel/qeventdispatcher_win.cpp b/src/corelib/kernel/qeventdispatcher_win.cpp
index f2e66c5..3050b82 100644
--- a/src/corelib/kernel/qeventdispatcher_win.cpp
+++ b/src/corelib/kernel/qeventdispatcher_win.cpp
@@ -70,7 +70,8 @@ extern uint qGlobalPostedEventsCount();
enum {
WM_QT_SOCKETNOTIFIER = WM_USER,
- WM_QT_SENDPOSTEDEVENTS = WM_USER + 1
+ WM_QT_SENDPOSTEDEVENTS = WM_USER + 1,
+ SendPostedEventsTimerId = ~1u
};
#if defined(Q_OS_WINCE)
@@ -470,7 +471,7 @@ LRESULT CALLBACK qt_internal_proc(HWND hwnd, UINT message, WPARAM wp, LPARAM lp)
}
return 0;
} else if (message == WM_TIMER) {
- if (wp == ~1u) {
+ if (wp == SendPostedEventsTimerId) {
KillTimer(d->internalHwnd, wp);
int localSerialNumber = d->serialNumber;
(void) d->wakeUps.fetchAndStoreRelease(0);
@@ -488,7 +489,14 @@ LRESULT CALLBACK qt_internal_proc(HWND hwnd, UINT message, WPARAM wp, LPARAM lp)
if (GetQueueStatus(QS_INPUT | QS_RAWINPUT | QS_TIMER) != 0) {
// delay the next pass of sendPostedEvents() until we get the special
// WM_TIMER, which allows all pending Windows messages to be processed
- SetTimer(d->internalHwnd, ~1u, 0, 0);
+ if (SetTimer(d->internalHwnd, SendPostedEventsTimerId, 0, 0) == 0) {
+ // failed to start the timer, oops, clear wakeUps in an attempt to keep things running
+ qErrnoWarning("Qt: INTERNAL ERROR: failed to start sendPostedEvents() timer");
+ d->wakeUps.fetchAndStoreRelease(0);
+ } else {
+ // SetTimer() succeeded, nothing to do now
+ ;
+ }
} else {
// nothing pending in the queue, let sendPostedEvents go through
d->wakeUps.fetchAndStoreRelease(0);
diff --git a/tests/manual/windowflags/previewwindow.cpp b/tests/manual/windowflags/previewwindow.cpp
index 78f9fcb..31e8b3e 100644
--- a/tests/manual/windowflags/previewwindow.cpp
+++ b/tests/manual/windowflags/previewwindow.cpp
@@ -103,8 +103,18 @@ PreviewWindow::PreviewWindow(QWidget *parent)
closeButton = new QPushButton(tr("&Close"));
connect(closeButton, SIGNAL(clicked()), this, SLOT(close()));
+ showNormalButton = new QPushButton(tr("Show normal"));
+ connect(showNormalButton, SIGNAL(clicked()), this, SLOT(showNormal()));
+ showMaximizedButton = new QPushButton(tr("Show maximized"));
+ connect(showMaximizedButton, SIGNAL(clicked()), this, SLOT(showMaximized()));
+ showFullScreenButton = new QPushButton(tr("Show fullscreen"));
+ connect(showFullScreenButton, SIGNAL(clicked()), this, SLOT(showFullScreen()));
+
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(textEdit);
+ layout->addWidget(showNormalButton);
+ layout->addWidget(showMaximizedButton);
+ layout->addWidget(showFullScreenButton);
layout->addWidget(closeButton);
setLayout(layout);
@@ -129,8 +139,18 @@ PreviewDialog::PreviewDialog(QWidget *parent)
closeButton = new QPushButton(tr("&Close"));
connect(closeButton, SIGNAL(clicked()), this, SLOT(close()));
+ showNormalButton = new QPushButton(tr("Show normal"));
+ connect(showNormalButton, SIGNAL(clicked()), this, SLOT(showNormal()));
+ showMaximizedButton = new QPushButton(tr("Show maximized"));
+ connect(showMaximizedButton, SIGNAL(clicked()), this, SLOT(showMaximized()));
+ showFullScreenButton = new QPushButton(tr("Show fullscreen"));
+ connect(showFullScreenButton, SIGNAL(clicked()), this, SLOT(showFullScreen()));
+
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(textEdit);
+ layout->addWidget(showNormalButton);
+ layout->addWidget(showMaximizedButton);
+ layout->addWidget(showFullScreenButton);
layout->addWidget(closeButton);
setLayout(layout);
diff --git a/tests/manual/windowflags/previewwindow.h b/tests/manual/windowflags/previewwindow.h
index fdd21d7..fbf822b 100644
--- a/tests/manual/windowflags/previewwindow.h
+++ b/tests/manual/windowflags/previewwindow.h
@@ -62,6 +62,9 @@ public:
private:
QTextEdit *textEdit;
QPushButton *closeButton;
+ QPushButton *showNormalButton;
+ QPushButton *showMaximizedButton;
+ QPushButton *showFullScreenButton;
};
class PreviewDialog : public QDialog
@@ -76,6 +79,9 @@ public:
private:
QTextEdit *textEdit;
QPushButton *closeButton;
+ QPushButton *showNormalButton;
+ QPushButton *showMaximizedButton;
+ QPushButton *showFullScreenButton;
};
#endif