[SCM] WebKit Debian packaging branch, webkit-1.1, updated. upstream/1.1.21-584-g1e41756
simon.fraser at apple.com
simon.fraser at apple.com
Fri Feb 26 22:27:13 UTC 2010
The following commit has been merged in the webkit-1.1 branch:
commit d3ae586b6ee4133a05518248fb29dc944d1abbdb
Author: simon.fraser at apple.com <simon.fraser at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Mon Feb 22 18:48:26 2010 +0000
2010-02-22 Simon Fraser <simon.fraser at apple.com>
Reviewed by Dan Bernstein, Darin Adler.
Remove addScrolledContentOffset/subtractScrolledContentOffset
https://bugs.webkit.org/show_bug.cgi?id=35225
Remove RenderLayer's addScrolledContentOffset() and subtractScrolledContentOffset()
methods, and instead use the existing scrolledContentOffset(), and use
IntSize and IntPoint instead of lots of x, y variables.
Added new IntPoint toPoint(const IntSize&) method as a convenience to convert a size to a point,
which is needed in a few places.
* page/EventHandler.cpp:
(WebCore::EventHandler::handleDrag): Use the new toPoint() convenience.
* platform/graphics/IntPoint.h:
(WebCore::toPoint): New convenience method to convert an IntSize to an IntPoint.
* rendering/LayoutState.cpp:
(WebCore::LayoutState::LayoutState):
* rendering/RenderBlock.cpp:
(WebCore::RenderBlock::layoutBlock):
(WebCore::RenderBlock::paintObject):
(WebCore::RenderBlock::selectionGapRectsForRepaint):
(WebCore::RenderBlock::nodeAtPoint):
(WebCore::RenderBlock::offsetForContents):
* rendering/RenderBoxModelObject.cpp:
(WebCore::RenderBoxModelObject::paintFillLayerExtended):
* rendering/RenderInline.cpp:
(WebCore::RenderInline::clippedOverflowRectForRepaint):
* rendering/RenderLayer.cpp:
(WebCore::RenderLayer::updateLayerPosition):
* rendering/RenderLayer.h:
(WebCore::RenderLayer::size):
* rendering/RenderObject.cpp:
(WebCore::RenderObject::computeRectForRepaint):
* rendering/TextControlInnerElements.cpp:
(WebCore::RenderTextControlInnerBlock::positionForPoint):
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@55090 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 9ab91b9..1c43662 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,42 @@
+2010-02-22 Simon Fraser <simon.fraser at apple.com>
+
+ Reviewed by Dan Bernstein, Darin Adler.
+
+ Remove addScrolledContentOffset/subtractScrolledContentOffset
+ https://bugs.webkit.org/show_bug.cgi?id=35225
+
+ Remove RenderLayer's addScrolledContentOffset() and subtractScrolledContentOffset()
+ methods, and instead use the existing scrolledContentOffset(), and use
+ IntSize and IntPoint instead of lots of x, y variables.
+
+ Added new IntPoint toPoint(const IntSize&) method as a convenience to convert a size to a point,
+ which is needed in a few places.
+
+ * page/EventHandler.cpp:
+ (WebCore::EventHandler::handleDrag): Use the new toPoint() convenience.
+ * platform/graphics/IntPoint.h:
+ (WebCore::toPoint): New convenience method to convert an IntSize to an IntPoint.
+ * rendering/LayoutState.cpp:
+ (WebCore::LayoutState::LayoutState):
+ * rendering/RenderBlock.cpp:
+ (WebCore::RenderBlock::layoutBlock):
+ (WebCore::RenderBlock::paintObject):
+ (WebCore::RenderBlock::selectionGapRectsForRepaint):
+ (WebCore::RenderBlock::nodeAtPoint):
+ (WebCore::RenderBlock::offsetForContents):
+ * rendering/RenderBoxModelObject.cpp:
+ (WebCore::RenderBoxModelObject::paintFillLayerExtended):
+ * rendering/RenderInline.cpp:
+ (WebCore::RenderInline::clippedOverflowRectForRepaint):
+ * rendering/RenderLayer.cpp:
+ (WebCore::RenderLayer::updateLayerPosition):
+ * rendering/RenderLayer.h:
+ (WebCore::RenderLayer::size):
+ * rendering/RenderObject.cpp:
+ (WebCore::RenderObject::computeRectForRepaint):
+ * rendering/TextControlInnerElements.cpp:
+ (WebCore::RenderTextControlInnerBlock::positionForPoint):
+
2009-02-22 Adam Langley <agl at google.com>
Reviewed by Darin Fisher.
diff --git a/WebCore/page/EventHandler.cpp b/WebCore/page/EventHandler.cpp
index 0c776db..a9a08e3 100644
--- a/WebCore/page/EventHandler.cpp
+++ b/WebCore/page/EventHandler.cpp
@@ -2327,7 +2327,7 @@ bool EventHandler::handleDrag(const MouseEventWithHitTestResults& event)
// FIXME: This doesn't work correctly with transforms.
FloatPoint absPos = renderer->localToAbsolute();
IntSize delta = m_mouseDownPos - roundedIntPoint(absPos);
- dragState().m_dragClipboard->setDragImageElement(dragState().m_dragSrc.get(), IntPoint() + delta);
+ dragState().m_dragClipboard->setDragImageElement(dragState().m_dragSrc.get(), toPoint(delta));
} else {
// The renderer has disappeared, this can happen if the onStartDrag handler has hidden
// the element in some way. In this case we just kill the drag.
diff --git a/WebCore/platform/graphics/IntPoint.h b/WebCore/platform/graphics/IntPoint.h
index 5137485..241d6af 100644
--- a/WebCore/platform/graphics/IntPoint.h
+++ b/WebCore/platform/graphics/IntPoint.h
@@ -189,6 +189,11 @@ inline bool operator!=(const IntPoint& a, const IntPoint& b)
return a.x() != b.x() || a.y() != b.y();
}
+inline IntPoint toPoint(const IntSize& size)
+{
+ return IntPoint(size.width(), size.height());
+}
+
#if PLATFORM(QT)
inline QDataStream& operator<<(QDataStream& stream, const IntPoint& point)
{
diff --git a/WebCore/rendering/LayoutState.cpp b/WebCore/rendering/LayoutState.cpp
index 883f74d..c94e77b 100644
--- a/WebCore/rendering/LayoutState.cpp
+++ b/WebCore/rendering/LayoutState.cpp
@@ -62,20 +62,17 @@ LayoutState::LayoutState(LayoutState* prev, RenderBox* renderer, const IntSize&
m_clipped = !fixed && prev->m_clipped;
if (m_clipped)
m_clipRect = prev->m_clipRect;
+
if (renderer->hasOverflowClip()) {
- int x = m_offset.width();
- int y = m_offset.height();
RenderLayer* layer = renderer->layer();
- IntRect clipRect(x, y, layer->width(), layer->height());
- clipRect.move(renderer->view()->layoutDelta());
+ IntRect clipRect(toPoint(m_offset) + renderer->view()->layoutDelta(), layer->size());
if (m_clipped)
m_clipRect.intersect(clipRect);
else {
m_clipRect = clipRect;
m_clipped = true;
}
- layer->subtractScrolledContentOffset(x, y);
- m_offset = IntSize(x, y);
+ m_offset -= layer->scrolledContentOffset();
}
m_layoutDelta = m_next->m_layoutDelta;
diff --git a/WebCore/rendering/RenderBlock.cpp b/WebCore/rendering/RenderBlock.cpp
index 1e4831c..62ca8fc 100644
--- a/WebCore/rendering/RenderBlock.cpp
+++ b/WebCore/rendering/RenderBlock.cpp
@@ -811,11 +811,7 @@ void RenderBlock::layoutBlock(bool relayoutChildren)
if (hasOverflowClip()) {
// Adjust repaint rect for scroll offset
- int x = repaintRect.x();
- int y = repaintRect.y();
- layer()->subtractScrolledContentOffset(x, y);
- repaintRect.setX(x);
- repaintRect.setY(y);
+ repaintRect.move(-layer()->scrolledContentOffset());
// Don't allow this rect to spill out of our overflow box.
repaintRect.intersect(IntRect(0, 0, width(), height()));
@@ -1726,11 +1722,14 @@ void RenderBlock::paintObject(PaintInfo& paintInfo, int tx, int ty)
if (paintPhase == PaintPhaseBlockBackground)
return;
- // Adjust our painting position if we're inside a scrolled layer (e.g., an overflow:auto div).s
+ // Adjust our painting position if we're inside a scrolled layer (e.g., an overflow:auto div).
int scrolledX = tx;
int scrolledY = ty;
- if (hasOverflowClip())
- layer()->subtractScrolledContentOffset(scrolledX, scrolledY);
+ if (hasOverflowClip()) {
+ IntSize offset = layer()->scrolledContentOffset();
+ scrolledX -= offset.width();
+ scrolledY -= offset.height();
+ }
// 2. paint contents
if (paintPhase != PaintPhaseSelfOutline) {
@@ -1942,18 +1941,16 @@ GapRects RenderBlock::selectionGapRectsForRepaint(RenderBoxModelObject* repaintC
// FIXME: this is broken with transforms
TransformState transformState(TransformState::ApplyTransformDirection, FloatPoint());
mapLocalToContainer(repaintContainer, false, false, transformState);
- FloatPoint offsetFromRepaintContainer = transformState.mappedPoint();
- int x = offsetFromRepaintContainer.x();
- int y = offsetFromRepaintContainer.y();
+ IntPoint offsetFromRepaintContainer = roundedIntPoint(transformState.mappedPoint());
if (hasOverflowClip())
- layer()->subtractScrolledContentOffset(x, y);
+ offsetFromRepaintContainer -= layer()->scrolledContentOffset();
int lastTop = 0;
int lastLeft = leftSelectionOffset(this, lastTop);
int lastRight = rightSelectionOffset(this, lastTop);
- return fillSelectionGaps(this, x, y, x, y, lastTop, lastLeft, lastRight);
+ return fillSelectionGaps(this, offsetFromRepaintContainer.x(), offsetFromRepaintContainer.y(), offsetFromRepaintContainer.x(), offsetFromRepaintContainer.y(), lastTop, lastLeft, lastRight);
}
void RenderBlock::paintSelection(PaintInfo& paintInfo, int tx, int ty)
@@ -3295,8 +3292,11 @@ bool RenderBlock::nodeAtPoint(const HitTestRequest& request, HitTestResult& resu
// Hit test descendants first.
int scrolledX = tx;
int scrolledY = ty;
- if (hasOverflowClip())
- layer()->subtractScrolledContentOffset(scrolledX, scrolledY);
+ if (hasOverflowClip()) {
+ IntSize offset = layer()->scrolledContentOffset();
+ scrolledX -= offset.width();
+ scrolledY -= offset.height();
+ }
// Hit test contents if we don't have columns.
if (!hasColumns() && hitTestContents(request, result, _x, _y, scrolledX, scrolledY, hitTestAction))
@@ -3571,15 +3571,16 @@ VisiblePosition RenderBlock::positionForPoint(const IntPoint& point)
void RenderBlock::offsetForContents(int& tx, int& ty) const
{
+ IntPoint contentsPoint(tx, ty);
+
if (hasOverflowClip())
- layer()->addScrolledContentOffset(tx, ty);
+ contentsPoint += layer()->scrolledContentOffset();
- if (hasColumns()) {
- IntPoint contentsPoint(tx, ty);
+ if (hasColumns())
adjustPointToColumnContents(contentsPoint);
- tx = contentsPoint.x();
- ty = contentsPoint.y();
- }
+
+ tx = contentsPoint.x();
+ ty = contentsPoint.y();
}
int RenderBlock::availableWidth() const
diff --git a/WebCore/rendering/RenderBoxModelObject.cpp b/WebCore/rendering/RenderBoxModelObject.cpp
index f8bf05e..f224f76 100644
--- a/WebCore/rendering/RenderBoxModelObject.cpp
+++ b/WebCore/rendering/RenderBoxModelObject.cpp
@@ -479,7 +479,9 @@ void RenderBoxModelObject::paintFillLayerExtended(const PaintInfo& paintInfo, co
context->clip(toRenderBox(this)->overflowClipRect(tx, ty));
// Now adjust our tx, ty, w, h to reflect a scrolled content box with borders at the ends.
- layer()->subtractScrolledContentOffset(tx, ty);
+ IntSize offset = layer()->scrolledContentOffset();
+ tx -= offset.width();
+ ty -= offset.height();
w = bLeft + layer()->scrollWidth() + bRight;
h = borderTop() + layer()->scrollHeight() + borderBottom();
}
diff --git a/WebCore/rendering/RenderInline.cpp b/WebCore/rendering/RenderInline.cpp
index d254835..f399878 100644
--- a/WebCore/rendering/RenderInline.cpp
+++ b/WebCore/rendering/RenderInline.cpp
@@ -599,11 +599,10 @@ IntRect RenderInline::clippedOverflowRectForRepaint(RenderBoxModelObject* repain
// cb->height() is inaccurate if we're in the middle of a layout of |cb|, so use the
// layer's size instead. Even if the layer's size is wrong, the layer itself will repaint
// anyway if its size does change.
- int x = r.x();
- int y = r.y();
+ IntRect repaintRect(r);
+ repaintRect.move(-cb->layer()->scrolledContentOffset()); // For overflow:auto/scroll/hidden.
+
IntRect boxRect(0, 0, cb->layer()->width(), cb->layer()->height());
- cb->layer()->subtractScrolledContentOffset(x, y); // For overflow:auto/scroll/hidden.
- IntRect repaintRect(x, y, r.width(), r.height());
r = intersection(repaintRect, boxRect);
}
diff --git a/WebCore/rendering/RenderLayer.cpp b/WebCore/rendering/RenderLayer.cpp
index 8111d6a..93632eb 100644
--- a/WebCore/rendering/RenderLayer.cpp
+++ b/WebCore/rendering/RenderLayer.cpp
@@ -571,15 +571,20 @@ void RenderLayer::updateLayerPosition()
RenderLayer* positionedParent = enclosingPositionedAncestor();
// For positioned layers, we subtract out the enclosing positioned layer's scroll offset.
- positionedParent->subtractScrolledContentOffset(x, y);
+ IntSize offset = positionedParent->scrolledContentOffset();
+ x -= offset.width();
+ y -= offset.height();
if (renderer()->isPositioned() && positionedParent->renderer()->isRelPositioned() && positionedParent->renderer()->isRenderInline()) {
IntSize offset = toRenderInline(positionedParent->renderer())->relativePositionedInlineOffset(toRenderBox(renderer()));
x += offset.width();
y += offset.height();
}
- } else if (parent())
- parent()->subtractScrolledContentOffset(x, y);
+ } else if (parent()) {
+ IntSize offset = parent()->scrolledContentOffset();
+ x -= offset.width();
+ y -= offset.height();
+ }
// FIXME: We'd really like to just get rid of the concept of a layer rectangle and rely on the renderers.
@@ -1165,21 +1170,6 @@ void RenderLayer::scrollByRecursively(int xDelta, int yDelta)
}
}
-
-void
-RenderLayer::addScrolledContentOffset(int& x, int& y) const
-{
- x += scrollXOffset() + m_scrollLeftOverflow;
- y += scrollYOffset();
-}
-
-void
-RenderLayer::subtractScrolledContentOffset(int& x, int& y) const
-{
- x -= scrollXOffset() + m_scrollLeftOverflow;
- y -= scrollYOffset();
-}
-
void RenderLayer::scrollToOffset(int x, int y, bool updateScrollbars, bool repaint)
{
RenderBox* box = renderBox();
diff --git a/WebCore/rendering/RenderLayer.h b/WebCore/rendering/RenderLayer.h
index 3cdad3a..9210e95 100644
--- a/WebCore/rendering/RenderLayer.h
+++ b/WebCore/rendering/RenderLayer.h
@@ -227,6 +227,8 @@ public:
int width() const { return m_width; }
int height() const { return m_height; }
+ IntSize size() const { return IntSize(m_width, m_height); }
+
void setWidth(int w) { m_width = w; }
void setHeight(int h) { m_height = h; }
@@ -237,8 +239,7 @@ public:
// Scrolling methods for layers that can scroll their overflow.
void scrollByRecursively(int xDelta, int yDelta);
- void addScrolledContentOffset(int& x, int& y) const;
- void subtractScrolledContentOffset(int& x, int& y) const;
+
IntSize scrolledContentOffset() const { return IntSize(scrollXOffset() + m_scrollLeftOverflow, scrollYOffset()); }
int scrollXOffset() const { return m_scrollX + m_scrollOriginX; }
diff --git a/WebCore/rendering/RenderObject.cpp b/WebCore/rendering/RenderObject.cpp
index 5901edc..3f39c15 100644
--- a/WebCore/rendering/RenderObject.cpp
+++ b/WebCore/rendering/RenderObject.cpp
@@ -1330,11 +1330,10 @@ void RenderObject::computeRectForRepaint(RenderBoxModelObject* repaintContainer,
// anyway if its size does change.
RenderBox* boxParent = toRenderBox(o);
+ IntRect repaintRect(rect);
+ repaintRect.move(-boxParent->layer()->scrolledContentOffset()); // For overflow:auto/scroll/hidden.
+
IntRect boxRect(0, 0, boxParent->layer()->width(), boxParent->layer()->height());
- int x = rect.x();
- int y = rect.y();
- boxParent->layer()->subtractScrolledContentOffset(x, y); // For overflow:auto/scroll/hidden.
- IntRect repaintRect(x, y, rect.width(), rect.height());
rect = intersection(repaintRect, boxRect);
if (rect.isEmpty())
return;
diff --git a/WebCore/rendering/TextControlInnerElements.cpp b/WebCore/rendering/TextControlInnerElements.cpp
index fc7f7f0..4cd55c5 100644
--- a/WebCore/rendering/TextControlInnerElements.cpp
+++ b/WebCore/rendering/TextControlInnerElements.cpp
@@ -63,18 +63,17 @@ bool RenderTextControlInnerBlock::nodeAtPoint(const HitTestRequest& request, Hit
VisiblePosition RenderTextControlInnerBlock::positionForPoint(const IntPoint& point)
{
- int contentsX = point.x();
- int contentsY = point.y();
+ IntPoint contentsPoint(point);
// Multiline text controls have the scroll on shadowAncestorNode, so we need to take that
// into account here.
if (m_multiLine) {
RenderTextControl* renderer = toRenderTextControl(node()->shadowAncestorNode()->renderer());
if (renderer->hasOverflowClip())
- renderer->layer()->addScrolledContentOffset(contentsX, contentsY);
+ contentsPoint += renderer->layer()->scrolledContentOffset();
}
- return RenderBlock::positionForPoint(IntPoint(contentsX, contentsY));
+ return RenderBlock::positionForPoint(contentsPoint);
}
TextControlInnerElement::TextControlInnerElement(Document* doc, Node* shadowParent)
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list