protected override bool OnExposeEvent(EventExpose evnt)
{
var clip_region = new Gdk.Rectangle (0, 0, 0, 0);
var n_children = m_box.Children.Length - 1;
//var inner_border = 2; // StyleGetProperty is broken
m_button.Show ();
m_button.Hide ();
evnt.Window.BeginPaintRect (evnt.Area);
Style.PaintBox (m_button.Style, evnt.Window, StateType.Normal,
ShadowType.In, evnt.Area, m_button, "button",
evnt.Area.X, evnt.Area.Y,
evnt.Area.Width, evnt.Area.Height);
if (m_Selected >= 0) {
if (n_children > 1) {
clip_region.Width = evnt.Area.Width / n_children;
clip_region.X = (clip_region.Width * m_Selected) + 1;
}
else {
clip_region.X = 0;
clip_region.Width = evnt.Area.Width;
}
clip_region.Y = evnt.Area.Y;
clip_region.Height = evnt.Area.Height;
Style.PaintBox (m_button.Style, evnt.Window, StateType.Selected,
ShadowType.EtchedOut, clip_region, m_button, "button",
evnt.Area.X, evnt.Area.Y,
evnt.Area.Width, evnt.Area.Height);
}
if (Hovered >= 0 && Selected != Hovered) {
if (n_children > 1) {
clip_region.Width = evnt.Area.Width / n_children;
if (Hovered == 0)
clip_region.X = 0;
else
clip_region.X = clip_region.Width * Hovered + 1;
}
else {
clip_region.X = 0;
clip_region.Width = evnt.Area.Width;
}
clip_region.Y = evnt.Area.Y;
clip_region.Height = evnt.Area.Height;
Style.PaintBox (m_button.Style, evnt.Window, StateType.Prelight,
ShadowType.In, clip_region, m_button, "button",
evnt.Area.X, evnt.Area.Y,
evnt.Area.Width, evnt.Area.Height);
}
/*
1.UpTo (n_children).ForEach (i => {
double offset = (evnt.Area.Width / n_children) * i;
Style.PaintVline (m_button.Style, evnt.Window, StateType.Normal,
evnt.Area, m_button, "button",
evnt.Area.Y + inner_border + 1,
(int) (evnt.Area.Y + evnt.Area.Height - (inner_border * 2) - 1),
(int) (evnt.Area.X + offset + 1));
});
*/
this.PropagateExpose (this.Child, evnt);
evnt.Window.EndPaint ();
return false;
}