diff options
author | Søren Sandmann <sandmann@redhat.com> | 2008-06-08 02:04:22 -0400 |
---|---|---|
committer | Søren Sandmann <sandmann@redhat.com> | 2008-06-08 02:04:22 -0400 |
commit | e8f3b2eafc8d73b90cc50895972ea91d57ca329c (patch) | |
tree | f5c69a7baf093682048dea4382f83c686f6d0aac /toolbar.c | |
parent | 039343b3d5d7fd05bfd0b1a530962ba546b1be37 (diff) |
Toolbar
Diffstat (limited to 'toolbar.c')
-rw-r--r-- | toolbar.c | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/toolbar.c b/toolbar.c new file mode 100644 index 0000000..62a37e5 --- /dev/null +++ b/toolbar.c @@ -0,0 +1,90 @@ +#include "toolbar.h" + +#define N_TOOLS 10 +#define TOOL_SIZE 75 +#define CORNER_SIZE 10 +#define BORDER_WIDTH 2 +#define MARGIN 6 +#define COLOR 1.4 * (0x58 / 255.0), 1.4 * (0x75 / 255.0), 1.4 * (0xA7 / 255.0) +#define STROKE_COLOR (0x58 / 255.0), (0x75 / 255.0), (0xA7 / 255.0) + +struct Toolbar +{ + int dummy; + /* no content */ +}; + +Toolbar * +toolbar_new (void) +{ + return g_new0 (Toolbar, 1); +} + +void +toolbar_paint (Toolbar *bar, + FooScrollArea *scroll_area, + cairo_t *cr, + int x, + int y) +{ + int i; + int b = BORDER_WIDTH / 2; + int segment = TOOL_SIZE - 2 * b - 2 * CORNER_SIZE; + GdkRectangle viewport; + + foo_scroll_area_get_viewport (scroll_area, &viewport); + + cairo_move_to (cr, b + x, MARGIN + y); + + for (i = 0; i < N_TOOLS; ++i) + { + double x, y; + + cairo_get_current_point (cr, &x, &y); + + cairo_rel_move_to (cr, CORNER_SIZE, 0); + cairo_rel_line_to (cr, segment, 0); + cairo_rel_curve_to (cr, + CORNER_SIZE, 0, + CORNER_SIZE, 0, + CORNER_SIZE, CORNER_SIZE); + cairo_rel_line_to (cr, 0, segment); + cairo_rel_curve_to (cr, + 0, CORNER_SIZE, + 0, CORNER_SIZE, + -CORNER_SIZE, CORNER_SIZE); + cairo_rel_line_to (cr, -segment, 0); + cairo_rel_curve_to (cr, + -CORNER_SIZE, 0, + -CORNER_SIZE, 0, + -CORNER_SIZE, -CORNER_SIZE); + cairo_rel_line_to (cr, 0, -segment); + cairo_rel_curve_to (cr, + 0, -CORNER_SIZE, + 0, -CORNER_SIZE, + CORNER_SIZE, -CORNER_SIZE); + + cairo_set_source_rgba (cr, COLOR, 0.8); + + cairo_fill_preserve (cr); + + cairo_set_source_rgba (cr, STROKE_COLOR, 0.8); + cairo_set_line_width (cr, BORDER_WIDTH); + + cairo_stroke (cr); + + cairo_move_to (cr, x, y + TOOL_SIZE + MARGIN); + } +} + +void +toolbar_invalidate (Toolbar *bar, + FooScrollArea *scroll_area, + int x, + int y) +{ + foo_scroll_area_invalidate_rect (scroll_area, + x, y, + TOOL_SIZE + 10, + N_TOOLS * (TOOL_SIZE + MARGIN) + 10); +} |