diff options
author | Kristan Høgsberg <krh@redhat.com> | 2006-06-15 20:28:58 -0400 |
---|---|---|
committer | Kristan Høgsberg <krh@redhat.com> | 2006-06-15 20:28:58 -0400 |
commit | cac6a6fd8551f74af2c15ca0a7f71c9a9b4143ec (patch) | |
tree | b2802597ae3c80f9cd1846b697394816cfc27353 | |
parent | c4e05db3f0514642875e7b8812be24e0f27865f0 (diff) |
Add background panel for dock.
-rw-r--r-- | dock.c | 57 |
1 files changed, 56 insertions, 1 deletions
@@ -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); |