D2DRenderTargetBitmapImpl.cs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. // Copyright (c) The Avalonia Project. All rights reserved.
  2. // Licensed under the MIT license. See licence.md file in the project root for full license information.
  3. using Avalonia.Platform;
  4. using Avalonia.Rendering;
  5. using SharpDX;
  6. using SharpDX.Direct2D1;
  7. using D2DBitmap = SharpDX.Direct2D1.Bitmap;
  8. namespace Avalonia.Direct2D1.Media.Imaging
  9. {
  10. public class D2DRenderTargetBitmapImpl : D2DBitmapImpl, IRenderTargetBitmapImpl, ILayerFactory
  11. {
  12. private readonly BitmapRenderTarget _renderTarget;
  13. public D2DRenderTargetBitmapImpl(BitmapRenderTarget renderTarget)
  14. : base(renderTarget.Bitmap)
  15. {
  16. _renderTarget = renderTarget;
  17. }
  18. public static D2DRenderTargetBitmapImpl CreateCompatible(
  19. SharpDX.Direct2D1.RenderTarget renderTarget,
  20. Size size)
  21. {
  22. var bitmapRenderTarget = new BitmapRenderTarget(
  23. renderTarget,
  24. CompatibleRenderTargetOptions.None,
  25. new Size2F((float)size.Width, (float)size.Height));
  26. return new D2DRenderTargetBitmapImpl(bitmapRenderTarget);
  27. }
  28. public IDrawingContextImpl CreateDrawingContext(IVisualBrushRenderer visualBrushRenderer)
  29. {
  30. return new DrawingContextImpl(visualBrushRenderer, this, _renderTarget, null, () => Version++);
  31. }
  32. public IRenderTargetBitmapImpl CreateLayer(Size size)
  33. {
  34. return CreateCompatible(_renderTarget, size);
  35. }
  36. public override void Dispose()
  37. {
  38. _renderTarget.Dispose();
  39. }
  40. public override OptionalDispose<D2DBitmap> GetDirect2DBitmap(SharpDX.Direct2D1.RenderTarget target)
  41. {
  42. return new OptionalDispose<D2DBitmap>(_renderTarget.Bitmap, false);
  43. }
  44. }
  45. }