1 /* Copyright 2009 Yorba Foundation
3 * This software is licensed under the GNU Lesser General Public License
4 * (version 2.1 or later). See the COPYING file in this distribution.
8 public class Ruler : Gtk.DrawingArea {
9 weak Model.TimeSystem provider;
12 public signal void position_changed(int x);
14 public Ruler(Model.TimeSystem provider, int height) {
15 this.provider = provider;
16 set_flags(Gtk.WidgetFlags.NO_WINDOW);
17 set_size_request(0, height);
20 public override bool expose_event(Gdk.EventExpose event) {
22 int frame = provider.get_start_token(x);
24 Cairo.Context context = Gdk.cairo_create(window);
26 Gdk.cairo_set_source_color(context, parse_color("#777"));
27 context.rectangle(event.area.x, event.area.y, event.area.width, event.area.height);
30 Cairo.Antialias old_antialias = context.get_antialias();
32 context.set_antialias(Cairo.Antialias.NONE);
33 context.set_source_rgb(1.0, 1.0, 1.0);
34 int stop = event.area.x + event.area.width;
35 Pango.FontDescription f = Pango.FontDescription.from_string("Sans 9");
37 x = provider.frame_to_xsize(frame);
38 int y = provider.get_pixel_height(frame);
40 context.move_to(x + BORDER, 0);
41 context.line_to(x + BORDER, y);
43 string? display_string = provider.get_display_string(frame);
44 if (display_string != null) {
45 Pango.Layout layout = create_pango_layout(display_string);
49 layout.set_font_description(f);
50 layout.get_pixel_size (out w, out h);
51 int text_pos = x - (w / 2) + BORDER;
56 Gdk.draw_layout(window, style.white_gc, text_pos, 7, layout);
59 frame = provider.get_next_position(frame);
61 context.set_antialias(old_antialias);
62 context.set_line_width(1.0);
67 public override bool button_press_event(Gdk.EventButton event) {
68 position_changed((int) event.x);
72 public override bool motion_notify_event(Gdk.EventMotion event) {
73 if ((event.state & Gdk.ModifierType.BUTTON1_MASK) != 0) {
75 position_changed((int) event.x);