AngleSharp by Florian Rappl

<PackageReference Include="AngleSharp" Version="0.8.1" />

.NET API 1,172,480 bytes

 HtmlCanvasElement

Represents the HTML canvas element. See: http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html Alternative: http://www.w3.org/html/wg/drafts/html/master/embedded-content-0.html#the-canvas-element
using AngleSharp.Dom.Css; using AngleSharp.Dom.Media; using AngleSharp.Extensions; using AngleSharp.Html; using AngleSharp.Services; using System; using System.IO; namespace AngleSharp.Dom.Html { internal sealed class HtmlCanvasElement : HtmlElement, IHtmlCanvasElement, IHtmlElement, IElement, INode, IEventTarget, IParentNode, IChildNode, INonDocumentTypeChildNode, IElementCssInlineStyle { private enum ContextMode { None, Direct2d, DirectWebGl, Indirect, Proxied } private ContextMode _mode; private IRenderingContext _current; public int Width { get { return GetAttribute(AttributeNames.Width).ToInteger(300); } set { SetAttribute(AttributeNames.Width, value.ToString()); } } public int Height { get { return GetAttribute(AttributeNames.Height).ToInteger(150); } set { SetAttribute(AttributeNames.Height, value.ToString()); } } public HtmlCanvasElement(Document owner) : base(owner, Tags.Canvas, NodeFlags.None) { _mode = ContextMode.None; } public IRenderingContext GetContext(string contextId) { if (_current != null && _current.ContextId.Equals(contextId, StringComparison.OrdinalIgnoreCase)) return _current; IRenderingService service = base.Owner.Options.GetService<IRenderingService>(); if (service == null) return null; IRenderingContext renderingContext = service.CreateContext(contextId); if (renderingContext != null) { renderingContext.Host = this; _mode = GetModeFrom(contextId); _current = renderingContext; } return renderingContext; } public bool IsSupportingContext(string contextId) { return base.Owner.Options.GetService<IRenderingService>()?.IsSupportingContext(contextId) ?? false; } public void SetContext(IRenderingContext context) { if (_mode != 0 && _mode != ContextMode.Indirect) throw new DomException(ErrorCode.InvalidState); if (context.IsFixed) throw new DomException(ErrorCode.InvalidState); context.Host = this; _current = context; _mode = ContextMode.Indirect; } public string ToDataUrl(string type = null) { IRenderingContext current = _current; return string.Empty; } public void ToBlob(Action<Stream> callback, string type = null) { IRenderingContext current = _current; } private static ContextMode GetModeFrom(string contextId) { if (contextId.Equals("2d", StringComparison.OrdinalIgnoreCase)) return ContextMode.Direct2d; if (contextId.Equals("webgl", StringComparison.OrdinalIgnoreCase)) return ContextMode.DirectWebGl; return ContextMode.None; } } }