/// <summary> /// Render the StrokeCollection under the specified DrawingContext. This draw method uses the /// passing in drawing attribute to override that on the stroke. /// </summary> /// <param name="drawingContext"></param> /// <param name="drawingAttributes"></param> public void Draw(DrawingContext drawingContext, DrawingAttributes drawingAttributes) { if (null == drawingContext) { throw new System.ArgumentNullException("context"); } if (null == drawingAttributes) { throw new System.ArgumentNullException("drawingAttributes"); } // context.VerifyAccess(); //our code never calls this public API so we can assume that opacity //has not been set up if (drawingAttributes.IsHighlighter) { drawingContext.PushOpacity(StrokeRenderer.HighlighterOpacity); try { this.DrawInternal(drawingContext, StrokeRenderer.GetHighlighterAttributes(this, this.DrawingAttributes), false); } finally { drawingContext.Pop(); } } else { this.DrawInternal(drawingContext, drawingAttributes, false); } }
/// <summary> /// Updates the contents of the visual. /// </summary> internal void Update() { using (DrawingContext drawingContext = RenderOpen()) { bool highContrast = _renderer.IsHighContrast(); if (highContrast == true && _stroke.DrawingAttributes.IsHighlighter) { // we don't render highlighters in high contrast return; } DrawingAttributes da; if (highContrast) { da = _stroke.DrawingAttributes.Clone(); da.Color = _renderer.GetHighContrastColor(); } else if (_stroke.DrawingAttributes.IsHighlighter == true) { // Get the drawing attributes to use for a highlighter stroke. This can be a copied DA with color.A // overridden if color.A != 255. da = StrokeRenderer.GetHighlighterAttributes(_stroke, _stroke.DrawingAttributes); } else { // Otherwise, usethe DA on this stroke da = _stroke.DrawingAttributes; } // Draw selected stroke as hollow _stroke.DrawInternal(drawingContext, da, _stroke.IsSelected); } }
/// <summary> /// Render the StrokeCollection under the specified DrawingContext. /// </summary> /// <param name="context"></param> public void Draw(DrawingContext context) { if (null == context) { throw new System.ArgumentNullException("context"); } //The verification of UI context affinity is done in Stroke.Draw() List <Stroke> solidStrokes = new List <Stroke>(); Dictionary <Color, List <Stroke> > highLighters = new Dictionary <Color, List <Stroke> >(); for (int i = 0; i < this.Count; i++) { Stroke stroke = this[i]; List <Stroke> strokes; if (stroke.DrawingAttributes.IsHighlighter) { // It's very important to override the Alpha value so that Colors of the same RGB vale // but different Alpha would be in the same list. Color color = StrokeRenderer.GetHighlighterColor(stroke.DrawingAttributes.Color); if (highLighters.TryGetValue(color, out strokes) == false) { strokes = new List <Stroke>(); highLighters.Add(color, strokes); } strokes.Add(stroke); } else { solidStrokes.Add(stroke); } } foreach (List <Stroke> strokes in highLighters.Values) { context.PushOpacity(StrokeRenderer.HighlighterOpacity); try { foreach (Stroke stroke in strokes) { stroke.DrawInternal(context, StrokeRenderer.GetHighlighterAttributes(stroke, stroke.DrawingAttributes), false /*Don't draw selected stroke as hollow*/); } } finally { context.Pop(); } } foreach (Stroke stroke in solidStrokes) { stroke.DrawInternal(context, stroke.DrawingAttributes, false /*Don't draw selected stroke as hollow*/); } }