void FrameView::invalidateRect(const IntRect& rect)
{
if (!parent()) {
- if (hostWindow())
+ if (hostWindow() && shouldUpdate())
hostWindow()->invalidateContentsAndWindow(rect, false /*immediate*/);
return;
}
m_margins.setHeight(h);
}
-bool FrameView::delegatesScrolling()
-{
- ASSERT(m_frame);
-
- if (parent())
- return false;
-
- return m_frame->settings() && m_frame->settings()->shouldDelegateScrolling();
-}
-
-bool FrameView::avoidScrollbarCreation()
+bool FrameView::avoidScrollbarCreation() const
{
ASSERT(m_frame);
if (!root)
return;
- setContentsSize(IntSize(root->rightLayoutOverflow(), root->bottomLayoutOverflow()));
+ IntSize size = IntSize(root->rightLayoutOverflow() - root->leftLayoutOverflow(), root->bottomLayoutOverflow() - root->topLayoutOverflow());
+
+ ScrollView::setScrollOrigin(IntPoint(-root->leftLayoutOverflow(), -root->topLayoutOverflow()), size == contentsSize());
+
+ setContentsSize(size);
}
void FrameView::applyOverflowToViewport(RenderObject* o, ScrollbarMode& hMode, ScrollbarMode& vMode)
return;
}
- if (!immediate && isOffscreen() && !shouldUpdateWhileOffscreen())
+ if (!shouldUpdate(immediate))
return;
#if ENABLE(TILED_BACKING_STORE)
void FrameView::doDeferredRepaints()
{
ASSERT(!m_deferringRepaints);
- if (isOffscreen() && !shouldUpdateWhileOffscreen()) {
+ if (!shouldUpdate()) {
m_repaintRects.clear();
m_repaintCount = 0;
return;
m_shouldUpdateWhileOffscreen = shouldUpdateWhileOffscreen;
}
+bool FrameView::shouldUpdate(bool immediateRequested) const
+{
+ if (!immediateRequested && isOffscreen() && !shouldUpdateWhileOffscreen())
+ return false;
+ if (!m_frame || !m_frame->document() || m_frame->document()->mayCauseFlashOfUnstyledContent())
+ return false;
+ return true;
+}
+
void FrameView::scheduleEvent(PassRefPtr<Event> event, PassRefPtr<Node> eventTarget)
{
if (!m_enqueueEvents) {