Example #1
0
    IFACEMETHODIMP CanvasSwapChainFactory::CreateWithAllOptions(
        ICanvasResourceCreator* resourceCreator,
        float width,
        float height,
        float dpi,
        DirectXPixelFormat format,
        int32_t bufferCount,
        CanvasAlphaMode alphaMode,
        ICanvasSwapChain** swapChain)
    {
        return ExceptionBoundary(
            [&]
            {
                CheckInPointer(resourceCreator);
                CheckAndClearOutPointer(swapChain);

                ComPtr<ICanvasDevice> device;
                ThrowIfFailed(resourceCreator->get_Device(&device));

                auto newCanvasSwapChain = CanvasSwapChain::CreateNew(
                    device.Get(),
                    width,
                    height,
                    dpi,
                    format,
                    bufferCount,
                    alphaMode);

                ThrowIfFailed(newCanvasSwapChain.CopyTo(swapChain));
            });
    }
Example #2
0
    IFACEMETHODIMP CanvasSwapChain::CreateDrawingSession(
        Color clearColor,
        ICanvasDrawingSession** drawingSession) 
    {
        return ExceptionBoundary(
            [&]
            {            
                CheckAndClearOutPointer(drawingSession);
                auto& dxgiSwapChain = GetResource();
                auto& device = m_device.EnsureNotClosed();

                auto d2dDevice = As<ICanvasDeviceInternal>(device)->GetD2DDevice();
                D2DResourceLock lock(d2dDevice.Get());

                ComPtr<ID2D1DeviceContext1> deviceContext;
                auto adapter = CanvasSwapChainDrawingSessionAdapter::Create(
                    device.Get(),
                    dxgiSwapChain.Get(),
                    ToD2DColor(clearColor),
                    m_dpi,
                    &deviceContext);
                
                auto newDrawingSession = CanvasDrawingSession::CreateNew(deviceContext.Get(), adapter, device.Get());

                ThrowIfFailed(newDrawingSession.CopyTo(drawingSession));
            });
    }
Example #3
0
    IFACEMETHODIMP CanvasSwapChainFactory::CreateWithWidthAndHeight(
        ICanvasResourceCreatorWithDpi* resourceCreator,
        float width,
        float height,
        ICanvasSwapChain** swapChain)
    {
        return ExceptionBoundary(
            [&]
            {
                CheckInPointer(resourceCreator);
                CheckAndClearOutPointer(swapChain);
                
                float dpi;
                ThrowIfFailed(resourceCreator->get_Dpi(&dpi));

                ComPtr<ICanvasDevice> device;
                ThrowIfFailed(As<ICanvasResourceCreator>(resourceCreator)->get_Device(&device));

                auto newCanvasSwapChain = CanvasSwapChain::CreateNew(
                    device.Get(),
                    width,
                    height,
                    dpi,
                    CanvasSwapChain::DefaultPixelFormat,
                    CanvasSwapChain::DefaultBufferCount,
                    CanvasSwapChain::DefaultCompositionAlphaMode);

                ThrowIfFailed(newCanvasSwapChain.CopyTo(swapChain));
            });
    }
    IFACEMETHODIMP CanvasCommandList::CreateDrawingSession(
        ICanvasDrawingSession** drawingSession)
    {
        return ExceptionBoundary(
            [&]
            {
                CheckAndClearOutPointer(drawingSession);

                if (m_d2dCommandListIsClosed)
                    ThrowHR(E_INVALIDARG, Strings::CommandListCannotBeDrawnToAfterItHasBeenUsed);

                if (*m_hasActiveDrawingSession)
                    ThrowHR(E_FAIL, Strings::CannotCreateDrawingSessionUntilPreviousOneClosed);

                auto& d2dCommandList = GetResource();
                auto& device = m_device.EnsureNotClosed();

                auto deviceContext = As<ICanvasDeviceInternal>(device)->CreateDeviceContextForDrawingSession();
                deviceContext->SetTarget(d2dCommandList.Get());

                auto adapter = std::make_shared<SimpleCanvasDrawingSessionAdapter>(deviceContext.Get());

                auto ds = CanvasDrawingSession::CreateNew(deviceContext.Get(), adapter, device.Get(), m_hasActiveDrawingSession);

                ThrowIfFailed(ds.CopyTo(drawingSession));
            });
    }
Example #5
0
 IFACEMETHODIMP CanvasTextFormat::GetResource(REFIID iid, void** value)
 {
     return ExceptionBoundary(
         [&]
         {
             CheckAndClearOutPointer(value);
             ThrowIfFailed(GetRealizedTextFormat().CopyTo(iid, value));
         });
 }
Example #6
0
    IFACEMETHODIMP CanvasSwapChainFactory::CreateForCoreWindowWithDpi(
        ICanvasResourceCreator* resourceCreator,
        ICoreWindow* coreWindow,
        float dpi,
        ICanvasSwapChain** swapChain)
    {
        return ExceptionBoundary(
            [&]
            {
                CheckInPointer(resourceCreator);
                CheckAndClearOutPointer(swapChain);

                ComPtr<ICanvasDevice> device;
                ThrowIfFailed(resourceCreator->get_Device(&device));

                auto newCanvasSwapChain = CanvasSwapChain::CreateNew(
                    device.Get(),
                    coreWindow,
                    dpi);

                ThrowIfFailed(newCanvasSwapChain.CopyTo(swapChain));
            });
    }