From 004810cf46b5c3fe554bccc6a696f89a5b9c3c90 Mon Sep 17 00:00:00 2001 From: Matt Woodrow Date: Fri, 12 Sep 2014 17:18:22 +1200 Subject: [PATCH] Bug 1062723 - Part 6: Implement source clipping for DrawTargetD2D1. r=Bas --HG-- extra : rebase_source : bd1c022efe0548a9e7860fb18d6aced33ddad40f --- gfx/2d/DrawTargetD2D1.cpp | 17 ++++++++++++----- gfx/2d/HelpersD2D.h | 3 ++- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/gfx/2d/DrawTargetD2D1.cpp b/gfx/2d/DrawTargetD2D1.cpp index 3c1c91b06ad0..3fecb8755e0f 100644 --- a/gfx/2d/DrawTargetD2D1.cpp +++ b/gfx/2d/DrawTargetD2D1.cpp @@ -871,17 +871,24 @@ DrawTargetD2D1::CreateBrushForPattern(const Pattern &aPattern, Float aAlpha) return nullptr; } + D2D1_RECT_F samplingBounds; + if (!pat->mSamplingRect.IsEmpty()) { + samplingBounds = D2DRect(pat->mSamplingRect); + } else { + samplingBounds = D2D1::RectF(0, 0, + Float(pat->mSurface->GetSize().width), + Float(pat->mSurface->GetSize().height)); + } Matrix mat = pat->mMatrix; RefPtr imageBrush; RefPtr image = GetImageForSurface(pat->mSurface, mat, pat->mExtendMode); mDC->CreateImageBrush(image, - D2D1::ImageBrushProperties(D2D1::RectF(0, 0, - Float(pat->mSurface->GetSize().width), - Float(pat->mSurface->GetSize().height)), - D2DExtend(pat->mExtendMode), D2DExtend(pat->mExtendMode), - D2DInterpolationMode(pat->mFilter)), + D2D1::ImageBrushProperties(samplingBounds, + D2DExtend(pat->mExtendMode), + D2DExtend(pat->mExtendMode), + D2DInterpolationMode(pat->mFilter)), D2D1::BrushProperties(aAlpha, D2DMatrix(mat)), byRef(imageBrush)); return imageBrush.forget(); diff --git a/gfx/2d/HelpersD2D.h b/gfx/2d/HelpersD2D.h index 293b5503651b..da7adbc8db28 100644 --- a/gfx/2d/HelpersD2D.h +++ b/gfx/2d/HelpersD2D.h @@ -44,7 +44,8 @@ static inline D2D1_SIZE_U D2DIntSize(const IntSize &aSize) return D2D1::SizeU(aSize.width, aSize.height); } -static inline D2D1_RECT_F D2DRect(const Rect &aRect) +template +static inline D2D1_RECT_F D2DRect(const T &aRect) { return D2D1::RectF(aRect.x, aRect.y, aRect.XMost(), aRect.YMost()); }