PatternDirect2D.cpp [plain text]
#include "config.h"
#include "Pattern.h"
#if USE(DIRECT2D)
#include "AffineTransform.h"
#include "GraphicsContext.h"
#include "PlatformContextDirect2D.h"
#include <d2d1.h>
#include <wtf/MainThread.h>
namespace WebCore {
ID2D1BitmapBrush* Pattern::createPlatformPattern(const GraphicsContext& context, float alpha, const AffineTransform& userSpaceTransformation) const
{
AffineTransform patternTransform = userSpaceTransformation * m_patternSpaceTransformation;
auto bitmapBrushProperties = D2D1::BitmapBrushProperties();
bitmapBrushProperties.extendModeX = m_repeatX ? D2D1_EXTEND_MODE_WRAP : D2D1_EXTEND_MODE_CLAMP;
bitmapBrushProperties.extendModeY = m_repeatY ? D2D1_EXTEND_MODE_WRAP : D2D1_EXTEND_MODE_CLAMP;
auto brushProperties = D2D1::BrushProperties();
brushProperties.transform = patternTransform;
brushProperties.opacity = alpha;
auto& patternImage = tileImage();
auto nativeImage = patternImage.nativeImage(&context);
if (!nativeImage)
return nullptr;
auto platformContext = context.platformContext();
RELEASE_ASSERT(platformContext);
ID2D1BitmapBrush* patternBrush = nullptr;
HRESULT hr = platformContext->renderTarget()->CreateBitmapBrush(nativeImage.get(), &bitmapBrushProperties, &brushProperties, &patternBrush);
ASSERT(SUCCEEDED(hr));
return patternBrush;
}
}
#endif