IFACEMETHODIMP DrawInlineObject( Vector2 baselineOrigin, ICanvasTextInlineObject* inlineObject, boolean isSideways, boolean isRightToLeft, IInspectable* brush, CanvasGlyphOrientation glyphOrientation) override { return ExceptionBoundary( [&] { EnsureValidResource(); auto dwriteInlineObject = Make<InternalDWriteInlineObject>(inlineObject, m_device); CheckMakeResult(dwriteInlineObject); auto deviceContextLease = As<ICanvasDeviceInternal>(m_device)->GetResourceCreationDeviceContext(); ThrowIfFailed(m_dwriteTextRenderer->DrawInlineObject( nullptr, baselineOrigin.X, baselineOrigin.Y, ToDWriteGlyphOrientationAngle(glyphOrientation), nullptr, isSideways, isRightToLeft, DrawGlyphRunHelper::GetClientDrawingEffect(brush, deviceContextLease.Get()).Get())); }); }
ComPtr<CanvasSwapChain> CanvasSwapChain::CreateNew( ICanvasDevice* device, ICoreWindow* coreWindow, float width, float height, float dpi, DirectXPixelFormat format, int32_t bufferCount) { CheckInPointer(device); CheckInPointer(coreWindow); auto dxgiSwapChain = As<ICanvasDeviceInternal>(device)->CreateSwapChainForCoreWindow( coreWindow, SizeDipsToPixels(width, dpi), SizeDipsToPixels(height, dpi), format, bufferCount, CanvasAlphaMode::Ignore); auto canvasSwapChain = Make<CanvasSwapChain>( device, dxgiSwapChain.Get(), dpi, true); CheckMakeResult(canvasSwapChain); return canvasSwapChain; }
ComPtr<CanvasSwapChain> CanvasSwapChain::CreateNew( ICanvasDevice* device, float width, float height, float dpi, DirectXPixelFormat format, int32_t bufferCount, CanvasAlphaMode alphaMode) { auto deviceInternal = As<ICanvasDeviceInternal>(device); int widthInPixels = SizeDipsToPixels(width, dpi); int heightInPixels = SizeDipsToPixels(height, dpi); ComPtr<IDXGISwapChain1> dxgiSwapChain = deviceInternal->CreateSwapChainForComposition( widthInPixels, heightInPixels, format, bufferCount, alphaMode); auto canvasSwapChain = Make<CanvasSwapChain>( device, dxgiSwapChain.Get(), dpi, false); CheckMakeResult(canvasSwapChain); ThrowIfFailed(canvasSwapChain->put_TransformMatrix(Matrix3x2{ 1, 0, 0, 1, 0, 0 })); return canvasSwapChain; }
ComPtr<CanvasCommandList> CanvasCommandList::CreateNew( ICanvasDevice* device) { auto d2dCommandList = As<ICanvasDeviceInternal>(device)->CreateCommandList(); auto cl = Make<CanvasCommandList>(device, d2dCommandList.Get(), false); CheckMakeResult(cl); return cl; }
IFACEMETHODIMP CanvasTextFormatFactory::ActivateInstance(IInspectable** object) { return ExceptionBoundary( [&] { auto newCanvasTextFormat = Make<CanvasTextFormat>(); CheckMakeResult(newCanvasTextFormat); ThrowIfFailed(newCanvasTextFormat.CopyTo(object)); }); }
IFACEMETHODIMP CanvasTextFormatFactory::GetOrCreate( IUnknown* resource, IInspectable** wrapper) { return ExceptionBoundary( [&] { ComPtr<IDWriteTextFormat> dwriteTextFormat; ThrowIfFailed(resource->QueryInterface(dwriteTextFormat.GetAddressOf())); auto newCanvasTextFormat = Make<CanvasTextFormat>(dwriteTextFormat.Get()); CheckMakeResult(newCanvasTextFormat); ThrowIfFailed(newCanvasTextFormat.CopyTo(wrapper)); }); }