2011-04-06 Alexis Menard <alexis.menard@openbossa.org>
[WebKit-https.git] / Source / WebCore / platform / graphics / gstreamer / PlatformVideoWindowQt.cpp
1 /*
2     Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
3
4     This library is free software; you can redistribute it and/or
5     modify it under the terms of the GNU Library General Public
6     License as published by the Free Software Foundation; either
7     version 2 of the License, or (at your option) any later version.
8
9     This library is distributed in the hope that it will be useful,
10     but WITHOUT ANY WARRANTY; without even the implied warranty of
11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12     Library General Public License for more details.
13
14     You should have received a copy of the GNU Library General Public License
15     along with this library; see the file COPYING.LIB.  If not, write to
16     the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17     Boston, MA 02110-1301, USA.
18 */
19
20 #include "config.h"
21 #include "PlatformVideoWindow.h"
22
23 #include "HTMLVideoElement.h"
24 #include "PlatformVideoWindowPrivate.h"
25
26 #include <QApplication>
27 #include <QDesktopWidget>
28 #include <QKeyEvent>
29 #include <QPalette>
30 using namespace WebCore;
31
32 static const int gHideMouseCursorDelay = 3000;
33
34 FullScreenVideoWindow::FullScreenVideoWindow()
35     : QWidget(0, Qt::Window)
36     , m_mediaElement(0)
37 {
38     setAttribute(Qt::WA_NativeWindow);
39     setWindowModality(Qt::ApplicationModal);
40     setAttribute(Qt::WA_NoSystemBackground, true);
41     setAttribute(Qt::WA_PaintOnScreen, true);
42
43     m_cursorTimer.setSingleShot(true);
44     connect(&m_cursorTimer, SIGNAL(timeout()), this, SLOT(hideCursor()));
45 }
46
47 void FullScreenVideoWindow::setVideoElement(HTMLVideoElement* element)
48 {
49     m_mediaElement = element;
50 }
51
52 void FullScreenVideoWindow::closeEvent(QCloseEvent*)
53 {
54     m_cursorTimer.stop();
55     setMouseTracking(false);
56     releaseMouse();
57     QApplication::restoreOverrideCursor();
58 }
59
60 void FullScreenVideoWindow::keyPressEvent(QKeyEvent* ev)
61 {
62     if (m_mediaElement && ev->key() == Qt::Key_Space) {
63         if (!m_mediaElement->paused())
64             m_mediaElement->pause(true);
65         else
66             m_mediaElement->play(true);
67     } else if (ev->key() == Qt::Key_Escape)
68         emit closed();
69     QWidget::keyPressEvent(ev);
70 }
71
72 bool FullScreenVideoWindow::event(QEvent* ev)
73 {
74     switch (ev->type()) {
75     case QEvent::MouseMove:
76         showCursor();
77         ev->accept();
78         return true;
79     case QEvent::MouseButtonDblClick:
80         emit closed();
81         ev->accept();
82         return true;
83     default:
84         return QWidget::event(ev);
85     }
86 }
87
88 void FullScreenVideoWindow::showFullScreen()
89 {
90     QWidget::showFullScreen();
91     setMouseTracking(true);
92     raise();
93     setFocus();
94     hideCursor();
95 }
96
97 void FullScreenVideoWindow::hideCursor()
98 {
99     QApplication::setOverrideCursor(QCursor(Qt::BlankCursor));
100 }
101
102 void FullScreenVideoWindow::showCursor()
103 {
104     QApplication::restoreOverrideCursor();
105     m_cursorTimer.start(gHideMouseCursorDelay);
106 }
107
108
109 PlatformVideoWindow::PlatformVideoWindow()
110 {
111     m_window = new FullScreenVideoWindow();
112     m_window->setWindowFlags(m_window->windowFlags() | Qt::FramelessWindowHint);
113     QPalette p;
114     p.setColor(QPalette::Base, Qt::black);
115     p.setColor(QPalette::Window, Qt::black);
116     m_window->setPalette(p);
117     m_window->showFullScreen();
118     m_videoWindowId = m_window->winId();
119 }
120
121 PlatformVideoWindow::~PlatformVideoWindow()
122 {
123     delete m_window;
124     m_videoWindowId = 0;
125 }
126
127 void PlatformVideoWindow::prepareForOverlay(GstMessage*)
128 {
129 }