Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
| 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
| 4 * (C) 2000 Dirk Mueller (mueller@kde.org) | 4 * (C) 2000 Dirk Mueller (mueller@kde.org) |
| 5 * (C) 2004 Allan Sandfeld Jensen (kde@carewolf.com) | 5 * (C) 2004 Allan Sandfeld Jensen (kde@carewolf.com) |
| 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2011 Apple Inc. All rights reserv ed. | 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2011 Apple Inc. All rights reserv ed. |
| 7 * Copyright (C) 2009 Google Inc. All rights reserved. | 7 * Copyright (C) 2009 Google Inc. All rights reserved. |
| 8 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo bile.com/) | 8 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo bile.com/) |
| 9 * | 9 * |
| 10 * This library is free software; you can redistribute it and/or | 10 * This library is free software; you can redistribute it and/or |
| (...skipping 1199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1210 quad[3] = FloatPoint(x2, y1 + std::max(-adjacentWidth1, 0)); | 1210 quad[3] = FloatPoint(x2, y1 + std::max(-adjacentWidth1, 0)); |
| 1211 break; | 1211 break; |
| 1212 } | 1212 } |
| 1213 | 1213 |
| 1214 graphicsContext->drawConvexPolygon(4, quad, antialias); | 1214 graphicsContext->drawConvexPolygon(4, quad, antialias); |
| 1215 graphicsContext->setStrokeStyle(oldStrokeStyle); | 1215 graphicsContext->setStrokeStyle(oldStrokeStyle); |
| 1216 } | 1216 } |
| 1217 | 1217 |
| 1218 void RenderObject::paintFocusRing(PaintInfo& paintInfo, const LayoutPoint& paint Offset, RenderStyle* style) | 1218 void RenderObject::paintFocusRing(PaintInfo& paintInfo, const LayoutPoint& paint Offset, RenderStyle* style) |
| 1219 { | 1219 { |
| 1220 Vector<IntRect> focusRingRects; | 1220 Vector<LayoutRect> focusRingRects; |
| 1221 addFocusRingRects(focusRingRects, paintOffset, paintInfo.paintContainer()); | 1221 addFocusRingRects(focusRingRects, paintOffset, paintInfo.paintContainer()); |
| 1222 if (style->outlineStyleIsAuto()) | 1222 if (style->outlineStyleIsAuto()) { |
| 1223 paintInfo.context->drawFocusRing(focusRingRects, style->outlineWidth(), style->outlineOffset(), resolveColor(style, CSSPropertyOutlineColor)); | 1223 Vector<IntRect> focusRingIntRects; |
| 1224 else | 1224 for (size_t i = 0; i < focusRingRects.size(); ++i) |
| 1225 addPDFURLRect(paintInfo.context, unionRect(focusRingRects)); | 1225 focusRingIntRects.append(pixelSnappedIntRect(focusRingRects[i])); |
|
Julien - ping for review
2014/08/20 22:12:31
We talked about this O(N) loop and while it should
Xianzhu
2014/09/04 00:29:12
Previously the computation of the loop was distrib
| |
| 1226 paintInfo.context->drawFocusRing(focusRingIntRects, style->outlineWidth( ), style->outlineOffset(), resolveColor(style, CSSPropertyOutlineColor)); | |
| 1227 return; | |
| 1228 } | |
| 1229 addPDFURLRect(paintInfo.context, unionRect(focusRingRects)); | |
| 1226 } | 1230 } |
| 1227 | 1231 |
| 1228 void RenderObject::addPDFURLRect(GraphicsContext* context, const LayoutRect& rec t) | 1232 void RenderObject::addPDFURLRect(GraphicsContext* context, const LayoutRect& rec t) |
| 1229 { | 1233 { |
| 1230 if (rect.isEmpty()) | 1234 if (rect.isEmpty()) |
| 1231 return; | 1235 return; |
| 1232 Node* n = node(); | 1236 Node* n = node(); |
| 1233 if (!n || !n->isLink() || !n->isElementNode()) | 1237 if (!n || !n->isLink() || !n->isElementNode()) |
| 1234 return; | 1238 return; |
| 1235 const AtomicString& href = toElement(n)->getAttribute(hrefAttr); | 1239 const AtomicString& href = toElement(n)->getAttribute(hrefAttr); |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1307 | 1311 |
| 1308 drawLineForBoxSide(graphicsContext, leftOuter, topOuter, leftInner, bottomOu ter, BSLeft, outlineColor, outlineStyle, outlineWidth, outlineWidth); | 1312 drawLineForBoxSide(graphicsContext, leftOuter, topOuter, leftInner, bottomOu ter, BSLeft, outlineColor, outlineStyle, outlineWidth, outlineWidth); |
| 1309 drawLineForBoxSide(graphicsContext, leftOuter, topOuter, rightOuter, topInne r, BSTop, outlineColor, outlineStyle, outlineWidth, outlineWidth); | 1313 drawLineForBoxSide(graphicsContext, leftOuter, topOuter, rightOuter, topInne r, BSTop, outlineColor, outlineStyle, outlineWidth, outlineWidth); |
| 1310 drawLineForBoxSide(graphicsContext, rightInner, topOuter, rightOuter, bottom Outer, BSRight, outlineColor, outlineStyle, outlineWidth, outlineWidth); | 1314 drawLineForBoxSide(graphicsContext, rightInner, topOuter, rightOuter, bottom Outer, BSRight, outlineColor, outlineStyle, outlineWidth, outlineWidth); |
| 1311 drawLineForBoxSide(graphicsContext, leftOuter, bottomInner, rightOuter, bott omOuter, BSBottom, outlineColor, outlineStyle, outlineWidth, outlineWidth); | 1315 drawLineForBoxSide(graphicsContext, leftOuter, bottomInner, rightOuter, bott omOuter, BSBottom, outlineColor, outlineStyle, outlineWidth, outlineWidth); |
| 1312 | 1316 |
| 1313 if (useTransparencyLayer) | 1317 if (useTransparencyLayer) |
| 1314 graphicsContext->endLayer(); | 1318 graphicsContext->endLayer(); |
| 1315 } | 1319 } |
| 1316 | 1320 |
| 1317 void RenderObject::addChildFocusRingRects(Vector<IntRect>& rects, const LayoutPo int& additionalOffset, const RenderLayerModelObject* paintContainer) const | 1321 void RenderObject::addChildFocusRingRects(Vector<LayoutRect>& rects, const Layou tPoint& additionalOffset, const RenderLayerModelObject* paintContainer) const |
| 1318 { | 1322 { |
| 1319 for (RenderObject* current = slowFirstChild(); current; current = current->n extSibling()) { | 1323 for (RenderObject* current = slowFirstChild(); current; current = current->n extSibling()) { |
| 1320 if (current->isText() || current->isListMarker()) | 1324 if (current->isText() || current->isListMarker()) |
| 1321 continue; | 1325 continue; |
| 1322 | 1326 |
| 1323 if (current->isBox()) { | 1327 if (current->isBox()) { |
| 1324 RenderBox* box = toRenderBox(current); | 1328 RenderBox* box = toRenderBox(current); |
| 1325 if (box->hasLayer()) { | 1329 if (box->hasLayer()) { |
| 1326 Vector<IntRect> layerFocusRingRects; | 1330 Vector<LayoutRect> layerFocusRingRects; |
| 1327 box->addFocusRingRects(layerFocusRingRects, LayoutPoint(), box); | 1331 box->addFocusRingRects(layerFocusRingRects, LayoutPoint(), box); |
| 1328 for (size_t i = 0; i < layerFocusRingRects.size(); ++i) { | 1332 for (size_t i = 0; i < layerFocusRingRects.size(); ++i) { |
| 1329 FloatQuad quadInBox = box->localToContainerQuad(FloatRect(la yerFocusRingRects[i]), paintContainer); | 1333 FloatQuad quadInBox = box->localToContainerQuad(FloatQuad(la yerFocusRingRects[i]), paintContainer); |
| 1330 rects.append(pixelSnappedIntRect(LayoutRect(quadInBox.boundi ngBox()))); | 1334 LayoutRect rect = LayoutRect(quadInBox.boundingBox()); |
| 1335 if (!rect.isEmpty()) | |
| 1336 rects.append(rect); | |
| 1331 } | 1337 } |
| 1332 } else { | 1338 } else { |
| 1333 FloatPoint pos(additionalOffset); | 1339 box->addFocusRingRects(rects, additionalOffset + box->locationOf fset(), paintContainer); |
| 1334 pos.move(box->locationOffset()); // FIXME: Snap offsets? crbug.c om/350474 | |
| 1335 box->addFocusRingRects(rects, flooredIntPoint(pos), paintContain er); | |
| 1336 } | 1340 } |
| 1337 } else { | 1341 } else { |
| 1338 current->addFocusRingRects(rects, additionalOffset, paintContainer); | 1342 current->addFocusRingRects(rects, additionalOffset, paintContainer); |
| 1339 } | 1343 } |
| 1340 } | 1344 } |
| 1341 } | 1345 } |
| 1342 | 1346 |
| 1343 LayoutPoint RenderObject::positionFromPaintInvalidationContainer(const RenderLay erModelObject* paintInvalidationContainer, const PaintInvalidationState* paintIn validationState) const | 1347 LayoutPoint RenderObject::positionFromPaintInvalidationContainer(const RenderLay erModelObject* paintInvalidationContainer, const PaintInvalidationState* paintIn validationState) const |
| 1344 { | 1348 { |
| 1345 ASSERT(containerForPaintInvalidation() == paintInvalidationContainer); | 1349 ASSERT(containerForPaintInvalidation() == paintInvalidationContainer); |
| (...skipping 30 matching lines...) Expand all Loading... | |
| 1376 return IntRect(); | 1380 return IntRect(); |
| 1377 | 1381 |
| 1378 LayoutRect result = rects[0]; | 1382 LayoutRect result = rects[0]; |
| 1379 for (size_t i = 1; i < n; ++i) | 1383 for (size_t i = 1; i < n; ++i) |
| 1380 result.unite(rects[i]); | 1384 result.unite(rects[i]); |
| 1381 return pixelSnappedIntRect(result); | 1385 return pixelSnappedIntRect(result); |
| 1382 } | 1386 } |
| 1383 | 1387 |
| 1384 void RenderObject::absoluteFocusRingQuads(Vector<FloatQuad>& quads) | 1388 void RenderObject::absoluteFocusRingQuads(Vector<FloatQuad>& quads) |
| 1385 { | 1389 { |
| 1386 Vector<IntRect> rects; | 1390 Vector<LayoutRect> rects; |
| 1387 const RenderLayerModelObject* container = containerForPaintInvalidation(); | 1391 const RenderLayerModelObject* container = containerForPaintInvalidation(); |
| 1388 addFocusRingRects(rects, LayoutPoint(localToContainerPoint(FloatPoint(), con tainer)), container); | 1392 addFocusRingRects(rects, LayoutPoint(localToContainerPoint(FloatPoint(), con tainer)), container); |
| 1389 size_t count = rects.size(); | 1393 size_t count = rects.size(); |
| 1390 for (size_t i = 0; i < count; ++i) | 1394 for (size_t i = 0; i < count; ++i) |
| 1391 quads.append(container->localToAbsoluteQuad(FloatQuad(rects[i]))); | 1395 quads.append(container->localToAbsoluteQuad(FloatQuad(rects[i]))); |
| 1392 } | 1396 } |
| 1393 | 1397 |
| 1394 FloatRect RenderObject::absoluteBoundingBoxRectForRange(const Range* range) | 1398 FloatRect RenderObject::absoluteBoundingBoxRectForRange(const Range* range) |
| 1395 { | 1399 { |
| 1396 if (!range || !range->startContainer()) | 1400 if (!range || !range->startContainer()) |
| (...skipping 2077 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3474 { | 3478 { |
| 3475 if (object1) { | 3479 if (object1) { |
| 3476 const blink::RenderObject* root = object1; | 3480 const blink::RenderObject* root = object1; |
| 3477 while (root->parent()) | 3481 while (root->parent()) |
| 3478 root = root->parent(); | 3482 root = root->parent(); |
| 3479 root->showRenderTreeAndMark(object1, "*", object2, "-", 0); | 3483 root->showRenderTreeAndMark(object1, "*", object2, "-", 0); |
| 3480 } | 3484 } |
| 3481 } | 3485 } |
| 3482 | 3486 |
| 3483 #endif | 3487 #endif |
| OLD | NEW |