Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1543)

Unified Diff: Source/platform/scroll/ScrollableArea.cpp

Issue 246293006: Blink Support for Overlay Scrollbar Animation Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: fix unittest and move unittest to blink_platform_unittests Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/platform/scroll/ScrollableArea.h ('k') | Source/platform/scroll/Scrollbar.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/platform/scroll/ScrollableArea.cpp
diff --git a/Source/platform/scroll/ScrollableArea.cpp b/Source/platform/scroll/ScrollableArea.cpp
index aa12fe367fb90e3c05540f9a77bfcb9d33823948..9ebb13274c38d958afaa8914af56817d09611a08 100644
--- a/Source/platform/scroll/ScrollableArea.cpp
+++ b/Source/platform/scroll/ScrollableArea.cpp
@@ -34,13 +34,14 @@
#include "platform/HostWindow.h"
#include "platform/Logging.h"
+#include "platform/TraceEvent.h"
#include "platform/graphics/GraphicsLayer.h"
#include "platform/geometry/FloatPoint.h"
#include "platform/scroll/ProgrammaticScrollAnimator.h"
+#include "platform/scroll/ScrollbarStateTransitionAnimator.h"
#include "platform/scroll/ScrollbarTheme.h"
#include "wtf/PassOwnPtr.h"
-#include "platform/TraceEvent.h"
static const int kPixelsPerLineStep = 40;
static const float kMinFractionToStepWhenPaging = 0.875f;
@@ -109,6 +110,39 @@ ProgrammaticScrollAnimator* ScrollableArea::programmaticScrollAnimator() const
return m_animators->programmaticScrollAnimator.get();
}
+ScrollbarStateTransitionAnimator* ScrollableArea::scrollbarStateTransitionAnimator() const
+{
+ if (!m_animators)
+ m_animators = adoptPtr(new ScrollableAreaAnimators);
+
+ if (!m_animators->scrollbarStateTransitionAnimator)
+ m_animators->scrollbarStateTransitionAnimator = ScrollbarStateTransitionAnimator::create(const_cast<ScrollableArea*>(this));
+
+ return m_animators->scrollbarStateTransitionAnimator.get();
+}
+
+bool ScrollableArea::isDuringStateTransitionAnimation() const
+{
+ return hasOverlayScrollbars() && existingScrollbarStateTransitionAnimator() && existingScrollbarStateTransitionAnimator()->isDuringStateTransitionAnimation();
+}
+
+void ScrollableArea::stateTransitionInProgress()
+{
+ if (isDuringStateTransitionAnimation()) {
+ double progress = existingScrollbarStateTransitionAnimator()->stateTransitionProgress();
+ blink::WebThemeEngine::State startState = existingScrollbarStateTransitionAnimator()->stateTransitionStartState();
+ blink::WebThemeEngine::State endState = existingScrollbarStateTransitionAnimator()->stateTransitionEndState();
+
+ if (Scrollbar* verticalScrollbar = this->verticalScrollbar()) {
+ verticalScrollbar->updateStateTransitionData(startState, endState, progress);
+ }
+
+ if (Scrollbar* horizontalScrollbar = this->horizontalScrollbar()) {
+ horizontalScrollbar->updateStateTransitionData(startState, endState, progress);
+ }
+ }
+}
+
void ScrollableArea::setScrollOrigin(const IntPoint& origin)
{
if (m_scrollOrigin != origin) {
@@ -301,11 +335,15 @@ void ScrollableArea::mouseMovedInContentArea() const
void ScrollableArea::mouseEnteredScrollbar(Scrollbar* scrollbar) const
{
scrollAnimator()->mouseEnteredScrollbar(scrollbar);
+ if (ScrollbarStateTransitionAnimator* animator = scrollbarStateTransitionAnimator())
+ animator->mouseEnteredScrollbar(scrollbar);
}
void ScrollableArea::mouseExitedScrollbar(Scrollbar* scrollbar) const
{
scrollAnimator()->mouseExitedScrollbar(scrollbar);
+ if (ScrollbarStateTransitionAnimator* animator = scrollbarStateTransitionAnimator())
+ animator->mouseExitedScrollbar(scrollbar);
}
void ScrollableArea::contentAreaDidShow() const
@@ -442,6 +480,14 @@ void ScrollableArea::cancelProgrammaticScrollAnimation()
programmaticScrollAnimator->cancelAnimation();
}
+void ScrollableArea::serviceScrollbarAnimations()
+{
+ if (ScrollAnimator* scrollAnimator = existingScrollAnimator())
+ scrollAnimator->serviceScrollAnimations();
+ if (ScrollbarStateTransitionAnimator* animator = existingScrollbarStateTransitionAnimator())
+ animator->serviceAnimations();
+}
+
IntRect ScrollableArea::visibleContentRect(IncludeScrollbarsInRect scrollbarInclusion) const
{
int verticalScrollbarWidth = 0;
« no previous file with comments | « Source/platform/scroll/ScrollableArea.h ('k') | Source/platform/scroll/Scrollbar.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698