| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using Avalonia.Controls.Platform.Surfaces;
- using Avalonia.Platform;
- using Cairo;
- using Gdk;
- namespace Avalonia.Gtk
- {
- class SurfaceFramebuffer : ILockedFramebuffer
- {
- private Drawable _drawable;
- private ImageSurface _surface;
- public SurfaceFramebuffer(int width, int height)
- {
- _surface = new ImageSurface(Cairo.Format.RGB24, width, height);
- }
- public void SetDrawable(Drawable drawable)
- {
- _drawable = drawable;
- _surface.Flush();
- }
- public void Deallocate()
- {
- _surface.Dispose();
- _surface = null;
- }
- public void Dispose()
- {
- using (var ctx = CairoHelper.Create(_drawable))
- {
- _surface.MarkDirty();
- ctx.SetSourceSurface(_surface, 0, 0);
- ctx.Paint();
- }
- _drawable = null;
- }
- public IntPtr Address => _surface.DataPtr;
- public int Width => _surface.Width;
- public int Height => _surface.Height;
- public int RowBytes => _surface.Stride;
- //TODO: Proper DPI detect
- public Size Dpi => new Size(96, 96);
- public PixelFormat Format => PixelFormat.Bgra8888;
- }
- }
|