Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(37)

Side by Side Diff: Source/core/rendering/RenderPart.cpp

Issue 698743002: [WIP] Adding support for <iframe>s to slimming paint. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 2000 Simon Hausmann <hausmann@kde.org> 3 * (C) 2000 Simon Hausmann <hausmann@kde.org>
4 * (C) 2000 Stefan Schimanski (1Stein@gmx.de) 4 * (C) 2000 Stefan Schimanski (1Stein@gmx.de)
5 * Copyright (C) 2004, 2005, 2006, 2009 Apple Inc. All rights reserved. 5 * Copyright (C) 2004, 2005, 2006, 2009 Apple Inc. All rights reserved.
6 * Copyright (C) Research In Motion Limited 2011. All rights reserved. 6 * Copyright (C) Research In Motion Limited 2011. All rights reserved.
7 * 7 *
8 * This library is free software; you can redistribute it and/or 8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Library General Public 9 * modify it under the terms of the GNU Library General Public
10 * License as published by the Free Software Foundation; either 10 * License as published by the Free Software Foundation; either
(...skipping 11 matching lines...) Expand all
22 * 22 *
23 */ 23 */
24 24
25 #include "config.h" 25 #include "config.h"
26 #include "core/rendering/RenderPart.h" 26 #include "core/rendering/RenderPart.h"
27 27
28 #include "core/accessibility/AXObjectCache.h" 28 #include "core/accessibility/AXObjectCache.h"
29 #include "core/frame/FrameView.h" 29 #include "core/frame/FrameView.h"
30 #include "core/frame/LocalFrame.h" 30 #include "core/frame/LocalFrame.h"
31 #include "core/html/HTMLFrameElementBase.h" 31 #include "core/html/HTMLFrameElementBase.h"
32 #include "core/paint/BoxPainter.h" 32 #include "core/paint/PartPainter.h"
33 #include "core/plugins/PluginView.h" 33 #include "core/plugins/PluginView.h"
34 #include "core/rendering/GraphicsContextAnnotator.h"
35 #include "core/rendering/HitTestResult.h" 34 #include "core/rendering/HitTestResult.h"
36 #include "core/rendering/RenderLayer.h" 35 #include "core/rendering/RenderLayer.h"
37 #include "core/rendering/RenderView.h" 36 #include "core/rendering/RenderView.h"
38 #include "core/rendering/svg/RenderSVGRoot.h" 37 #include "core/rendering/svg/RenderSVGRoot.h"
39 38
40 namespace blink { 39 namespace blink {
41 40
42 RenderPart::RenderPart(Element* element) 41 RenderPart::RenderPart(Element* element)
43 : RenderReplaced(element) 42 : RenderReplaced(element)
44 #if !ENABLE(OILPAN) 43 #if !ENABLE(OILPAN)
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
218 217
219 void RenderPart::layout() 218 void RenderPart::layout()
220 { 219 {
221 ASSERT(needsLayout()); 220 ASSERT(needsLayout());
222 221
223 clearNeedsLayout(); 222 clearNeedsLayout();
224 } 223 }
225 224
226 void RenderPart::paint(PaintInfo& paintInfo, const LayoutPoint& paintOffset) 225 void RenderPart::paint(PaintInfo& paintInfo, const LayoutPoint& paintOffset)
227 { 226 {
228 ANNOTATE_GRAPHICS_CONTEXT(paintInfo, this); 227 PartPainter(*this).paint(paintInfo, paintOffset);
229
230 if (!shouldPaint(paintInfo, paintOffset))
231 return;
232
233 LayoutPoint adjustedPaintOffset = paintOffset + location();
234
235 if (hasBoxDecorationBackground() && (paintInfo.phase == PaintPhaseForeground || paintInfo.phase == PaintPhaseSelection))
236 paintBoxDecorationBackground(paintInfo, adjustedPaintOffset);
237
238 if (paintInfo.phase == PaintPhaseMask) {
239 paintMask(paintInfo, adjustedPaintOffset);
240 return;
241 }
242
243 if ((paintInfo.phase == PaintPhaseOutline || paintInfo.phase == PaintPhaseSe lfOutline) && style()->hasOutline())
244 paintOutline(paintInfo, LayoutRect(adjustedPaintOffset, size()));
245
246 if (paintInfo.phase != PaintPhaseForeground)
247 return;
248
249 if (style()->hasBorderRadius()) {
250 LayoutRect borderRect = LayoutRect(adjustedPaintOffset, size());
251
252 if (borderRect.isEmpty())
253 return;
254
255 // Push a clip if we have a border radius, since we want to round the fo reground content that gets painted.
256 paintInfo.context->save();
257 RoundedRect roundedInnerRect = style()->getRoundedInnerBorderFor(borderR ect,
258 paddingTop() + borderTop(), paddingBottom() + borderBottom(), paddin gLeft() + borderLeft(), paddingRight() + borderRight(), true, true);
259 BoxPainter::clipRoundedInnerRect(paintInfo.context, borderRect, roundedI nnerRect);
260 }
261
262 if (this->widget())
263 paintContents(paintInfo, paintOffset);
264
265 if (style()->hasBorderRadius())
266 paintInfo.context->restore();
267
268 // Paint a partially transparent wash over selected widgets.
269 if (isSelected() && !document().printing()) {
270 LayoutRect rect = localSelectionRect();
271 rect.moveBy(adjustedPaintOffset);
272 paintInfo.context->fillRect(pixelSnappedIntRect(rect), selectionBackgrou ndColor());
273 }
274
275 if (canResize())
276 layer()->scrollableArea()->paintResizer(paintInfo.context, roundedIntPoi nt(adjustedPaintOffset), paintInfo.rect);
277 }
278
279 void RenderPart::paintContents(PaintInfo& paintInfo, const LayoutPoint& paintOff set)
280 {
281 LayoutPoint adjustedPaintOffset = paintOffset + location();
282
283 Widget* widget = this->widget();
284 RELEASE_ASSERT(widget);
285
286 // Tell the widget to paint now. This is the only time the widget is allowed
287 // to paint itself. That way it will composite properly with z-indexed layer s.
288 IntPoint widgetLocation = widget->frameRect().location();
289 IntPoint paintLocation(roundToInt(adjustedPaintOffset.x() + borderLeft() + p addingLeft()),
290 roundToInt(adjustedPaintOffset.y() + borderTop() + paddingTop()));
291 IntRect paintRect = paintInfo.rect;
292
293 IntSize widgetPaintOffset = paintLocation - widgetLocation;
294 // When painting widgets into compositing layers, tx and ty are relative to the enclosing compositing layer,
295 // not the root. In this case, shift the CTM and adjust the paintRect to be root-relative to fix plug-in drawing.
296 if (!widgetPaintOffset.isZero()) {
297 paintInfo.context->translate(widgetPaintOffset.width(), widgetPaintOffse t.height());
298 paintRect.move(-widgetPaintOffset);
299 }
300 widget->paint(paintInfo.context, paintRect);
301
302 if (!widgetPaintOffset.isZero())
303 paintInfo.context->translate(-widgetPaintOffset.width(), -widgetPaintOff set.height());
304 } 228 }
305 229
306 CursorDirective RenderPart::getCursor(const LayoutPoint& point, Cursor& cursor) const 230 CursorDirective RenderPart::getCursor(const LayoutPoint& point, Cursor& cursor) const
307 { 231 {
308 if (widget() && widget()->isPluginView()) { 232 if (widget() && widget()->isPluginView()) {
309 // A plug-in is responsible for setting the cursor when the pointer is o ver it. 233 // A plug-in is responsible for setting the cursor when the pointer is o ver it.
310 return DoNotSetCursor; 234 return DoNotSetCursor;
311 } 235 }
312 return RenderReplaced::getCursor(point, cursor); 236 return RenderReplaced::getCursor(point, cursor);
313 } 237 }
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
395 if (widget->frameRect() == newFrame) 319 if (widget->frameRect() == newFrame)
396 return false; 320 return false;
397 321
398 RefPtrWillBeRawPtr<RenderPart> protector(this); 322 RefPtrWillBeRawPtr<RenderPart> protector(this);
399 RefPtrWillBeRawPtr<Node> protectedNode(node()); 323 RefPtrWillBeRawPtr<Node> protectedNode(node());
400 widget->setFrameRect(newFrame); 324 widget->setFrameRect(newFrame);
401 return widget->frameRect().size() != newFrame.size(); 325 return widget->frameRect().size() != newFrame.size();
402 } 326 }
403 327
404 } 328 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698