diff options
Diffstat (limited to 'src/GraphicObjects/Border.cs')
| -rw-r--r-- | src/GraphicObjects/Border.cs | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/src/GraphicObjects/Border.cs b/src/GraphicObjects/Border.cs new file mode 100644 index 00000000..281db215 --- /dev/null +++ b/src/GraphicObjects/Border.cs @@ -0,0 +1,81 @@ +using System; +using System.Xml.Serialization; +using System.ComponentModel; + +namespace go +{ + public class Border : Container + { + #region CTOR + public Border () : base(){} + #endregion + + #region private fields + Color _borderColor; + int _borderWidth; + #endregion + + #region public properties + [XmlAttributeAttribute()][DefaultValue(2)] + public virtual int BorderWidth { + get { return _borderWidth; } + set { + _borderWidth = value; + registerForGraphicUpdate (); + } + } + [XmlAttributeAttribute()][DefaultValue("White")] + public virtual Color BorderColor { + get { return _borderColor; } + set { + _borderColor = value; + registerForGraphicUpdate (); + } + } + #endregion + + #region GraphicObject override + [XmlIgnore]public override Rectangle ClientRectangle { + get { + Rectangle cb = base.ClientRectangle; + cb.Inflate (- BorderWidth); + return cb; + } + } + + protected override Size measureRawSize () + { + Size raw = Bounds.Size; + + if (child != null) { + if (Bounds.Width < 0 && child.WIsValid) + raw.Width = child.Slot.Width + 2 * (Margin+BorderWidth); + if (Bounds.Height < 0 && child.HIsValid) + raw.Height = child.Slot.Height + 2 * (Margin+BorderWidth); + } + + return raw; + } + protected override void onDraw (Cairo.Context gr) + { + Rectangle rBack = new Rectangle (Slot.Size); + + if (BorderWidth > 0) + rBack.Inflate (-BorderWidth / 2); + + gr.Color = Background; + CairoHelpers.CairoRectangle(gr,rBack,CornerRadius); + gr.Fill (); + + if (BorderWidth > 0) { + + gr.LineWidth = BorderWidth; + gr.Color = BorderColor; + CairoHelpers.CairoRectangle(gr,rBack,CornerRadius); + gr.Stroke (); + } + } + #endregion + } +} + |