{
double line;
cairo_glyph_t note_glyph;
+ static double extend_factor = 0.25;
+
+ void _draw_ledger_line (double line, double width) {
+ cairo_move_to (cr,
+ - width * extend_factor / 2.0,
+ score->space_height * line + score->line_width / 2.0);
+ cairo_rel_line_to (cr, (1 + extend_factor) * width, 0);
+ cairo_stroke (cr);
+ }
cairo_save (cr);
}
note_glyph.x = 0;
- note_glyph.y = score->space_height * line + score->line_width / 2.0;
+ note_glyph.y = score->space_height * line;
+
+ if (line < 0 || line > 4) {
+ int i;
+ cairo_text_extents_t note_extents;
+
+ cairo_glyph_extents (cr, ¬e_glyph, 1, ¬e_extents);
+
+ if (line < 0) {
+ for (i = -1; i >= line; i--)
+ _draw_ledger_line (i, note_extents.width);
+ } else {
+ for (i = 5; i <= line; i++)
+ _draw_ledger_line (i, note_extents.width);
+ }
+ }
cairo_set_source_rgb (cr, 0.0, 0.0, 0.0); /* black */
cairo_show_glyphs (cr, ¬e_glyph, 1);