Control MetricsPreview() { metricsPreview = new Drawable { Size = new Size(200, 100) }; metricsPreview.Paint += (sender, pe) => { var size = pe.Graphics.MeasureString(selectedFont, preview.Text); var scale = this.ParentWindow.Screen.Scale; var ypos = Math.Max(0, (selectedFont.Ascent * scale) - size.Height); ypos += Math.Max(0, (metricsPreview.Size.Height - (selectedFont.LineHeight * scale)) / 2); var baseline = ypos + (selectedFont.Baseline * scale); pe.Graphics.DrawLine(Pens.Black(), 0, baseline, 200, baseline); pe.Graphics.DrawText(selectedFont, Colors.Black, 0, ypos, preview.Text); var ascender = baseline - selectedFont.Ascent * scale; pe.Graphics.DrawLine(Pens.Blue(), 0, ascender, 200, ascender); var descender = baseline + selectedFont.Descent * scale; pe.Graphics.DrawLine(Pens.Red(), 0, descender, 200, descender); var xheight = baseline - selectedFont.XHeight * scale; pe.Graphics.DrawLine(Pens.Green(), 0, xheight, 200, xheight); var lineheight = ypos + selectedFont.LineHeight * scale; pe.Graphics.DrawLine(Pens.Orange(), 0, lineheight, 200, lineheight); }; return(metricsPreview); }
Control CreateCustom32Alpha() { var image = new Bitmap(100, 100, PixelFormat.Format32bppRgba); // should always ensure .Dispose() is called when you are done with a Graphics object using (var graphics = new Graphics(image)) { graphics.DrawLine(Pens.Blue(), Point.Empty, new Point(image.Size)); graphics.DrawRectangle(Pens.Black(), new Rectangle(image.Size - 1)); } return new DrawableImageView { Image = image }; }
Control Default() { var control = new Drawable { Size = new Size(50, 50) }; control.Paint += delegate(object sender, PaintEventArgs pe) { pe.Graphics.DrawLine(Pens.Black(), Point.Empty, new Point(control.Size)); }; LogEvents(control); return(control); }
Control WithBackground() { var control = new Drawable { Size = new Size(50, 50), BackgroundColor = Colors.Lime }; control.Paint += delegate(object sender, PaintEventArgs pe) { pe.Graphics.DrawLine(Pens.Black(), Point.Empty, new Point(control.Size)); }; LogEvents(control); return(control); }
Control MetricsPreview() { metricsPreview = new Drawable { Size = new Size(200, 100) }; metricsPreview.Paint += (sender, pe) => { var width = metricsPreview.Size.Width; pe.Graphics.PixelOffsetMode = PixelOffsetMode.Half; pe.Graphics.DrawRectangle(Colors.Black, new RectangleF(metricsPreview.Size)); var size = pe.Graphics.MeasureString(selectedFont, preview.Text); var scale = ParentWindow.Screen.Scale; var ypos = Math.Max(0, (metricsPreview.Size.Height - size.Height) / 2); pe.Graphics.FillRectangle(Brushes.GhostWhite(), new RectangleF(new PointF(0, ypos), size)); pe.Graphics.DrawText(selectedFont, Colors.Black, 0, ypos, preview.Text); var baseline = ypos + selectedFont.Baseline * scale; pe.Graphics.DrawLine(Pens.Black(), 0, baseline, width, baseline); var ascender = baseline - selectedFont.Ascent * scale; pe.Graphics.DrawLine(Pens.Blue(), 0, ascender, width, ascender); var descender = baseline + selectedFont.Descent * scale; pe.Graphics.DrawLine(Pens.Red(), 0, descender, width, descender); var xheight = baseline - selectedFont.XHeight * scale; pe.Graphics.DrawLine(Pens.Green(), 0, xheight, width, xheight); var lineheight = ypos + selectedFont.LineHeight * scale; pe.Graphics.DrawLine(Pens.Orange(), 0, lineheight, width, lineheight); }; return(metricsPreview); }
public Box(Size canvasSize, bool useTexturesAndGradients, DirectDrawingRenderer renderer) { this.renderer = renderer; var size = new SizeF(random.Next(50) + 50, random.Next(50) + 50); var location = new PointF(random.Next(canvasSize.Width - (int)size.Width), random.Next(canvasSize.Height - (int)size.Height)); position = new RectangleF(location, size); increment = new SizeF(random.Next(3) + 1, random.Next(3) + 1); if (random.Next(2) == 1) { increment.Width = -increment.Width; } if (random.Next(2) == 1) { increment.Height = -increment.Height; } angle = random.Next(360); rotation = (random.Next(20) - 10f) / 4f; var rect = new RectangleF(size); color = GetRandomColor(random); var colorPen = new Pen(color, generator: renderer.Generator); var blackPen = Pens.Black(renderer.Generator); var blackBrush = Brushes.Black(renderer.Generator); switch (random.Next(useTexturesAndGradients ? 4 : 2)) { case 0: draw = g => g.DrawRectangle(colorPen, rect); erase = g => g.DrawRectangle(blackPen, rect); break; case 1: draw = g => g.DrawEllipse(colorPen, rect); erase = g => g.DrawEllipse(blackPen, rect); break; case 2: switch (random.Next(2)) { case 0: fillBrush = new LinearGradientBrush(GetRandomColor(random), GetRandomColor(random), PointF.Empty, new PointF(size.Width, size.Height), renderer.Generator); break; case 1: fillBrush = new TextureBrush(renderer.texture, 1f, renderer.Generator) { Transform = Matrix.FromScale(size / 80, renderer.Generator) }; break; } draw = g => g.FillEllipse(fillBrush, rect); erase = g => g.FillEllipse(blackBrush, rect); break; case 3: switch (random.Next(2)) { case 0: fillBrush = new LinearGradientBrush(GetRandomColor(random), GetRandomColor(random), PointF.Empty, new PointF(size.Width, size.Height), renderer.Generator); break; case 1: fillBrush = new TextureBrush(renderer.texture, 1f, renderer.Generator) { Transform = Matrix.FromScale(size / 80, renderer.Generator) }; break; } draw = g => g.FillRectangle(fillBrush, rect); erase = g => g.FillRectangle(blackBrush, rect); break; } }