WebKit Bugzilla
New
Browse
Search+
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
[patch]
WIP - it works but is not to be reviewed or landed
p (text/plain), 6.28 KB, created by
Antonio Gomes
on 2010-03-30 12:56:06 PDT
(
hide
)
Description:
WIP - it works but is not to be reviewed or landed
Filename:
MIME Type:
Creator:
Antonio Gomes
Created:
2010-03-30 12:56:06 PDT
Size:
6.28 KB
patch
obsolete
>diff --git a/WebCore/page/Frame.cpp b/WebCore/page/Frame.cpp >index 614bbb9..0ab1522 100644 >--- a/WebCore/page/Frame.cpp >+++ b/WebCore/page/Frame.cpp >@@ -1790,7 +1790,8 @@ void Frame::createView(const IntSize& viewportSize, > } else > frameView = FrameView::create(this); > >- frameView->setScrollbarModes(horizontalScrollbarMode, verticalScrollbarMode); >+ frameView->setHorizontalScrollbarMode(horizontalScrollbarMode, horizontalScrollbarMode != ScrollbarAuto); >+ frameView->setVerticalScrollbarMode(verticalScrollbarMode, verticalScrollbarMode != ScrollbarAuto); > > setView(frameView); > >diff --git a/WebCore/page/FrameView.cpp b/WebCore/page/FrameView.cpp >index cecb406..c2943e4 100644 >--- a/WebCore/page/FrameView.cpp >+++ b/WebCore/page/FrameView.cpp >@@ -605,12 +605,18 @@ void FrameView::layout(bool allowSubtree) > > ScrollbarMode hMode; > ScrollbarMode vMode; >- if (m_canHaveScrollbars) { >- hMode = ScrollbarAuto; >- vMode = ScrollbarAuto; >- } else { >+ >+ if (!m_canHaveScrollbars) { > hMode = ScrollbarAlwaysOff; > vMode = ScrollbarAlwaysOff; >+ } else { >+ scrollbarModes(hMode, vMode); >+ >+ if (hMode == ScrollbarAlwaysOff && !isHorizontalScrollbarLocked()) >+ hMode = ScrollbarAuto; >+ >+ if (vMode == ScrollbarAlwaysOff && !isVerticalScrollbarLocked()) >+ vMode = ScrollbarAuto; > } > > if (!subtree) { >diff --git a/WebCore/platform/ScrollView.cpp b/WebCore/platform/ScrollView.cpp >index e237934..73fc970 100644 >--- a/WebCore/platform/ScrollView.cpp >+++ b/WebCore/platform/ScrollView.cpp >@@ -41,6 +41,8 @@ namespace WebCore { > ScrollView::ScrollView() > : m_horizontalScrollbarMode(ScrollbarAuto) > , m_verticalScrollbarMode(ScrollbarAuto) >+ , m_horizontalScrollbarLock(false) >+ , m_verticalScrollbarLock(false) > , m_prohibitsScrolling(false) > , m_canBlitOnScroll(true) > , m_scrollbarsAvoidingResizer(0) >@@ -108,12 +110,26 @@ PassRefPtr<Scrollbar> ScrollView::createScrollbar(ScrollbarOrientation orientati > return Scrollbar::createNativeScrollbar(this, orientation, RegularScrollbar); > } > >-void ScrollView::setScrollbarModes(ScrollbarMode horizontalMode, ScrollbarMode verticalMode) >+void ScrollView::setScrollbarModes(ScrollbarMode horizontalMode, ScrollbarMode verticalMode, bool lock) > { >- if (horizontalMode == horizontalScrollbarMode() && verticalMode == verticalScrollbarMode()) >+ bool update = false; >+ >+ if (horizontalMode != horizontalScrollbarMode() && !m_horizontalScrollbarLock) { >+ m_horizontalScrollbarMode = horizontalMode; >+ update = true; >+ } >+ >+ if (verticalMode != verticalScrollbarMode() && !m_verticalScrollbarLock) { >+ m_verticalScrollbarMode = verticalMode; >+ update = true; >+ } >+ >+ if (lock) >+ m_horizontalScrollbarLock = m_verticalScrollbarLock = lock; >+ >+ if (!update) > return; >- m_horizontalScrollbarMode = horizontalMode; >- m_verticalScrollbarMode = verticalMode; >+ > if (platformWidget()) > platformSetScrollbarModes(); > else >@@ -131,6 +147,36 @@ void ScrollView::scrollbarModes(ScrollbarMode& horizontalMode, ScrollbarMode& ve > verticalMode = m_verticalScrollbarMode; > } > >+void ScrollView::setHorizontalScrollbarMode(ScrollbarMode mode, bool lock) >+{ >+ if (mode != horizontalScrollbarMode() && !m_horizontalScrollbarLock) { >+ m_horizontalScrollbarMode = mode; >+ >+ if (lock) >+ m_horizontalScrollbarLock = lock; >+ >+ if (platformWidget()) >+ platformSetScrollbarModes(); >+ else >+ updateScrollbars(scrollOffset()); >+ } >+} >+ >+void ScrollView::setVerticalScrollbarMode(ScrollbarMode mode, bool lock) >+{ >+ if (mode != verticalScrollbarMode() && !m_verticalScrollbarLock) { >+ m_verticalScrollbarMode = mode; >+ >+ if (lock) >+ m_verticalScrollbarLock = lock; >+ >+ if (platformWidget()) >+ platformSetScrollbarModes(); >+ else >+ updateScrollbars(scrollOffset()); >+ } >+} >+ > void ScrollView::setCanHaveScrollbars(bool canScroll) > { > ScrollbarMode newHorizontalMode; >diff --git a/WebCore/platform/ScrollView.h b/WebCore/platform/ScrollView.h >index f5bb169..0395b58 100644 >--- a/WebCore/platform/ScrollView.h >+++ b/WebCore/platform/ScrollView.h >@@ -83,12 +83,20 @@ public: > // Auto means show a scrollbar only when one is needed. > // Note that for platforms with native widgets, these modes are considered advisory. In other words the underlying native > // widget may choose not to honor the requested modes. >- void setScrollbarModes(ScrollbarMode horizontalMode, ScrollbarMode verticalMode); >- void setHorizontalScrollbarMode(ScrollbarMode mode) { setScrollbarModes(mode, verticalScrollbarMode()); } >- void setVerticalScrollbarMode(ScrollbarMode mode) { setScrollbarModes(horizontalScrollbarMode(), mode); } >+ void setScrollbarModes(ScrollbarMode horizontalMode, ScrollbarMode verticalMode, bool lock = false); > void scrollbarModes(ScrollbarMode& horizontalMode, ScrollbarMode& verticalMode) const; >+ >+ void setHorizontalScrollbarMode(ScrollbarMode mode, bool andLock = false); > ScrollbarMode horizontalScrollbarMode() const { ScrollbarMode horizontal, vertical; scrollbarModes(horizontal, vertical); return horizontal; } >+ >+ void setVerticalScrollbarMode(ScrollbarMode mode, bool andLock = false); > ScrollbarMode verticalScrollbarMode() const { ScrollbarMode horizontal, vertical; scrollbarModes(horizontal, vertical); return vertical; } >+ >+ void setHorizontalScrollbarLock(bool lock = true) { m_horizontalScrollbarLock = lock; } >+ bool isHorizontalScrollbarLocked() const { return m_horizontalScrollbarLock; } >+ void setVerticalScrollbarLock(bool lock = true) { m_verticalScrollbarLock = lock; } >+ bool isVerticalScrollbarLocked() const { return m_verticalScrollbarLock; } >+ > virtual void setCanHaveScrollbars(bool); > bool canHaveScrollbars() const { return horizontalScrollbarMode() != ScrollbarAlwaysOff || verticalScrollbarMode() != ScrollbarAlwaysOff; } > >@@ -258,6 +266,10 @@ private: > RefPtr<Scrollbar> m_verticalScrollbar; > ScrollbarMode m_horizontalScrollbarMode; > ScrollbarMode m_verticalScrollbarMode; >+ >+ bool m_horizontalScrollbarLock; >+ bool m_verticalScrollbarLock; >+ > bool m_prohibitsScrolling; > > HashSet<RefPtr<Widget> > m_children;
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 29431
:
52071
|
52325
|
52517
|
52567
|
52568
|
52641
|
52736
|
52737
|
52745