diff options
Diffstat (limited to '')
-rw-r--r-- | dom/smil/SMILRepeatCount.h | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/dom/smil/SMILRepeatCount.h b/dom/smil/SMILRepeatCount.h new file mode 100644 index 0000000000..0b93aae994 --- /dev/null +++ b/dom/smil/SMILRepeatCount.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 DOM_SMIL_SMILREPEATCOUNT_H_ +#define DOM_SMIL_SMILREPEATCOUNT_H_ + +#include "nsDebug.h" +#include <math.h> + +namespace mozilla { + +//---------------------------------------------------------------------- +// SMILRepeatCount +// +// 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 SMILRepeatCount { + public: + SMILRepeatCount() : mCount(kNotSet) {} + explicit SMILRepeatCount(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; } + + SMILRepeatCount& 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; +}; + +} // namespace mozilla + +#endif // DOM_SMIL_SMILREPEATCOUNT_H_ |