diff options
Diffstat (limited to 'dom/smil/nsSMILRepeatCount.h')
-rw-r--r-- | dom/smil/nsSMILRepeatCount.h | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/dom/smil/nsSMILRepeatCount.h b/dom/smil/nsSMILRepeatCount.h new file mode 100644 index 000000000..be36badee --- /dev/null +++ b/dom/smil/nsSMILRepeatCount.h @@ -0,0 +1,62 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* 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 nsSMILRepeatCount_h +#define nsSMILRepeatCount_h + +#include "nsDebug.h" +#include <math.h> + +//---------------------------------------------------------------------- +// nsSMILRepeatCount +// +// A tri-state non-negative floating point number for representing the number of +// times an animation repeat, i.e. the SMIL repeatCount attribute. +// +// The three states are: +// 1. not-set +// 2. set (with non-negative, non-zero count value) +// 3. indefinite +// +class nsSMILRepeatCount +{ +public: + nsSMILRepeatCount() : mCount(kNotSet) {} + explicit nsSMILRepeatCount(double aCount) + : mCount(kNotSet) { SetCount(aCount); } + + operator double() const { + MOZ_ASSERT(IsDefinite(), + "Converting indefinite or unset repeat count to double"); + return mCount; + } + bool IsDefinite() const { + return mCount != kNotSet && mCount != kIndefinite; + } + bool IsIndefinite() const { return mCount == kIndefinite; } + bool IsSet() const { return mCount != kNotSet; } + + nsSMILRepeatCount& operator=(double aCount) + { + SetCount(aCount); + return *this; + } + void SetCount(double aCount) + { + NS_ASSERTION(aCount > 0.0, "Negative or zero repeat count"); + mCount = aCount > 0.0 ? aCount : kNotSet; + } + void SetIndefinite() { mCount = kIndefinite; } + void Unset() { mCount = kNotSet; } + +private: + static const double kNotSet; + static const double kIndefinite; + + double mCount; +}; + +#endif |