Thu, 15 Jan 2015 21:03:48 +0100
Integrate friendly tips from Tor colleagues to make (or not) 4.5 alpha 3;
This includes removal of overloaded (but unused) methods, and addition of
a overlooked call to DataStruct::SetData(nsISupports, uint32_t, bool.)
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 #ifndef __NS_SVGPATTERNFRAME_H__
7 #define __NS_SVGPATTERNFRAME_H__
9 #include "mozilla/Attributes.h"
10 #include "gfxMatrix.h"
11 #include "mozilla/gfx/2D.h"
12 #include "nsSVGPaintServerFrame.h"
14 class gfxASurface;
15 class gfxContext;
16 class nsIFrame;
17 class nsSVGElement;
18 class nsSVGLength2;
19 class nsSVGPathGeometryFrame;
20 class nsSVGViewBox;
22 namespace mozilla {
23 class SVGAnimatedPreserveAspectRatio;
24 class nsSVGAnimatedTransformList;
25 } // namespace mozilla
27 typedef nsSVGPaintServerFrame nsSVGPatternFrameBase;
29 /**
30 * Patterns can refer to other patterns. We create an nsSVGPaintingProperty
31 * with property type nsGkAtoms::href to track the referenced pattern.
32 */
33 class nsSVGPatternFrame : public nsSVGPatternFrameBase
34 {
35 public:
36 NS_DECL_FRAMEARENA_HELPERS
38 friend nsIFrame* NS_NewSVGPatternFrame(nsIPresShell* aPresShell,
39 nsStyleContext* aContext);
41 nsSVGPatternFrame(nsStyleContext* aContext);
43 // nsSVGPaintServerFrame methods:
44 virtual already_AddRefed<gfxPattern>
45 GetPaintServerPattern(nsIFrame *aSource,
46 const gfxMatrix& aContextMatrix,
47 nsStyleSVGPaint nsStyleSVG::*aFillOrStroke,
48 float aOpacity,
49 const gfxRect *aOverrideBounds) MOZ_OVERRIDE;
51 public:
52 typedef mozilla::SVGAnimatedPreserveAspectRatio SVGAnimatedPreserveAspectRatio;
54 // nsSVGContainerFrame methods:
55 virtual gfxMatrix GetCanvasTM(uint32_t aFor,
56 nsIFrame* aTransformRoot = nullptr) MOZ_OVERRIDE;
58 // nsIFrame interface:
59 virtual nsresult AttributeChanged(int32_t aNameSpaceID,
60 nsIAtom* aAttribute,
61 int32_t aModType) MOZ_OVERRIDE;
63 #ifdef DEBUG
64 virtual void Init(nsIContent* aContent,
65 nsIFrame* aParent,
66 nsIFrame* aPrevInFlow) MOZ_OVERRIDE;
67 #endif
69 /**
70 * Get the "type" of the frame
71 *
72 * @see nsGkAtoms::svgPatternFrame
73 */
74 virtual nsIAtom* GetType() const MOZ_OVERRIDE;
76 #ifdef DEBUG_FRAME_DUMP
77 virtual nsresult GetFrameName(nsAString& aResult) const MOZ_OVERRIDE
78 {
79 return MakeFrameName(NS_LITERAL_STRING("SVGPattern"), aResult);
80 }
81 #endif // DEBUG
83 protected:
84 // Internal methods for handling referenced patterns
85 class AutoPatternReferencer;
86 nsSVGPatternFrame* GetReferencedPattern();
87 nsSVGPatternFrame* GetReferencedPatternIfNotInUse();
89 // Accessors to lookup pattern attributes
90 uint16_t GetEnumValue(uint32_t aIndex, nsIContent *aDefault);
91 uint16_t GetEnumValue(uint32_t aIndex)
92 {
93 return GetEnumValue(aIndex, mContent);
94 }
95 mozilla::nsSVGAnimatedTransformList* GetPatternTransformList(
96 nsIContent* aDefault);
97 gfxMatrix GetPatternTransform();
98 const nsSVGViewBox &GetViewBox(nsIContent *aDefault);
99 const nsSVGViewBox &GetViewBox() { return GetViewBox(mContent); }
100 const SVGAnimatedPreserveAspectRatio &GetPreserveAspectRatio(
101 nsIContent *aDefault);
102 const SVGAnimatedPreserveAspectRatio &GetPreserveAspectRatio()
103 {
104 return GetPreserveAspectRatio(mContent);
105 }
106 const nsSVGLength2 *GetLengthValue(uint32_t aIndex, nsIContent *aDefault);
107 const nsSVGLength2 *GetLengthValue(uint32_t aIndex)
108 {
109 return GetLengthValue(aIndex, mContent);
110 }
112 nsresult PaintPattern(gfxASurface **surface,
113 gfxMatrix *patternMatrix,
114 const gfxMatrix &aContextMatrix,
115 nsIFrame *aSource,
116 nsStyleSVGPaint nsStyleSVG::*aFillOrStroke,
117 float aGraphicOpacity,
118 const gfxRect *aOverrideBounds);
119 nsIFrame* GetPatternFirstChild();
120 gfxRect GetPatternRect(uint16_t aPatternUnits,
121 const gfxRect &bbox,
122 const Matrix &callerCTM,
123 nsIFrame *aTarget);
124 gfxMatrix ConstructCTM(const nsSVGViewBox& aViewBox,
125 uint16_t aPatternContentUnits,
126 uint16_t aPatternUnits,
127 const gfxRect &callerBBox,
128 const Matrix &callerCTM,
129 nsIFrame *aTarget);
131 private:
132 // this is a *temporary* reference to the frame of the element currently
133 // referencing our pattern. This must be temporary because different
134 // referencing frames will all reference this one frame
135 nsSVGPathGeometryFrame *mSource;
136 nsAutoPtr<gfxMatrix> mCTM;
138 protected:
139 // This flag is used to detect loops in xlink:href processing
140 bool mLoopFlag;
141 bool mNoHRefURI;
142 };
144 #endif