Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenjamin Berg <benjamin@sipsolutions.net>2009-04-09 21:54:32 (GMT)
committer Benjamin Berg <benjamin@sipsolutions.net>2009-04-09 21:54:32 (GMT)
commitf0a4cb716d993fbebb2a6a509e9f6416bcb4d1b4 (patch)
tree2ac46a075e03ff41de99e6e553b3f4cd3e83d989
parent299b4040a38d2ab825ae8d402946a36473a2f94d (diff)
Added basic support for entry progress bars.
-rw-r--r--gtk/engine/sugar-drawing.c32
-rw-r--r--gtk/engine/sugar-drawing.h1
-rw-r--r--gtk/engine/sugar-style.c17
-rw-r--r--gtk/theme/gtkrc.em6
4 files changed, 56 insertions, 0 deletions
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)) }