From f0a4cb716d993fbebb2a6a509e9f6416bcb4d1b4 Mon Sep 17 00:00:00 2001 From: Benjamin Berg Date: Thu, 09 Apr 2009 21:54:32 +0000 Subject: Added basic support for entry progress bars. --- diff --git a/gtk/engine/sugar-drawing.c b/gtk/engine/sugar-drawing.c index 512b64e..4af32fc 100644 --- a/gtk/engine/sugar-drawing.c +++ b/gtk/engine/sugar-drawing.c @@ -283,6 +283,38 @@ sugar_draw_scrollbar_trough (cairo_t *cr, } void +sugar_draw_entry_progress (cairo_t *cr, SugarInfo *info) +{ + GtkBorder *border; + SugarRectangle pos = info->pos; + gint max_radius = info->max_radius; + + /* Try to retrieve the style property. */ + gtk_widget_style_get (info->widget, + "progress-border", &border, + NULL); + + if (border == NULL) { + max_radius = MAX (0, max_radius - info->style->ythickness * 2); + } else { + max_radius = MAX (0, max_radius - border->top - border->bottom); + gtk_border_free (border); + border = NULL; + } + + pos.width += 2*max_radius; + sugar_rounded_rectangle (cr, &pos, 0, max_radius, info->corners); + cairo_clip(cr); + + pos.x -= 2*max_radius; + sugar_rounded_rectangle (cr, &pos, 0, max_radius, info->corners); + cairo_clip(cr); + + gdk_cairo_set_source_color (cr, &info->style->bg[info->state]); + cairo_paint (cr); +} + +void sugar_draw_entry (cairo_t *cr, SugarInfo *info) { SugarRectangle *pos = &info->pos; diff --git a/gtk/engine/sugar-drawing.h b/gtk/engine/sugar-drawing.h index 5fe0627..729562b 100644 --- a/gtk/engine/sugar-drawing.h +++ b/gtk/engine/sugar-drawing.h @@ -30,6 +30,7 @@ G_GNUC_INTERNAL void sugar_draw_scale_slider (cairo_t *cr, SugarRangeInfo *range G_GNUC_INTERNAL void sugar_draw_scrollbar_slider (cairo_t *cr, SugarRangeInfo *range_info); G_GNUC_INTERNAL void sugar_draw_scrollbar_trough (cairo_t *cr, SugarRangeInfo *range_info); G_GNUC_INTERNAL void sugar_draw_entry (cairo_t *cr, SugarInfo *info); +G_GNUC_INTERNAL void sugar_draw_entry_progress (cairo_t *cr, SugarInfo *info); G_GNUC_INTERNAL void sugar_draw_button (cairo_t *cr, SugarInfo *info); G_GNUC_INTERNAL void sugar_draw_button_default (cairo_t *cr, SugarInfo *info); G_GNUC_INTERNAL void sugar_draw_arrow (cairo_t *cr, SugarArrowInfo *arrow_info); diff --git a/gtk/engine/sugar-style.c b/gtk/engine/sugar-style.c index 00bfb5e..443a708 100644 --- a/gtk/engine/sugar-style.c +++ b/gtk/engine/sugar-style.c @@ -367,7 +367,24 @@ sugar_style_draw_box (GtkStyle *style, sugar_draw_button_default (cr, &info); else sugar_draw_button (cr, &info); + } else if (DETAIL ("entry-progress")) { + SugarInfo info; + + sugar_fill_generic_info (&info, style, state_type, shadow_type, widget, detail, x, y, width, height); + + /* Corner detection. */ + if (HINT ("comboboxentry") || HINT("spinbutton")) { + info.cont_edges = info.ltr ? EDGE_RIGHT : EDGE_LEFT; + sugar_remove_corners (&info.corners, info.cont_edges); + + /* Remove the padding on one side. */ + width += info.rc_style->thick_line_width; + if (!info.ltr) { + x -= info.rc_style->thick_line_width; + } + } + sugar_draw_entry_progress (cr, &info); } else if (DETAIL ("spinbutton")) { SugarInfo info; sugar_fill_generic_info (&info, style, state_type, shadow_type, widget, detail, x, y, width, height); diff --git a/gtk/theme/gtkrc.em b/gtk/theme/gtkrc.em index f22a3e8..f7b7129 100644 --- a/gtk/theme/gtkrc.em +++ b/gtk/theme/gtkrc.em @@ -123,6 +123,8 @@ style "default" GtkButton::default-outside-border = { 0, 0, 0, 0 } GtkButton::image-spacing = $subcell_size + GtkEntry::progress-border = { $thickness, $thickness, $thickness, $thickness } + GtkScrolledWindow::scrollbar-spacing = 0 GtkExpander::expander-size = 24 @@ -548,6 +550,10 @@ style "entry" ythickness = $entry_ythickness GtkWidget::focus-line-width = 0 + # Colors for the progress bar. + bg[SELECTED] = $selection_grey + fg[SELECTED] = $black + # This tries to get a height of exactly 45 pixel for the entry. GtkEntry::inner-border = { $(max(subcell_size - entry_xthickness, 0)), $(max(subcell_size - entry_xthickness, 0)), $(max(my_ceil((3*subcell_size - font_height - entry_ythickness*2)/2.0),0)), $(max(my_floor((3*subcell_size - font_height - entry_ythickness*2)/2.0), 0)) } -- cgit v0.9.1