protected override bool OnDrawn(Cairo.Context cr)
{
if (this.isDirty)
{
this.Rebuild();
}
bool baseDrawnResult = base.OnDrawn(cr);
cr.SetFontSize(FONT_HEIGHT);
cr.SelectFontFace("Mono", FontSlant.Normal, FontWeight.Normal);
cr.Rectangle(0.0, 0.0, this.allocRect.Width, this.allocRect.Height);
cr.SetSourceRGB(1, 1, 1);
cr.Fill();
var gradient = new LinearGradient(0.0, 0.0, 0.0, this.allocRect.Height);
gradient.AddColorStopRgb(0.0, new Color(0.4, 0.4, 0.4));
gradient.AddColorStopRgb(0.1, new Color(1.0, 1.0, 1.0));
gradient.AddColorStopRgb(0.2, new Color(0.6, 0.6, 0.6));
gradient.AddColorStopRgb(1.0, new Color(0.1, 0.1, 0.1));
cr.LineWidth = 1;
foreach (var box in this.boxen)
{
this.RoundedRect(cr, box.Rect, 4.0);
cr.SetSource(gradient);
cr.FillPreserve();
cr.SetSourceRGB(0, 0, 0);
cr.Stroke();
int x = (int)(box.Rect.X + TAGBOX_PADDING * 2 + TAGBOX_XSIZE);
int y = (int)(box.Rect.Y + box.Rect.Height / 2 + cr.FontExtents.Height / 2 - cr.FontExtents.Descent / 2);
cr.MoveTo(x, y);
cr.TextPath(box.Tag);
cr.SetSourceRGB(1.0, 1.0, 1.0);
cr.Fill();
cr.MoveTo(box.Rect.X + TAGBOX_PADDING + TAGBOX_XOFFSET, box.Rect.Y + TAGBOX_PADDING + TAGBOX_XOFFSET);
cr.RelLineTo(TAGBOX_XSIZE - TAGBOX_XOFFSET * 2, TAGBOX_XSIZE - TAGBOX_XOFFSET * 2);
cr.MoveTo(box.Rect.X + TAGBOX_PADDING + TAGBOX_XOFFSET, box.Rect.Y + TAGBOX_PADDING + TAGBOX_XSIZE - TAGBOX_XOFFSET);
cr.RelLineTo(TAGBOX_XSIZE - TAGBOX_XOFFSET * 2, -TAGBOX_XSIZE + TAGBOX_XOFFSET * 2);
cr.Stroke();
}
return(baseDrawnResult);
}