using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System.Windows.Forms; namespace ArdupilotMega.Controls { /// /// profiling showed that the built in Label function was using alot of call time. /// public partial class MyLabel : Control //: Label { string label = ""; int noofchars = 0; bool autosize = false; [System.ComponentModel.Browsable(true)] public bool resize { get { return autosize; } set { autosize = value; } } public MyLabel() { } public override string Text { get { return label; } set { if (value == null) return; if (label == value) return; label = value; if (noofchars != label.Length && resize) { noofchars = label.Length; Size textSize = TextRenderer.MeasureText(value, this.Font); this.Width = textSize.Width; } if (this.Visible && ThisReallyVisible()) this.Invalidate(); } } /// /// this is to fix a mono off screen drawing issue /// /// public bool ThisReallyVisible() { if (Parent != null) return this.Bounds.IntersectsWith(Parent.ClientRectangle); return true; } SolidBrush s = new SolidBrush(Color.White); SolidBrush b = new SolidBrush(Color.Black); StringFormat stringFormat = new StringFormat(); protected override void OnPaint(PaintEventArgs e) { stringFormat.Alignment = StringAlignment.Near; stringFormat.LineAlignment = StringAlignment.Center; s = new SolidBrush(ForeColor); e.Graphics.DrawString(label, this.Font, s, new PointF(0, this.Height / 2.0f), stringFormat); } protected override void OnPaintBackground(PaintEventArgs pevent) { b = new SolidBrush(BackColor); pevent.Graphics.FillRectangle(b, this.ClientRectangle); base.OnPaintBackground(pevent); } protected override void WndProc(ref Message m) // seems to crash here on linux... so try ignore it { try { base.WndProc(ref m); } catch { } } } }