void paintPageOverlay(const PageOverlay&, GraphicsContext& graphicsContext, const WebSize& webViewSize) const override { if (m_overlay->isEmpty()) return; FrameView* view = m_overlay->overlayMainFrame()->view(); DCHECK(!view->needsLayout()); view->paint(graphicsContext, CullRect(IntRect(0, 0, view->width(), view->height()))); }
void FramePainter::paintScrollbar(GraphicsContext& context, Scrollbar& bar, const IntRect& rect) { bool needsBackground = bar.isCustomScrollbar() && frameView().frame().isMainFrame(); if (needsBackground) { IntRect toFill = bar.frameRect(); toFill.intersect(rect); context.fillRect(toFill, frameView().baseBackgroundColor()); } bar.paint(context, CullRect(rect)); }
void paintPageOverlay(const PageOverlay&, GraphicsContext& graphicsContext, const WebSize& webViewSize) const override { if (m_overlay->isEmpty()) return; // Skip cache because the following paint may conflict with the view's real painting. DisplayItemCacheSkipper cacheSkipper(graphicsContext); FrameView* view = m_overlay->overlayMainFrame()->view(); ASSERT(!view->needsLayout()); view->paint(graphicsContext, CullRect(IntRect(0, 0, view->width(), view->height()))); }
static void paintScrollbar(const Scrollbar* scrollbar, GraphicsContext& context, const IntRect& clip) { if (!scrollbar) return; // Frame scrollbars are painted in the space of the containing frame, not the local space of the scrollbar. const IntPoint& paintOffset = scrollbar->frameRect().location(); IntRect transformedClip = clip; transformedClip.moveBy(paintOffset); AffineTransform translation; translation.translate(-paintOffset.x(), -paintOffset.y()); TransformRecorder transformRecorder(context, *scrollbar, translation); scrollbar->paint(context, CullRect(transformedClip)); }
void SVGImage::drawInternal(SkCanvas* canvas, const SkPaint& paint, const FloatRect& dstRect, const FloatRect& srcRect, RespectImageOrientationEnum, ImageClampingMode, const KURL& url) { FrameView* view = frameView(); view->resize(containerSize()); // Always call processUrlFragment, even if the url is empty, because // there may have been a previous url/fragment that needs to be reset. view->processUrlFragment(url); SkPictureBuilder imagePicture(dstRect); { ClipRecorder clipRecorder(imagePicture.context(), *this, DisplayItem::ClipNodeImage, LayoutRect(enclosingIntRect(dstRect))); // We can only draw the entire frame, clipped to the rect we want. So compute where the top left // of the image would be if we were drawing without clipping, and translate accordingly. FloatSize scale(dstRect.width() / srcRect.width(), dstRect.height() / srcRect.height()); FloatSize topLeftOffset(srcRect.location().x() * scale.width(), srcRect.location().y() * scale.height()); FloatPoint destOffset = dstRect.location() - topLeftOffset; AffineTransform transform = AffineTransform::translation(destOffset.x(), destOffset.y()); transform.scale(scale.width(), scale.height()); TransformRecorder transformRecorder(imagePicture.context(), *this, transform); view->updateAllLifecyclePhases(); view->paint(imagePicture.context(), CullRect(enclosingIntRect(srcRect))); ASSERT(!view->needsLayout()); } { SkAutoCanvasRestore ar(canvas, false); if (drawNeedsLayer(paint)) { SkRect layerRect = dstRect; canvas->saveLayer(&layerRect, &paint); } RefPtr<const SkPicture> recording = imagePicture.endRecording(); canvas->drawPicture(recording.get()); } if (imageObserver()) imageObserver()->didDraw(this); // Start any (SMIL) animations if needed. This will restart or continue // animations if preceded by calls to resetAnimation or stopAnimation // respectively. startAnimation(); }