private void OnPaintSurface(object sender, SKPaintSurfaceEventArgs e2) { var e = new SkiaGraphics(e2.Surface); e2.Surface.Canvas.Clear(); int y = 0; { Size extent = e.MeasureString(desc, this.Font).ToSize(); var mid = extent.Width / 2; e.DrawString(desc, this.Font, new SolidBrush(this.ForeColor), this.Width / 2 - mid, 0); y = extent.Height; } // { var numb = number.ToString(numberformat); Size extent = e.MeasureString("0".PadLeft(numb.Length + 1, '0'), new Font(this.Font.FontFamily, (float)newSize, this.Font.Style)).ToSize(); float hRatio = (this.Height - y) / (float)(extent.Height); float wRatio = this.Width / (float)extent.Width; float ratio = (hRatio < wRatio) ? hRatio : wRatio; newSize = (newSize * ratio);// * 0.75f; // pixel to points newSize -= newSize % 5; if (newSize < 8 || newSize > 999999) { newSize = 8; } extent = e.MeasureString(numb, new Font(this.Font.FontFamily, (float)newSize, this.Font.Style)).ToSize(); e.DrawString(numb, new Font(this.Font.FontFamily, (float)newSize, this.Font.Style), new SolidBrush(this.numberColor), this.Width / 2 - extent.Width / 2, y + ((this.Height - y) / 2 - extent.Height / 2)); } }
private void OnPaintSurface(object sender, SKPaintSurfaceEventArgs e) { if (inOnPaint || !IsHandleCreated) { return; } inOnPaint = true; try { var gr = new SkiaGraphics(e.Surface); gr.Clear(this.BackColor); gr.SmoothingMode = SmoothingMode.AntiAlias; Rectangle outside = new Rectangle(0, 0, this.Width, this.Height); LinearGradientBrush linear = new LinearGradientBrush(outside, BGGradTop, BGGradBot, LinearGradientMode.Vertical); Pen mypen = new Pen(Outline, 1); GraphicsPath outline = new GraphicsPath(); float wid = this.Height / 3f; wid = 1; int width = this.Width - 1; int height = this.Height - 1; // tl outline.AddArc(0, 0, wid, wid, 180, 90); // top line outline.AddLine(wid, 0, width - wid, 0); // tr outline.AddArc(width - wid, 0, wid, wid, 270, 90); // br outline.AddArc(width - wid, height - wid, wid, wid, 0, 90); // bottom line outline.AddLine(wid, height, width - wid, height); // bl outline.AddArc(0, height - wid, wid, wid, 90, 90); // left line outline.AddLine(0, height - wid, 0, wid - wid / 2); gr.FillPath(linear, outline); gr.DrawPath(mypen, outline); SolidBrush mybrush = new SolidBrush(TextColor); if (_mouseover) { SolidBrush brush = new SolidBrush(ColorMouseOver); gr.FillPath(brush, outline); } if (_mousedown) { SolidBrush brush = new SolidBrush(ColorMouseDown); gr.FillPath(brush, outline); } if (!this.Enabled) { SolidBrush brush = new SolidBrush(_ColorNotEnabled); gr.FillPath(brush, outline); } StringFormat stringFormat = new StringFormat(); stringFormat.Alignment = StringAlignment.Center; stringFormat.LineAlignment = StringAlignment.Center; string display = this.Text; int amppos = display.IndexOf('&'); if (amppos != -1) { display = display.Remove(amppos, 1); } gr.DrawString(display, this.Font, mybrush, outside, stringFormat); } catch { } inOnPaint = false; }