• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
3  *
4  * All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in the
13  *    documentation and/or other materials provided with the distribution.
14  *
15  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
16  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
19  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
20  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
21  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
22  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
23  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26  */
27 
28 #include "FullScreenVideoWidget.h"
29 
30 #include <QApplication>
31 #include <QCloseEvent>
32 #include <QDesktopWidget>
33 #include <QKeyEvent>
34 #include <QMediaPlayer>
35 
36 static const int gHideMouseCursorDelay = 3000;
37 
38 namespace WebCore {
39 
FullScreenVideoWidget()40 FullScreenVideoWidget::FullScreenVideoWidget()
41     : QVideoWidget()
42     , m_mediaPlayer(0)
43 {
44     QPalette palette(this->palette());
45     palette.setColor(QPalette::Base, Qt::black);
46     palette.setColor(QPalette::Background, Qt::black);
47     setPalette(palette);
48 
49     setWindowModality(Qt::ApplicationModal);
50     setWindowFlags(windowFlags() | Qt::FramelessWindowHint);
51 
52     setGeometry(QApplication::desktop()->screenGeometry());
53 
54     m_cursorTimer.setSingleShot(true);
55     connect(&m_cursorTimer, SIGNAL(timeout()), this, SLOT(hideCursor()));
56 }
57 
~FullScreenVideoWidget()58 FullScreenVideoWidget::~FullScreenVideoWidget()
59 {
60 }
61 
show(QMediaPlayer * player)62 void FullScreenVideoWidget::show(QMediaPlayer* player)
63 {
64     m_mediaPlayer = player;
65     showFullScreen();
66     setMouseTracking(true);
67     raise();
68     m_mediaPlayer->setVideoOutput(this);
69     setFocus();
70     grabMouse();
71     hideCursor();
72 }
73 
closeEvent(QCloseEvent * event)74 void FullScreenVideoWidget::closeEvent(QCloseEvent* event)
75 {
76     m_mediaPlayer = 0;
77     m_cursorTimer.stop();
78     setMouseTracking(false);
79     releaseMouse();
80     QApplication::restoreOverrideCursor();
81     event->ignore();
82     hide();
83     emit didExitFullScreen();
84 }
85 
event(QEvent * ev)86 bool FullScreenVideoWidget::event(QEvent* ev)
87 {
88     switch (ev->type()) {
89     case QEvent::MouseMove:
90         showCursor();
91         ev->accept();
92         return true;
93     case QEvent::MouseButtonDblClick:
94         close();
95         ev->accept();
96         return true;
97     default:
98         return QVideoWidget::event(ev);
99     }
100 }
101 
keyPressEvent(QKeyEvent * ev)102 void FullScreenVideoWidget::keyPressEvent(QKeyEvent* ev)
103 {
104     if (m_mediaPlayer && ev->key() == Qt::Key_Space) {
105         if (m_mediaPlayer->state() == QMediaPlayer::PlayingState)
106             m_mediaPlayer->pause();
107         else
108             m_mediaPlayer->play();
109     } else if (ev->key() == Qt::Key_Escape)
110         close();
111 }
112 
hideCursor()113 void FullScreenVideoWidget::hideCursor()
114 {
115     QApplication::setOverrideCursor(QCursor(Qt::BlankCursor));
116 }
117 
showCursor()118 void FullScreenVideoWidget::showCursor()
119 {
120     QApplication::restoreOverrideCursor();
121     m_cursorTimer.start(gHideMouseCursorDelay);
122 }
123 
124 }
125