summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/phonon/phonon/videowidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/phonon/phonon/videowidget.cpp')
-rw-r--r--src/3rdparty/phonon/phonon/videowidget.cpp183
1 files changed, 183 insertions, 0 deletions
diff --git a/src/3rdparty/phonon/phonon/videowidget.cpp b/src/3rdparty/phonon/phonon/videowidget.cpp
new file mode 100644
index 0000000000..63f68997a4
--- /dev/null
+++ b/src/3rdparty/phonon/phonon/videowidget.cpp
@@ -0,0 +1,183 @@
+/* This file is part of the KDE project
+ Copyright (C) 2005-2007 Matthias Kretz <kretz@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) version 3, or any
+ later version accepted by the membership of KDE e.V. (or its
+ successor approved by the membership of KDE e.V.), Trolltech ASA
+ (or its successors, if any) and the KDE Free Qt Foundation, which shall
+ act as a proxy defined in Section 6 of version 3 of the license.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#include "videowidget.h"
+#include "videowidget_p.h"
+#include "videowidgetinterface.h"
+#include "factory_p.h"
+#include "phonondefs_p.h"
+#include "phononnamespace_p.h"
+
+#include <QtGui/QAction>
+
+#define PHONON_INTERFACENAME VideoWidgetInterface
+
+QT_BEGIN_NAMESPACE
+
+#ifndef QT_NO_PHONON_VIDEO
+
+namespace Phonon
+{
+
+VideoWidget::VideoWidget(QWidget *parent)
+ : QWidget(parent)
+ , Phonon::AbstractVideoOutput(*new VideoWidgetPrivate(this))
+{
+ K_D(VideoWidget);
+ d->init();
+ d->createBackendObject();
+ setMouseTracking(true);
+}
+
+VideoWidget::VideoWidget(VideoWidgetPrivate &dd, QWidget *parent)
+ : QWidget(parent),
+ Phonon::AbstractVideoOutput(dd)
+{
+ K_D(VideoWidget);
+ d->init();
+}
+
+void VideoWidgetPrivate::init()
+{
+ Q_Q(VideoWidget);
+ changeFlags = q->windowFlags() & (Qt::SubWindow | Qt::Window);
+}
+
+void VideoWidget::mouseMoveEvent(QMouseEvent *e)
+{
+ QWidget::mouseMoveEvent(e);
+}
+
+void VideoWidgetPrivate::createBackendObject()
+{
+ if (m_backendObject)
+ return;
+ Q_Q(VideoWidget);
+ m_backendObject = Factory::createVideoWidget(q);
+ if (m_backendObject) {
+ setupBackendObject();
+ }
+}
+
+#define PHONON_CLASSNAME VideoWidget
+
+PHONON_INTERFACE_GETTER(Phonon::VideoWidget::AspectRatio, aspectRatio, d->aspectRatio)
+PHONON_INTERFACE_SETTER(setAspectRatio, aspectRatio, Phonon::VideoWidget::AspectRatio)
+
+PHONON_INTERFACE_GETTER(Phonon::VideoWidget::ScaleMode, scaleMode, d->scaleMode)
+PHONON_INTERFACE_SETTER(setScaleMode, scaleMode, Phonon::VideoWidget::ScaleMode)
+
+PHONON_INTERFACE_GETTER(qreal, brightness, d->brightness)
+PHONON_INTERFACE_SETTER(setBrightness, brightness, qreal)
+
+PHONON_INTERFACE_GETTER(qreal, contrast, d->contrast)
+PHONON_INTERFACE_SETTER(setContrast, contrast, qreal)
+
+PHONON_INTERFACE_GETTER(qreal, hue, d->hue)
+PHONON_INTERFACE_SETTER(setHue, hue, qreal)
+
+PHONON_INTERFACE_GETTER(qreal, saturation, d->saturation)
+PHONON_INTERFACE_SETTER(setSaturation, saturation, qreal)
+
+void VideoWidget::setFullScreen(bool newFullScreen)
+{
+ pDebug() << Q_FUNC_INFO << newFullScreen;
+ K_D(VideoWidget);
+ // TODO: disable screensaver? or should we leave that responsibility to the
+ // application?
+ Qt::WindowFlags flags = windowFlags();
+ if (newFullScreen) {
+ if (!isFullScreen()) {
+ //we only update that value if it is not already fullscreen
+ d->changeFlags = flags & (Qt::Window | Qt::SubWindow);
+ flags |= Qt::Window;
+ flags ^= Qt::SubWindow;
+ setWindowFlags(flags);
+#ifdef Q_WS_X11
+ // This works around a bug with Compiz
+ // as the window must be visible before we can set the state
+ show();
+ raise();
+ setWindowState( windowState() | Qt::WindowFullScreen ); // set
+#else
+ setWindowState( windowState() | Qt::WindowFullScreen ); // set
+ show();
+#endif
+ }
+ } else if (isFullScreen()) {
+ flags ^= (Qt::Window | Qt::SubWindow); //clear the flags...
+ flags |= d->changeFlags; //then we reset the flags (window and subwindow)
+ setWindowFlags(flags);
+ setWindowState( windowState() ^ Qt::WindowFullScreen ); // reset
+ show();
+ }
+}
+
+void VideoWidget::exitFullScreen()
+{
+ setFullScreen(false);
+}
+
+void VideoWidget::enterFullScreen()
+{
+ setFullScreen(true);
+}
+
+bool VideoWidgetPrivate::aboutToDeleteBackendObject()
+{
+ aspectRatio = pINTERFACE_CALL(aspectRatio());
+ scaleMode = pINTERFACE_CALL(scaleMode());
+ return AbstractVideoOutputPrivate::aboutToDeleteBackendObject();
+}
+
+void VideoWidgetPrivate::setupBackendObject()
+{
+ Q_Q(VideoWidget);
+ Q_ASSERT(m_backendObject);
+ //AbstractVideoOutputPrivate::setupBackendObject();
+ pDebug() << "calling setAspectRatio on the backend " << aspectRatio;
+ pINTERFACE_CALL(setAspectRatio(aspectRatio));
+ pINTERFACE_CALL(setScaleMode(scaleMode));
+
+ QWidget *w = pINTERFACE_CALL(widget());
+ if (w) {
+ layout.addWidget(w);
+ q->setSizePolicy(w->sizePolicy());
+ w->setMouseTracking(true);
+ }
+}
+
+bool VideoWidget::event(QEvent *e)
+{
+ return QWidget::event(e);
+}
+
+} //namespace Phonon
+
+#endif //QT_NO_PHONON_VIDEO
+
+QT_END_NAMESPACE
+
+#include "moc_videowidget.cpp"
+
+#undef PHONON_CLASSNAME
+// vim: sw=4 ts=4 tw=80