1 /* -*- Mode: C++; tab-width: 20; 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 MOZILLA_GFX_RADIALGRADIENTEFFECTD2D1_H_
7 #define MOZILLA_GFX_RADIALGRADIENTEFFECTD2D1_H_
10 #include <d2d1effectauthor.h>
11 #include <d2d1effecthelpers.h>
14 #include "mozilla/Attributes.h"
16 // {97143DC6-CBC4-4DD4-A8BA-13342B0BA46D}
17 DEFINE_GUID(CLSID_RadialGradientEffect
,
18 0x97143dc6, 0xcbc4, 0x4dd4, 0xa8, 0xba, 0x13, 0x34, 0x2b, 0xb, 0xa4, 0x6d);
20 // Macro to keep our class nice and clean.
21 #define SIMPLE_PROP(type, name) \
23 HRESULT Set##name(type a##name) \
24 { m##name = a##name; return S_OK; } \
25 type Get##name() const { return m##name; } \
33 RADIAL_PROP_STOP_COLLECTION
= 0,
41 class RadialGradientEffectD2D1 MOZ_FINAL
: public ID2D1EffectImpl
42 , public ID2D1DrawTransform
46 IFACEMETHODIMP
Initialize(ID2D1EffectContext
* pContextInternal
, ID2D1TransformGraph
* pTransformGraph
);
47 IFACEMETHODIMP
PrepareForRender(D2D1_CHANGE_TYPE changeType
);
48 IFACEMETHODIMP
SetGraph(ID2D1TransformGraph
* pGraph
);
51 IFACEMETHODIMP_(ULONG
) AddRef();
52 IFACEMETHODIMP_(ULONG
) Release();
53 IFACEMETHODIMP
QueryInterface(REFIID riid
, void** ppOutput
);
56 IFACEMETHODIMP
MapInputRectsToOutputRect(const D2D1_RECT_L
* pInputRects
,
57 const D2D1_RECT_L
* pInputOpaqueSubRects
,
58 UINT32 inputRectCount
,
59 D2D1_RECT_L
* pOutputRect
,
60 D2D1_RECT_L
* pOutputOpaqueSubRect
);
61 IFACEMETHODIMP
MapOutputRectToInputRects(const D2D1_RECT_L
* pOutputRect
,
62 D2D1_RECT_L
* pInputRects
,
63 UINT32 inputRectCount
) const;
64 IFACEMETHODIMP
MapInvalidRect(UINT32 inputIndex
,
65 D2D1_RECT_L invalidInputRect
,
66 D2D1_RECT_L
* pInvalidOutputRect
) const;
69 IFACEMETHODIMP_(UINT32
) GetInputCount() const { return 1; }
72 IFACEMETHODIMP
SetDrawInfo(ID2D1DrawInfo
*pDrawInfo
);
74 static HRESULT
Register(ID2D1Factory1
* aFactory
);
75 static HRESULT __stdcall
CreateEffect(IUnknown
** aEffectImpl
);
77 HRESULT
SetStopCollection(IUnknown
*aStopCollection
);
78 IUnknown
*GetStopCollection() const { return mStopCollection
; }
81 TemporaryRef
<ID2D1ResourceTexture
> CreateGradientTexture();
83 RadialGradientEffectD2D1();
86 RefPtr
<ID2D1GradientStopCollection
> mStopCollection
;
87 RefPtr
<ID2D1EffectContext
> mEffectContext
;
88 RefPtr
<ID2D1DrawInfo
> mDrawInfo
;
89 SIMPLE_PROP(D2D1_VECTOR_2F
, Center1
);
90 SIMPLE_PROP(D2D1_VECTOR_2F
, Center2
);
91 SIMPLE_PROP(FLOAT
, Radius1
);
92 SIMPLE_PROP(FLOAT
, Radius2
);
93 SIMPLE_PROP(D2D_MATRIX_3X2_F
, Transform
);