Changeset 36906 in webkit


Ignore:
Timestamp:
Sep 25, 2008 1:49:17 PM (16 years ago)
Author:
hyatt@apple.com
Message:

2008-09-25 David Hyatt <hyatt@apple.com>

https://bugs.webkit.org/show_bug.cgi?id=21118

Make the concept of whether you can blit on scroll cross-platform on ScrollView.

Reviewed by Sam Weinig

  • page/FrameView.cpp: (WebCore::FrameView::clear): (WebCore::FrameView::layout): (WebCore::FrameView::setUseSlowRepaints): (WebCore::FrameView::addSlowRepaintObject): (WebCore::FrameView::removeSlowRepaintObject):
  • platform/ScrollView.cpp: (WebCore::ScrollView::init): (WebCore::ScrollView::addChild): (WebCore::ScrollView::removeChild): (WebCore::ScrollView::setCanBlitOnScroll):
  • platform/ScrollView.h: (WebCore::ScrollView::canBlitOnScroll):
  • platform/gtk/ScrollViewGtk.cpp: (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate): (WebCore::ScrollView::ScrollViewPrivate::scrollBackingStore): (WebCore::ScrollView::ScrollView):
  • platform/mac/ScrollViewMac.mm: (WebCore::ScrollView::ScrollView): (WebCore::ScrollView::platformAddChild): (WebCore::ScrollView::platformRemoveChild): (WebCore::ScrollView::platformSetCanBlitOnScroll):
  • platform/qt/ScrollViewQt.cpp: (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate): (WebCore::ScrollView::ScrollViewPrivate::scrollBackingStore): (WebCore::ScrollView::ScrollView):
  • platform/win/ScrollViewWin.cpp: (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate): (WebCore::ScrollView::ScrollViewPrivate::scrollBackingStore): (WebCore::ScrollView::ScrollView):
  • platform/wx/ScrollViewWx.cpp: (WebCore::ScrollView::ScrollViewPrivate::ScrollViewPrivate): (WebCore::ScrollView::ScrollView): (WebCore::ScrollView::scrollBy):
Location:
trunk/WebCore
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r36905 r36906  
     12008-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
    1442008-09-25  Kevin McCullough  <kmccullough@apple.com>
    245
  • trunk/WebCore/page/FrameView.cpp

    r36889 r36906  
    225225void FrameView::clear()
    226226{
    227     setStaticBackground(false);
     227    setCanBlitOnScroll(true);
    228228   
    229229    d->reset();
     
    516516    ASSERT(!root->needsLayout());
    517517
    518     setStaticBackground(useSlowRepaints());
     518    setCanBlitOnScroll(!useSlowRepaints());
    519519
    520520    if (document->hasListenerType(Document::OVERFLOWCHANGED_LISTENER))
     
    650650{
    651651    d->m_useSlowRepaints = true;
    652     setStaticBackground(true);
     652    setCanBlitOnScroll(false);
    653653}
    654654
     
    656656{
    657657    if (!d->m_slowRepaintObjectCount)
    658         setStaticBackground(true);
     658        setCanBlitOnScroll(false);
    659659    d->m_slowRepaintObjectCount++;
    660660}
     
    665665    d->m_slowRepaintObjectCount--;
    666666    if (!d->m_slowRepaintObjectCount)
    667         setStaticBackground(d->m_useSlowRepaints);
     667        setCanBlitOnScroll(!d->m_useSlowRepaints);
    668668}
    669669
  • trunk/WebCore/platform/ScrollView.cpp

    r36886 r36906  
    2929namespace WebCore {
    3030
     31void ScrollView::init()
     32{
     33    m_canBlitOnScroll = true;
     34    if (platformWidget())
     35        platformSetCanBlitOnScroll();
     36}
     37
    3138void ScrollView::addChild(Widget* child)
    3239{
     
    3845        return;
    3946    }
    40     addChildPlatformWidget(child);
     47    platformAddChild(child);
    4148}
    4249
     
    4754    m_children.remove(child);
    4855    if (child->platformWidget())
    49         removeChildPlatformWidget(child);
     56        platformRemoveChild(child);
    5057}
     58
     59void 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)
     69void ScrollView::platformSetCanBlitOnScroll()
     70{
     71}
     72#endif
    5173
    5274}
  • trunk/WebCore/platform/ScrollView.h

    r36886 r36906  
    6464        void removeChild(Widget*);
    6565
     66        void setCanBlitOnScroll(bool);
     67        bool canBlitOnScroll() const { return m_canBlitOnScroll; }
     68
    6669        int visibleWidth() const;
    6770        int visibleHeight() const;
     
    102105        IntRect windowToContents(const IntRect&) const;
    103106        IntRect contentsToWindow(const IntRect&) const;
    104 
    105         void setStaticBackground(bool);
    106107
    107108        bool inWindow() const;
     
    151152    private:
    152153        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();
    156161
    157162#if PLATFORM(MAC) && defined __OBJC__
  • trunk/WebCore/platform/gtk/ScrollViewGtk.cpp

    r36886 r36906  
    7070    ScrollViewPrivate(ScrollView* _view)
    7171        : view(_view)
    72         , hasStaticBackground(false)
    7372        , scrollbarsSuppressed(false)
    7473        , vScrollbarMode(ScrollbarAuto)
     
    107106
    108107    ScrollView* view;
    109     bool hasStaticBackground;
    110108    bool scrollbarsSuppressed;
    111109    ScrollbarMode vScrollbarMode;
     
    179177    //FIXME update here?
    180178
    181     if (!hasStaticBackground) // The main frame can just blit the WebView window
     179    if (canBlitOnScroll()) // The main frame can just blit the WebView window
    182180       // FIXME: Find a way to blit subframes without blitting overlapping content
    183181       view->scrollBackingStore(-scrollDelta.width(), -scrollDelta.height(), scrollViewRect, clipRect);
     
    254252ScrollView::ScrollView()
    255253    : m_data(new ScrollViewPrivate(this))
    256 {}
     254{
     255    init();
     256}
    257257
    258258ScrollView::~ScrollView()
     
    456456}
    457457
    458 void ScrollView::setStaticBackground(bool flag)
    459 {
    460     m_data->hasStaticBackground = flag;
    461 }
    462 
    463458void ScrollView::setFrameGeometry(const IntRect& newGeometry)
    464459{
     
    477472}
    478473
    479 void ScrollView::addChildPlatformWidget(Widget* child)
     474void ScrollView::platformAddChild(Widget* child)
    480475{
    481476    if (!GTK_IS_SOCKET(child->platformWidget()))
     
    483478}
    484479
    485 void ScrollView::removeChildPlatformWidget(Widget* child)
     480void ScrollView::platformRemoveChild(Widget* child)
    486481{
    487482    if (GTK_WIDGET(containingWindow()) == GTK_WIDGET(child->platformWidget())->parent)
  • trunk/WebCore/platform/mac/ScrollViewMac.mm

    r36886 r36906  
    5858    : m_data(new ScrollViewPrivate)
    5959{
     60    init();
    6061}
    6162
     
    7273}
    7374
    74 void ScrollView::addChildPlatformWidget(Widget* child)
     75void ScrollView::platformAddChild(Widget* child)
    7576{
    7677    BEGIN_BLOCK_OBJC_EXCEPTIONS;
     
    8990}
    9091
    91 void ScrollView::removeChildPlatformWidget(Widget* child)
     92void ScrollView::platformRemoveChild(Widget* child)
    9293{
    9394    child->removeFromSuperview();
     95}
     96
     97void ScrollView::platformSetCanBlitOnScroll()
     98{
     99    BEGIN_BLOCK_OBJC_EXCEPTIONS;
     100    [[scrollView() contentView] setCopiesOnScroll:canBlitOnScroll()];
     101    END_BLOCK_OBJC_EXCEPTIONS;
    94102}
    95103
     
    368376}
    369377
    370 void ScrollView::setStaticBackground(bool staticBackground)
    371 {
    372     BEGIN_BLOCK_OBJC_EXCEPTIONS;
    373     [[scrollView() contentView] setCopiesOnScroll:!staticBackground];
    374     END_BLOCK_OBJC_EXCEPTIONS;
    375 }
    376 
    377378NSView *ScrollView::documentView() const
    378379{
  • trunk/WebCore/platform/qt/ScrollViewQt.cpp

    r36886 r36906  
    6868    ScrollViewPrivate(ScrollView* view)
    6969      : m_view(view)
    70       , m_hasStaticBackground(false)
    7170      , m_platformWidgets(0)
    7271      , m_scrollbarsSuppressed(false)
     
    9695    IntSize m_scrollOffset;
    9796    IntSize m_contentsSize;
    98     bool m_hasStaticBackground;
    9997    int  m_platformWidgets;
    10098    bool m_scrollbarsSuppressed;
     
    161159    updateRect.intersect(scrollViewRect);
    162160
    163     if (!m_hasStaticBackground && !m_view->root()->hasNativeWidgets()) {
     161    if (canBlitOnScroll() && !m_view->root()->hasNativeWidgets()) {
    164162       m_view->scrollBackingStore(-scrollDelta.width(), -scrollDelta.height(),
    165163                                  scrollViewRect, clipRect);
     
    187185    : m_data(new ScrollViewPrivate(this))
    188186{
     187    init();
    189188}
    190189
     
    438437        updateScrollbars(m_data->m_scrollOffset);
    439438    }
    440 }
    441 
    442 void ScrollView::setStaticBackground(bool flag)
    443 {
    444     m_data->m_hasStaticBackground = flag;
    445439}
    446440
     
    607601}
    608602
    609 void ScrollView::addChildPlatformWidget(Widget* child)
     603void ScrollView::platformAddChild(Widget* child)
    610604{
    611605    root()->incrementNativeWidgetCount();
    612606}
    613607
    614 void ScrollView::removeChildPlatformWidget(Widget* child)
     608void ScrollView::platformRemoveChild(Widget* child)
    615609{
    616610    root()->decrementNativeWidgetCount();
  • trunk/WebCore/platform/win/ScrollViewWin.cpp

    r36900 r36906  
    6767    ScrollViewPrivate(ScrollView* view)
    6868        : m_view(view)
    69         , m_hasStaticBackground(false)
    7069        , m_scrollbarsSuppressed(false)
    7170        , m_inUpdateScrollbars(false)
     
    9998    IntSize m_scrollOffset;
    10099    IntSize m_contentsSize;
    101     bool m_hasStaticBackground;
    102100    bool m_scrollbarsSuppressed;
    103101    bool m_inUpdateScrollbars;
     
    178176    }
    179177
    180     if (!m_hasStaticBackground) // The main frame can just blit the WebView window
     178    if (canBlitOnScroll()) // The main frame can just blit the WebView window
    181179       // FIXME: Find a way to blit subframes without blitting overlapping content
    182180       m_view->scrollBackingStore(-scrollDelta.width(), -scrollDelta.height(), scrollViewRect, clipRect);
     
    231229    : m_data(new ScrollViewPrivate(this))
    232230{
     231    init();
    233232}
    234233
     
    238237}
    239238
    240 void ScrollView::addChildPlatformWidget(Widget*)
    241 {
    242 }
    243 
    244 void ScrollView::removeChildPlatformWidget(Widget*)
     239void ScrollView::platformAddChild(Widget*)
     240{
     241}
     242
     243void ScrollView::platformRemoveChild(Widget*)
    245244{
    246245}
     
    470469        updateScrollbars(m_data->m_scrollOffset);
    471470    }
    472 }
    473 
    474 void ScrollView::setStaticBackground(bool flag)
    475 {
    476     m_data->m_hasStaticBackground = flag;
    477471}
    478472
  • trunk/WebCore/platform/wx/ScrollViewWx.cpp

    r36886 r36906  
    5151        : wxEvtHandler()
    5252        , m_scrollView(scrollView)
    53         , hasStaticBackground(false)
    5453        , suppressScrollbars(false)
    5554        , vScrollbarMode(ScrollbarAuto)
     
    118117    ScrollView* m_scrollView;
    119118
    120     bool hasStaticBackground;
    121119    bool suppressScrollbars;
    122120    ScrollbarMode vScrollbarMode;
     
    128126{
    129127    m_data = new ScrollViewPrivate(this);
     128    init();
    130129}
    131130
     
    226225    wxPoint delta(orig - newScrollOffset);
    227226
    228     if (m_data->hasStaticBackground)
     227    if (canBlitOnScroll())
     228        win->ScrollWindow(delta.x, delta.y);
     229    else
    229230        win->Refresh();
    230     else
    231         win->ScrollWindow(delta.x, delta.y);
    232231
    233232    adjustScrollbars();
     
    396395        adjustScrollbars();
    397396    }
    398 }
    399 
    400 void ScrollView::setStaticBackground(bool flag)
    401 {
    402     m_data->hasStaticBackground = flag;
    403397}
    404398
     
    441435
    442436// used for subframes support
    443 void ScrollView::addChildPlatformWidget(Widget* widget)
     437void ScrollView::platformAddChild(Widget* widget)
    444438{
    445439    // NB: In all cases I'm aware of,
     
    449443}
    450444
    451 void ScrollView::removeChildPlatformWidget(Widget* widget)
     445void ScrollView::platformRemoveChild(Widget* widget)
    452446{
    453447    if (platformWidget()) {
Note: See TracChangeset for help on using the changeset viewer.