[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    branches/KDE/4.1/kdelibs/khtml
From:       Germain Garand <germain () ebooksfrance ! org>
Date:       2008-10-19 22:31:19
Message-ID: 1224455479.454045.6438.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 873673 by ggarand:

automatically merged revision 869762:
HTML Frames fixes
- make frame resizing dynamic
- eliminate most frame flicker by cleaning up RenderWidget's resizing code.
- prepare for some more work

 M  +0 -2      ecma/kjs_window.cpp  
 M  +27 -27    html/html_baseimpl.cpp  
 M  +1 -1      html/html_baseimpl.h  
 M  +14 -1     khtmlview.cpp  
 M  +27 -7     rendering/render_frames.cpp  
 M  +2 -0      rendering/render_frames.h  


--- branches/KDE/4.1/kdelibs/khtml/ecma/kjs_window.cpp #873672:873673
@@ -903,7 +903,6 @@
     {
       if (!part->view())
         return jsUndefined();
-      khtml::RenderWidget::flushWidgetResizes(); // make sure frames have their final size
       int ret = part->view()->visibleHeight();
       // match Gecko which does not subtract the scrollbars
       if (part->view()->horizontalScrollBar()->isVisible()) {
@@ -918,7 +917,6 @@
     {
       if (!part->view())
         return jsUndefined();
-      khtml::RenderWidget::flushWidgetResizes(); // make sure frames have their final size
       int ret = part->view()->visibleWidth();
       // match Gecko which does not subtract the scrollbars
       if (part->view()->verticalScrollBar()->isVisible()) {
--- branches/KDE/4.1/kdelibs/khtml/html/html_baseimpl.cpp #873672:873673
@@ -275,6 +275,33 @@
         name = DOMString(parentPart->requestFrameName());
 }
 
+void HTMLFrameElementImpl::defaultEventHandler(EventImpl *e)
+{
+     // ### duplicated in HTMLObjectBaseElementImpl
+     if ( e->target() == this && m_render && m_render->isWidget() 
+                                    && static_cast<RenderWidget*>(m_render)->isRedirectedWidget() 
+                                    && qobject_cast<KHTMLView*>(static_cast<RenderWidget*>(m_render)->widget())) {
+        switch(e->id())  {
+        case EventImpl::MOUSEDOWN_EVENT:
+        case EventImpl::MOUSEUP_EVENT:
+        case EventImpl::MOUSEMOVE_EVENT:
+        case EventImpl::MOUSEOUT_EVENT:
+        case EventImpl::MOUSEOVER_EVENT:
+        case EventImpl::KHTML_MOUSEWHEEL_EVENT:
+        case EventImpl::KEYDOWN_EVENT:
+        case EventImpl::KEYUP_EVENT:
+        case EventImpl::KEYPRESS_EVENT:
+        case EventImpl::DOMFOCUSIN_EVENT:
+        case EventImpl::DOMFOCUSOUT_EVENT:
+            if (static_cast<RenderWidget*>(m_render)->handleEvent(*e))
+                e->setDefaultHandled();
+        default:
+            break;
+        }
+    }
+    HTMLPartContainerElementImpl::defaultEventHandler(e);
+}
+
 void HTMLFrameElementImpl::parseAttribute(AttributeImpl *attr)
 {
     switch(attr->id())
@@ -677,33 +704,6 @@
     return ID_IFRAME;
 }
 
-void HTMLIFrameElementImpl::defaultEventHandler(EventImpl *e)
-{
-     // ### duplicated in HTMLObjectBaseElementImpl
-     if ( e->target() == this && m_render && m_render->isWidget() 
-                                    && static_cast<RenderWidget*>(m_render)->isRedirectedWidget() 
-                                    && qobject_cast<KHTMLView*>(static_cast<RenderWidget*>(m_render)->widget())) {
-        switch(e->id())  {
-        case EventImpl::MOUSEDOWN_EVENT:
-        case EventImpl::MOUSEUP_EVENT:
-        case EventImpl::MOUSEMOVE_EVENT:
-        case EventImpl::MOUSEOUT_EVENT:
-        case EventImpl::MOUSEOVER_EVENT:
-        case EventImpl::KHTML_MOUSEWHEEL_EVENT:
-        case EventImpl::KEYDOWN_EVENT:
-        case EventImpl::KEYUP_EVENT:
-        case EventImpl::KEYPRESS_EVENT:
-        case EventImpl::DOMFOCUSIN_EVENT:
-        case EventImpl::DOMFOCUSOUT_EVENT:
-            if (static_cast<RenderWidget*>(m_render)->handleEvent(*e))
-                e->setDefaultHandled();
-        default:
-            break;
-        }
-    }
-    HTMLFrameElementImpl::defaultEventHandler(e);
-}
-
 void HTMLIFrameElementImpl::parseAttribute(AttributeImpl *attr )
 {
     switch (  attr->id() )
--- branches/KDE/4.1/kdelibs/khtml/html/html_baseimpl.h #873672:873673
@@ -97,6 +97,7 @@
 
     virtual void parseAttribute(AttributeImpl *);
     virtual void attach();
+    virtual void defaultEventHandler(EventImpl *evt);
 
     bool noResize() { return noresize; }
     void setLocation( const DOMString& str );
@@ -203,7 +204,6 @@
 
     virtual void parseAttribute(AttributeImpl *attr);
     virtual void attach();
-    virtual void defaultEventHandler(EventImpl *evt);
 
     virtual void computeContent();
     virtual void setWidgetNotify(QWidget *widget);
--- branches/KDE/4.1/kdelibs/khtml/khtmlview.cpp #873672:873673
@@ -244,6 +244,7 @@
         smoothScrolling = false;
         smoothScrollModeIsDefault = true;
         shouldSmoothScroll = false;
+        hasFrameset = false;
 #ifdef FIX_QT_BROKEN_QWIDGET_SCROLL
         oldVScrollUpdatesEnabled = true;
         oldHScrollUpdatesEnabled = true;
@@ -435,6 +436,7 @@
     bool smoothScrolling                          :1;
     bool smoothScrollModeIsDefault                :1;
     bool shouldSmoothScroll                       :1;
+    bool hasFrameset                              :1;
 #ifdef FIX_QT_BROKEN_QWIDGET_SCROLL
     bool oldHScrollUpdatesEnabled                 :1;
     bool oldVScrollUpdatesEnabled                 :1;
@@ -643,6 +645,9 @@
         setWidget( new QWidget(this) );
     widget()->setAttribute( Qt::WA_NoSystemBackground );
 
+    verticalScrollBar()->setCursor( Qt::ArrowCursor );
+    horizontalScrollBar()->setCursor( Qt::ArrowCursor );
+
     connect(&d->smoothScrollTimer, SIGNAL(timeout()), this, SLOT(scrollTick()));
 }
 
@@ -963,6 +968,14 @@
 
     m_part->xmlDocImpl()->renderer()->layer()->paint(&p, r);
 
+    if (d->hasFrameset) {
+        NodeImpl *body = static_cast<HTMLDocumentImpl*>(m_part->xmlDocImpl())->body();
+        if(body && body->renderer() && body->id() == ID_FRAMESET)
+            static_cast<RenderFrameSet*>(body->renderer())->paintFrameSetRules(&p, r);
+        else
+            d->hasFrameset = false;
+    }
+
     khtml::DrawContentsEvent event( &p, ex, ey, ew, eh );
     QApplication::sendEvent( m_part, &event );
 
@@ -1009,6 +1022,7 @@
                  QScrollArea::setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
                  QScrollArea::setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
                  body->renderer()->setNeedsLayout(true);
+                 d->hasFrameset = true;
              }
              else if (root) // only apply body's overflow to canvas if root has a visible overflow
                      ref = (!body || root->style()->hidesOverflow()) ? root : body->renderer();
@@ -3217,7 +3231,6 @@
 
         root->setNeedsLayoutAndMinMaxRecalc();
         root->layout();
-        khtml::RenderWidget::flushWidgetResizes(); // make sure widgets have their final size
 
         // check sizes ask for action.. (scale or clip)
 
--- branches/KDE/4.1/kdelibs/khtml/rendering/render_frames.cpp #873672:873673
@@ -442,7 +442,7 @@
 
 bool RenderFrameSet::userResize( MouseEventImpl *evt )
 {
-    if (needsLayout()) return false;
+  if (needsLayout()) return false;
 
   bool res = false;
   int _x = evt->clientX();
@@ -456,7 +456,6 @@
 
     m_hSplit = -1;
     m_vSplit = -1;
-    //bool resizePossible = true;
 
     // check if we're over a horizontal or vertical boundary
     int pos = m_gridLayout[1][0] + xPos();
@@ -494,7 +493,6 @@
 #endif
   }
 
-
   m_cursor = Qt::ArrowCursor;
   if(m_hSplit != -1 && m_vSplit != -1)
       m_cursor = Qt::SizeAllCursor;
@@ -513,10 +511,12 @@
   }
 
   // ### check the resize is not going out of bounds.
-  if(m_resizing && evt->id() == EventImpl::MOUSEUP_EVENT)
+  if(m_resizing)
   {
-    setResizing(false);
-    QApplication::restoreOverrideCursor();
+    if (evt->id() == EventImpl::MOUSEUP_EVENT) {
+        setResizing(false);
+        QApplication::restoreOverrideCursor();
+    }
 
     if(m_vSplit != -1 )
     {
@@ -526,6 +526,7 @@
       int delta = m_vSplitPos - _x;
       m_gridDelta[1][m_vSplit] -= delta;
       m_gridDelta[1][m_vSplit+1] += delta;
+      m_vSplitPos = _x;
     }
     if(m_hSplit != -1 )
     {
@@ -535,6 +536,7 @@
       int delta = m_hSplitPos - _y;
       m_gridDelta[0][m_hSplit] -= delta;
       m_gridDelta[0][m_hSplit+1] += delta;
+      m_hSplitPos = _y;
     }
 
     // this just schedules the relayout
@@ -542,6 +544,7 @@
     setNeedsLayout(true);
   }
 
+/*
   KHTMLView *view = canvas()->view();
   if ((m_resizing || evt->id() == EventImpl::MOUSEUP_EVENT) && view) {
       QPainter paint( view );
@@ -567,10 +570,27 @@
       }
       m_oldpos = p;
   }
-
+*/
   return res;
 }
 
+void RenderFrameSet::paintFrameSetRules( QPainter *paint, const QRect& damageRect )
+{
+  KHTMLView *view = canvas()->view();
+  if (view && !noResize()) {
+      paint->setPen( Qt::gray );
+      paint->setBrush( Qt::gray );
+      const int rBord = 3;
+      int sw = element()->border();
+
+      // ### implement me
+
+      (void) rBord;
+      (void) sw;
+  }
+
+}
+
 void RenderFrameSet::setResizing(bool e)
 {
       m_resizing = e;
--- branches/KDE/4.1/kdelibs/khtml/rendering/render_frames.h #873672:873673
@@ -52,6 +52,7 @@
     virtual void layout();
 
     void positionFrames( );
+    void paintFrameSetRules( QPainter *paint, const QRect& damageRect );
 
     bool resizing() const { return m_resizing; }
     bool noResize() const { return element()->noResize(); }
@@ -87,6 +88,7 @@
     int m_vSplitPos;
 
     bool m_resizing;
+    bool m_paint;
     bool m_clientresizing;
 };
 
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic