[webkit-changes] cvs commit: WebCore/kwq KWQKHTMLPart.mm
Adele
adele at opensource.apple.com
Wed Oct 26 14:47:42 PDT 2005
adele 05/10/26 14:47:41
Modified: . ChangeLog
khtml khtml_part.cpp
khtml/rendering render_layer.cpp render_layer.h
kwq KWQKHTMLPart.mm
Log:
Reviewed by John.
Fixes a few problems with <rdar://problem/3612121> that I noticed with code inspection.
* khtml/rendering/render_layer.h: removed inline scrollToPoint
* khtml/rendering/render_layer.cpp: (khtml::RenderLayer::getRectToExpose):
* khtml/khtml_part.cpp: (KHTMLPart::gotoAnchor): Used to call scrollToPoint, now calls scrollRectToVisible
* kwq/KWQKHTMLPart.mm:
(KWQKHTMLPart::jumpToSelection): Now uses the enclosing layer of the selection start, instead of the outermost layer.
(KWQKHTMLPart::centerSelectionInVisibleArea): ditto.
Revision Changes Path
1.296 +13 -0 WebCore/ChangeLog
Index: ChangeLog
===================================================================
RCS file: /cvs/root/WebCore/ChangeLog,v
retrieving revision 1.295
retrieving revision 1.296
diff -u -r1.295 -r1.296
--- ChangeLog 26 Oct 2005 20:44:07 -0000 1.295
+++ ChangeLog 26 Oct 2005 21:47:29 -0000 1.296
@@ -1,3 +1,16 @@
+2005-10-26 Adele Peterson <adele at apple.com>
+
+ Reviewed by John.
+
+ Fixes a few problems with <rdar://problem/3612121> that I noticed with code inspection.
+
+ * khtml/rendering/render_layer.h: removed inline scrollToPoint
+ * khtml/rendering/render_layer.cpp: (khtml::RenderLayer::getRectToExpose):
+ * khtml/khtml_part.cpp: (KHTMLPart::gotoAnchor): Used to call scrollToPoint, now calls scrollRectToVisible
+ * kwq/KWQKHTMLPart.mm:
+ (KWQKHTMLPart::jumpToSelection): Now uses the enclosing layer of the selection start, instead of the outermost layer.
+ (KWQKHTMLPart::centerSelectionInVisibleArea): ditto.
+
2005-10-26 Anders Carlsson <andersca at mac.com>
Reviewed by Maciej.
1.352 +3 -3 WebCore/khtml/khtml_part.cpp
Index: khtml_part.cpp
===================================================================
RCS file: /cvs/root/WebCore/khtml/khtml_part.cpp,v
retrieving revision 1.351
retrieving revision 1.352
diff -u -r1.351 -r1.352
--- khtml_part.cpp 25 Oct 2005 21:14:34 -0000 1.351
+++ khtml_part.cpp 26 Oct 2005 21:47:35 -0000 1.352
@@ -2305,13 +2305,13 @@
if (n) {
static_cast<HTMLElementImpl *>(n)->getUpperLeftCorner(x, y);
}
- // Scroll to actual top left of element with no slop, since some pages expect anchors to be exactly scrolled to.
#if APPLE_CHANGES
- // Call recursive version so this will expose correctly from within nested frames.
+ // scrollRectToVisible will expose correctly from within nested layers and frames.
if (d->m_doc && d->m_doc->renderer()) {
khtml::RenderLayer *layer = d->m_doc->renderer()->enclosingLayer();
if (layer)
- d->m_doc->renderer()->enclosingLayer()->scrollToPoint(x, y);
+ // We used to align to the top left corner, but now, if the anchor is already horizontally visible, we won't scroll horizontally.
+ d->m_doc->renderer()->enclosingLayer()->scrollRectToVisible(QRect(x, y, 0, 0), alignTop);
}
#else
d->m_view->setContentsPos(x, y);
1.119 +10 -6 WebCore/khtml/rendering/render_layer.cpp
Index: render_layer.cpp
===================================================================
RCS file: /cvs/root/WebCore/khtml/rendering/render_layer.cpp,v
retrieving revision 1.118
retrieving revision 1.119
diff -u -r1.118 -r1.119
--- render_layer.cpp 26 Oct 2005 06:08:03 -0000 1.118
+++ render_layer.cpp 26 Oct 2005 21:47:37 -0000 1.119
@@ -594,8 +594,10 @@
w = exposeRect.width();
h = exposeRect.height();
- int intersectWidth = visibleRect.intersect(exposeRect).width();
- if (intersectWidth <= w || (horizontalAlignment != alignDefault)) {
+ int intersectWidth = visibleRect.intersect(exposeRect).width();
+ if ((intersectWidth == w) && (horizontalAlignment == alignDefault))
+ x = visibleRect.x();
+ else {
switch (horizontalAlignment) {
case alignLeft:
// The x value is already equal to the left of the exposeRect
@@ -621,7 +623,6 @@
x = exposeRect.right() - visibleRect.width();
}
}
- w = visibleRect.width();
break;
case alignDefault :
default :
@@ -632,12 +633,14 @@
else if (w < visibleRect.width()) {
x -= (visibleRect.width() - w) / 2;
}
- w = visibleRect.width();
}
}
+ w = visibleRect.width();
int intersectHeight = visibleRect.intersect(exposeRect).height();
- if (intersectHeight <= h || (verticalAlignment != alignDefault)) {
+ if ((intersectHeight == h) && (verticalAlignment == alignDefault))
+ y = visibleRect.y();
+ else {
switch (verticalAlignment) {
case alignTop:
// The y value is already equal to the top of the exposeRect
@@ -669,8 +672,9 @@
y -= (visibleRect.height() - h) / 2;
}
}
- h = visibleRect.height();
}
+ h = visibleRect.height();
+
return QRect(x, y, w, h);
}
1.54 +1 -2 WebCore/khtml/rendering/render_layer.h
Index: render_layer.h
===================================================================
RCS file: /cvs/root/WebCore/khtml/rendering/render_layer.h,v
retrieving revision 1.53
retrieving revision 1.54
diff -u -r1.53 -r1.54
--- render_layer.h 25 Oct 2005 21:14:40 -0000 1.53
+++ render_layer.h 26 Oct 2005 21:47:37 -0000 1.54
@@ -56,7 +56,7 @@
alignLeft,
alignRight,
alignCenter,
- alignDefault
+ alignDefault // If the rect is visible in this dimension, we will not scroll. Otherwise, we will center.
} ScrollAlignment;
class QScrollBar;
@@ -230,7 +230,6 @@
void scrollToOffset(int x, int y, bool updateScrollbars = true, bool repaint = true);
void scrollToXOffset(int x) { scrollToOffset(x, m_scrollY); }
void scrollToYOffset(int y) { scrollToOffset(m_scrollX, y); }
- void scrollToPoint(int x, int y) { scrollRectToVisible(QRect(x, y, 0, 0), alignTop, alignLeft); }
void scrollRectToVisible(const QRect &r, ScrollAlignment verticalAlignment = alignDefault, ScrollAlignment horizontalAlignment = alignDefault);
QRect getRectToExpose(const QRect &visibleRect, const QRect &exposeRect, ScrollAlignment verticalAlignment = alignDefault, ScrollAlignment horizontalAlignment = alignDefault);
void setHasHorizontalScrollbar(bool hasScrollbar);
1.680 +24 -16 WebCore/kwq/KWQKHTMLPart.mm
Index: KWQKHTMLPart.mm
===================================================================
RCS file: /cvs/root/WebCore/kwq/KWQKHTMLPart.mm,v
retrieving revision 1.679
retrieving revision 1.680
diff -u -r1.679 -r1.680
--- KWQKHTMLPart.mm 25 Oct 2005 21:14:43 -0000 1.679
+++ KWQKHTMLPart.mm 26 Oct 2005 21:47:38 -0000 1.680
@@ -933,9 +933,13 @@
void KWQKHTMLPart::jumpToSelection()
{
if (d->m_selection.start().isNotNull()) {
- RenderLayer *layer = renderer()->enclosingLayer();
- if (layer)
- layer->scrollRectToVisible(selectionRect());
+ if (selectionStart() && selectionStart()->renderer()) {
+ RenderLayer *layer = selectionStart()->renderer()->enclosingLayer();
+ if (layer) {
+ ASSERT(!selectionEnd() || !selectionEnd()->renderer() || (selectionEnd()->renderer()->enclosingLayer() == layer));
+ layer->scrollRectToVisible(selectionRect());
+ }
+ }
}
}
@@ -3383,25 +3387,29 @@
void KWQKHTMLPart::centerSelectionInVisibleArea() const
{
+ QRect rect;
+
switch (selection().state()) {
case SelectionController::NONE:
+ return;
+
+ case SelectionController::CARET:
+ rect = selection().caretRect();
break;
- case SelectionController::CARET: {
- if (renderer()) {
- RenderLayer *layer = renderer()->enclosingLayer();
- if (layer)
- layer->scrollRectToVisible(selection().caretRect(), alignCenter, alignCenter);
- }
- break;
- }
+
case SelectionController::RANGE:
- if (renderer()) {
- RenderLayer *layer = renderer()->enclosingLayer();
- if (layer)
- layer->scrollRectToVisible(selectionRect(), alignCenter, alignCenter);
- }
+ rect = selectionRect();
break;
}
+
+ ASSERT(d->m_selection.start().isNotNull());
+ if (selectionStart() && selectionStart()->renderer()) {
+ RenderLayer *layer = selectionStart()->renderer()->enclosingLayer();
+ if (layer) {
+ ASSERT(!selectionEnd() || !selectionEnd()->renderer() || (selectionEnd()->renderer()->enclosingLayer() == layer));
+ layer->scrollRectToVisible(rect, alignCenter, alignCenter);
+ }
+ }
}
NSImage *KWQKHTMLPart::imageFromRect(NSRect rect) const
More information about the webkit-changes
mailing list