summaryrefslogtreecommitdiff
path: root/toolbar.c
diff options
context:
space:
mode:
authorSøren Sandmann <sandmann@redhat.com>2008-06-08 02:04:22 -0400
committerSøren Sandmann <sandmann@redhat.com>2008-06-08 02:04:22 -0400
commite8f3b2eafc8d73b90cc50895972ea91d57ca329c (patch)
treef5c69a7baf093682048dea4382f83c686f6d0aac /toolbar.c
parent039343b3d5d7fd05bfd0b1a530962ba546b1be37 (diff)
Toolbar
Diffstat (limited to 'toolbar.c')
-rw-r--r--toolbar.c90
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);
+}