\version "1.3.110";
+% Test scm markup text and kerning
+
+% Warning
+%
+% This is not a feature, it is a hack. If you change anything,
+% it will probably break (that's because scm markup text is a
+% bit broken and needs fixing). Chances are, it's already
+% broken by the time you read this. Don't complain.
%
-% Test new font selection and scm text markup
-%
+% FIXME: put in an item, and typeset by an engraver.
+
+#(define note '(rows (music "noteheads-2" ((kern . -0.1) "flags-stem"))))
+#(define eight-note `(rows ,note ((kern . -0.1) (music ((raise . 3.5) "flags-u3")))))
+#(define dotted-eight-note `(rows ,eight-note (music "dots-dot")))
+
\score{
\notes\relative c''{
- % put me in an engraver
- a1-#'(rows (music "noteheads-2" ((kern . -0.1) "flags-stem") ((kern . -0.1) ((raise . 3.5) "flags-u3"))) " = 64")
+ a1-#`(rows ,dotted-eight-note " = 64")
}
\paper{
linewidth = -1.\mm;
#include "item.hh"
#include "musical-request.hh"
#include "spanner.hh"
+#include "stem.hh"
#include "rhythmic-head.hh"
#include "side-position-interface.hh"
#include "staff-symbol-referencer.hh"
}
}
+static Grob*
+beam_l (Grob *h)
+{
+ if (Grob *s = Rhythmic_head::stem_l (h))
+ return Stem::beam_l (s);
+ return 0;
+}
+
void
Note_head_line_engraver::create_grobs ()
{
if (!line_ && (follow_ || last_req_) && last_head_ && head_
&& (last_head_ != head_))
{
- /* type Glissando? */
- if (follow_)
- line_ = new Spanner (get_property ("FollowThread"));
- else
- line_ = new Spanner (get_property ("Glissando"));
-
- line_->set_bound (LEFT, last_head_);
- line_->set_bound (RIGHT, head_);
+ /* Don't follow if there's a beam.
- /*
- Note, mustn't set y-parent of breakable symbol to simple item:
- one of the two broken parts won't have an y-parent!
-
- line_->set_parent (head_, Y_AXIS);
- line_->set_parent (last_head_, Y_AXIS);
-
- */
- /* X parent is set by set_bound */
- line_->set_parent (Staff_symbol_referencer::staff_symbol_l (last_head_),
- Y_AXIS);
-
- announce_grob (line_, last_req_);
+ Hmm, this doesn't work, as head_ does not yet have a beam.
+ Should probably store follow_ in line_, and suicide at some
+ later point */
+ if (!(follow_
+ && beam_l (last_head_) && beam_l (last_head_) == beam_l (head_)))
+ {
+ if (follow_)
+ line_ = new Spanner (get_property ("FollowThread"));
+ else
+ line_ = new Spanner (get_property ("Glissando"));
+
+ line_->set_bound (LEFT, last_head_);
+ line_->set_bound (RIGHT, head_);
+
+ /* Note, mustn't set y-parent of breakable symbol to simple item:
+ one of the two broken parts won't have an y-parent! */
+ /* X parent is set by set_bound */
+ line_->set_parent (Staff_symbol_referencer::staff_symbol_l (last_head_),
+ Y_AXIS);
+
+ announce_grob (line_, last_req_);
+ }
+
last_req_ = 0;
follow_ = false;
last_head_ = 0;
fet_beginchar("stem (up)", "stem", "stem")
set_char_box(stemthickness#/2, 0, 3.5staff_space#, stemthickness#/2);
pickup pencircle scaled stemthickness;
- draw (0, 0) .. (0, 3.5staff_space);
+ draw (0, 0.2staff_space) .. (0, 3.5staff_space);
fet_endchar;
% do we want this?
fet_beginchar("stem (down)", "dstem", "dstem")
set_char_box(stemthickness#/2, -3.5staff_space#, 0, stemthickness#/2);
pickup pencircle scaled stemthickness;
- draw (0, 0) .. (-3.5staff_space, 0);
+ draw (0, -0.2staff_space) .. (-3.5staff_space, 0);
fet_endchar;