void clipToRectangle (const Rectangle<int>& r)
 {
     clearClip();
     clipRect = r.toFloat().transformed (transform).getSmallestIntegerContainer();
     shouldClipRect = true;
     pushClips();
 }
        void clipToImage (const Image& image, const AffineTransform& transform)
        {
            clearImageClip();

            if (bitmapMaskLayer == 0)
                owner.renderingTarget->CreateLayer (bitmapMaskLayer.resetAndGetPointerAddress());

            D2D1_BRUSH_PROPERTIES brushProps;
            brushProps.opacity = 1;
            brushProps.transform = transformToMatrix (transform);

            D2D1_BITMAP_BRUSH_PROPERTIES bmProps = D2D1::BitmapBrushProperties (D2D1_EXTEND_MODE_WRAP, D2D1_EXTEND_MODE_WRAP);

            D2D1_SIZE_U size;
            size.width = image.getWidth();
            size.height = image.getHeight();

            D2D1_BITMAP_PROPERTIES bp = D2D1::BitmapProperties();

            maskImage = image.convertedToFormat (Image::ARGB);
            Image::BitmapData bd (this->image, Image::BitmapData::readOnly); // xxx should be maskImage?
            bp.pixelFormat = owner.renderingTarget->GetPixelFormat();
            bp.pixelFormat.alphaMode = D2D1_ALPHA_MODE_PREMULTIPLIED;

            HRESULT hr = owner.renderingTarget->CreateBitmap (size, bd.data, bd.lineStride, bp, maskBitmap.resetAndGetPointerAddress());
            hr = owner.renderingTarget->CreateBitmapBrush (maskBitmap, bmProps, brushProps, bitmapMaskBrush.resetAndGetPointerAddress());

            imageMaskLayerParams = D2D1::LayerParameters();
            imageMaskLayerParams.opacityBrush = bitmapMaskBrush;

            shouldClipBitmap = true;
            pushClips();
        }
void Direct2DLowLevelGraphicsContext::SavedState::clipToRectangle (const Rectangle<int>& r)
{
    clearClip();
    Rectangle<int> r2 = r.toFloat().transformed (transform).getSmallestIntegerContainer();
    clipRect = r2;
    shouldClipRect = true;
    pushClips();
}
        void clipToRectList (ID2D1Geometry* geometry)
        {
            clearRectListClip();

            if (rectListLayer == 0)
                owner.renderingTarget->CreateLayer (rectListLayer.resetAndGetPointerAddress());

            rectListGeometry = geometry;
            shouldClipRectList = true;
            pushClips();
        }
        void clipToPath (ID2D1Geometry* geometry)
        {
            clearPathClip();

            if (complexClipLayer == 0)
                owner.renderingTarget->CreateLayer (complexClipLayer.resetAndGetPointerAddress());

            complexClipGeometry = geometry;
            shouldClipComplex = true;
            pushClips();
        }
void Direct2DLowLevelGraphicsContext::SavedState::clipToRectList (ID2D1Geometry* geometry)
{
    clearRectListClip();

    if (rectListLayer == 0)
        owner.renderingTarget->CreateLayer (rectListLayer.resetAndGetPointerAddress());

    rectListGeometry = geometry;
    shouldClipRectList = true;
    pushClips();
}
void Direct2DLowLevelGraphicsContext::SavedState::clipToPath (ID2D1Geometry* geometry)
{
    clearPathClip();

    if (complexClipLayer == 0)
        owner.renderingTarget->CreateLayer (complexClipLayer.resetAndGetPointerAddress());

    complexClipGeometry = geometry;
    shouldClipComplex = true;
    pushClips();
}