示例#1
0
        public void RefreshColors()
        {
            if (refreshing)
            {
                return;
            }

            refreshing = true;

            int mc = (int)GtkColorClass.Foreground;
            int ms = (int)StateType.Insensitive;

            if (gtk_colors == null)
            {
                gtk_colors = new Cairo.Color [(mc + 1) * (ms + 1)];
            }

            for (int c = (int)GtkColorClass.Light; c <= mc; c++)
            {
                for (int s = (int)StateType.Normal; s <= ms; s++)
                {
                    Gdk.Color color = Gdk.Color.Zero;

                    if (widget != null && widget.IsRealized)
                    {
                        switch ((GtkColorClass)c)
                        {
                        case GtkColorClass.Light: color = widget.Style.LightColors [s]; break;

                        case GtkColorClass.Mid: color = widget.Style.MidColors [s]; break;

                        case GtkColorClass.Dark: color = widget.Style.DarkColors [s]; break;

                        case GtkColorClass.Base: color = widget.Style.BaseColors [s]; break;

                        case GtkColorClass.Background: color = widget.Style.Backgrounds [s]; break;

                        case GtkColorClass.Foreground: color = widget.Style.Foregrounds [s]; break;
                        }
                    }
                    else
                    {
                        color = new Gdk.Color(0, 0, 0);
                    }

                    gtk_colors [c * mc + s] = color.ToCairoColor();
                }
            }

            selection_fill   = GetWidgetColor(GtkColorClass.Dark, StateType.Active);
            selection_stroke = GetWidgetColor(GtkColorClass.Background, StateType.Selected);

            view_fill               = GetWidgetColor(GtkColorClass.Base, StateType.Normal);
            view_fill_transparent   = view_fill;
            view_fill_transparent.A = 0;

            border_color = GetWidgetColor(GtkColorClass.Dark, StateType.Active);

            refreshing = false;
        }
示例#2
0
        public void DrawHeaderHighlight(Cairo.Context cr, Gdk.Rectangle alloc, int bottom_offset)
        {
            Cairo.Color gtk_selection_color = GetWidgetColor(GtkColorClass.Background, StateType.Selected);
            Cairo.Color light_color         = gtk_selection_color.ColorShade(1.6);
            Cairo.Color dark_color          = gtk_selection_color.ColorShade(1.3);

            LinearGradient grad = new LinearGradient(alloc.X, alloc.Y + 2, alloc.X, alloc.Y + alloc.Height - 3 - bottom_offset);

            grad.AddColorStop(0, light_color);
            grad.AddColorStop(1, dark_color);

            cr.Pattern = grad;
            cr.Rectangle(alloc.X, alloc.Y + 2, alloc.Width - 2, alloc.Height - 2 - bottom_offset);
            cr.Fill();
        }
示例#3
0
        public void DrawHeaderBackground(Cairo.Context cr, Gdk.Rectangle alloc, int bottom_offset, bool fill)
        {
            Cairo.Color gtk_background_color = GetWidgetColor(GtkColorClass.Background, StateType.Normal);
            Cairo.Color gtk_base_color       = GetWidgetColor(GtkColorClass.Base, StateType.Normal);
            Cairo.Color light_color          = gtk_background_color.ColorShade(1.1);
            Cairo.Color dark_color           = gtk_background_color.ColorShade(0.95);

            CairoCorners corners = CairoCorners.TopLeft | CairoCorners.TopRight;

            if (fill)
            {
                LinearGradient grad = new LinearGradient(alloc.X, alloc.Y, alloc.X, alloc.Y + alloc.Height);
                grad.AddColorStop(0, light_color);
                grad.AddColorStop(0.75, dark_color);
                grad.AddColorStop(0, light_color);

                cr.Pattern = grad;
                cr.RoundedRectangle(alloc.X, alloc.Y, alloc.Width, alloc.Height - bottom_offset, BORDER_RADIUS, corners);
                cr.Fill();

                cr.Color = gtk_base_color;
                cr.Rectangle(alloc.X, alloc.Y + alloc.Height - bottom_offset, alloc.Width, bottom_offset);
                cr.Fill();
            }
            else
            {
                cr.Color = gtk_base_color;
                cr.RoundedRectangle(alloc.X, alloc.Y, alloc.Width, alloc.Height, BORDER_RADIUS, corners);
                cr.Fill();
            }

            cr.LineWidth = 1.0;
            cr.Translate(alloc.X + 0.5, alloc.Y + 0.5);

            cr.Color = border_color;
            cr.RoundedRectangle(alloc.X, alloc.Y, alloc.Width - 1, alloc.Height + 4, BORDER_RADIUS, corners);
            cr.Stroke();

            if (fill)
            {
                cr.LineWidth = 1;
                cr.Antialias = Cairo.Antialias.None;
                cr.MoveTo(alloc.X + 1, alloc.Y + alloc.Height - 1 - bottom_offset);
                cr.LineTo(alloc.X + alloc.Width - 1, alloc.Y + alloc.Height - 1 - bottom_offset);
                cr.Stroke();
                cr.Antialias = Cairo.Antialias.Default;
            }
        }
示例#4
0
        public void DrawHeaderSeparator(Cairo.Context cr, Gdk.Rectangle alloc, int x, int bottom_offset)
        {
            Cairo.Color gtk_background_color = GetWidgetColor(GtkColorClass.Background, StateType.Normal);
            Cairo.Color dark_color           = gtk_background_color.ColorShade(0.80);
            Cairo.Color light_color          = gtk_background_color.ColorShade(1.1);

            int y_1 = alloc.Y + 3;
            int y_2 = alloc.Y + alloc.Height - 3 - bottom_offset;

            cr.LineWidth = 1;
            cr.Antialias = Cairo.Antialias.None;

            cr.Color = dark_color;
            cr.MoveTo(x, y_1);
            cr.LineTo(x, y_2);
            cr.Stroke();

            cr.Color = light_color;
            cr.MoveTo(x + 1, y_1);
            cr.LineTo(x + 1, y_2);
            cr.Stroke();

            cr.Antialias = Cairo.Antialias.Default;
        }