ThreadedCoordinatedLayerTreeHost.cpp [plain text]
#include "config.h"
#include "ThreadedCoordinatedLayerTreeHost.h"
#if USE(COORDINATED_GRAPHICS_THREADED)
#include "WebPage.h"
#include <WebCore/FrameView.h>
#include <WebCore/MainFrame.h>
using namespace WebCore;
namespace WebKit {
Ref<ThreadedCoordinatedLayerTreeHost> ThreadedCoordinatedLayerTreeHost::create(WebPage& webPage)
{
return adoptRef(*new ThreadedCoordinatedLayerTreeHost(webPage));
}
ThreadedCoordinatedLayerTreeHost::~ThreadedCoordinatedLayerTreeHost()
{
}
ThreadedCoordinatedLayerTreeHost::ThreadedCoordinatedLayerTreeHost(WebPage& webPage)
: CoordinatedLayerTreeHost(webPage)
, m_compositorClient(*this)
, m_compositor(ThreadedCompositor::create(&m_compositorClient))
{
}
void ThreadedCoordinatedLayerTreeHost::scrollNonCompositedContents(const WebCore::IntRect& rect)
{
m_compositor->scrollTo(rect.location());
scheduleLayerFlush();
}
void ThreadedCoordinatedLayerTreeHost::contentsSizeChanged(const WebCore::IntSize& newSize)
{
m_compositor->didChangeContentsSize(newSize);
}
void ThreadedCoordinatedLayerTreeHost::deviceOrPageScaleFactorChanged()
{
CoordinatedLayerTreeHost::deviceOrPageScaleFactorChanged();
m_compositor->setDeviceScaleFactor(m_webPage.deviceScaleFactor());
}
void ThreadedCoordinatedLayerTreeHost::sizeDidChange(const IntSize& size)
{
CoordinatedLayerTreeHost::sizeDidChange(size);
m_compositor->didChangeViewportSize(size);
}
void ThreadedCoordinatedLayerTreeHost::didChangeViewportProperties(const WebCore::ViewportAttributes& attr)
{
m_compositor->didChangeViewportAttribute(attr);
}
void ThreadedCoordinatedLayerTreeHost::didScaleFactorChanged(float scale, const IntPoint& origin)
{
m_webPage.scalePage(scale, origin);
}
#if PLATFORM(GTK)
void ThreadedCoordinatedLayerTreeHost::setNativeSurfaceHandleForCompositing(uint64_t handle)
{
m_layerTreeContext.contextID = handle;
m_compositor->setNativeSurfaceHandleForCompositing(handle);
scheduleLayerFlush();
}
#endif
void ThreadedCoordinatedLayerTreeHost::setVisibleContentsRect(const FloatRect& rect, const FloatPoint& trajectoryVector, float scale)
{
CoordinatedLayerTreeHost::setVisibleContentsRect(rect, trajectoryVector);
if (m_lastScrollPosition != roundedIntPoint(rect.location())) {
m_lastScrollPosition = roundedIntPoint(rect.location());
if (!m_webPage.corePage()->mainFrame().view()->useFixedLayout())
m_webPage.corePage()->mainFrame().view()->notifyScrollPositionChanged(m_lastScrollPosition);
}
if (m_lastScaleFactor != scale) {
m_lastScaleFactor = scale;
didScaleFactorChanged(m_lastScaleFactor, m_lastScrollPosition);
}
}
void ThreadedCoordinatedLayerTreeHost::commitSceneState(const CoordinatedGraphicsState& state)
{
CoordinatedLayerTreeHost::commitSceneState(state);
m_compositor->updateSceneState(state);
}
}
#endif // USE(COORDINATED_GRAPHICS)