Changeset 114315 in webkit
- Timestamp:
- Apr 16, 2012 4:24:15 PM (12 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r114311 r114315 1 2012-04-16 Levi Weintraub <leviw@chromium.org> 2 3 Make borderBoxRect sub-pixel precise and add a pixel snapped version 4 https://bugs.webkit.org/show_bug.cgi?id=84063 5 6 Reviewed by Eric Seidel. 7 8 In an effort to prevent misuse, we previously decided to have borderBoxRect return a 9 pixel-snapped IntRect. This is because borderBoxRect returns a rect that's positioned 10 at (0,0), and therefore won't snap to the same size as the element it's covering. 11 12 There are a couple uses of borderBoxRect that don't pixel snap the values and require 13 sub-pixel precision. This patch adds a pixelSnappedBorderBoxRect that makes the snapping 14 explicit, and moves uses that would otherwise pixel snap the rect to this version to 15 avoid producing a rect of the incorrect size. For details about pixel snapping with 16 LayoutUnits, please see https://trac.webkit.org/wiki/LayoutUnit 17 18 No new tests. No change in behavior. 19 20 * html/shadow/TextControlInnerElements.cpp: 21 (WebCore::SpinButtonElement::defaultEventHandler): 22 * rendering/RenderBlock.cpp: 23 (WebCore::RenderBlock::addVisualOverflowFromTheme): 24 * rendering/RenderBox.h: 25 (WebCore::RenderBox::borderBoxRect): 26 (WebCore::RenderBox::pixelSnappedBorderBoxRect): 27 (WebCore::RenderBox::borderBoundingBox): 28 (WebCore::RenderBox::hasVisualOverflow): 29 * rendering/RenderLayer.cpp: 30 (WebCore::RenderLayer::scrollCornerRect): 31 (WebCore::RenderLayer::scrollCornerAndResizerRect): 32 (WebCore::RenderLayer::horizontalScrollbarStart): 33 (WebCore::RenderLayer::positionOverflowControls): 34 (WebCore::RenderLayer::paintResizer): 35 (WebCore::RenderLayer::hitTestOverflowControls): 36 * rendering/RenderLayerBacking.cpp: 37 (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry): 38 (WebCore::RenderLayerBacking::startAnimation): 39 (WebCore::RenderLayerBacking::startTransition): 40 * rendering/RenderTable.cpp: 41 (WebCore::RenderTable::addOverflowFromChildren): 42 * rendering/RenderThemeMac.mm: 43 (WebCore::RenderThemeMac::paintSearchFieldCancelButton): 44 (WebCore::RenderThemeMac::paintSearchFieldResultsDecoration): 45 (WebCore::RenderThemeMac::paintSearchFieldResultsButton): 46 * rendering/svg/RenderSVGRoot.cpp: 47 (WebCore::RenderSVGRoot::paintReplaced): 48 (WebCore::RenderSVGRoot::computeFloatRectForRepaint): 49 1 50 2012-04-16 Anders Carlsson <andersca@apple.com> 2 51 -
trunk/Source/WebCore/html/shadow/TextControlInnerElements.cpp
r113990 r114315 286 286 IntPoint local = roundedIntPoint(box->absoluteToLocal(mouseEvent->absoluteLocation(), false, true)); 287 287 if (mouseEvent->type() == eventNames().mousedownEvent && mouseEvent->button() == LeftButton) { 288 if (box-> borderBoxRect().contains(local)) {288 if (box->pixelSnappedBorderBoxRect().contains(local)) { 289 289 // The following functions of HTMLInputElement may run JavaScript 290 290 // code which detaches this shadow node. We need to take a reference … … 305 305 stopRepeatingTimer(); 306 306 else if (event->type() == eventNames().mousemoveEvent) { 307 if (box-> borderBoxRect().contains(local)) {307 if (box->pixelSnappedBorderBoxRect().contains(local)) { 308 308 if (!m_capturing) { 309 309 if (Frame* frame = document()->frame()) { -
trunk/Source/WebCore/rendering/RenderBlock.cpp
r114249 r114315 1667 1667 return; 1668 1668 1669 IntRect inflatedRect = borderBoxRect();1669 IntRect inflatedRect = pixelSnappedBorderBoxRect(); 1670 1670 theme()->adjustRepaintRect(this, inflatedRect); 1671 1671 addVisualOverflow(inflatedRect); -
trunk/Source/WebCore/rendering/RenderBox.h
r113885 r114315 134 134 void setFrameRect(const LayoutRect& rect) { m_frameRect = rect; } 135 135 136 IntRect borderBoxRect() const { return IntRect(IntPoint(), IntSize(m_frameRect.pixelSnappedWidth(), m_frameRect.pixelSnappedHeight())); } 137 virtual IntRect borderBoundingBox() const { return borderBoxRect(); } 136 LayoutRect borderBoxRect() const { return LayoutRect(LayoutPoint(), size()); } 137 IntRect pixelSnappedBorderBoxRect() const { return IntRect(IntPoint(), m_frameRect.pixelSnappedSize()); } 138 virtual IntRect borderBoundingBox() const { return pixelSnappedBorderBoxRect(); } 138 139 139 140 // The content area of the box (excludes padding - and intrinsic padding for table cells, etc... - and border). … … 455 456 456 457 RenderOverflow* hasRenderOverflow() const { return m_overflow.get(); } 457 bool hasVisualOverflow() const { return m_overflow && !borderBoxRect().contains( pixelSnappedIntRect(m_overflow->visualOverflowRect())); }458 bool hasVisualOverflow() const { return m_overflow && !borderBoxRect().contains(m_overflow->visualOverflowRect()); } 458 459 459 460 virtual bool needsPreferredWidthsRecalculation() const; -
trunk/Source/WebCore/rendering/RenderLayer.cpp
r114302 r114315 1995 1995 bool hasResizer = renderer()->style()->resize() != RESIZE_NONE; 1996 1996 if ((hasHorizontalBar && hasVerticalBar) || (hasResizer && (hasHorizontalBar || hasVerticalBar))) 1997 return cornerRect(this, renderBox()-> borderBoxRect());1997 return cornerRect(this, renderBox()->pixelSnappedBorderBoxRect()); 1998 1998 return IntRect(); 1999 1999 } … … 2014 2014 IntRect scrollCornerAndResizer = scrollCornerRect(); 2015 2015 if (scrollCornerAndResizer.isEmpty()) 2016 scrollCornerAndResizer = resizerCornerRect(this, pixelSnappedIntRect(box->borderBoxRect()));2016 scrollCornerAndResizer = resizerCornerRect(this, box->pixelSnappedBorderBoxRect()); 2017 2017 return scrollCornerAndResizer; 2018 2018 } … … 2116 2116 int x = minX + box->borderLeft(); 2117 2117 if (renderer()->style()->shouldPlaceBlockDirectionScrollbarOnLogicalLeft()) 2118 x += m_vBar ? m_vBar->width() : resizerCornerRect(this, box-> borderBoxRect()).width();2118 x += m_vBar ? m_vBar->width() : resizerCornerRect(this, box->pixelSnappedBorderBoxRect()).width(); 2119 2119 return x; 2120 2120 } … … 2319 2319 return; 2320 2320 2321 const IntRect borderBox = box-> borderBoxRect();2321 const IntRect borderBox = box->pixelSnappedBorderBoxRect(); 2322 2322 const IntRect& scrollCorner = scrollCornerRect(); 2323 2323 IntRect absBounds(borderBox.location() + offsetFromLayer, borderBox.size()); … … 2658 2658 ASSERT(box); 2659 2659 2660 IntRect absRect = resizerCornerRect(this, box-> borderBoxRect());2660 IntRect absRect = resizerCornerRect(this, box->pixelSnappedBorderBoxRect()); 2661 2661 absRect.moveBy(paintOffset); 2662 2662 if (!absRect.intersects(damageRect)) … … 2713 2713 IntRect resizeControlRect; 2714 2714 if (renderer()->style()->resize() != RESIZE_NONE) { 2715 resizeControlRect = resizerCornerRect(this, box-> borderBoxRect());2715 resizeControlRect = resizerCornerRect(this, box->pixelSnappedBorderBoxRect()); 2716 2716 if (resizeControlRect.contains(localPoint)) 2717 2717 return true; -
trunk/Source/WebCore/rendering/RenderLayerBacking.cpp
r114283 r114315 504 504 505 505 if (m_owningLayer->hasTransform()) { 506 const IntRect borderBox = toRenderBox(renderer())-> borderBoxRect();506 const IntRect borderBox = toRenderBox(renderer())->pixelSnappedBorderBoxRect(); 507 507 508 508 // Get layout bounds in the coords of compAncestor to match relativeCompositingBounds. … … 1297 1297 #endif 1298 1298 1299 if (hasTransform && m_graphicsLayer->addAnimation(transformVector, toRenderBox(renderer())-> borderBoxRect().size(), anim, keyframes.animationName(), timeOffset)) {1299 if (hasTransform && m_graphicsLayer->addAnimation(transformVector, toRenderBox(renderer())->pixelSnappedBorderBoxRect().size(), anim, keyframes.animationName(), timeOffset)) { 1300 1300 didAnimateTransform = true; 1301 1301 compositor()->didStartAcceleratedAnimation(CSSPropertyWebkitTransform); … … 1362 1362 transformVector.insert(new TransformAnimationValue(0, &fromStyle->transform())); 1363 1363 transformVector.insert(new TransformAnimationValue(1, &toStyle->transform())); 1364 if (m_graphicsLayer->addAnimation(transformVector, toRenderBox(renderer())-> borderBoxRect().size(), transformAnim, GraphicsLayer::animationNameForTransition(AnimatedPropertyWebkitTransform), timeOffset)) {1364 if (m_graphicsLayer->addAnimation(transformVector, toRenderBox(renderer())->pixelSnappedBorderBoxRect().size(), transformAnim, GraphicsLayer::animationNameForTransition(AnimatedPropertyWebkitTransform), timeOffset)) { 1365 1365 // To ensure that the correct transform is visible when the animation ends, also set the final transform. 1366 1366 updateLayerTransform(toStyle); -
trunk/Source/WebCore/rendering/RenderTable.cpp
r113885 r114315 510 510 int topBorderOverflow = borderTop() - outerBorderTop(); 511 511 IntRect borderOverflowRect(leftBorderOverflow, topBorderOverflow, rightBorderOverflow - leftBorderOverflow, bottomBorderOverflow - topBorderOverflow); 512 if (borderOverflowRect != borderBoxRect()) {512 if (borderOverflowRect != pixelSnappedBorderBoxRect()) { 513 513 addLayoutOverflow(borderOverflowRect); 514 514 addVisualOverflow(borderOverflowRect); -
trunk/Source/WebCore/rendering/RenderThemeMac.mm
r113532 r114315 1535 1535 float zoomLevel = o->style()->effectiveZoom(); 1536 1536 1537 FloatRect localBounds = [search cancelButtonRectForBounds:NSRect(input->renderBox()-> borderBoxRect())];1537 FloatRect localBounds = [search cancelButtonRectForBounds:NSRect(input->renderBox()->pixelSnappedBorderBoxRect())]; 1538 1538 1539 1539 #if ENABLE(INPUT_SPEECH) … … 1620 1620 updateActiveState([search searchButtonCell], o); 1621 1621 1622 FloatRect localBounds = [search searchButtonRectForBounds:NSRect(input->renderBox()-> borderBoxRect())];1622 FloatRect localBounds = [search searchButtonRectForBounds:NSRect(input->renderBox()->pixelSnappedBorderBoxRect())]; 1623 1623 localBounds = convertToPaintingRect(input->renderer(), o, localBounds, r); 1624 1624 … … 1656 1656 float zoomLevel = o->style()->effectiveZoom(); 1657 1657 1658 FloatRect localBounds = [search searchButtonRectForBounds:NSRect(input->renderBox()-> borderBoxRect())];1658 FloatRect localBounds = [search searchButtonRectForBounds:NSRect(input->renderBox()->pixelSnappedBorderBoxRect())]; 1659 1659 localBounds = convertToPaintingRect(input->renderer(), o, localBounds, r); 1660 1660 -
trunk/Source/WebCore/rendering/svg/RenderSVGRoot.cpp
r112301 r114315 257 257 { 258 258 // An empty viewport disables rendering. 259 if ( borderBoxRect().isEmpty())259 if (pixelSnappedBorderBoxRect().isEmpty()) 260 260 return; 261 261 … … 369 369 370 370 // Apply initial viewport clip - not affected by overflow settings 371 repaintRect.intersect( borderBoxRect());371 repaintRect.intersect(pixelSnappedBorderBoxRect()); 372 372 373 373 const SVGRenderStyle* svgStyle = style()->svgStyle();
Note: See TracChangeset
for help on using the changeset viewer.