[webkit-changes] cvs commit: WebCore/khtml/rendering
render_form.cpp render_frames.cpp render_frames.h
render_layer.cpp render_object.cpp render_object.h
render_replaced.cpp render_replaced.h
Maciej
mjs at opensource.apple.com
Tue Oct 18 13:45:41 PDT 2005
mjs 05/10/18 13:45:40
Modified: . ChangeLog
khtml khtmlview.cpp
khtml/rendering render_form.cpp render_frames.cpp
render_frames.h render_layer.cpp render_object.cpp
render_object.h render_replaced.cpp
render_replaced.h
Log:
- back out the last change, it caused a regression with painting of offscreen plugins
* khtml/khtmlview.cpp:
(KHTMLView::layout):
* khtml/rendering/render_form.cpp:
(RenderFormElement::layout):
* khtml/rendering/render_frames.cpp:
(RenderPartObject::layout):
(RenderPart::updateWidgetPositions):
* khtml/rendering/render_frames.h:
* khtml/rendering/render_layer.cpp:
(khtml::RenderLayer::scrollToOffset):
* khtml/rendering/render_object.cpp:
(RenderObject::updateWidgetPositions):
* khtml/rendering/render_object.h:
* khtml/rendering/render_replaced.cpp:
(RenderWidget::layout):
(RenderWidget::updateWidgetPositions):
* khtml/rendering/render_replaced.h:
Revision Changes Path
1.250 +22 -0 WebCore/ChangeLog
Index: ChangeLog
===================================================================
RCS file: /cvs/root/WebCore/ChangeLog,v
retrieving revision 1.249
retrieving revision 1.250
diff -u -r1.249 -r1.250
--- ChangeLog 18 Oct 2005 17:08:15 -0000 1.249
+++ ChangeLog 18 Oct 2005 20:45:31 -0000 1.250
@@ -1,5 +1,27 @@
2005-10-18 Maciej Stachowiak <mjs at apple.com>
+ - back out the last change, it caused a regression with painting of offscreen plugins
+
+ * khtml/khtmlview.cpp:
+ (KHTMLView::layout):
+ * khtml/rendering/render_form.cpp:
+ (RenderFormElement::layout):
+ * khtml/rendering/render_frames.cpp:
+ (RenderPartObject::layout):
+ (RenderPart::updateWidgetPositions):
+ * khtml/rendering/render_frames.h:
+ * khtml/rendering/render_layer.cpp:
+ (khtml::RenderLayer::scrollToOffset):
+ * khtml/rendering/render_object.cpp:
+ (RenderObject::updateWidgetPositions):
+ * khtml/rendering/render_object.h:
+ * khtml/rendering/render_replaced.cpp:
+ (RenderWidget::layout):
+ (RenderWidget::updateWidgetPositions):
+ * khtml/rendering/render_replaced.h:
+
+2005-10-18 Maciej Stachowiak <mjs at apple.com>
+
Reviewed by Dave Hyatt.
Committed by John Sullivan.
1.148 +5 -0 WebCore/khtml/khtmlview.cpp
Index: khtmlview.cpp
===================================================================
RCS file: /cvs/root/WebCore/khtml/khtmlview.cpp,v
retrieving revision 1.147
retrieving revision 1.148
diff -u -r1.147 -r1.148
--- khtmlview.cpp 18 Oct 2005 17:08:16 -0000 1.147
+++ khtmlview.cpp 18 Oct 2005 20:45:36 -0000 1.148
@@ -699,6 +699,11 @@
// Now update the positions of all layers.
layer->updateLayerPositions(d->doFullRepaint);
+#if APPLE_CHANGES
+ // We update our widget positions right after doing a layout.
+ root->updateWidgetPositions();
+#endif
+
if (d->repaintRects && !d->repaintRects->isEmpty()) {
// FIXME: Could optimize this and have objects removed from this list
// if they ever do full repaints.
1.128 +5 -11 WebCore/khtml/rendering/render_form.cpp
Index: render_form.cpp
===================================================================
RCS file: /cvs/root/WebCore/khtml/rendering/render_form.cpp,v
retrieving revision 1.127
retrieving revision 1.128
diff -u -r1.127 -r1.128
--- render_form.cpp 18 Oct 2005 17:08:17 -0000 1.127
+++ render_form.cpp 18 Oct 2005 20:45:37 -0000 1.128
@@ -165,27 +165,21 @@
void RenderFormElement::layout()
{
- KHTMLAssert(needsLayout());
- KHTMLAssert(minMaxKnown());
+ KHTMLAssert( needsLayout() );
+ KHTMLAssert( minMaxKnown() );
- QRect oldBounds;
- bool checkForRepaint = checkForRepaintDuringLayout();
- if (checkForRepaint)
- oldBounds = getAbsoluteRepaintRect();
-
// minimum height
m_height = 0;
calcWidth();
calcHeight();
- if (m_widget)
+#if !APPLE_CHANGES
+ if ( m_widget )
resizeWidget(m_widget,
m_width-borderLeft()-borderRight()-paddingLeft()-paddingRight(),
m_height-borderLeft()-borderRight()-paddingLeft()-paddingRight());
-
- if (checkForRepaint)
- repaintAfterLayoutIfNeeded(oldBounds, oldBounds);
+#endif
setNeedsLayout(false);
}
1.80 +30 -8 WebCore/khtml/rendering/render_frames.cpp
Index: render_frames.cpp
===================================================================
RCS file: /cvs/root/WebCore/khtml/rendering/render_frames.cpp,v
retrieving revision 1.79
retrieving revision 1.80
diff -u -r1.79 -r1.80
--- render_frames.cpp 18 Oct 2005 17:08:17 -0000 1.79
+++ render_frames.cpp 18 Oct 2005 20:45:37 -0000 1.80
@@ -868,11 +868,6 @@
KHTMLAssert( needsLayout() );
KHTMLAssert( minMaxKnown() );
- QRect oldBounds;
- bool checkForRepaint = checkForRepaintDuringLayout();
- if (checkForRepaint)
- oldBounds = getAbsoluteRepaintRect();
-
#if !APPLE_CHANGES
int m_oldwidth = m_width;
int m_oldheight = m_height;
@@ -883,9 +878,6 @@
RenderPart::layout();
- if (checkForRepaint)
- repaintAfterLayoutIfNeeded(oldBounds, oldBounds);
-
setNeedsLayout(false);
}
@@ -927,4 +919,34 @@
}
}
+#if APPLE_CHANGES
+// FIXME: This should not be necessary. Remove this once WebKit knows to properly schedule
+// layouts using WebCore when objects resize.
+void RenderPart::updateWidgetPositions()
+{
+ if (!m_widget)
+ return;
+
+ int x, y, width, height;
+ absolutePosition(x,y);
+ x += borderLeft() + paddingLeft();
+ y += borderTop() + paddingTop();
+ width = m_width - borderLeft() - borderRight() - paddingLeft() - paddingRight();
+ height = m_height - borderTop() - borderBottom() - paddingTop() - paddingBottom();
+ QRect newBounds(x,y,width,height);
+ if (newBounds != m_widget->frameGeometry()) {
+ // The widget changed positions. Update the frame geometry.
+ RenderArena *arena = ref();
+ element()->ref();
+ m_widget->setFrameGeometry(newBounds);
+ element()->deref();
+ deref(arena);
+
+ QScrollView *view = static_cast<QScrollView *>(m_widget);
+ if (view && view->inherits("KHTMLView"))
+ static_cast<KHTMLView*>(view)->layout();
+ }
+}
+#endif
+
#include "render_frames.moc"
1.19 +6 -0 WebCore/khtml/rendering/render_frames.h
Index: render_frames.h
===================================================================
RCS file: /cvs/root/WebCore/khtml/rendering/render_frames.h,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- render_frames.h 18 Oct 2005 17:08:17 -0000 1.18
+++ render_frames.h 18 Oct 2005 20:45:37 -0000 1.19
@@ -100,6 +100,12 @@
virtual void setWidget( QWidget *widget );
+#if APPLE_CHANGES
+ // FIXME: This should not be necessary. Remove this once WebKit knows to properly schedule
+ // layouts using WebCore when objects resize.
+ void updateWidgetPositions();
+#endif
+
bool hasFallbackContent() const { return m_hasFallbackContent; }
public slots:
1.113 +3 -0 WebCore/khtml/rendering/render_layer.cpp
Index: render_layer.cpp
===================================================================
RCS file: /cvs/root/WebCore/khtml/rendering/render_layer.cpp,v
retrieving revision 1.112
retrieving revision 1.113
diff -u -r1.112 -r1.113
--- render_layer.cpp 18 Oct 2005 17:08:17 -0000 1.112
+++ render_layer.cpp 18 Oct 2005 20:45:37 -0000 1.113
@@ -527,6 +527,9 @@
child->updateLayerPositions(false, false);
#if APPLE_CHANGES
+ // Move our widgets.
+ m_object->updateWidgetPositions();
+
// Update dashboard regions, scrolling may change the clip of a
// particular region.
RenderCanvas *canvas = renderer()->canvas();
1.222 +6 -0 WebCore/khtml/rendering/render_object.cpp
Index: render_object.cpp
===================================================================
RCS file: /cvs/root/WebCore/khtml/rendering/render_object.cpp,v
retrieving revision 1.221
retrieving revision 1.222
diff -u -r1.221 -r1.222
--- render_object.cpp 18 Oct 2005 17:08:17 -0000 1.221
+++ render_object.cpp 18 Oct 2005 20:45:38 -0000 1.222
@@ -2380,6 +2380,12 @@
}
#if APPLE_CHANGES
+void RenderObject::updateWidgetPositions()
+{
+ for (RenderObject* curr = firstChild(); curr; curr = curr->nextSibling())
+ curr->updateWidgetPositions();
+}
+
QValueList<DashboardRegionValue> RenderObject::computeDashboardRegions()
{
QValueList<DashboardRegionValue> regions;
1.163 +3 -0 WebCore/khtml/rendering/render_object.h
Index: render_object.h
===================================================================
RCS file: /cvs/root/WebCore/khtml/rendering/render_object.h,v
retrieving revision 1.162
retrieving revision 1.163
diff -u -r1.162 -r1.163
--- render_object.h 18 Oct 2005 17:08:17 -0000 1.162
+++ render_object.h 18 Oct 2005 20:45:38 -0000 1.163
@@ -463,6 +463,9 @@
virtual int availableHeight() const { return 0; }
#if APPLE_CHANGES
+ // Called recursively to update the absolute positions of all widgets.
+ virtual void updateWidgetPositions();
+
QValueList<DashboardRegionValue> RenderObject::computeDashboardRegions();
void addDashboardRegions (QValueList<DashboardRegionValue>& regions);
void collectDashboardRegions (QValueList<DashboardRegionValue>& regions);
1.90 +41 -7 WebCore/khtml/rendering/render_replaced.cpp
Index: render_replaced.cpp
===================================================================
RCS file: /cvs/root/WebCore/khtml/rendering/render_replaced.cpp,v
retrieving revision 1.89
retrieving revision 1.90
diff -u -r1.89 -r1.90
--- render_replaced.cpp 18 Oct 2005 17:08:17 -0000 1.89
+++ render_replaced.cpp 18 Oct 2005 20:45:38 -0000 1.90
@@ -339,16 +339,17 @@
m_deleteWidget = deleteWidget;
}
-void RenderWidget::layout()
+void RenderWidget::layout( )
{
- KHTMLAssert(needsLayout());
- KHTMLAssert(minMaxKnown());
-
- if (m_widget) {
- resizeWidget(m_widget,
+ KHTMLAssert( needsLayout() );
+ KHTMLAssert( minMaxKnown() );
+#if !APPLE_CHANGES
+ if ( m_widget ) {
+ resizeWidget( m_widget,
m_width-borderLeft()-borderRight()-paddingLeft()-paddingRight(),
- m_height-borderLeft()-borderRight()-paddingLeft()-paddingRight());
+ m_height-borderLeft()-borderRight()-paddingLeft()-paddingRight() );
}
+#endif
setNeedsLayout(false);
}
@@ -541,6 +542,39 @@
arenaDelete(arena, this);
}
+#if APPLE_CHANGES
+void RenderWidget::updateWidgetPositions()
+{
+ if (!m_widget)
+ return;
+
+ int x, y, width, height;
+ absolutePosition(x,y);
+ x += borderLeft() + paddingLeft();
+ y += borderTop() + paddingTop();
+ width = m_width - borderLeft() - borderRight() - paddingLeft() - paddingRight();
+ height = m_height - borderTop() - borderBottom() - paddingTop() - paddingBottom();
+ QRect newBounds(x,y,width,height);
+ QRect oldBounds(m_widget->frameGeometry());
+ if (newBounds != oldBounds) {
+ // The widget changed positions. Update the frame geometry.
+ if (checkForRepaintDuringLayout()) {
+ RenderCanvas* c = canvas();
+ if (!c->printingMode()) {
+ c->repaintViewRectangle(oldBounds);
+ c->repaintViewRectangle(newBounds);
+ }
+ }
+
+ RenderArena *arena = ref();
+ element()->ref();
+ m_widget->setFrameGeometry(newBounds);
+ element()->deref();
+ deref(arena);
+ }
+}
+#endif
+
void RenderWidget::setSelectionState(SelectionState s)
{
if (m_selectionState != s) {
1.35 +1 -0 WebCore/khtml/rendering/render_replaced.h
Index: render_replaced.h
===================================================================
RCS file: /cvs/root/WebCore/khtml/rendering/render_replaced.h,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -r1.34 -r1.35
--- render_replaced.h 18 Oct 2005 17:08:17 -0000 1.34
+++ render_replaced.h 18 Oct 2005 20:45:38 -0000 1.35
@@ -100,6 +100,7 @@
#if APPLE_CHANGES
void sendConsumedMouseUp();
+ virtual void updateWidgetPositions();
#endif
public slots:
More information about the webkit-changes
mailing list