void TiledDrawingAreaProxy::paint(const IntRect& rect, PlatformDrawingContext context) { if (m_isWaitingForDidSetFrameNotification) { WebPageProxy* page = this->page(); if (!page->isValid()) return; if (page->process()->isLaunching()) return; } adjustVisibleRect(); GraphicsContext gc(context); gc.save(); // Assumes the backing store is painted with the scale transform applied. // Since tile content is already scaled, first revert the scaling from the painter. gc.scale(FloatSize(1 / m_contentsScale, 1 / m_contentsScale)); IntRect dirtyRect = mapFromContents(rect); TiledDrawingAreaTile::Coordinate topLeft = tileCoordinateForPoint(dirtyRect.topLeft()); TiledDrawingAreaTile::Coordinate bottomRight = tileCoordinateForPoint(dirtyRect.bottomRight()); for (unsigned yCoordinate = topLeft.y(); yCoordinate <= bottomRight.y(); ++yCoordinate) { for (unsigned xCoordinate = topLeft.x(); xCoordinate <= bottomRight.x(); ++xCoordinate) { TiledDrawingAreaTile::Coordinate currentCoordinate(xCoordinate, yCoordinate); RefPtr<TiledDrawingAreaTile> currentTile = tileAt(currentCoordinate); if (currentTile && currentTile->isReadyToPaint()) currentTile->paint(&gc, dirtyRect); } } gc.restore(); }
void ChunkedUpdateDrawingAreaProxy::paint(const IntRect& rect, PlatformDrawingContext context) { if (m_isWaitingForDidSetFrameNotification) { WebPageProxy* page = this->page(); if (!page->isValid()) return; std::auto_ptr<CoreIPC::ArgumentDecoder> arguments = page->process()->connection()->waitFor(DrawingAreaProxyMessage::DidSetSize, page->pageID(), 0.04); if (arguments.get()) didReceiveMessage(page->process()->connection(), CoreIPC::MessageID(DrawingAreaProxyMessage::DidSetSize), *arguments.get()); } platformPaint(rect, context); }
void ChunkedUpdateDrawingAreaProxy::setSize(const IntSize& viewSize) { WebPageProxy* page = this->page(); if (!page->isValid()) return; if (viewSize.isEmpty()) return; m_viewSize = viewSize; m_lastSetViewSize = viewSize; if (m_isWaitingForDidSetFrameNotification) return; m_isWaitingForDidSetFrameNotification = true; page->process()->responsivenessTimer()->start(); page->process()->send(DrawingAreaMessage::SetSize, page->pageID(), CoreIPC::In(id(), viewSize)); }
void TiledDrawingAreaProxy::sizeDidChange() { WebPageProxy* page = this->page(); if (!page || !page->isValid()) return; if (m_size.isEmpty()) return; m_viewSize = m_size; m_lastSetViewSize = m_size; if (m_isWaitingForDidSetFrameNotification) return; m_isWaitingForDidSetFrameNotification = true; page->process()->responsivenessTimer()->start(); page->process()->send(DrawingAreaLegacyMessage::SetSize, page->pageID(), CoreIPC::In(m_size)); }
void LayerBackedDrawingAreaProxy::sizeDidChange() { WebPageProxy* page = this->page(); if (!page->isValid()) return; if (m_size.isEmpty()) return; m_lastSetViewSize = m_size; platformSetSize(); if (m_isWaitingForDidSetFrameNotification) return; m_isWaitingForDidSetFrameNotification = true; page->process()->send(DrawingAreaLegacyMessage::SetSize, page->pageID(), CoreIPC::In(info().identifier, m_size)); }
void ChunkedUpdateDrawingAreaProxy::setPageIsVisible(bool isVisible) { WebPageProxy* page = this->page(); if (isVisible == m_isVisible) return; m_isVisible = isVisible; if (!page->isValid()) return; if (!m_isVisible) { // Tell the web process that it doesn't need to paint anything for now. page->process()->send(DrawingAreaMessage::SuspendPainting, page->pageID(), CoreIPC::In(id())); return; } // The page is now visible, resume painting. page->process()->send(DrawingAreaMessage::ResumePainting, page->pageID(), CoreIPC::In(id(), m_forceRepaintWhenResumingPainting)); m_forceRepaintWhenResumingPainting = false; }
void LayerBackedDrawingAreaProxy::setPageIsVisible(bool isVisible) { WebPageProxy* page = this->page(); if (isVisible == m_isVisible) return; m_isVisible = isVisible; if (!page->isValid()) return; if (!m_isVisible) { // Tell the web process that it doesn't need to paint anything for now. page->process()->send(DrawingAreaLegacyMessage::SuspendPainting, page->pageID(), CoreIPC::In(info().identifier)); return; } // The page is now visible. page->process()->send(DrawingAreaLegacyMessage::ResumePainting, page->pageID(), CoreIPC::In(info().identifier)); // FIXME: We should request a full repaint here if needed. }