| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274 |
- using System.Drawing.Drawing2D;
- using System.Drawing.Imaging;
- using System.Drawing.Text;
- using Client.MirGraphics;
- using SlimDX;
- using SlimDX.Direct3D9;
- using Font = System.Drawing.Font;
- namespace Client.MirControls
- {
- public class MirLabel : MirControl
- {
- #region Auto Size
- private bool _autoSize;
- public bool AutoSize
- {
- get { return _autoSize; }
- set
- {
- if (_autoSize == value)
- return;
- _autoSize = value;
- OnAutoSizeChanged(EventArgs.Empty);
- }
- }
- public event EventHandler AutoSizeChanged;
- private void OnAutoSizeChanged(EventArgs e)
- {
- TextureValid = false;
- GetSize();
- if (AutoSizeChanged != null)
- AutoSizeChanged.Invoke(this, e);
- }
- #endregion
- #region DrawFormat
- private TextFormatFlags _drawFormat;
- public TextFormatFlags DrawFormat
- {
- get { return _drawFormat; }
- set
- {
- _drawFormat = value;
- OnDrawFormatChanged(EventArgs.Empty);
- }
- }
- public event EventHandler DrawFormatChanged;
- private void OnDrawFormatChanged(EventArgs e)
- {
- TextureValid = false;
- if (DrawFormatChanged != null)
- DrawFormatChanged.Invoke(this, e);
- }
- #endregion
- #region Font
- private Font _font;
- public Font Font
- {
- get { return _font; }
- set
- {
- _font = ScaleFont(value);
- OnFontChanged(EventArgs.Empty);
- }
- }
- public event EventHandler FontChanged;
- private void OnFontChanged(EventArgs e)
- {
- TextureValid = false;
- GetSize();
- if (FontChanged != null)
- FontChanged.Invoke(this, e);
- }
- #endregion
- #region Out Line
- private bool _outLine;
- public bool OutLine
- {
- get { return _outLine; }
- set
- {
- if (_outLine == value)
- return;
- _outLine = value;
- OnOutLineChanged(EventArgs.Empty);
- }
- }
- public event EventHandler OutLineChanged;
- private void OnOutLineChanged(EventArgs e)
- {
- TextureValid = false;
- GetSize();
-
- if (OutLineChanged != null)
- OutLineChanged.Invoke(this, e);
- }
- #endregion
- #region Out Line Colour
- private Color _outLineColour;
- public Color OutLineColour
- {
- get { return _outLineColour; }
- set
- {
- if (_outLineColour == value)
- return;
- _outLineColour = value;
- OnOutLineColourChanged();
- }
- }
- public event EventHandler OutLineColourChanged;
- private void OnOutLineColourChanged()
- {
- TextureValid = false;
- if (OutLineColourChanged != null)
- OutLineColourChanged.Invoke(this, EventArgs.Empty);
- }
- #endregion
- #region Size
- private void GetSize()
- {
- if (!AutoSize)
- return;
- if (string.IsNullOrEmpty(_text))
- Size = Size.Empty;
- else
- {
- Size = TextRenderer.MeasureText(CMain.Graphics, Text, Font);
- //Size = new Size(Size.Width, Size.Height + 5);
- if (OutLine && Size != Size.Empty)
- Size = new Size(Size.Width + 2, Size.Height + 2);
- }
- }
- #endregion
- #region Label
- private string _text;
- public string Text
- {
- get { return _text; }
- set
- {
- if (_text == value)
- return;
- _text = value;
- OnTextChanged(EventArgs.Empty);
- }
- }
- public event EventHandler TextChanged;
- private void OnTextChanged(EventArgs e)
- {
- DrawControlTexture = !string.IsNullOrEmpty(Text);
- TextureValid = false;
- Redraw();
- GetSize();
- if (TextChanged != null)
- TextChanged.Invoke(this, e);
- }
- #endregion
- public MirLabel()
- {
- DrawControlTexture = true;
- _drawFormat = TextFormatFlags.WordBreak;
- _font = ScaleFont(new Font(Settings.FontName, 8F));
- _outLine = true;
- _outLineColour = Color.Black;
- _text = string.Empty;
- }
-
- protected override unsafe void CreateTexture()
- {
- if (string.IsNullOrEmpty(Text))
- return;
- if (Size.Width == 0 || Size.Height == 0)
- return;
- if (TextureSize != Size)
- DisposeTexture();
- if (ControlTexture == null || ControlTexture.Disposed)
- {
- DXManager.ControlList.Add(this);
- ControlTexture = new Texture(DXManager.Device, Size.Width, Size.Height, 1, Usage.None, Format.A8R8G8B8, Pool.Managed);
- TextureSize = Size;
- }
- DataRectangle stream = ControlTexture.LockRectangle(0, LockFlags.Discard);
- using (Bitmap image = new Bitmap(Size.Width, Size.Height, Size.Width * 4, PixelFormat.Format32bppArgb, stream.Data.DataPointer))
- {
- using (Graphics graphics = Graphics.FromImage(image))
- {
- graphics.SmoothingMode = SmoothingMode.AntiAlias;
- graphics.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;
- graphics.CompositingQuality = CompositingQuality.HighQuality;
- graphics.InterpolationMode = InterpolationMode.NearestNeighbor;
- graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
- graphics.TextContrast = 0;
- graphics.Clear(BackColour);
- if (OutLine)
- {
- TextRenderer.DrawText(graphics, Text, Font, new Rectangle(1, 0, Size.Width, Size.Height), OutLineColour, DrawFormat);
- TextRenderer.DrawText(graphics, Text, Font, new Rectangle(0, 1, Size.Width, Size.Height), OutLineColour, DrawFormat);
- TextRenderer.DrawText(graphics, Text, Font, new Rectangle(2, 1, Size.Width, Size.Height), OutLineColour, DrawFormat);
- TextRenderer.DrawText(graphics, Text, Font, new Rectangle(1, 2, Size.Width, Size.Height), OutLineColour, DrawFormat);
- TextRenderer.DrawText(graphics, Text, Font, new Rectangle(1, 1, Size.Width, Size.Height), ForeColour, DrawFormat);
- //LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, this.Size.Width, this.Size.Height), Color.FromArgb(239, 243, 239), Color.White, LinearGradientMode.Vertical);
- ////graphics.DrawString(Text, Font, brush, 37, 9);
- ////graphics.DrawString(this.Text, this.Font, new SolidBrush(Color.Black), 39, 9, StringFormat.GenericDefault);
- }
- else
- TextRenderer.DrawText(graphics, Text, Font, new Rectangle(1, 0, Size.Width, Size.Height), ForeColour, DrawFormat);
- }
- }
- ControlTexture.UnlockRectangle(0);
- DXManager.Sprite.Flush();
- TextureValid = true;
- }
- #region Disposable
- protected override void Dispose(bool disposing)
- {
- base.Dispose(disposing);
- if (!disposing) return;
-
- AutoSizeChanged = null;
- _autoSize = false;
- DrawFormatChanged = null;
- _drawFormat = 0;
- FontChanged = null;
- if (_font != null)
- {
- _font.Dispose();
- _font = null;
- }
- OutLineChanged = null;
- _outLine = false;
- OutLineColourChanged = null;
- _outLineColour = Color.Empty;
- TextChanged = null;
- _text = null;
- }
- #endregion
- }
- }
|