source: trunk/src/3rdparty/phonon/mmf/videooutput_dsa.cpp

Last change on this file was 769, checked in by Dmitry A. Kuminov, 15 years ago

trunk: Merged in qt 4.6.3 sources from branches/vendor/nokia/qt.

File size: 5.2 KB
Line 
1/* This file is part of the KDE project.
2
3Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
4
5This library is free software: you can redistribute it and/or modify
6it under the terms of the GNU Lesser General Public License as published by
7the Free Software Foundation, either version 2.1 or 3 of the License.
8
9This library is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU Lesser General Public License for more details.
13
14You should have received a copy of the GNU Lesser General Public License
15along with this library. If not, see <http://www.gnu.org/licenses/>.
16
17*/
18
19#include <QtCore/private/qcore_symbian_p.h> // for qt_TRect2QRect
20#include <QtGui/private/qwidget_p.h> // to access QWExtra
21#include <QResizeEvent>
22#include <QMoveEvent>
23
24#include <coemain.h> // for CCoeEnv
25
26#include "ancestormovemonitor.h"
27#include "utils.h"
28#include "videooutput_dsa.h"
29
30QT_BEGIN_NAMESPACE
31
32using namespace Phonon;
33using namespace Phonon::MMF;
34
35DsaVideoOutput::DsaVideoOutput(QWidget *parent)
36 : AbstractVideoOutput(parent)
37 , m_ancestorMoveMonitor(0)
38{
39 TRACE_CONTEXT(DsaVideoOutput::DsaVideoOutput, EVideoInternal);
40 TRACE_ENTRY("parent 0x%08x", parent);
41
42 setPalette(QPalette(Qt::black));
43 setAttribute(Qt::WA_OpaquePaintEvent, true);
44 setAttribute(Qt::WA_NoSystemBackground, true);
45 setAutoFillBackground(false);
46
47 qt_widget_private(this)->extraData()->nativePaintMode = QWExtra::ZeroFill;
48 qt_widget_private(this)->extraData()->receiveNativePaintEvents = true;
49
50 getVideoWindowScreenRect();
51
52 dump();
53
54 TRACE_EXIT_0();
55}
56
57DsaVideoOutput::~DsaVideoOutput()
58{
59 TRACE_CONTEXT(DsaVideoOutput::~DsaVideoOutput, EVideoInternal);
60 TRACE_ENTRY_0();
61
62 m_ancestorMoveMonitor->unRegisterTarget(this);
63
64 TRACE_EXIT_0();
65}
66
67//-----------------------------------------------------------------------------
68// Public functions
69//-----------------------------------------------------------------------------
70
71void MMF::DsaVideoOutput::setAncestorMoveMonitor(AncestorMoveMonitor *monitor)
72{
73 m_ancestorMoveMonitor = monitor;
74 registerForAncestorMoved();
75}
76
77const QRect& MMF::DsaVideoOutput::videoWindowScreenRect() const
78{
79 return m_videoWindowScreenRect;
80}
81
82void MMF::DsaVideoOutput::ancestorMoved()
83{
84 TRACE_CONTEXT(DsaVideoOutput::ancestorMoved, EVideoInternal);
85 TRACE_ENTRY_0();
86
87 RWindowBase *const window = videoWindow();
88
89 if (window) {
90 const TPoint newWindowPosSymbian = window->AbsPosition();
91 const QPoint newWindowPos(newWindowPosSymbian.iX, newWindowPosSymbian.iY);
92
93 if (newWindowPos != m_videoWindowScreenRect.topLeft()) {
94 m_videoWindowScreenRect.moveTo(newWindowPos);
95 emit videoWindowScreenRectChanged();
96 }
97 }
98
99 TRACE_EXIT_0();
100}
101
102void MMF::DsaVideoOutput::beginNativePaintEvent(const QRect & /*controlRect*/)
103{
104 TRACE_CONTEXT(DsaVideoOutput::beginNativePaintEvent, EVideoInternal);
105 TRACE_ENTRY_0();
106
107 emit beginVideoWindowNativePaint();
108}
109
110void MMF::DsaVideoOutput::endNativePaintEvent(const QRect & /*controlRect*/)
111{
112 TRACE_CONTEXT(DsaVideoOutput::endNativePaintEvent, EVideoInternal);
113 TRACE_ENTRY_0();
114
115 // Ensure that draw ops are executed into the WSERV output framebuffer
116 CCoeEnv::Static()->WsSession().Flush();
117
118 emit endVideoWindowNativePaint();
119}
120
121//-----------------------------------------------------------------------------
122// Private functions
123//-----------------------------------------------------------------------------
124
125void MMF::DsaVideoOutput::getVideoWindowScreenRect()
126{
127 RWindowBase *const window = videoWindow();
128 if (window)
129 m_videoWindowScreenRect =
130 qt_TRect2QRect(TRect(window->AbsPosition(), window->Size()));
131}
132
133void MMF::DsaVideoOutput::registerForAncestorMoved()
134{
135 m_ancestorMoveMonitor->registerTarget(this);
136}
137
138void MMF::DsaVideoOutput::resizeEvent(QResizeEvent *event)
139{
140 TRACE_CONTEXT(DsaVideoOutput::resizeEvent, EVideoInternal);
141 TRACE("%d %d -> %d %d",
142 event->oldSize().width(), event->oldSize().height(),
143 event->size().width(), event->size().height());
144
145 if (event->size() != event->oldSize()) {
146 m_videoWindowScreenRect.setSize(event->size());
147 emit videoWindowScreenRectChanged();
148 }
149}
150
151void MMF::DsaVideoOutput::moveEvent(QMoveEvent *event)
152{
153 TRACE_CONTEXT(DsaVideoOutput::moveEvent, EVideoInternal);
154 TRACE("%d %d -> %d %d",
155 event->oldPos().x(), event->oldPos().y(),
156 event->pos().x(), event->pos().y());
157
158 if (event->pos() != event->oldPos()) {
159 m_videoWindowScreenRect.moveTo(event->pos());
160 emit videoWindowScreenRectChanged();
161 }
162}
163
164bool MMF::DsaVideoOutput::event(QEvent *event)
165{
166 TRACE_CONTEXT(DsaVideoOutput::event, EVideoInternal);
167
168 if (event->type() == QEvent::WinIdChange) {
169 TRACE_0("WinIdChange");
170 getVideoWindowScreenRect();
171 emit videoWindowChanged();
172 return true;
173 } else if (event->type() == QEvent::ParentChange) {
174 // Tell ancestor move monitor to update ancestor list for this widget
175 registerForAncestorMoved();
176 return true;
177 } else {
178 return QWidget::event(event);
179 }
180}
181
182QT_END_NAMESPACE
183
Note: See TracBrowser for help on using the repository browser.