Commit a9fac0b8 authored by ariya@webkit.org's avatar ariya@webkit.org

2009-04-22 Kenneth Rohde Christiansen <kenneth.christiansen@openbossa.org>

        Reviewed by Ariya Hidayat.

        Made windowed plugins move/resize synchronized with the painting, so
        that windowed plugins are not moved before the rest of the parent
        frame during scrolling.

        * plugins/qt/PluginContainerQt.cpp:
        (PluginContainerQt::PluginContainerQt):
        (PluginContainerQt::requestGeometry):
        (PluginContainerQt::adjustGeometry):
        * plugins/qt/PluginContainerQt.h:
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::updatePluginWidget):
        (WebCore::PluginView::paint):

git-svn-id: svn://svn.chromium.org/blink/trunk@42749 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent 1e07dedb
2009-04-22 Kenneth Rohde Christiansen <kenneth.christiansen@openbossa.org>
Reviewed by Ariya Hidayat.
Made windowed plugins move/resize synchronized with the painting, so
that windowed plugins are not moved before the rest of the parent
frame during scrolling.
* plugins/qt/PluginContainerQt.cpp:
(PluginContainerQt::PluginContainerQt):
(PluginContainerQt::requestGeometry):
(PluginContainerQt::adjustGeometry):
* plugins/qt/PluginContainerQt.h:
* plugins/qt/PluginViewQt.cpp:
(WebCore::PluginView::updatePluginWidget):
(WebCore::PluginView::paint):
2009-04-22 Simon Hausmann <simon.hausmann@nokia.com> 2009-04-22 Simon Hausmann <simon.hausmann@nokia.com>
Reviewed by Ariya Hidayat. Reviewed by Ariya Hidayat.
...@@ -24,15 +24,36 @@ ...@@ -24,15 +24,36 @@
#include "Frame.h" #include "Frame.h"
#include "FrameView.h" #include "FrameView.h"
#include "Page.h" #include "Page.h"
#include "PlatformKeyboardEvent.h"
#include "PluginView.h" #include "PluginView.h"
using namespace WebCore; using namespace WebCore;
PluginContainerQt::PluginContainerQt(PluginView* view, QWidget* parent) PluginContainerQt::PluginContainerQt(PluginView* view, QWidget* parent)
: QX11EmbedContainer(parent), m_pluginView(view) : QX11EmbedContainer(parent)
, m_pluginView(view)
, m_hasPendingGeometryChange(false)
{ {
} }
void PluginContainerQt::requestGeometry(const QRect& rect, const QRegion& clip)
{
if (m_windowRect != rect || m_clipRegion != clip) {
m_windowRect = rect;
m_clipRegion = clip;
m_hasPendingGeometryChange = true;
}
}
void PluginContainerQt::adjustGeometry()
{
if (m_hasPendingGeometryChange) {
setGeometry(m_windowRect);
setMask(m_clipRegion);
m_hasPendingGeometryChange = false;
}
}
void PluginContainerQt::focusInEvent(QFocusEvent* event) void PluginContainerQt::focusInEvent(QFocusEvent* event)
{ {
if (Page* page = m_pluginView->parentFrame()->page()) if (Page* page = m_pluginView->parentFrame()->page())
......
...@@ -31,12 +31,20 @@ namespace WebCore { ...@@ -31,12 +31,20 @@ namespace WebCore {
public: public:
PluginContainerQt(PluginView*, QWidget* parent); PluginContainerQt(PluginView*, QWidget* parent);
void requestGeometry(const QRect&, const QRegion& clip = QRegion());
void adjustGeometry();
protected: protected:
virtual void focusInEvent(QFocusEvent*); virtual void focusInEvent(QFocusEvent*);
virtual void focusOutEvent(QFocusEvent*); virtual void focusOutEvent(QFocusEvent*);
private: private:
PluginView* m_pluginView; PluginView* m_pluginView;
QRect m_windowRect;
QRegion m_clipRegion;
bool m_hasPendingGeometryChange;
}; };
} }
......
...@@ -88,11 +88,19 @@ void PluginView::updatePluginWidget() ...@@ -88,11 +88,19 @@ void PluginView::updatePluginWidget()
m_clipRect = windowClipRect(); m_clipRect = windowClipRect();
m_clipRect.move(-m_windowRect.x(), -m_windowRect.y()); m_clipRect.move(-m_windowRect.x(), -m_windowRect.y());
if (platformPluginWidget()) { if (!platformPluginWidget())
platformPluginWidget()->move(m_windowRect.x(), m_windowRect.y()); return;
platformPluginWidget()->resize(m_windowRect.width(), m_windowRect.height());
platformPluginWidget()->setMask(QRegion(m_clipRect.x(), m_clipRect.y(), m_clipRect.width(), m_clipRect.height())); PluginContainerQt* container = static_cast<PluginContainerQt*>(platformPluginWidget());
}
container->requestGeometry(m_windowRect, QRegion(m_clipRect));
// in order to move/resize the plugin window at the same time as the rest of frame
// during e.g. scrolling, we set the mask and geometry in the paint() function, but
// as paint() isn't called when the plugin window is outside the frame which can
// be caused by a scroll, we need to move/resize immediately.
if (!m_windowRect.intersects(frameView->frameRect()))
container->adjustGeometry();
} }
void PluginView::setFocus() void PluginView::setFocus()
...@@ -130,10 +138,11 @@ void PluginView::paint(GraphicsContext* context, const IntRect& rect) ...@@ -130,10 +138,11 @@ void PluginView::paint(GraphicsContext* context, const IntRect& rect)
return; return;
} }
if (m_isWindowed || context->paintingDisabled()) if (context->paintingDisabled())
return; return;
notImplemented(); if (m_isWindowed && platformPluginWidget())
static_cast<PluginContainerQt*>(platformPluginWidget())->adjustGeometry();
} }
void PluginView::handleKeyboardEvent(KeyboardEvent* event) void PluginView::handleKeyboardEvent(KeyboardEvent* event)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment