, _metric (&m)
, _lower (0)
, _upper (0)
- , _divide_height (-1.0)
+ , _divide_height (-1.0)
+ , _font_description (0)
, _need_marks (true)
{
}
, _metric (&m)
, _lower (0)
, _upper (0)
- , _divide_height (-1.0)
+ , _divide_height (-1.0)
+ , _font_description (0)
, _need_marks (true)
{
}
, _metric (&m)
, _lower (0)
, _upper (0)
- , _divide_height (-1.0)
+ , _divide_height (-1.0)
+ , _font_description (0)
, _need_marks (true)
{
}
, _metric (&m)
, _lower (0)
, _upper (0)
- , _divide_height (-1.0)
+ , _divide_height (-1.0)
+ , _font_description (0)
, _need_marks (true)
{
}
Ruler::set_font_description (Pango::FontDescription fd)
{
begin_visual_change ();
+ delete _font_description;
_font_description = new Pango::FontDescription (fd);
end_visual_change ();
}
cr->stroke ();
/* draw ticks + text */
-
+
Glib::RefPtr<Pango::Layout> layout = Pango::Layout::create (cr);
if (_font_description) {
layout->set_font_description (*_font_description);
} else {
cr->move_to (pos.x, pos.y);
}
-
+
switch (m->style) {
case Mark::Major:
- cr->rel_line_to (0, -height);
+ if (_divide_height >= 0) {
+ cr->rel_line_to (0, -_divide_height);
+ } else {
+ cr->rel_line_to (0, -height);
+ }
break;
case Mark::Minor:
- cr->rel_line_to (0, -height/2.0);
+ cr->rel_line_to (0, -height/3.0);
break;
case Mark::Micro:
- cr->rel_line_to (0, -height/4.0);
+ cr->rel_line_to (0, -height/5.0);
break;
}
cr->stroke ();
layout->set_text (m->label);
logical = layout->get_pixel_logical_extents ();
-
- cr->move_to (pos.x + 2.0, self.y0 + logical.get_y());
+
+ if (_divide_height >= 0) {
+ cr->move_to (pos.x + 2.0, self.y0 + _divide_height + logical.get_y() + 2.0); /* 2 pixel padding below divider */
+ } else {
+ cr->move_to (pos.x + 2.0, self.y0 + logical.get_y());
+ }
layout->show_in_cairo_context (cr);
}
}
if (_divide_height >= 0.0) {
-
+
cr->set_line_width (1.0);
set_source_rgba (cr, _divider_color_top);
- cr->move_to (self.x0, self.y0 + _divide_height+0.5);
- cr->line_to (self.x1, self.y0 + _divide_height+0.5);
+ cr->move_to (self.x0, self.y0 + _divide_height-1.0+0.5);
+ cr->line_to (self.x1, self.y0 + _divide_height-1.0+0.5);
cr->stroke ();
set_source_rgba (cr, _divider_color_bottom);
- cr->move_to (self.x0, self.y0 + _divide_height+1.5);
- cr->line_to (self.x1, self.y0 + _divide_height+1.5);
+ cr->move_to (self.x0, self.y0 + _divide_height+0.5);
+ cr->line_to (self.x1, self.y0 + _divide_height+0.5);
cr->stroke ();
_divide_height = h;
}
+void
+Ruler::set_divide_colors (Color t, Color b)
+{
+ _divider_color_bottom = b;
+ _divider_color_top = t;
+}
+
void
Ruler::set_metric (const Metric& m)
{