public Gdk.Rectangle GetTabArea(Tab tab, int pos) { Gdk.Rectangle rect = tab.Allocation; int xdif = 0; if (pos > 0) xdif = 2; int reqh; // StateType st; if (tab.Active) { // st = StateType.Normal; reqh = tab.Allocation.Height; } else { reqh = tab.Allocation.Height - 3; // st = StateType.Active; } if (DockFrame.IsWindows) { rect.Height = reqh - 1; rect.Width--; if (pos > 0) { rect.X--; rect.Width++; } return rect; } else { rect.X -= xdif; rect.Width += xdif; rect.Height = reqh; return rect; } }
void DrawTab(Gdk.EventExpose evnt, Tab tab, int pos) { Gdk.Rectangle rect = GetTabArea (tab, pos); StateType st; if (tab.Active) st = StateType.Normal; else st = StateType.Active; if (DockFrame.IsWindows) { GdkWindow.DrawRectangle (Style.DarkGC (Gtk.StateType.Normal), false, rect); rect.X++; rect.Width--; if (tab.Active) { GdkWindow.DrawRectangle (Style.LightGC (Gtk.StateType.Normal), true, rect); } else { using (Cairo.Context cr = Gdk.CairoHelper.Create (evnt.Window)) { cr.NewPath (); cr.MoveTo (rect.X, rect.Y); cr.RelLineTo (rect.Width, 0); cr.RelLineTo (0, rect.Height); cr.RelLineTo (-rect.Width, 0); cr.RelLineTo (0, -rect.Height); cr.ClosePath (); Cairo.Gradient pat = new Cairo.LinearGradient (rect.X, rect.Y, rect.X, rect.Y + rect.Height); Cairo.Color color1 = DockFrame.ToCairoColor (Style.Mid (Gtk.StateType.Normal)); pat.AddColorStop (0, color1); color1.R *= 1.2; color1.G *= 1.2; color1.B *= 1.2; pat.AddColorStop (1, color1); cr.Pattern = pat; cr.FillPreserve (); } } } else Gtk.Style.PaintExtension (Style, GdkWindow, st, ShadowType.Out, evnt.Area, this, "tab", rect.X, rect.Y, rect.Width, rect.Height, Gtk.PositionType.Top); }
public void AddTab(Gtk.Widget page, Gdk.Pixbuf icon, string label) { Tab tab = new Tab (); tab.SetLabel (page, icon, label); tab.ShowAll (); box.PackStart (tab, true, true, 0); if (currentTab == -1) CurrentTab = box.Children.Length - 1; else { tab.Active = false; page.Hide (); } tab.ButtonPressEvent += OnTabPress; }