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)); }); }
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)); }); }
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)); }); }
IFACEMETHODIMP CanvasTextFormat::GetResource(REFIID iid, void** value) { return ExceptionBoundary( [&] { CheckAndClearOutPointer(value); ThrowIfFailed(GetRealizedTextFormat().CopyTo(iid, value)); }); }
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)); }); }