diff options
Diffstat (limited to 'Source/WebCore/platform/graphics/gstreamer/PlatformVideoWindowQt.cpp')
-rw-r--r-- | Source/WebCore/platform/graphics/gstreamer/PlatformVideoWindowQt.cpp | 59 |
1 files changed, 53 insertions, 6 deletions
diff --git a/Source/WebCore/platform/graphics/gstreamer/PlatformVideoWindowQt.cpp b/Source/WebCore/platform/graphics/gstreamer/PlatformVideoWindowQt.cpp index 872d055..7270785 100644 --- a/Source/WebCore/platform/graphics/gstreamer/PlatformVideoWindowQt.cpp +++ b/Source/WebCore/platform/graphics/gstreamer/PlatformVideoWindowQt.cpp @@ -20,6 +20,7 @@ #include "config.h" #include "PlatformVideoWindow.h" +#include "HTMLVideoElement.h" #include "PlatformVideoWindowPrivate.h" #include <QApplication> @@ -28,29 +29,55 @@ #include <QPalette> using namespace WebCore; +static const int gHideMouseCursorDelay = 3000; + FullScreenVideoWindow::FullScreenVideoWindow() : QWidget(0, Qt::Window) + , m_mediaElement(0) { setAttribute(Qt::WA_NativeWindow); - // Setting these values ensures smooth resizing since it - // will prevent the system from clearing the background. + setWindowModality(Qt::ApplicationModal); setAttribute(Qt::WA_NoSystemBackground, true); setAttribute(Qt::WA_PaintOnScreen, true); + + m_cursorTimer.setSingleShot(true); + connect(&m_cursorTimer, SIGNAL(timeout()), this, SLOT(hideCursor())); +} + +void FullScreenVideoWindow::setVideoElement(HTMLVideoElement* element) +{ + m_mediaElement = element; +} + +void FullScreenVideoWindow::closeEvent(QCloseEvent*) +{ + m_cursorTimer.stop(); + setMouseTracking(false); + releaseMouse(); + QApplication::restoreOverrideCursor(); } void FullScreenVideoWindow::keyPressEvent(QKeyEvent* ev) { - if (ev->key() == Qt::Key_Escape) { - close(); + if (m_mediaElement && ev->key() == Qt::Key_Space) { + if (!m_mediaElement->paused()) + m_mediaElement->pause(true); + else + m_mediaElement->play(true); + } else if (ev->key() == Qt::Key_Escape) emit closed(); - } + QWidget::keyPressEvent(ev); } bool FullScreenVideoWindow::event(QEvent* ev) { switch (ev->type()) { + case QEvent::MouseMove: + showCursor(); + ev->accept(); + return true; case QEvent::MouseButtonDblClick: - close(); + emit closed(); ev->accept(); return true; default: @@ -58,6 +85,26 @@ bool FullScreenVideoWindow::event(QEvent* ev) } } +void FullScreenVideoWindow::showFullScreen() +{ + QWidget::showFullScreen(); + setMouseTracking(true); + raise(); + setFocus(); + hideCursor(); +} + +void FullScreenVideoWindow::hideCursor() +{ + QApplication::setOverrideCursor(QCursor(Qt::BlankCursor)); +} + +void FullScreenVideoWindow::showCursor() +{ + QApplication::restoreOverrideCursor(); + m_cursorTimer.start(gHideMouseCursorDelay); +} + PlatformVideoWindow::PlatformVideoWindow() { |