2011-04-06 Alexis Menard <alexis.menard@openbossa.org>
[WebKit-https.git] / Source / WebCore / platform / graphics / gstreamer / PlatformVideoWindowQt.cpp
index 872d055798a03aed0f6b5a50f1dec00e4c2cc8c3..72707851af20c930800294f484204e39ce07bf97 100644 (file)
@@ -20,6 +20,7 @@
 #include "config.h"
 #include "PlatformVideoWindow.h"
 
+#include "HTMLVideoElement.h"
 #include "PlatformVideoWindowPrivate.h"
 
 #include <QApplication>
 #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()
 {