/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2010 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2011 Han-Wen Nienhuys <hanwen@xs4all.nl>
Jan Nieuwenhuizen <janneke@gnu.org>
LilyPond is free software: you can redistribute it and/or modify
#include "beam.hh"
+#include "beam-scoring-problem.hh"
#include "beaming-pattern.hh"
#include "directional-element-interface.hh"
-#include "main.hh"
+#include "grob-array.hh"
#include "international.hh"
#include "interval-set.hh"
#include "item.hh"
#include "least-squares.hh"
#include "lookup.hh"
+#include "main.hh"
#include "misc.hh"
#include "output-def.hh"
#include "pointer-group-interface.hh"
#include "staff-symbol-referencer.hh"
#include "stem.hh"
#include "warn.hh"
-#include "grob-array.hh"
#if DEBUG_BEAM_SCORING
#include "text-interface.hh" // debug output.
dir_ = CENTER;
}
+bool
+beam_segment_less (Beam_segment const& a, Beam_segment const& b)
+{
+ return a.horizontal_[LEFT] < b.horizontal_[LEFT];
+}
+
Beam_segment::Beam_segment ()
{
vertical_count_ = 0;
typedef map<int, vector<Beam_stem_segment> > Position_stem_segments_map;
+// TODO - should store result in a property?
vector<Beam_segment>
Beam::get_beam_segments (Grob *me_grob, Grob **common)
{
string str;
SCM properties = Font_interface::text_font_alist_chain (me);
+ properties = scm_cons(scm_acons (ly_symbol2scm ("font-size"), scm_from_int (-5), SCM_EOL),
+ properties);
+
Direction stem_dir = stems.size () ? to_dir (stems[0]->get_property ("direction")) : UP;
Stencil score = *unsmob_stencil (Text_interface::interpret_markup
- (me->layout ()->self_scm (), properties, annotation));
+ (me->layout ()->self_scm (), properties, annotation));
if (!score.is_empty ())
{
if (normal_stem_count (me) <= 1)
return posns;
-
SCM s = me->get_property ("damping");
Real damping = scm_to_double (s);
Real concaveness = robust_scm2double (me->get_property ("concaveness"), 0.0);
return ly_interval2scm (pos);
}
+
+MAKE_SCHEME_CALLBACK (Beam, quanting, 2);
+SCM
+Beam::quanting (SCM smob, SCM posns)
+{
+ Grob *me = unsmob_grob (smob);
+ Drul_array<Real> ys(0, 0);
+ ys = robust_scm2drul (posns, ys);
+ Beam_scoring_problem problem (me, ys);
+
+ ys = problem.solve ();
+ return ly_interval2scm (ys);
+}
+
+
/*
Report slice containing the numbers that are both in (car BEAMING)
and (cdr BEAMING)
Grob *common_y = rest->common_refpoint (beam, Y_AXIS);
- /*
- TODO: this is dubious, because this call needs the info we're
- computing right now.
- */
- Interval rest_extent = rest->extent (common_y, Y_AXIS);
- rest_extent.translate (offset);
+ Interval rest_extent = rest->extent (rest, Y_AXIS);
+ rest_extent.translate (offset + rest->get_parent (Y_AXIS)->relative_coordinate (common_y, Y_AXIS));
Real rest_dim = rest_extent[d];
Real minimum_distance
"break-overshoot "
"clip-edges "
"concaveness "
+ "covered-grobs "
"damping "
"details "
"direction "