Skip to content

Commit 7a6ff8e

Browse files
author
Adele Peterson
committed
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. Canonical link: https://commits.webkit.org/9298@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@10976 268f45cc-cd09-0410-ab3c-d52691b4dbfc
1 parent d45d362 commit 7a6ff8e

5 files changed

Lines changed: 51 additions & 27 deletions

File tree

WebCore/ChangeLog-2005-12-19

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,16 @@
1+
2005-10-26 Adele Peterson <adele@apple.com>
2+
3+
Reviewed by John.
4+
5+
Fixes a few problems with <rdar://problem/3612121> that I noticed with code inspection.
6+
7+
* khtml/rendering/render_layer.h: removed inline scrollToPoint
8+
* khtml/rendering/render_layer.cpp: (khtml::RenderLayer::getRectToExpose):
9+
* khtml/khtml_part.cpp: (KHTMLPart::gotoAnchor): Used to call scrollToPoint, now calls scrollRectToVisible
10+
* kwq/KWQKHTMLPart.mm:
11+
(KWQKHTMLPart::jumpToSelection): Now uses the enclosing layer of the selection start, instead of the outermost layer.
12+
(KWQKHTMLPart::centerSelectionInVisibleArea): ditto.
13+
114
2005-10-26 Anders Carlsson <andersca@mac.com>
215

316
Reviewed by Maciej.

WebCore/khtml/khtml_part.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2305,13 +2305,13 @@ bool KHTMLPart::gotoAnchor( const QString &name )
23052305
if (n) {
23062306
static_cast<HTMLElementImpl *>(n)->getUpperLeftCorner(x, y);
23072307
}
2308-
// Scroll to actual top left of element with no slop, since some pages expect anchors to be exactly scrolled to.
23092308
#if APPLE_CHANGES
2310-
// Call recursive version so this will expose correctly from within nested frames.
2309+
// scrollRectToVisible will expose correctly from within nested layers and frames.
23112310
if (d->m_doc && d->m_doc->renderer()) {
23122311
khtml::RenderLayer *layer = d->m_doc->renderer()->enclosingLayer();
23132312
if (layer)
2314-
d->m_doc->renderer()->enclosingLayer()->scrollToPoint(x, y);
2313+
// We used to align to the top left corner, but now, if the anchor is already horizontally visible, we won't scroll horizontally.
2314+
d->m_doc->renderer()->enclosingLayer()->scrollRectToVisible(QRect(x, y, 0, 0), alignTop);
23152315
}
23162316
#else
23172317
d->m_view->setContentsPos(x, y);

WebCore/khtml/rendering/render_layer.cpp

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -594,8 +594,10 @@ QRect RenderLayer::getRectToExpose(const QRect &visibleRect, const QRect &expos
594594
w = exposeRect.width();
595595
h = exposeRect.height();
596596

597-
int intersectWidth = visibleRect.intersect(exposeRect).width();
598-
if (intersectWidth <= w || (horizontalAlignment != alignDefault)) {
597+
int intersectWidth = visibleRect.intersect(exposeRect).width();
598+
if ((intersectWidth == w) && (horizontalAlignment == alignDefault))
599+
x = visibleRect.x();
600+
else {
599601
switch (horizontalAlignment) {
600602
case alignLeft:
601603
// The x value is already equal to the left of the exposeRect
@@ -621,7 +623,6 @@ QRect RenderLayer::getRectToExpose(const QRect &visibleRect, const QRect &expos
621623
x = exposeRect.right() - visibleRect.width();
622624
}
623625
}
624-
w = visibleRect.width();
625626
break;
626627
case alignDefault :
627628
default :
@@ -632,12 +633,14 @@ QRect RenderLayer::getRectToExpose(const QRect &visibleRect, const QRect &expos
632633
else if (w < visibleRect.width()) {
633634
x -= (visibleRect.width() - w) / 2;
634635
}
635-
w = visibleRect.width();
636636
}
637637
}
638+
w = visibleRect.width();
638639

639640
int intersectHeight = visibleRect.intersect(exposeRect).height();
640-
if (intersectHeight <= h || (verticalAlignment != alignDefault)) {
641+
if ((intersectHeight == h) && (verticalAlignment == alignDefault))
642+
y = visibleRect.y();
643+
else {
641644
switch (verticalAlignment) {
642645
case alignTop:
643646
// The y value is already equal to the top of the exposeRect
@@ -669,8 +672,9 @@ QRect RenderLayer::getRectToExpose(const QRect &visibleRect, const QRect &expos
669672
y -= (visibleRect.height() - h) / 2;
670673
}
671674
}
672-
h = visibleRect.height();
673675
}
676+
h = visibleRect.height();
677+
674678
return QRect(x, y, w, h);
675679
}
676680

WebCore/khtml/rendering/render_layer.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ typedef enum {
5656
alignLeft,
5757
alignRight,
5858
alignCenter,
59-
alignDefault
59+
alignDefault // If the rect is visible in this dimension, we will not scroll. Otherwise, we will center.
6060
} ScrollAlignment;
6161

6262
class QScrollBar;
@@ -230,7 +230,6 @@ class RenderLayer
230230
void scrollToOffset(int x, int y, bool updateScrollbars = true, bool repaint = true);
231231
void scrollToXOffset(int x) { scrollToOffset(x, m_scrollY); }
232232
void scrollToYOffset(int y) { scrollToOffset(m_scrollX, y); }
233-
void scrollToPoint(int x, int y) { scrollRectToVisible(QRect(x, y, 0, 0), alignTop, alignLeft); }
234233
void scrollRectToVisible(const QRect &r, ScrollAlignment verticalAlignment = alignDefault, ScrollAlignment horizontalAlignment = alignDefault);
235234
QRect getRectToExpose(const QRect &visibleRect, const QRect &exposeRect, ScrollAlignment verticalAlignment = alignDefault, ScrollAlignment horizontalAlignment = alignDefault);
236235
void setHasHorizontalScrollbar(bool hasScrollbar);

WebCore/kwq/KWQKHTMLPart.mm

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -933,9 +933,13 @@ static void redirectionTimerMonitor(void *context)
933933
void KWQKHTMLPart::jumpToSelection()
934934
{
935935
if (d->m_selection.start().isNotNull()) {
936-
RenderLayer *layer = renderer()->enclosingLayer();
937-
if (layer)
938-
layer->scrollRectToVisible(selectionRect());
936+
if (selectionStart() && selectionStart()->renderer()) {
937+
RenderLayer *layer = selectionStart()->renderer()->enclosingLayer();
938+
if (layer) {
939+
ASSERT(!selectionEnd() || !selectionEnd()->renderer() || (selectionEnd()->renderer()->enclosingLayer() == layer));
940+
layer->scrollRectToVisible(selectionRect());
941+
}
942+
}
939943
}
940944
}
941945

@@ -3383,25 +3387,29 @@ static bool findViewInSubviews(NSView *superview, NSView *target)
33833387

33843388
void KWQKHTMLPart::centerSelectionInVisibleArea() const
33853389
{
3390+
QRect rect;
3391+
33863392
switch (selection().state()) {
33873393
case SelectionController::NONE:
3394+
return;
3395+
3396+
case SelectionController::CARET:
3397+
rect = selection().caretRect();
33883398
break;
3389-
case SelectionController::CARET: {
3390-
if (renderer()) {
3391-
RenderLayer *layer = renderer()->enclosingLayer();
3392-
if (layer)
3393-
layer->scrollRectToVisible(selection().caretRect(), alignCenter, alignCenter);
3394-
}
3395-
break;
3396-
}
3399+
33973400
case SelectionController::RANGE:
3398-
if (renderer()) {
3399-
RenderLayer *layer = renderer()->enclosingLayer();
3400-
if (layer)
3401-
layer->scrollRectToVisible(selectionRect(), alignCenter, alignCenter);
3402-
}
3401+
rect = selectionRect();
34033402
break;
34043403
}
3404+
3405+
ASSERT(d->m_selection.start().isNotNull());
3406+
if (selectionStart() && selectionStart()->renderer()) {
3407+
RenderLayer *layer = selectionStart()->renderer()->enclosingLayer();
3408+
if (layer) {
3409+
ASSERT(!selectionEnd() || !selectionEnd()->renderer() || (selectionEnd()->renderer()->enclosingLayer() == layer));
3410+
layer->scrollRectToVisible(rect, alignCenter, alignCenter);
3411+
}
3412+
}
34053413
}
34063414

34073415
NSImage *KWQKHTMLPart::imageFromRect(NSRect rect) const

0 commit comments

Comments
 (0)