Bug 1066270 - Add nsFilterInstance::GetFilterDescription. r=roc

This commit is contained in:
Markus Stange 2014-09-15 12:12:52 +02:00
parent 0d76ec356d
commit 4a2f054541
2 changed files with 36 additions and 0 deletions

View File

@ -27,6 +27,23 @@ using namespace mozilla;
using namespace mozilla::dom;
using namespace mozilla::gfx;
FilterDescription
nsFilterInstance::GetFilterDescription(nsIContent* aFilteredElement,
const nsTArray<nsStyleFilter>& aFilterChain,
const UserSpaceMetrics& aMetrics,
const gfxRect& aBBox,
nsTArray<mozilla::RefPtr<SourceSurface>>& aOutAdditionalImages)
{
gfxMatrix unused; // aPaintTransform arg not used since we're not painting
nsFilterInstance instance(nullptr, aFilteredElement, aMetrics,
aFilterChain, nullptr, unused,
nullptr, nullptr, nullptr, &aBBox);
if (!instance.IsInitialized()) {
return FilterDescription();
}
return instance.ExtractDescriptionAndAdditionalImages(aOutAdditionalImages);
}
static UniquePtr<UserSpaceMetrics>
UserSpaceMetricsForFrame(nsIFrame* aFrame)
{

View File

@ -57,6 +57,19 @@ class nsFilterInstance
typedef mozilla::dom::UserSpaceMetrics UserSpaceMetrics;
public:
/**
* Create a FilterDescription for the supplied filter. All coordinates in
* the description are in filter space.
* @param aOutAdditionalImages Will contain additional images needed to
* render the filter (from feImage primitives).
* @return A FilterDescription describing the filter.
*/
static FilterDescription GetFilterDescription(nsIContent* aFilteredElement,
const nsTArray<nsStyleFilter>& aFilterChain,
const UserSpaceMetrics& aMetrics,
const gfxRect& aBBox,
nsTArray<mozilla::RefPtr<SourceSurface>>& aOutAdditionalImages);
/**
* Paint the given filtered frame.
* @param aDirtyArea The area than needs to be painted, in aFilteredFrame's
@ -144,6 +157,12 @@ public:
*/
nsresult Render(gfxContext* aContext);
const FilterDescription& ExtractDescriptionAndAdditionalImages(nsTArray<mozilla::RefPtr<SourceSurface>>& aOutAdditionalImages)
{
mInputImages.SwapElements(aOutAdditionalImages);
return mFilterDescription;
}
/**
* Sets the aPostFilterDirtyRegion outparam to the post-filter area in frame
* space that would be dirtied by mTargetFrame when a given