[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