diff options
| author | jpbruyere <jp.bruyere@hotmail.com> | 2014-12-18 22:41:10 +0100 |
|---|---|---|
| committer | jpbruyere <jp.bruyere@hotmail.com> | 2014-12-18 22:41:10 +0100 |
| commit | d5a5d9516969d7a0fb665a72be7269e7bd51ad58 (patch) | |
| tree | 64807d55e1994b3c700e9628ac7a6ba602a4426f /src/Label.cs | |
| parent | 02fed0f59e37aa66381023ec1543cca9a54ac118 (diff) | |
misa a jour
Diffstat (limited to 'src/Label.cs')
| -rw-r--r-- | src/Label.cs | 302 |
1 files changed, 0 insertions, 302 deletions
diff --git a/src/Label.cs b/src/Label.cs deleted file mode 100644 index 699c2e88..00000000 --- a/src/Label.cs +++ /dev/null @@ -1,302 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Diagnostics; -using Cairo; - -namespace go -{ - public class Label : GraphicObject - { - //static constructor to init label specific theme value - public static class Theme - { - public static Color background = Color.Transparent; - public static Color borderColor = Color.White; - public static int margin = 0; - public static int borderWidth = 0; - public static VerticalAlignment verticalAlignment = VerticalAlignment.None; - public static HorizontalAlignment horizontalAlignment = HorizontalAlignment.None; - public static bool sizeToContent = false; - //label specific - public static int fontSize = 10; - public static Color fontColor = Color.White; - } - - public Label(string _text) - : base() - { - init(); - updateFont(); - text = _text; - - } - - void init() - { - background = Theme.background; - borderColor = Theme.borderColor; - borderWidth = Theme.borderWidth; - margin = Theme.margin; - horizontalAlignment = Theme.horizontalAlignment; - verticalAlignment = Theme.verticalAlignment; - sizeToContent = Theme.sizeToContent; - fontSize = Theme.fontSize; - fontColor = Theme.fontColor; - } - - - - protected string _text = "label"; - int _fontSize; - Color _fontColor; - - public string text - { - get { return _text; } - set - { - if (_text == value) - return; - - registerForGraphicUpdate(); - - //if (value.Length != _text.Length) - // layoutIsValid = false; - - _text = value; - } - } - public int fontSize - { - get { return _fontSize; } - set - { - _fontSize = value; - registerForGraphicUpdate(); - } - } - public Color fontColor - { - get { return _fontColor; } - set - { - _fontColor = value; - registerForGraphicUpdate(); - } - } - - public byte[] utf8Text - { - get { return System.Text.UTF8Encoding.UTF8.GetBytes(text); } - } - - protected Rectangle rText; - - //public FontStyle fontStyle - //{ - // get { return _fontStyle; } - // set - // { - // _fontStyle = value; - // updateFont(); - // } - //} - //public FontFamily fontFamily - //{ - // get { return _fontFamily; } - // set - // { - // _fontFamily = value; - // updateFont(); - // } - //} - - - - //Font TextFont; - - public Alignment textAlignment = Alignment.LeftCenter; - - - - void updateFont() - { - //TextFont = new Font(fontFamily, fontSize, fontStyle, GraphicsUnit.Pixel); - bmp = null; - } - - public override Size measureRawSize() - { - byte[] txt = utf8Text; - - Size s; - - using (Context gr = new Context(new ImageSurface(Format.Argb32,1,1))) - { - gr.SetFontSize(fontSize); - TextExtents te; -#if _WIN32 || _WIN64 - te = gr.TextExtents(utf8Text); -#elif __linux__ - te = gr.TextExtents(text); -#endif - FontExtents fe = gr.FontExtents; - s = new Size((int)Math.Ceiling(te.XAdvance),(int)Math.Ceiling(fe.Height)); - } - return s;// +borderWidth; - } - - internal override void updateGraphic() - { - byte[] txt = utf8Text; - int stride = 4 * renderBounds.Width; - - - //init bmp with widget background and border - base.updateGraphic(); - - using (ImageSurface bitmap = - new ImageSurface(bmp, Format.Argb32, renderBounds.Width, renderBounds.Height, stride)) - { - using (Context gr = new Context(bitmap)) - { - gr.FontOptions.Antialias = Antialias.Subpixel; - gr.FontOptions.HintMetrics = HintMetrics.On; - gr.SetFontSize(fontSize); - FontExtents fe = gr.FontExtents; - rText = new Rectangle(new Point(0,0), measureRawSize()); - //gr.Rotate(Math.PI); - - // double a = Math.PI; - //gr.Transform(new c.Matrix(Math.Cos(a),-Math.Sin(a),Math.Sin(a),Math.Cos(a),renderBounds.Width,renderBounds.Height)); - gr.Antialias = Antialias.Subpixel; - gr.LineWidth = borderWidth; - - float widthRatio = 1f; - float heightRatio = 1f; - - Rectangle cb = clientBounds; - - //ignore text alignment if size to content = true - if (!sizeToContent) - { - switch (textAlignment) - { - case Alignment.None: - break; - case Alignment.TopLeft: //ok - rText.X = cb.X; - rText.Y = cb.Y; - break; - case Alignment.TopCenter: //ok - rText.Y = cb.Y; - rText.X = cb.X + cb.Width / 2 - rText.Width / 2; - break; - case Alignment.TopRight: //ok - rText.X = cb.Right - rText.Width; - rText.Y = cb.Y; - break; - case Alignment.TopStretch://ok - heightRatio = widthRatio = (float)cb.Width / rText.Width; - rText.X = cb.X; - rText.Y = cb.Y; - rText.Width = cb.Width; - rText.Height = (int)(rText.Height * heightRatio); - break; - case Alignment.LeftCenter://ok - rText.X = cb.X; - rText.Y = cb.Y + cb.Height / 2 - rText.Height / 2; - break; - case Alignment.LeftStretch://ok - heightRatio = widthRatio = (float)cb.Height / rText.Height; - rText.X = cb.X; - rText.Y = cb.Y; - rText.Height = cb.Height; - rText.Width = (int)(widthRatio * cb.Width); - break; - case Alignment.RightCenter://ok - rText.X = cb.X + cb.Width - rText.Width; - rText.Y = cb.Y + cb.Height / 2 - rText.Height / 2; - break; - case Alignment.RightStretch://ok - heightRatio = widthRatio = (float)cb.Height / rText.Height; - rText.Height = cb.Height; - rText.Width = (int)(widthRatio * cb.Width); - rText.X = cb.X; - rText.Y = cb.Y; - break; - case Alignment.BottomCenter://ok - rText.X = cb.Width / 2 - rText.Width / 2; - rText.Y = cb.Height - rText.Height; - break; - case Alignment.BottomStretch://ok - heightRatio = widthRatio = (float)cb.Width / rText.Width; - rText.Width = cb.Width; - rText.Height = (int)(rText.Height * heightRatio); - rText.Y = cb.Bottom - rText.Height; - rText.X = cb.X; - break; - case Alignment.BottomLeft://ok - rText.X = cb.X; - rText.Y = cb.Bottom - rText.Height; - break; - case Alignment.BottomRight://ok - rText.Y = cb.Bottom - rText.Height; - rText.X = cb.Right - rText.Width; - break; - case Alignment.Center://ok - rText.X = cb.X + cb.Width / 2 - rText.Width / 2; - rText.Y = cb.Y + cb.Height / 2 - rText.Height / 2; - break; - case Alignment.Fit://ok, peut être mieu aligné - widthRatio = (float)cb.Width / rText.Width; - heightRatio = (float)cb.Height / rText.Height; - rText = cb.Clone; - break; - case Alignment.HorizontalStretch://ok - heightRatio = widthRatio = (float)cb.Width / rText.Width; - rText.Width = cb.Width; - rText.Height = (int)(heightRatio * rText.Height); - rText.Y = cb.Y + cb.Height / 2 - rText.Height / 2; - rText.X = cb.X; - break; - case Alignment.VerticalStretch://ok - heightRatio = widthRatio = (float)cb.Height / rText.Height; - rText.Height = cb.Height; - rText.Width = (int)(widthRatio * rText.Width); - rText.X = cb.X + cb.Width / 2 - rText.Width / 2; - rText.Y = cb.Y; - break; - default: - break; - } - } - - - gr.Color = fontColor; - - gr.FontMatrix = new Matrix(widthRatio * fontSize, 0, 0, heightRatio * fontSize, 0, 0); - - fe = gr.FontExtents; - - gr.MoveTo(rText.X, rText.Y + fe.Ascent); -#if _WIN32 || _WIN64 - gr.ShowText(txt); -#elif __linux__ - gr.ShowText(text); -#endif - - gr.Fill(); - - } - bitmap.Flush(); - //bitmap.WriteToPng(directories.rootDir + @"test.png"); - } - - //registerForRedraw(); - } - - } -} |