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

Unified Diff: third_party/WebKit/WebCore/inspector/InspectorController.cpp

Issue 10670: Do another merge using nifty new merge script (CL for that coming soon). (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 12 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/WebCore/inspector/InspectorController.cpp
===================================================================
--- third_party/WebKit/WebCore/inspector/InspectorController.cpp (revision 5296)
+++ third_party/WebKit/WebCore/inspector/InspectorController.cpp (working copy)
@@ -2645,44 +2645,69 @@
}
#endif
-static void drawOutlinedRect(GraphicsContext& context, const IntRect& rect, const Color& fillColor)
+static void drawOutlinedQuad(GraphicsContext& context, const FloatQuad& quad, const Color& fillColor)
{
- static const int outlineThickness = 1;
+ static const int outlineThickness = 2;
static const Color outlineColor(62, 86, 180, 228);
- IntRect outline = rect;
- outline.inflate(outlineThickness);
+ Path quadPath;
+ quadPath.moveTo(quad.p1());
+ quadPath.addLineTo(quad.p2());
+ quadPath.addLineTo(quad.p3());
+ quadPath.addLineTo(quad.p4());
+ quadPath.closeSubpath();
+
+ // Clear the quad
+ {
+ context.save();
+ context.setCompositeOperation(CompositeClear);
+ context.addPath(quadPath);
+ context.fillPath();
+ context.restore();
+ }
- context.clearRect(outline);
+ // Clip out the quad, then draw with a 2px stroke to get a pixel
+ // of outline (because inflating a quad is hard)
+ {
+ context.save();
+ context.addPath(quadPath);
+ context.clipOut(quadPath);
- context.save();
- context.clipOut(rect);
- context.fillRect(outline, outlineColor);
- context.restore();
+ context.addPath(quadPath);
+ context.setStrokeThickness(outlineThickness);
+ context.setStrokeColor(outlineColor);
+ context.strokePath();
- context.fillRect(rect, fillColor);
+ context.restore();
+ }
+
+ // Now do the fill
+ context.addPath(quadPath);
+ context.setFillColor(fillColor);
+ context.fillPath();
}
-static void drawHighlightForBoxes(GraphicsContext& context, const Vector<IntRect>& lineBoxRects, const IntRect& contentBox, const IntRect& paddingBox, const IntRect& borderBox, const IntRect& marginBox)
+static void drawHighlightForBoxes(GraphicsContext& context, const Vector<FloatQuad>& lineBoxQuads, const FloatQuad& contentQuad, const FloatQuad& paddingQuad, const FloatQuad& borderQuad, const FloatQuad& marginQuad)
{
static const Color contentBoxColor(125, 173, 217, 128);
static const Color paddingBoxColor(125, 173, 217, 160);
static const Color borderBoxColor(125, 173, 217, 192);
static const Color marginBoxColor(125, 173, 217, 228);
- if (!lineBoxRects.isEmpty()) {
- for (size_t i = 0; i < lineBoxRects.size(); ++i)
- drawOutlinedRect(context, lineBoxRects[i], contentBoxColor);
+ if (!lineBoxQuads.isEmpty()) {
+ for (size_t i = 0; i < lineBoxQuads.size(); ++i)
+ drawOutlinedQuad(context, lineBoxQuads[i], contentBoxColor);
return;
}
- if (marginBox != borderBox)
- drawOutlinedRect(context, marginBox, marginBoxColor);
- if (borderBox != paddingBox)
- drawOutlinedRect(context, borderBox, borderBoxColor);
- if (paddingBox != contentBox)
- drawOutlinedRect(context, paddingBox, paddingBoxColor);
- drawOutlinedRect(context, contentBox, contentBoxColor);
+ if (marginQuad != borderQuad)
+ drawOutlinedQuad(context, marginQuad, marginBoxColor);
+ if (borderQuad != paddingQuad)
+ drawOutlinedQuad(context, borderQuad, borderBoxColor);
+ if (paddingQuad != contentQuad)
+ drawOutlinedQuad(context, paddingQuad, paddingBoxColor);
+
+ drawOutlinedQuad(context, contentQuad, contentBoxColor);
}
static inline void convertFromFrameToMainFrame(Frame* frame, IntRect& rect)
@@ -2690,6 +2715,12 @@
rect = frame->page()->mainFrame()->view()->windowToContents(frame->view()->contentsToWindow(rect));
}
+static inline IntSize frameToMainFrameOffset(Frame* frame)
+{
+ IntPoint mainFramePoint = frame->page()->mainFrame()->view()->windowToContents(frame->view()->contentsToWindow(IntPoint()));
+ return mainFramePoint - IntPoint();
+}
+
void InspectorController::drawNodeHighlight(GraphicsContext& context) const
{
if (!m_highlightedNode)
@@ -2700,35 +2731,47 @@
if (!renderer || !containingFrame)
return;
- IntRect contentBox = renderer->absoluteContentBox();
- IntRect boundingBox = renderer->absoluteBoundingBoxRect();
+ IntRect contentBox = renderer->contentBox();
// FIXME: Should we add methods to RenderObject to obtain these rects?
- IntRect paddingBox(contentBox.x() - renderer->paddingLeft(), contentBox.y() - renderer->paddingTop(), contentBox.width() + renderer->paddingLeft() + renderer->paddingRight(), contentBox.height() + renderer->paddingTop() + renderer->paddingBottom());
- IntRect borderBox(paddingBox.x() - renderer->borderLeft(), paddingBox.y() - renderer->borderTop(), paddingBox.width() + renderer->borderLeft() + renderer->borderRight(), paddingBox.height() + renderer->borderTop() + renderer->borderBottom());
- IntRect marginBox(borderBox.x() - renderer->marginLeft(), borderBox.y() - renderer->marginTop(), borderBox.width() + renderer->marginLeft() + renderer->marginRight(), borderBox.height() + renderer->marginTop() + renderer->marginBottom());
+ IntRect paddingBox(contentBox.x() - renderer->paddingLeft(), contentBox.y() - renderer->paddingTop(),
+ contentBox.width() + renderer->paddingLeft() + renderer->paddingRight(), contentBox.height() + renderer->paddingTop() + renderer->paddingBottom());
+ IntRect borderBox(paddingBox.x() - renderer->borderLeft(), paddingBox.y() - renderer->borderTop(),
+ paddingBox.width() + renderer->borderLeft() + renderer->borderRight(), paddingBox.height() + renderer->borderTop() + renderer->borderBottom());
+ IntRect marginBox(borderBox.x() - renderer->marginLeft(), borderBox.y() - renderer->marginTop(),
+ borderBox.width() + renderer->marginLeft() + renderer->marginRight(), borderBox.height() + renderer->marginTop() + renderer->marginBottom());
- convertFromFrameToMainFrame(containingFrame, contentBox);
- convertFromFrameToMainFrame(containingFrame, paddingBox);
- convertFromFrameToMainFrame(containingFrame, borderBox);
- convertFromFrameToMainFrame(containingFrame, marginBox);
- convertFromFrameToMainFrame(containingFrame, boundingBox);
- Vector<IntRect> lineBoxRects;
+ IntSize mainFrameOffset = frameToMainFrameOffset(containingFrame);
+
+ FloatQuad absContentQuad = renderer->localToAbsoluteQuad(FloatRect(contentBox));
+ FloatQuad absPaddingQuad = renderer->localToAbsoluteQuad(FloatRect(paddingBox));
+ FloatQuad absBorderQuad = renderer->localToAbsoluteQuad(FloatRect(borderBox));
+ FloatQuad absMarginQuad = renderer->localToAbsoluteQuad(FloatRect(marginBox));
+
+ absContentQuad.move(mainFrameOffset);
+ absPaddingQuad.move(mainFrameOffset);
+ absBorderQuad.move(mainFrameOffset);
+ absMarginQuad.move(mainFrameOffset);
+
+ IntRect boundingBox = renderer->absoluteBoundingBoxRect(true);
+ boundingBox.move(mainFrameOffset);
+
+ Vector<FloatQuad> lineBoxQuads;
if (renderer->isInline() || (renderer->isText() && !m_highlightedNode->isSVGElement())) {
// FIXME: We should show margins/padding/border for inlines.
- renderer->addLineBoxRects(lineBoxRects);
+ renderer->collectAbsoluteLineBoxQuads(lineBoxQuads);
}
- for (unsigned i = 0; i < lineBoxRects.size(); ++i)
- convertFromFrameToMainFrame(containingFrame, lineBoxRects[i]);
+ for (unsigned i = 0; i < lineBoxQuads.size(); ++i)
+ lineBoxQuads[i] += mainFrameOffset;
- if (lineBoxRects.isEmpty() && contentBox.isEmpty()) {
+ if (lineBoxQuads.isEmpty() && contentBox.isEmpty()) {
// If we have no line boxes and our content box is empty, we'll just draw our bounding box.
// This can happen, e.g., with an <a> enclosing an <img style="float:right">.
// FIXME: Can we make this better/more accurate? The <a> in the above case has no
// width/height but the highlight makes it appear to be the size of the <img>.
- lineBoxRects.append(boundingBox);
+ lineBoxQuads.append(FloatRect(boundingBox));
}
ASSERT(m_inspectedPage);
@@ -2747,7 +2790,7 @@
context.translate(-overlayRect.x(), -overlayRect.y());
- drawHighlightForBoxes(context, lineBoxRects, contentBox, paddingBox, borderBox, marginBox);
+ drawHighlightForBoxes(context, lineBoxQuads, absContentQuad, absPaddingQuad, absBorderQuad, absMarginQuad);
}
void InspectorController::count(const UString& title, unsigned lineNumber, const String& sourceID)
« no previous file with comments | « third_party/WebKit/WebCore/editing/htmlediting.cpp ('k') | third_party/WebKit/WebCore/platform/graphics/AffineTransform.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698