qtmobility/plugins/multimedia/wmp/qwmpvideooverlay.cpp
changeset 4 90517678cc4f
parent 1 2b40d63a9c3d
child 11 06b8e2af4411
--- a/qtmobility/plugins/multimedia/wmp/qwmpvideooverlay.cpp	Fri Apr 16 15:51:22 2010 +0300
+++ b/qtmobility/plugins/multimedia/wmp/qwmpvideooverlay.cpp	Mon May 03 13:18:40 2010 +0300
@@ -48,7 +48,7 @@
     , m_player(player)
     , m_object(object)
     , m_inPlaceObject(0)
-    , m_aspectRatioMode(QVideoWidget::KeepAspectRatio)
+    , m_aspectRatioMode(Qt::KeepAspectRatio)
     , m_enabled(false)
 {
     HRESULT hr;
@@ -120,8 +120,27 @@
 
         m_object->SetExtent(DVASPECT_CONTENT, &hmSize);
 
-        RECT rcPos = { rect.left(), rect.top(), rect.right(), rect.bottom() };
-        m_inPlaceObject->SetObjectRects(&rcPos, &rcPos);
+        RECT rcClip = { rect.left(), rect.top(), rect.right(), rect.bottom() };
+
+        if (m_aspectRatioMode == Qt::KeepAspectRatioByExpanding) {
+            QSize size = m_sizeHint;
+            size.scale(rect.width(), rect.height(), Qt::KeepAspectRatioByExpanding);
+
+            QRect positionRect(QPoint(0, 0), size);
+            positionRect.moveCenter(rect.center());
+
+            RECT rcPos = 
+            { 
+                positionRect.left(),
+                positionRect.top(),
+                positionRect.right(),
+                positionRect.bottom()
+            };
+
+            m_inPlaceObject->SetObjectRects(&rcPos, &rcClip);
+        } else {
+            m_inPlaceObject->SetObjectRects(&rcClip, &rcClip);
+        }
     }
 
     m_displayRect = rect;
@@ -153,27 +172,18 @@
     }
 }
 
-QVideoWidget::AspectRatioMode QWmpVideoOverlay::aspectRatioMode() const
+Qt::AspectRatioMode QWmpVideoOverlay::aspectRatioMode() const
 {
     return m_aspectRatioMode;
 }
 
-void QWmpVideoOverlay::setAspectRatioMode(QVideoWidget::AspectRatioMode mode)
+void QWmpVideoOverlay::setAspectRatioMode(Qt::AspectRatioMode mode)
 {
-        switch (mode) {
-        case QVideoWidget::KeepAspectRatio:
-        m_player->put_stretchToFit(FALSE);
+    m_aspectRatioMode = mode;
 
-        m_aspectRatioMode = mode;
-        break;
-    case QVideoWidget::IgnoreAspectRatio:
-        m_player->put_stretchToFit(TRUE);
+    m_player->put_stretchToFit(mode != Qt::KeepAspectRatio);
 
-        m_aspectRatioMode = mode;
-        break;
-    default:
-        break;
-    }
+    setDisplayRect(m_displayRect);
 }
 
 void QWmpVideoOverlay::repaint()
@@ -283,10 +293,30 @@
     QueryInterface(IID_IOleInPlaceUIWindow, reinterpret_cast<void **>(ppDoc));
 
     if (m_enabled) {
-        QRect rect = displayRect();
+        SetRect(lprcClipRect,
+                m_displayRect.left(),
+                m_displayRect.top(),
+                m_displayRect.right(),
+                m_displayRect.bottom());
 
-        SetRect(lprcPosRect, rect.left(), rect.top(), rect.right(), rect.bottom());
-        SetRect(lprcClipRect, rect.left(), rect.top(), rect.right(), rect.bottom());
+        if (m_aspectRatioMode == Qt::KeepAspectRatioByExpanding) {
+            QSize size = m_sizeHint;
+            size.scale(
+                m_displayRect.width(),
+                m_displayRect.height(),
+                Qt::KeepAspectRatioByExpanding);
+
+            QRect positionRect(QPoint(0, 0), size);
+            positionRect.moveCenter(m_displayRect.center());
+
+            SetRect(lprcPosRect,
+                    positionRect.left(),
+                    positionRect.top(),
+                    positionRect.right(),
+                    positionRect.bottom());
+        } else {
+            *lprcPosRect = *lprcClipRect;
+        }
     } else {
         SetRectEmpty(lprcPosRect);
         SetRectEmpty(lprcClipRect);