Bug 957445: Part 3 - combines nsIScrollbarOwner with nsIScrollbarMediator, r=mats

This commit is contained in:
Miranda Emery 2014-02-14 19:40:53 +13:00
parent 0972ea22f7
commit 1d4bafaf30
16 changed files with 63 additions and 91 deletions

View File

@ -2254,7 +2254,7 @@ EventStateManager::ComputeScrollTarget(nsIFrame* aTargetFrame,
}
// Overload ComputeScrollTarget method to allow passing "test" dx and dy when looking
// for which scrollbarowners to activate when two finger down on trackpad
// for which scrollbarmediators to activate when two finger down on trackpad
// and before any actual motion
nsIScrollableFrame*
EventStateManager::ComputeScrollTarget(nsIFrame* aTargetFrame,

View File

@ -430,13 +430,13 @@ ScrollbarsForWheel::SetActiveScrollTarget(nsIScrollableFrame* aScrollTarget)
if (!sHadWheelStart) {
return;
}
nsIScrollbarOwner* scrollbarOwner = do_QueryFrame(aScrollTarget);
if (!scrollbarOwner) {
nsIScrollbarMediator* scrollbarMediator = do_QueryFrame(aScrollTarget);
if (!scrollbarMediator) {
return;
}
sHadWheelStart = false;
sActiveOwner = do_QueryFrame(aScrollTarget);
scrollbarOwner->ScrollbarActivityStarted();
scrollbarMediator->ScrollbarActivityStarted();
}
/* static */ void
@ -452,9 +452,9 @@ ScrollbarsForWheel::MayInactivate()
/* static */ void
ScrollbarsForWheel::Inactivate()
{
nsIScrollbarOwner* scrollbarOwner = do_QueryFrame(sActiveOwner);
if (scrollbarOwner) {
scrollbarOwner->ScrollbarActivityStopped();
nsIScrollbarMediator* scrollbarMediator = do_QueryFrame(sActiveOwner);
if (scrollbarMediator) {
scrollbarMediator->ScrollbarActivityStopped();
}
sActiveOwner = nullptr;
DeactivateAllTemporarilyActivatedScrollTargets();
@ -498,11 +498,11 @@ ScrollbarsForWheel::TemporarilyActivateAllPossibleScrollTargets(
nsIScrollableFrame* target =
aESM->ComputeScrollTarget(aTargetFrame, dir->deltaX, dir->deltaY, aEvent,
EventStateManager::COMPUTE_DEFAULT_ACTION_TARGET);
nsIScrollbarOwner* scrollbarOwner = do_QueryFrame(target);
if (scrollbarOwner) {
nsIScrollbarMediator* scrollbarMediator = do_QueryFrame(target);
if (scrollbarMediator) {
nsIFrame* targetFrame = do_QueryFrame(target);
*scrollTarget = targetFrame;
scrollbarOwner->ScrollbarActivityStarted();
scrollbarMediator->ScrollbarActivityStarted();
}
}
}
@ -513,9 +513,9 @@ ScrollbarsForWheel::DeactivateAllTemporarilyActivatedScrollTargets()
for (size_t i = 0; i < kNumberOfTargets; i++) {
nsWeakFrame* scrollTarget = &sActivatedScrollTargets[i];
if (*scrollTarget) {
nsIScrollbarOwner* scrollbarOwner = do_QueryFrame(*scrollTarget);
if (scrollbarOwner) {
scrollbarOwner->ScrollbarActivityStopped();
nsIScrollbarMediator* scrollbarMediator = do_QueryFrame(*scrollTarget);
if (scrollbarMediator) {
scrollbarMediator->ScrollbarActivityStopped();
}
*scrollTarget = nullptr;
}

View File

@ -1870,9 +1870,9 @@ TabChild::RecvNotifyAPZStateChange(const ViewID& aViewId,
case APZStateChange::TransformBegin:
{
nsIScrollableFrame* sf = nsLayoutUtils::FindScrollableFrameFor(aViewId);
nsIScrollbarOwner* scrollbarOwner = do_QueryFrame(sf);
if (scrollbarOwner) {
scrollbarOwner->ScrollbarActivityStarted();
nsIScrollbarMediator* scrollbarMediator = do_QueryFrame(sf);
if (scrollbarMediator) {
scrollbarMediator->ScrollbarActivityStarted();
}
nsCOMPtr<nsIDocument> doc = GetDocument();
@ -1888,9 +1888,9 @@ TabChild::RecvNotifyAPZStateChange(const ViewID& aViewId,
case APZStateChange::TransformEnd:
{
nsIScrollableFrame* sf = nsLayoutUtils::FindScrollableFrameFor(aViewId);
nsIScrollbarOwner* scrollbarOwner = do_QueryFrame(sf);
if (scrollbarOwner) {
scrollbarOwner->ScrollbarActivityStopped();
nsIScrollbarMediator* scrollbarMediator = do_QueryFrame(sf);
if (scrollbarMediator) {
scrollbarMediator->ScrollbarActivityStopped();
}
nsCOMPtr<nsIDocument> doc = GetDocument();

View File

@ -4,7 +4,7 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "ScrollbarActivity.h"
#include "nsIScrollbarOwner.h"
#include "nsIScrollbarMediator.h"
#include "nsIContent.h"
#include "nsIDOMEvent.h"
#include "nsIDOMElementCSSInlineStyle.h"

View File

@ -13,7 +13,7 @@
#include "nsRefreshDriver.h"
class nsIContent;
class nsIScrollbarOwner;
class nsIScrollbarMediator;
class nsITimer;
class nsIAtom;
@ -58,7 +58,7 @@ namespace layout {
class ScrollbarActivity MOZ_FINAL : public nsIDOMEventListener,
public nsARefreshObserver {
public:
ScrollbarActivity(nsIScrollbarOwner* aScrollableFrame)
ScrollbarActivity(nsIScrollbarMediator* aScrollableFrame)
: mScrollableFrame(aScrollableFrame)
, mNestedActivityCounter(0)
, mIsActive(false)
@ -135,7 +135,7 @@ protected:
return TimeDuration::FromMilliseconds(mScrollbarFadeDuration);
}
nsIScrollbarOwner* mScrollableFrame;
nsIScrollbarMediator* mScrollableFrame;
TimeStamp mFadeBeginTime;
nsCOMPtr<nsITimer> mFadeBeginTimer;
nsCOMPtr<nsIDOMEventTarget> mHorizontalScrollbar; // null while inactive

View File

@ -25,7 +25,6 @@ EXPORTS += [
'nsIObjectFrame.h',
'nsIPageSequenceFrame.h',
'nsIScrollableFrame.h',
'nsIScrollbarOwner.h',
'nsIScrollPositionListener.h',
'nsIStatefulFrame.h',
'nsObjectFrame.h',

View File

@ -55,7 +55,6 @@ FRAME_ID(nsISVGChildFrame)
FRAME_ID(nsISVGSVGFrame)
FRAME_ID(nsIScrollableFrame)
FRAME_ID(nsIScrollbarMediator)
FRAME_ID(nsIScrollbarOwner)
FRAME_ID(nsISelectControlFrame)
FRAME_ID(nsIStatefulFrame)
FRAME_ID(nsITableCellLayout)

View File

@ -895,7 +895,6 @@ nsHTMLScrollFrame::AccessibleType()
NS_QUERYFRAME_HEAD(nsHTMLScrollFrame)
NS_QUERYFRAME_ENTRY(nsIAnonymousContentCreator)
NS_QUERYFRAME_ENTRY(nsIScrollbarOwner)
NS_QUERYFRAME_ENTRY(nsIScrollableFrame)
NS_QUERYFRAME_ENTRY(nsIStatefulFrame)
NS_QUERYFRAME_ENTRY(nsIScrollbarMediator)
@ -1339,7 +1338,6 @@ nsXULScrollFrame::DoLayout(nsBoxLayoutState& aState)
NS_QUERYFRAME_HEAD(nsXULScrollFrame)
NS_QUERYFRAME_ENTRY(nsIAnonymousContentCreator)
NS_QUERYFRAME_ENTRY(nsIScrollbarOwner)
NS_QUERYFRAME_ENTRY(nsIScrollableFrame)
NS_QUERYFRAME_ENTRY(nsIStatefulFrame)
NS_QUERYFRAME_ENTRY(nsIScrollbarMediator)

View File

@ -561,14 +561,6 @@ public:
virtual void AppendAnonymousContentTo(nsTArray<nsIContent*>& aElements,
uint32_t aFilter) MOZ_OVERRIDE;
// nsIScrollbarOwner
virtual nsIFrame* GetScrollbarBox(bool aVertical) MOZ_OVERRIDE {
return mHelper.GetScrollbarBox(aVertical);
}
virtual void ScrollbarActivityStarted() const MOZ_OVERRIDE;
virtual void ScrollbarActivityStopped() const MOZ_OVERRIDE;
// nsIScrollableFrame
virtual nsIFrame* GetScrolledFrame() const MOZ_OVERRIDE {
return mHelper.GetScrolledFrame();
@ -755,6 +747,11 @@ public:
mHelper.ThumbMoved(aScrollbar, aOldPos, aNewPos);
}
virtual void VisibilityChanged(bool aVisible) {}
virtual nsIFrame* GetScrollbarBox(bool aVertical) MOZ_OVERRIDE {
return mHelper.GetScrollbarBox(aVertical);
}
virtual void ScrollbarActivityStarted() const MOZ_OVERRIDE;
virtual void ScrollbarActivityStopped() const MOZ_OVERRIDE;
#ifdef DEBUG_FRAME_DUMP
virtual nsresult GetFrameName(nsAString& aResult) const MOZ_OVERRIDE;
@ -906,14 +903,6 @@ public:
static void AdjustReflowStateForPrintPreview(nsBoxLayoutState& aState, bool& aSetBack);
static void AdjustReflowStateBack(nsBoxLayoutState& aState, bool aSetBack);
// nsIScrollbarOwner
virtual nsIFrame* GetScrollbarBox(bool aVertical) MOZ_OVERRIDE {
return mHelper.GetScrollbarBox(aVertical);
}
virtual void ScrollbarActivityStarted() const MOZ_OVERRIDE;
virtual void ScrollbarActivityStopped() const MOZ_OVERRIDE;
// nsIScrollableFrame
virtual nsIFrame* GetScrolledFrame() const MOZ_OVERRIDE {
return mHelper.GetScrolledFrame();
@ -1104,6 +1093,12 @@ public:
mHelper.ThumbMoved(aScrollbar, aOldPos, aNewPos);
}
virtual void VisibilityChanged(bool aVisible) {}
virtual nsIFrame* GetScrollbarBox(bool aVertical) MOZ_OVERRIDE {
return mHelper.GetScrollbarBox(aVertical);
}
virtual void ScrollbarActivityStarted() const MOZ_OVERRIDE;
virtual void ScrollbarActivityStopped() const MOZ_OVERRIDE;
#ifdef DEBUG_FRAME_DUMP
virtual nsresult GetFrameName(nsAString& aResult) const MOZ_OVERRIDE;

View File

@ -13,7 +13,6 @@
#include "nsCoord.h"
#include "ScrollbarStyles.h"
#include "mozilla/gfx/Point.h"
#include "nsIScrollbarOwner.h"
#include "nsIScrollbarMediator.h"
#include "Units.h"
@ -33,8 +32,7 @@ class nsIAtom;
* APIs for examining scroll state, observing changes to scroll state,
* and triggering scrolling.
*/
class nsIScrollableFrame : public nsIScrollbarOwner,
public nsIScrollbarMediator {
class nsIScrollableFrame : public nsIScrollbarMediator {
public:
typedef mozilla::CSSIntPoint CSSIntPoint;

View File

@ -1,35 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef nsIScrollbarOwner_h___
#define nsIScrollbarOwner_h___
#include "nsQueryFrame.h"
class nsIDOMEventTarget;
class nsIFrame;
/**
* An interface that represents a frame which manages scrollbars.
*/
class nsIScrollbarOwner : public nsQueryFrame {
public:
NS_DECL_QUERYFRAME_TARGET(nsIScrollbarOwner)
/**
* Obtain the frame for the horizontal or vertical scrollbar, or null
* if there is no such box.
*/
virtual nsIFrame* GetScrollbarBox(bool aVertical) = 0;
/**
* Show or hide scrollbars on 2 fingers touch.
* Subclasses should call their ScrollbarActivity's corresponding methods.
*/
virtual void ScrollbarActivityStarted() const = 0;
virtual void ScrollbarActivityStopped() const = 0;
};
#endif

View File

@ -10,8 +10,10 @@
#include "nsCoord.h"
class nsScrollbarFrame;
class nsIDOMEventTarget;
class nsIFrame;
class nsIScrollbarMediator
class nsIScrollbarMediator : public nsQueryFrame
{
public:
NS_DECL_QUERYFRAME_TARGET(nsIScrollbarMediator)
@ -45,6 +47,18 @@ public:
nscoord aOldPos,
nscoord aNewPos) = 0;
virtual void VisibilityChanged(bool aVisible) = 0;
/**
* Obtain the frame for the horizontal or vertical scrollbar, or null
* if there is no such box.
*/
virtual nsIFrame* GetScrollbarBox(bool aVertical) = 0;
/**
* Show or hide scrollbars on 2 fingers touch.
* Subclasses should call their ScrollbarActivity's corresponding methods.
*/
virtual void ScrollbarActivityStarted() const = 0;
virtual void ScrollbarActivityStopped() const = 0;
};
#endif

View File

@ -431,6 +431,13 @@ nsListBoxBodyFrame::VisibilityChanged(bool aVisible)
}
}
nsIFrame*
nsListBoxBodyFrame::GetScrollbarBox(bool aVertical)
{
nsIScrollableFrame* scrollFrame = nsLayoutUtils::GetScrollableFrameFor(this);
return scrollFrame ? scrollFrame->GetScrollbarBox(true) : nullptr;
}
void
nsListBoxBodyFrame::UpdateIndex(int32_t aDirection)
{

View File

@ -64,6 +64,9 @@ public:
int32_t aOldPos,
int32_t aNewPos) MOZ_OVERRIDE;
virtual void VisibilityChanged(bool aVisible) MOZ_OVERRIDE;
virtual nsIFrame* GetScrollbarBox(bool aVertical) MOZ_OVERRIDE;
virtual void ScrollbarActivityStarted() const MOZ_OVERRIDE {}
virtual void ScrollbarActivityStopped() const MOZ_OVERRIDE {}
// nsIReflowCallback

View File

@ -103,7 +103,6 @@ NS_IMPL_FRAMEARENA_HELPERS(nsTreeBodyFrame)
NS_QUERYFRAME_HEAD(nsTreeBodyFrame)
NS_QUERYFRAME_ENTRY(nsIScrollbarMediator)
NS_QUERYFRAME_ENTRY(nsIScrollbarOwner)
NS_QUERYFRAME_ENTRY(nsTreeBodyFrame)
NS_QUERYFRAME_TAIL_INHERITING(nsLeafBoxFrame)
@ -174,7 +173,7 @@ nsTreeBodyFrame::Init(nsIContent* aContent,
if (LookAndFeel::GetInt(LookAndFeel::eIntID_UseOverlayScrollbars) != 0) {
mScrollbarActivity = new ScrollbarActivity(
static_cast<nsIScrollbarOwner*>(this));
static_cast<nsIScrollbarMediator*>(this));
}
}

View File

@ -24,7 +24,6 @@
#include "nsScrollbarFrame.h"
#include "nsThreadUtils.h"
#include "mozilla/LookAndFeel.h"
#include "nsIScrollbarOwner.h"
class nsOverflowChecker;
class nsTreeImageListener;
@ -52,7 +51,6 @@ class nsTreeBodyFrame MOZ_FINAL
, public nsICSSPseudoComparator
, public nsIScrollbarMediator
, public nsIReflowCallback
, public nsIScrollbarOwner
{
public:
typedef mozilla::layout::ScrollbarActivity ScrollbarActivity;
@ -142,12 +140,12 @@ public:
nscoord aOldPos,
nscoord aNewPos) MOZ_OVERRIDE;
virtual void VisibilityChanged(bool aVisible) MOZ_OVERRIDE { Invalidate(); }
// nsIScrollbarOwner
virtual nsIFrame* GetScrollbarBox(bool aVertical) MOZ_OVERRIDE {
ScrollParts parts = GetScrollParts();
return aVertical ? parts.mVScrollbar : parts.mHScrollbar;
}
virtual void ScrollbarActivityStarted() const MOZ_OVERRIDE;
virtual void ScrollbarActivityStopped() const MOZ_OVERRIDE;
// Overridden from nsIFrame to cache our pres context.
virtual void Init(nsIContent* aContent,
@ -469,9 +467,6 @@ protected:
void PostScrollEvent();
void FireScrollEvent();
virtual void ScrollbarActivityStarted() const MOZ_OVERRIDE;
virtual void ScrollbarActivityStopped() const MOZ_OVERRIDE;
/**
* Clear the pointer to this frame for all nsTreeImageListeners that were
* created by this frame.