Coverage Report

Created: 2018-09-25 14:53

/src/mozilla-central/dom/svg/nsSVGInteger.h
Line
Count
Source (jump to first uncovered line)
1
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
3
/* This Source Code Form is subject to the terms of the Mozilla Public
4
 * License, v. 2.0. If a copy of the MPL was not distributed with this
5
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6
7
#ifndef __NS_SVGINTEGER_H__
8
#define __NS_SVGINTEGER_H__
9
10
#include "nsCycleCollectionParticipant.h"
11
#include "nsError.h"
12
#include "SVGAnimatedInteger.h"
13
#include "nsISMILAttr.h"
14
#include "nsSVGElement.h"
15
#include "mozilla/Attributes.h"
16
#include "mozilla/UniquePtr.h"
17
18
class nsSMILValue;
19
20
namespace mozilla {
21
namespace dom {
22
class SVGAnimationElement;
23
} // namespace dom
24
} // namespace mozilla
25
26
class nsSVGInteger
27
{
28
29
public:
30
0
  void Init(uint8_t aAttrEnum = 0xff, int32_t aValue = 0) {
31
0
    mAnimVal = mBaseVal = aValue;
32
0
    mAttrEnum = aAttrEnum;
33
0
    mIsAnimated = false;
34
0
    mIsBaseSet = false;
35
0
  }
36
37
  nsresult SetBaseValueString(const nsAString& aValue,
38
                              nsSVGElement *aSVGElement);
39
  void GetBaseValueString(nsAString& aValue);
40
41
  void SetBaseValue(int32_t aValue, nsSVGElement *aSVGElement);
42
  int32_t GetBaseValue() const
43
0
    { return mBaseVal; }
44
45
  void SetAnimValue(int aValue, nsSVGElement *aSVGElement);
46
  int GetAnimValue() const
47
0
    { return mAnimVal; }
48
49
  // Returns true if the animated value of this integer has been explicitly
50
  // set (either by animation, or by taking on the base value which has been
51
  // explicitly set by markup or a DOM call), false otherwise.
52
  // If this returns false, the animated value is still valid, that is,
53
  // usable, and represents the default base value of the attribute.
54
  bool IsExplicitlySet() const
55
0
    { return mIsAnimated || mIsBaseSet; }
56
57
  already_AddRefed<mozilla::dom::SVGAnimatedInteger>
58
    ToDOMAnimatedInteger(nsSVGElement* aSVGElement);
59
  mozilla::UniquePtr<nsISMILAttr> ToSMILAttr(nsSVGElement* aSVGElement);
60
61
private:
62
63
  int32_t mAnimVal;
64
  int32_t mBaseVal;
65
  uint8_t mAttrEnum; // element specified tracking for attribute
66
  bool mIsAnimated;
67
  bool mIsBaseSet;
68
69
public:
70
  struct DOMAnimatedInteger final : public mozilla::dom::SVGAnimatedInteger
71
  {
72
    DOMAnimatedInteger(nsSVGInteger* aVal, nsSVGElement* aSVGElement)
73
      : mozilla::dom::SVGAnimatedInteger(aSVGElement)
74
      , mVal(aVal)
75
0
    {}
76
    virtual ~DOMAnimatedInteger();
77
78
    nsSVGInteger* mVal; // kept alive because it belongs to content
79
80
    virtual int32_t BaseVal() override
81
0
    {
82
0
      return mVal->GetBaseValue();
83
0
    }
84
    virtual void SetBaseVal(int32_t aValue) override
85
0
    {
86
0
      mVal->SetBaseValue(aValue, mSVGElement);
87
0
    }
88
89
    // Script may have modified animation parameters or timeline -- DOM getters
90
    // need to flush any resample requests to reflect these modifications.
91
    virtual int32_t AnimVal() override
92
0
    {
93
0
      mSVGElement->FlushAnimations();
94
0
      return mVal->GetAnimValue();
95
0
    }
96
  };
97
98
  struct SMILInteger : public nsISMILAttr
99
  {
100
  public:
101
    SMILInteger(nsSVGInteger* aVal, nsSVGElement* aSVGElement)
102
0
      : mVal(aVal), mSVGElement(aSVGElement) {}
103
104
    // These will stay alive because a nsISMILAttr only lives as long
105
    // as the Compositing step, and DOM elements don't get a chance to
106
    // die during that.
107
    nsSVGInteger* mVal;
108
    nsSVGElement* mSVGElement;
109
110
    // nsISMILAttr methods
111
    virtual nsresult ValueFromString(const nsAString& aStr,
112
                                     const mozilla::dom::SVGAnimationElement* aSrcElement,
113
                                     nsSMILValue& aValue,
114
                                     bool& aPreventCachingOfSandwich) const override;
115
    virtual nsSMILValue GetBaseValue() const override;
116
    virtual void ClearAnimValue() override;
117
    virtual nsresult SetAnimValue(const nsSMILValue& aValue) override;
118
  };
119
};
120
121
#endif //__NS_SVGINTEGER_H__