private void DrawChar(DrawingContext drawingContext, float x, float y, Rect charSourceRect, ColorMultiplier multiplier) { ImageBrush imageBrush = new ImageBrush(fontSource) { Viewbox = charSourceRect, ViewboxUnits = BrushMappingMode.Absolute }; if (multiplier.r == 1.0f && multiplier.g == 1.0f && multiplier.b == 1.0f) { drawingContext.DrawRectangle(imageBrush, null, new Rect(x, y, charSourceRect.Width, charSourceRect.Height)); } else { drawingContext.PushOpacityMask(imageBrush); SolidColorBrush colorBrush = new SolidColorBrush( Color.FromRgb( (byte)(multiplier.r * 255), (byte)(multiplier.g * 255), (byte)(multiplier.b * 255))); drawingContext.DrawRectangle(colorBrush, null, new Rect(x, y, charSourceRect.Width, charSourceRect.Height)); drawingContext.Pop(); } }
protected override void RenderElementUntransformed(DrawingContext drawingContext, ColorMultiplier multiplier, bool isTop) { base.RenderElementUntransformed(drawingContext, multiplier, isTop); if (!CurrentVisibility && !isTop) { return; } multiplier.Scale(textBox.TextRed / 255.0f, textBox.TextGreen / 255.0f, textBox.TextBlue / 255.0f); font.DrawByteArray( textBox.TextBuffer, textBox.Width, textBox.Height, new TextBoxAttributes() { xAlign = textBox.XAlignment, yAlign = textBox.YAlignment, multiline = textBox.Multiline, wordWrap = textBox.WordWrap }, (outX, outY, x, y, width, height) => DrawChar(drawingContext, outX, outY, new Rect(x, y, width, height), multiplier)); }
public void RenderElement(DrawingContext drawingContext) => RenderElement(drawingContext, ColorMultiplier.One(), true);
internal abstract void RenderElement(DrawingContext drawingContext, ColorMultiplier multiplier, bool isTop);
protected override void RenderElementUntransformed(DrawingContext drawingContext, ColorMultiplier multiplier, bool forceVisible) { if (!CurrentVisibility && !forceVisible && VisibilityClock == null) return; if (SpriteClocks == null) { foreach (UIElementModel child in Children) { child.RenderElement(drawingContext, multiplier, false); } } else { int index = 0; foreach (UIElementModel child in Children) { if (!(child is UISpriteGroupModel groupModel)) continue; if (!groupModel.IsSpriteCollectionChild) continue; drawingContext.PushOpacity(child.CurrentVisibility ? 1 : 0, SpriteClocks[index]); child.RenderElement(drawingContext, multiplier, true); drawingContext.Pop(); index++; } } }