gecko/layout/generic/ScrollbarActivity.cpp

90 lines
2.3 KiB
C++

/* -*- 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/. */
#include "ScrollbarActivity.h"
#include "nsContentUtils.h"
#include "nsIFrame.h"
#include "nsIScrollableFrame.h"
#include "nsComponentManagerUtils.h"
namespace mozilla {
ScrollbarActivity::~ScrollbarActivity()
{
CancelActivityFinishedTimer();
}
void
ScrollbarActivity::ActivityOccurred()
{
CancelActivityFinishedTimer();
StartActivityFinishedTimer();
SetIsActive(true);
NS_ASSERTION(mIsActive, "need to be active during activity");
}
void
ScrollbarActivity::ActivityFinished()
{
SetIsActive(false);
NS_ASSERTION(!mIsActive, "need to be unactive once activity is finished");
}
static void
SetBooleanAttribute(nsIContent* aContent, nsIAtom* aAttribute, bool aValue)
{
if (aContent) {
if (aValue) {
aContent->SetAttr(kNameSpaceID_None, aAttribute,
NS_LITERAL_STRING("true"), true);
} else {
aContent->UnsetAttr(kNameSpaceID_None, aAttribute, true);
}
}
}
void
ScrollbarActivity::SetIsActive(bool aNewActive)
{
if (mIsActive == aNewActive)
return;
mIsActive = aNewActive;
SetBooleanAttribute(GetHorizontalScrollbar(), nsGkAtoms::active, mIsActive);
SetBooleanAttribute(GetVerticalScrollbar(), nsGkAtoms::active, mIsActive);
}
void
ScrollbarActivity::StartActivityFinishedTimer()
{
NS_ASSERTION(!mActivityFinishedTimer, "timer already alive!");
mActivityFinishedTimer = do_CreateInstance("@mozilla.org/timer;1");
mActivityFinishedTimer->InitWithFuncCallback(ActivityFinishedTimerFired, this,
kScrollbarActivityFinishedDelay,
nsITimer::TYPE_ONE_SHOT);
}
void
ScrollbarActivity::CancelActivityFinishedTimer()
{
if (mActivityFinishedTimer) {
mActivityFinishedTimer->Cancel();
mActivityFinishedTimer = nullptr;
}
}
nsIContent*
ScrollbarActivity::GetScrollbarContent(bool aVertical)
{
nsIFrame* box = mScrollableFrame->GetScrollbarBox(aVertical);
return box ? box->GetContent() : nullptr;
return nullptr;
}
} // namespace mozilla