public void GetBrush_ShouldReturnBrushWithOpacity() { var styleAttributes = new Dictionary<string, string> {{"fill-opacity", "0.2"}}; var expectedBrush = new SolidBrush(new Color(0, 0, 0, 0.2)); var actualBrush = _stylesParser.GetBrush(styleAttributes, new Dictionary<string, XElement>(), null); actualBrush.Should().NotBeNull(); ((SolidBrush) actualBrush).ShouldBeEquivalentTo(expectedBrush); }
public void GetBrush_ShouldReturnBrushWithFillModeEvenOdd() { var styleAttributes = new Dictionary<string, string> {{"fill-rule", "evenodd"}}; var expectedBrush = new SolidBrush { FillMode = FillMode.EvenOdd }; var actualBrush = _stylesParser.GetBrush(styleAttributes, new Dictionary<string, XElement>(), null); actualBrush.Should().NotBeNull(); ((SolidBrush) actualBrush).ShouldBeEquivalentTo(expectedBrush); }
public void GetBrush_ShouldReturnBrushWithColor_IfFillHasValidColor_White() { var styleAttributes = new Dictionary<string, string> {{"fill", "#FFFFFF"}}; var expectedBrush = new SolidBrush { Color = new Color(1, 1, 1) }; var actualBrush = _stylesParser.GetBrush(styleAttributes, new Dictionary<string, XElement>(), null); actualBrush.Should().NotBeNull(); ((SolidBrush) actualBrush).ShouldBeEquivalentTo(expectedBrush); }
public BaseBrush GetBrush(Dictionary<string, string> styleAttributes,Dictionary<string, XElement> defs, Pen pen) { BaseBrush baseBrush = null; var fillOpacity = GetString(styleAttributes, "fill-opacity"); if (!string.IsNullOrWhiteSpace(fillOpacity)) { if (baseBrush == null) baseBrush = new SolidBrush(); var sb = baseBrush as SolidBrush; if (sb != null) sb.Color = sb.Color.WithAlpha(_valuesParser.ReadNumber(fillOpacity)); } var fillRule = GetString(styleAttributes, "fill-rule"); if (!string.IsNullOrWhiteSpace(fillRule)) { if (baseBrush == null) baseBrush = new SolidBrush(); var sb = baseBrush as SolidBrush; if (sb != null) { if (fillRule.Equals("evenodd")) { sb.FillMode = FillMode.EvenOdd; } } } var fill = GetString(styleAttributes, "fill").Trim(); if (string.IsNullOrEmpty(fill)) { // No change } else if (fill == "none") { baseBrush = null; } else { Color color; if (Colors.TryParse(fill, out color)) { var sb = baseBrush as SolidBrush; if (sb == null) { baseBrush = new SolidBrush(color); } else { if (sb.Color.Alpha == 1 || pen == null) sb.Color = color; else sb.Color = color.WithAlpha(sb.Color.Alpha); } } else { var urlM = _fillUrlRe.Match(fill); if (urlM.Success) { var id = urlM.Groups[1].Value.Trim(); XElement defE; if (defs.TryGetValue(id, out defE)) { switch (defE.Name.LocalName) { case "linearGradient": baseBrush = CreateLinearGradientBrush(defE); break; case "radialGradient": baseBrush = CreateRadialGradientBrush(defE); break; default: throw new NotSupportedException("Fill " + defE.Name); } } else { throw new Exception("Invalid fill url reference: " + id); } } else { throw new NotSupportedException("Fill " + fill); } } } return baseBrush; }
public void GetBrush_ShouldReturnDefaultBrush_IfFillRuleIsDefault() { var styleAttributes = new Dictionary<string, string> {{"fill-rule", "nonzero"}}; var expectedBrush = new SolidBrush { FillMode = FillMode.NonZero }; var actualBrush = _stylesParser.GetBrush(styleAttributes, new Dictionary<string, XElement>(), null); actualBrush.Should().NotBeNull(); ((SolidBrush) actualBrush).ShouldBeEquivalentTo(expectedBrush); }