summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKristan Høgsberg <krh@redhat.com>2006-06-15 20:28:58 -0400
committerKristan Høgsberg <krh@redhat.com>2006-06-15 20:28:58 -0400
commitcac6a6fd8551f74af2c15ca0a7f71c9a9b4143ec (patch)
treeb2802597ae3c80f9cd1846b697394816cfc27353
parentc4e05db3f0514642875e7b8812be24e0f27865f0 (diff)
Add background panel for dock.
-rw-r--r--dock.c57
1 files changed, 56 insertions, 1 deletions
diff --git a/dock.c b/dock.c
index 1ec0ea2..ecf663a 100644
--- a/dock.c
+++ b/dock.c
@@ -100,7 +100,7 @@ model_init_dock (Model *model, int num_items,
model->friction = 150;
model->gravity = 50;
model->k = 0.8;
- model->constrain_iterations = 8;
+ model->constrain_iterations = 1;
model->polygons = g_new (Polygon, 1);
model->num_polygons = 1;
@@ -182,6 +182,58 @@ static const char *icons[] = {
"svg/internet-group-chat.svg"
};
+static void
+create_dock (GdkScreen *screen, int num_icons, int spacing)
+{
+ const int padding = 20;
+ GdkWindow *dock;
+ int dock_width, dock_height;
+ int screen_width, screen_height;
+ cairo_t *cr;
+ cairo_pattern_t *gradient;
+ const int hmargin = 5, vmargin = 40, radius = 5;
+
+ screen_width = gdk_screen_get_width (screen);
+ screen_height = gdk_screen_get_height (screen);
+
+ dock_width = num_icons * spacing + 2 * padding;
+ dock_height = spacing + padding;
+ dock = create_window (screen,
+ (screen_width - dock_width + spacing) / 2,
+ screen_height - dock_height,
+ dock_width, dock_height);
+
+ gdk_window_show (dock);
+
+ cr = gdk_cairo_create (dock);
+ cairo_set_operator (cr, CAIRO_OPERATOR_CLEAR);
+ cairo_paint (cr);
+
+ cairo_set_operator (cr, CAIRO_OPERATOR_OVER);
+ cairo_move_to (cr, hmargin, dock_height);
+ cairo_line_to (cr, hmargin, vmargin + radius);
+ cairo_arc (cr, hmargin + radius, vmargin + radius,
+ radius, M_PI, 3 * M_PI / 2);
+ cairo_line_to (cr, dock_width - hmargin - radius, vmargin);
+ cairo_arc (cr, dock_width - hmargin - radius, vmargin + radius,
+ radius, 3 * M_PI / 2, 2 * M_PI);
+ cairo_line_to (cr, dock_width - hmargin, dock_height);
+
+ gradient = cairo_pattern_create_linear (dock_width / 2 - 1, vmargin,
+ dock_width / 2 + 1, dock_height);
+ cairo_pattern_add_color_stop_rgba (gradient, 0, 1, 1, 1, 0.4);
+ cairo_pattern_add_color_stop_rgba (gradient, 1, 1, 1, 1, 0.6);
+ cairo_set_source (cr, gradient);
+ cairo_fill_preserve (cr);
+
+ cairo_set_source_rgba (cr, 1, 1, 1, 1);
+ cairo_set_line_width (cr, 1);
+ cairo_set_line_join (cr, CAIRO_LINE_JOIN_ROUND);
+ cairo_stroke (cr);
+
+ cairo_destroy (cr);
+}
+
int main (int argc, char *argv[])
{
Closure closure;
@@ -208,6 +260,9 @@ int main (int argc, char *argv[])
model_init_dock (&closure.model, num_icons, width, height, spacing);
+ create_dock (screen, num_icons, spacing);
+
+
for (i = 0; i < num_icons; i++) {
handle = rsvg_handle_new_from_file (icons[i], NULL);