protected virtual void OnHandleError(string message, Exception exception) { if (this.DesignMode) { return; } var errorArgs = new SvgErrorArgs(message, exception); _svgErrors?.Invoke(this, errorArgs); if (!errorArgs.Handled) { throw new SvgErrorException(errorArgs); } }
private void InvalidateAndRender() { try { if (_svgRenderer != null) { SvgSvgElement svgEl = (SvgSvgElement)_svgWindow.Document.RootElement; SvgSizeF r = svgEl.GetSize(); int winWidth = (int)svgEl.Width.BaseVal.Value; int winHeight = (int)svgEl.Height.BaseVal.Value; if (!r.Width.Equals(0.0) && !r.Height.Equals(0.0) && (r.Width * 4 * r.Height) < BitmapLimit) { winWidth = (int)r.Width; winHeight = (int)r.Height; } if ((winWidth * 4 * winHeight) >= BitmapLimit) { winWidth = this.Width; winHeight = this.Height; } _svgWindow.Resize(winWidth, winHeight); _svgRenderer.Render(_svgWindow.Document as SvgDocument); } } catch (Exception ex) { Trace.TraceError(ex.ToString()); if (this.DesignMode) { return; } var errorArgs = new SvgErrorArgs("An exception occurred while rendering", ex); _svgErrors?.Invoke(this, errorArgs); if (!errorArgs.Handled) { MessageBox.Show(errorArgs.Message + ": " + ex.Message, _appTitle, MessageBoxButtons.OK, MessageBoxIcon.Error); } } }
protected virtual void Load() { try { if (!string.IsNullOrWhiteSpace(_svgSource)) { // Load the source _svgWindow.Source = _svgSource; // Initialize the style sheets SetupStyleSheets(); // Execute all script elements //UnloadEngines(); //InitializeEvents(); //ExecuteScripts(); SvgSvgElement svgEl = (SvgSvgElement)_svgWindow.Document.RootElement; SvgSizeF r = svgEl.GetSize(); int winWidth = (int)svgEl.Width.BaseVal.Value; int winHeight = (int)svgEl.Height.BaseVal.Value; if (!r.Width.Equals(0.0) && !r.Height.Equals(0.0) && (r.Width * 4 * r.Height) < BitmapLimit) { winWidth = (int)r.Width; winHeight = (int)r.Height; } if ((winWidth * 4 * winHeight) >= BitmapLimit) { winWidth = this.Width; winHeight = this.Height; } _svgWindow.Resize(winWidth, winHeight); _svgRenderer.InvalidRect = SvgRectF.Empty; this.Render(); _isSvgLoaded = true; } else if (!string.IsNullOrWhiteSpace(_xmlSource) && _xmlSource.Length > ValidSVG.Length) { SvgDocument doc = _svgWindow.CreateEmptySvgDocument(); doc.LoadXml(_xmlSource); _svgWindow.Document = doc; SetupStyleSheets(); SvgSvgElement svgEl = (SvgSvgElement)_svgWindow.Document.RootElement; SvgSizeF r = svgEl.GetSize(); int winWidth = (int)svgEl.Width.BaseVal.Value; int winHeight = (int)svgEl.Height.BaseVal.Value; if (!r.Width.Equals(0.0) && !r.Height.Equals(0.0) && (r.Width * 4 * r.Height) < BitmapLimit) { winWidth = (int)r.Width; winHeight = (int)r.Height; } if ((winWidth * 4 * winHeight) >= BitmapLimit) { winWidth = this.Width; winHeight = this.Height; } _svgWindow.Resize(winWidth, winHeight); _svgRenderer.InvalidRect = SvgRectF.Empty; this.Render(); _isSvgLoaded = true; } else if (_uriSource != null) { // Load the source _svgWindow.Source = _uriSource.AbsoluteUri; // Initialize the style sheets SetupStyleSheets(); // Execute all script elements //UnloadEngines(); //InitializeEvents(); //ExecuteScripts(); SvgSvgElement svgEl = (SvgSvgElement)_svgWindow.Document.RootElement; SvgSizeF r = svgEl.GetSize(); int winWidth = (int)svgEl.Width.BaseVal.Value; int winHeight = (int)svgEl.Height.BaseVal.Value; if (!r.Width.Equals(0.0) && !r.Height.Equals(0.0) && (r.Width * 4 * r.Height) < BitmapLimit) { winWidth = (int)r.Width; winHeight = (int)r.Height; } if ((winWidth * 4 * winHeight) >= BitmapLimit) { winWidth = this.Width; winHeight = this.Height; } _svgWindow.Resize(winWidth, winHeight); _svgRenderer.InvalidRect = SvgRectF.Empty; this.Render(); _isSvgLoaded = true; } else if (_streamSource != null) { SvgDocument doc = _svgWindow.CreateEmptySvgDocument(); doc.Load(_streamSource); _svgWindow.Document = doc; SetupStyleSheets(); SvgSvgElement svgEl = (SvgSvgElement)_svgWindow.Document.RootElement; SvgSizeF r = svgEl.GetSize(); int winWidth = (int)svgEl.Width.BaseVal.Value; int winHeight = (int)svgEl.Height.BaseVal.Value; if (!r.Width.Equals(0.0) && !r.Height.Equals(0.0) && (r.Width * 4 * r.Height) < BitmapLimit) { winWidth = (int)r.Width; winHeight = (int)r.Height; } if ((winWidth * 4 * winHeight) >= BitmapLimit) { winWidth = this.Width; winHeight = this.Height; } _svgWindow.Resize(winWidth, winHeight); _svgRenderer.InvalidRect = SvgRectF.Empty; this.Render(); _isSvgLoaded = true; } } catch (Exception ex) { Trace.TraceError(ex.ToString()); if (this.DesignMode) { return; } var errorArgs = new SvgErrorArgs("An error occurred while loading the document", ex); _svgErrors?.Invoke(this, errorArgs); if (!errorArgs.Handled) { MessageBox.Show(errorArgs.Message + ": " + ex.Message, _appTitle, MessageBoxButtons.OK, MessageBoxIcon.Error); } } }