Changeset 36906 in webkit
- Timestamp:
- Sep 25, 2008 1:49:17 PM (16 years ago)
- Location:
- trunk/WebCore
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebCore/ChangeLog
r36905 r36906 1 2008-09-25 David Hyatt <hyatt@apple.com> 2 3 https://bugs.webkit.org/show_bug.cgi?id=21118 4 5 Make the concept of whether you can blit on scroll cross-platform on ScrollView. 6 7 Reviewed by Sam Weinig 8 9 * page/FrameView.cpp: 10 (WebCore::FrameView::clear): 11 (WebCore::FrameView::layout): 12 (WebCore::FrameView::setUseSlowRepaints): 13 (WebCore::FrameView::addSlowRepaintObject): 14 (WebCore::FrameView::removeSlowRepaintObject): 15 * platform/ScrollView.cpp: 16 (WebCore::ScrollView::init): 17 (WebCore::ScrollView::addChild): 18 (WebCore::ScrollView::removeChild): 19 (WebCore::ScrollView::setCanBlitOnScroll): 20 * platform/ScrollView.h: 21 (WebCore::ScrollView::canBlitOnScroll): 22 * platform/gtk/ScrollViewGtk.cpp: 23 (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate): 24 (WebCore::ScrollView::ScrollViewPrivate::scrollBackingStore): 25 (WebCore::ScrollView::ScrollView): 26 * platform/mac/ScrollViewMac.mm: 27 (WebCore::ScrollView::ScrollView): 28 (WebCore::ScrollView::platformAddChild): 29 (WebCore::ScrollView::platformRemoveChild): 30 (WebCore::ScrollView::platformSetCanBlitOnScroll): 31 * platform/qt/ScrollViewQt.cpp: 32 (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate): 33 (WebCore::ScrollView::ScrollViewPrivate::scrollBackingStore): 34 (WebCore::ScrollView::ScrollView): 35 * platform/win/ScrollViewWin.cpp: 36 (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate): 37 (WebCore::ScrollView::ScrollViewPrivate::scrollBackingStore): 38 (WebCore::ScrollView::ScrollView): 39 * platform/wx/ScrollViewWx.cpp: 40 (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate): 41 (WebCore::ScrollView::ScrollView): 42 (WebCore::ScrollView::scrollBy): 43 1 44 2008-09-25 Kevin McCullough <kmccullough@apple.com> 2 45 -
trunk/WebCore/page/FrameView.cpp
r36889 r36906 225 225 void FrameView::clear() 226 226 { 227 set StaticBackground(false);227 setCanBlitOnScroll(true); 228 228 229 229 d->reset(); … … 516 516 ASSERT(!root->needsLayout()); 517 517 518 set StaticBackground(useSlowRepaints());518 setCanBlitOnScroll(!useSlowRepaints()); 519 519 520 520 if (document->hasListenerType(Document::OVERFLOWCHANGED_LISTENER)) … … 650 650 { 651 651 d->m_useSlowRepaints = true; 652 set StaticBackground(true);652 setCanBlitOnScroll(false); 653 653 } 654 654 … … 656 656 { 657 657 if (!d->m_slowRepaintObjectCount) 658 set StaticBackground(true);658 setCanBlitOnScroll(false); 659 659 d->m_slowRepaintObjectCount++; 660 660 } … … 665 665 d->m_slowRepaintObjectCount--; 666 666 if (!d->m_slowRepaintObjectCount) 667 set StaticBackground(d->m_useSlowRepaints);667 setCanBlitOnScroll(!d->m_useSlowRepaints); 668 668 } 669 669 -
trunk/WebCore/platform/ScrollView.cpp
r36886 r36906 29 29 namespace WebCore { 30 30 31 void ScrollView::init() 32 { 33 m_canBlitOnScroll = true; 34 if (platformWidget()) 35 platformSetCanBlitOnScroll(); 36 } 37 31 38 void ScrollView::addChild(Widget* child) 32 39 { … … 38 45 return; 39 46 } 40 addChildPlatformWidget(child);47 platformAddChild(child); 41 48 } 42 49 … … 47 54 m_children.remove(child); 48 55 if (child->platformWidget()) 49 removeChildPlatformWidget(child);56 platformRemoveChild(child); 50 57 } 58 59 void ScrollView::setCanBlitOnScroll(bool b) 60 { 61 if (m_canBlitOnScroll == b) 62 return; 63 m_canBlitOnScroll = b; 64 if (platformWidget()) 65 platformSetCanBlitOnScroll(); 66 } 67 68 #if !PLATFORM(MAC) 69 void ScrollView::platformSetCanBlitOnScroll() 70 { 71 } 72 #endif 51 73 52 74 } -
trunk/WebCore/platform/ScrollView.h
r36886 r36906 64 64 void removeChild(Widget*); 65 65 66 void setCanBlitOnScroll(bool); 67 bool canBlitOnScroll() const { return m_canBlitOnScroll; } 68 66 69 int visibleWidth() const; 67 70 int visibleHeight() const; … … 102 105 IntRect windowToContents(const IntRect&) const; 103 106 IntRect contentsToWindow(const IntRect&) const; 104 105 void setStaticBackground(bool);106 107 107 108 bool inWindow() const; … … 151 152 private: 152 153 HashSet<Widget*> m_children; 153 154 void addChildPlatformWidget(Widget*); 155 void removeChildPlatformWidget(Widget*); 154 bool m_canBlitOnScroll; 155 156 void init(); 157 158 void platformAddChild(Widget*); 159 void platformRemoveChild(Widget*); 160 void platformSetCanBlitOnScroll(); 156 161 157 162 #if PLATFORM(MAC) && defined __OBJC__ -
trunk/WebCore/platform/gtk/ScrollViewGtk.cpp
r36886 r36906 70 70 ScrollViewPrivate(ScrollView* _view) 71 71 : view(_view) 72 , hasStaticBackground(false)73 72 , scrollbarsSuppressed(false) 74 73 , vScrollbarMode(ScrollbarAuto) … … 107 106 108 107 ScrollView* view; 109 bool hasStaticBackground;110 108 bool scrollbarsSuppressed; 111 109 ScrollbarMode vScrollbarMode; … … 179 177 //FIXME update here? 180 178 181 if ( !hasStaticBackground) // The main frame can just blit the WebView window179 if (canBlitOnScroll()) // The main frame can just blit the WebView window 182 180 // FIXME: Find a way to blit subframes without blitting overlapping content 183 181 view->scrollBackingStore(-scrollDelta.width(), -scrollDelta.height(), scrollViewRect, clipRect); … … 254 252 ScrollView::ScrollView() 255 253 : m_data(new ScrollViewPrivate(this)) 256 {} 254 { 255 init(); 256 } 257 257 258 258 ScrollView::~ScrollView() … … 456 456 } 457 457 458 void ScrollView::setStaticBackground(bool flag)459 {460 m_data->hasStaticBackground = flag;461 }462 463 458 void ScrollView::setFrameGeometry(const IntRect& newGeometry) 464 459 { … … 477 472 } 478 473 479 void ScrollView:: addChildPlatformWidget(Widget* child)474 void ScrollView::platformAddChild(Widget* child) 480 475 { 481 476 if (!GTK_IS_SOCKET(child->platformWidget())) … … 483 478 } 484 479 485 void ScrollView:: removeChildPlatformWidget(Widget* child)480 void ScrollView::platformRemoveChild(Widget* child) 486 481 { 487 482 if (GTK_WIDGET(containingWindow()) == GTK_WIDGET(child->platformWidget())->parent) -
trunk/WebCore/platform/mac/ScrollViewMac.mm
r36886 r36906 58 58 : m_data(new ScrollViewPrivate) 59 59 { 60 init(); 60 61 } 61 62 … … 72 73 } 73 74 74 void ScrollView:: addChildPlatformWidget(Widget* child)75 void ScrollView::platformAddChild(Widget* child) 75 76 { 76 77 BEGIN_BLOCK_OBJC_EXCEPTIONS; … … 89 90 } 90 91 91 void ScrollView:: removeChildPlatformWidget(Widget* child)92 void ScrollView::platformRemoveChild(Widget* child) 92 93 { 93 94 child->removeFromSuperview(); 95 } 96 97 void ScrollView::platformSetCanBlitOnScroll() 98 { 99 BEGIN_BLOCK_OBJC_EXCEPTIONS; 100 [[scrollView() contentView] setCopiesOnScroll:canBlitOnScroll()]; 101 END_BLOCK_OBJC_EXCEPTIONS; 94 102 } 95 103 … … 368 376 } 369 377 370 void ScrollView::setStaticBackground(bool staticBackground)371 {372 BEGIN_BLOCK_OBJC_EXCEPTIONS;373 [[scrollView() contentView] setCopiesOnScroll:!staticBackground];374 END_BLOCK_OBJC_EXCEPTIONS;375 }376 377 378 NSView *ScrollView::documentView() const 378 379 { -
trunk/WebCore/platform/qt/ScrollViewQt.cpp
r36886 r36906 68 68 ScrollViewPrivate(ScrollView* view) 69 69 : m_view(view) 70 , m_hasStaticBackground(false)71 70 , m_platformWidgets(0) 72 71 , m_scrollbarsSuppressed(false) … … 96 95 IntSize m_scrollOffset; 97 96 IntSize m_contentsSize; 98 bool m_hasStaticBackground;99 97 int m_platformWidgets; 100 98 bool m_scrollbarsSuppressed; … … 161 159 updateRect.intersect(scrollViewRect); 162 160 163 if ( !m_hasStaticBackground&& !m_view->root()->hasNativeWidgets()) {161 if (canBlitOnScroll() && !m_view->root()->hasNativeWidgets()) { 164 162 m_view->scrollBackingStore(-scrollDelta.width(), -scrollDelta.height(), 165 163 scrollViewRect, clipRect); … … 187 185 : m_data(new ScrollViewPrivate(this)) 188 186 { 187 init(); 189 188 } 190 189 … … 438 437 updateScrollbars(m_data->m_scrollOffset); 439 438 } 440 }441 442 void ScrollView::setStaticBackground(bool flag)443 {444 m_data->m_hasStaticBackground = flag;445 439 } 446 440 … … 607 601 } 608 602 609 void ScrollView:: addChildPlatformWidget(Widget* child)603 void ScrollView::platformAddChild(Widget* child) 610 604 { 611 605 root()->incrementNativeWidgetCount(); 612 606 } 613 607 614 void ScrollView:: removeChildPlatformWidget(Widget* child)608 void ScrollView::platformRemoveChild(Widget* child) 615 609 { 616 610 root()->decrementNativeWidgetCount(); -
trunk/WebCore/platform/win/ScrollViewWin.cpp
r36900 r36906 67 67 ScrollViewPrivate(ScrollView* view) 68 68 : m_view(view) 69 , m_hasStaticBackground(false)70 69 , m_scrollbarsSuppressed(false) 71 70 , m_inUpdateScrollbars(false) … … 99 98 IntSize m_scrollOffset; 100 99 IntSize m_contentsSize; 101 bool m_hasStaticBackground;102 100 bool m_scrollbarsSuppressed; 103 101 bool m_inUpdateScrollbars; … … 178 176 } 179 177 180 if ( !m_hasStaticBackground) // The main frame can just blit the WebView window178 if (canBlitOnScroll()) // The main frame can just blit the WebView window 181 179 // FIXME: Find a way to blit subframes without blitting overlapping content 182 180 m_view->scrollBackingStore(-scrollDelta.width(), -scrollDelta.height(), scrollViewRect, clipRect); … … 231 229 : m_data(new ScrollViewPrivate(this)) 232 230 { 231 init(); 233 232 } 234 233 … … 238 237 } 239 238 240 void ScrollView:: addChildPlatformWidget(Widget*)241 { 242 } 243 244 void ScrollView:: removeChildPlatformWidget(Widget*)239 void ScrollView::platformAddChild(Widget*) 240 { 241 } 242 243 void ScrollView::platformRemoveChild(Widget*) 245 244 { 246 245 } … … 470 469 updateScrollbars(m_data->m_scrollOffset); 471 470 } 472 }473 474 void ScrollView::setStaticBackground(bool flag)475 {476 m_data->m_hasStaticBackground = flag;477 471 } 478 472 -
trunk/WebCore/platform/wx/ScrollViewWx.cpp
r36886 r36906 51 51 : wxEvtHandler() 52 52 , m_scrollView(scrollView) 53 , hasStaticBackground(false)54 53 , suppressScrollbars(false) 55 54 , vScrollbarMode(ScrollbarAuto) … … 118 117 ScrollView* m_scrollView; 119 118 120 bool hasStaticBackground;121 119 bool suppressScrollbars; 122 120 ScrollbarMode vScrollbarMode; … … 128 126 { 129 127 m_data = new ScrollViewPrivate(this); 128 init(); 130 129 } 131 130 … … 226 225 wxPoint delta(orig - newScrollOffset); 227 226 228 if (m_data->hasStaticBackground) 227 if (canBlitOnScroll()) 228 win->ScrollWindow(delta.x, delta.y); 229 else 229 230 win->Refresh(); 230 else231 win->ScrollWindow(delta.x, delta.y);232 231 233 232 adjustScrollbars(); … … 396 395 adjustScrollbars(); 397 396 } 398 }399 400 void ScrollView::setStaticBackground(bool flag)401 {402 m_data->hasStaticBackground = flag;403 397 } 404 398 … … 441 435 442 436 // used for subframes support 443 void ScrollView:: addChildPlatformWidget(Widget* widget)437 void ScrollView::platformAddChild(Widget* widget) 444 438 { 445 439 // NB: In all cases I'm aware of, … … 449 443 } 450 444 451 void ScrollView:: removeChildPlatformWidget(Widget* widget)445 void ScrollView::platformRemoveChild(Widget* widget) 452 446 { 453 447 if (platformWidget()) {
Note: See TracChangeset
for help on using the changeset viewer.