2004-01-18 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ * lily/line-interface.cc (line): remove thickness from calling interface.
+
* lily/hairpin.cc: use Line_interface
* lily/line-interface.cc: new file. Line_interface for everything
#include "text-item.hh"
#include "grob.hh"
+#include "line-interface.hh"
#include "lookup.hh"
#include "font-interface.hh"
#include "molecule.hh"
Offset z2 = z1 + off;
- fr.add_molecule (Lookup::line (0.1, z1, z2));
+ fr.add_molecule (Line_interface::line (me, z1, z2));
text_mol->translate (z2);
fr.add_molecule (*text_mol);
Grob *me= unsmob_grob (smob);
Spanner *spanner = dynamic_cast<Spanner*> (me);
- Real line = me->get_paper ()->get_realvar (ly_symbol2scm ("linethickness"));
-
SCM s = me->get_grob_property ("grow-direction");
if (!is_direction (s))
{
bool continued = broken[Direction (-grow_dir)];
Real height = gh_scm2double (me->get_grob_property ("height"));
- Real thick = line * gh_scm2double (me->get_grob_property ("thickness"));
Real starth, endh;
if (grow_dir < 0)
*/
Molecule mol;
- mol = Line_interface::dashed_line (me,
- thick,
+ mol = Line_interface::line (me,
Offset (0, starth),
Offset (width, endh));
- mol.add_molecule (Line_interface::dashed_line (me,
- thick,
+ mol.add_molecule (Line_interface::line (me,
Offset (0, -starth),
Offset (width, -endh)));
struct Line_interface
{
- static Molecule dashed_line (Grob *me, Real thick, Offset from, Offset to);
+ static Molecule line (Grob *me, Offset from, Offset to);
static bool has_interface (Grob*);
static Molecule make_dashed_line (Real th, Offset from, Offset to, Real, Real);
-
+ static Molecule make_line (Real th, Offset from, Offset to);
};
+
#endif /* LINE_INTERFACE_HH */
public:
DECLARE_SCHEME_CALLBACK (brew_molecule, (SCM));
DECLARE_SCHEME_CALLBACK(after_line_breaking, (SCM));
- static Molecule line_molecule (Grob* me, Real thick,
- Offset f, Offset t);
+ static Molecule line_molecule (Grob* me, Offset f, Offset t);
static bool has_interface (Grob*);
private:
static Molecule filled_box (Box b);
static Molecule round_filled_box (Box b, Real blotdiameter);
static Molecule repeat_slash (Real w, Real slope, Real th);
- static Molecule line (Real th, Offset from, Offset to);
static Molecule horizontal_line (Interval w, Real th);
static Molecule triangle (Interval, Real, Real);
};
DECLARE_SCHEME_CALLBACK (before_line_breaking, (SCM ));
static Molecule make_bracket (Grob *me, Axis protusion_axis,
- Offset dz, Real thick, Drul_array<Real> height,
+ Offset dz, Drul_array<Real> height,
Real gap, Drul_array<Real> widen,
Drul_array<Real> shorten);
static Direction get_default_dir (Grob*);
#include "grob.hh"
#include "staff-symbol-referencer.hh"
#include "lookup.hh"
-
+#include "paper-def.hh"
Molecule
m.translate (from);
return m;
}
+
+Molecule
+Line_interface::make_line (Real th, Offset from, Offset to)
+{
+ SCM at = scm_list_n (ly_symbol2scm ("draw-line"),
+ gh_double2scm (th),
+ gh_double2scm (from[X_AXIS]),
+ gh_double2scm (from[Y_AXIS]),
+ gh_double2scm (to[X_AXIS]),
+ gh_double2scm (to[Y_AXIS]),
+ SCM_UNDEFINED);
+
+ Box box;
+ box.add_point (from);
+ box.add_point (to);
+
+ box[X_AXIS].widen (th/2);
+ box[Y_AXIS].widen (th/2);
+
+ return Molecule (box, at);
+}
+
+
/*
TODO: read THICK from ME
*/
Molecule
-Line_interface::dashed_line (Grob *me, Real thick, Offset from, Offset to)
+Line_interface::line (Grob *me, Offset from, Offset to)
{
+ Real thick = me->get_paper()->get_realvar (ly_symbol2scm ("linethickness"));
+ thick *= robust_scm2double (me->get_grob_property ("thickness"), 1.0); // todo: staff sym referencer?
+
SCM type = me->get_grob_property ("style");
if (type == ly_symbol2scm ("dotted-line")
|| type == ly_symbol2scm ("dashed-line"))
}
else
{
- return Lookup::line (thick, from, to);
+ return make_line (thick, from, to);
}
}
#include "lookup.hh"
#include "line-interface.hh"
-/*
- TODO: convert all Molecule functions to taking arguments of the form
-
- Offset FROM, Offset TO.
-
-
- TODO:
-
- Introduce line-interface that allows dots/dashes/etc. to be set as
- grob-properties. Make arbitrary paths.
-
- */
-
-
Molecule
-zigzag_molecule (Grob *me, Real thick,
+zigzag_molecule (Grob *me,
Offset from,
Offset to)
{
Offset dz = to -from;
Real dx = dz[X_AXIS];
Real dy = dz[Y_AXIS];
+
+ Real thick = me->get_paper()->get_realvar (ly_symbol2scm ("linethickness"));
+ thick *= robust_scm2double (me->get_grob_property ("thickness"), 1.0); // todo: staff sym referencer?
Real staff_space = Staff_symbol_referencer::staff_space (me);
SCM ws = me->get_grob_property ("zigzag-width");
Molecule
-Line_spanner::line_molecule (Grob *me, Real thick,
+Line_spanner::line_molecule (Grob *me,
Offset from,
Offset to)
{
|| (type == ly_symbol2scm ("trill") && dz[Y_AXIS] != 0)))
{
return (type == ly_symbol2scm ("zigzag"))
- ? zigzag_molecule (me, thick, from, to)
- : Line_interface::dashed_line (me, thick, from, to);
+ ? zigzag_molecule (me, from, to)
+ : Line_interface::line (me, from, to);
}
else if (gh_symbol_p (type)
&& type == ly_symbol2scm ("trill"))
Offset my_off;
Offset his_off;
- Real thick = me->get_paper ()->get_realvar (ly_symbol2scm ("linethickness"));
-
- SCM s = me->get_grob_property ("thickness");
- if (gh_number_p (s))
- thick *= gh_scm2double (s);
if (bound[RIGHT]->break_status_dir())
{
dz = (dz.length () - 2*gap) *dir;
- Molecule l (line_molecule (me, thick, Offset(0, 0), dz));
+ Molecule l (line_molecule (me, Offset(0, 0), dz));
l.translate (dir * gap + p1
- Offset (me->relative_coordinate (commonx, X_AXIS),
ofxy = dxy * (off/dxy.length ());
dxy -= 2*ofxy;
- Molecule line = line_molecule (me, thick, Offset (0,0),dxy);
+ Molecule line = line_molecule (me, Offset (0,0),dxy);
line.translate_axis (bound[LEFT]->extent (bound[LEFT], X_AXIS).length ()/2, X_AXIS);
line.translate (ofxy - my_off + his_off);
(c) 1997--2003 Han-Wen Nienhuys <hanwen@cs.uu.nl>
Jan Nieuwenhuizen <janneke@gnu.org>
-
- TODO
- Glissando
*/
#include <math.h>
#include <ctype.h>
+#include "line-interface.hh"
#include "warn.hh"
#include "dimensions.hh"
#include "bezier.hh"
return Molecule (box, at);
}
-Molecule
-Lookup::line (Real th, Offset from, Offset to)
-{
- SCM at = scm_list_n (ly_symbol2scm ("draw-line"),
- gh_double2scm (th),
- gh_double2scm (from[X_AXIS]),
- gh_double2scm (from[Y_AXIS]),
- gh_double2scm (to[X_AXIS]),
- gh_double2scm (to[Y_AXIS]),
- SCM_UNDEFINED);
-
- Box box;
- box.add_point (from);
- box.add_point (to);
-
- box[X_AXIS].widen (th/2);
- box[Y_AXIS].widen (th/2);
-
- return Molecule (box, at);
-}
Molecule
if (points.size () == 1)
return dot (points[0], 0.5 * blotdiameter);
if (points.size () == 2)
- return line (blotdiameter, points[0], points[1]);
+ return Line_interface::make_line (blotdiameter, points[0], points[1]);
/* shrink polygon in size by 0.5 * blotdiameter */
Array<Offset> shrinked_points;
/*
TODO: deprecate?
-
- should use rounded corners.
*/
Molecule
Lookup::frame (Box b, Real thick, Real blot)
Interval bracket_span_points = span_points;
bracket_span_points[LEFT] += text_offset;
- Real thick = paper->get_realvar (ly_symbol2scm ("linethickness"));
- thick *= robust_scm2double (me->get_grob_property ("thickness"), 1.0);
-
Drul_array<Real> edge_height = robust_scm2interval (me->get_grob_property ("edge-height"),
Interval (1.0, 1.0));
if (!bracket_span_points.is_empty ())
b = Tuplet_bracket::make_bracket (me,
Y_AXIS, Offset (bracket_span_points.length (), 0),
- thick, edge_height,
+ edge_height,
0.0,
flare, shorten);
/*
TODO: this function is too long
-
-
*/
SCM
Text_spanner::brew_molecule (SCM smob)
}
while (flip (&d) != LEFT);
}
-
- Real thick = paper->get_realvar (ly_symbol2scm ("linethickness"));
- SCM st = me->get_grob_property ("thickness");
- if (gh_number_p (st))
- {
- thick *= gh_scm2double (st);
- }
Drul_array<Real> edge_height = robust_scm2interval (me->get_grob_property ("edge-height"),
Interval (1.0, 1.0));
Real dy = - dir * edge_height[d] ;
if (dy)
- edge_line[d] = Line_spanner::line_molecule (me, thick, Offset(0,0),
- Offset (dx, dy));
+ edge_line[d] = Line_spanner::line_molecule (me, Offset(0,0), Offset (dx, dy));
}
while (flip (&d) != LEFT);
}
if (!span_points.is_empty ())
{
- Molecule l =Line_spanner::line_molecule (me, thick,
- Offset (span_points[LEFT], 0),
+ Molecule l =Line_spanner::line_molecule (me, Offset (span_points[LEFT], 0),
Offset (span_points[RIGHT], 0));
m.add_molecule (l);
}
return m.smobbed_copy ();
}
-
-
-
ADD_INTERFACE (Text_spanner,"text-spanner-interface",
"generic text spanner",
"text-repeat-if-broken dash-period if-text-padding dash-fraction edge-height bracket-flare edge-text shorten-pair style thickness enclose-bounds width-correct");
if (bracket_visibility)
{
- Real lt = pap->get_realvar (ly_symbol2scm ("linethickness"));
-
- SCM thick = me->get_grob_property ("thickness");
- if (gh_number_p (thick))
- lt *= gh_scm2double (thick);
-
SCM gap = me->get_grob_property ("gap");
SCM fl = me->get_grob_property ("bracket-flare");
while (flip (&d) != LEFT);
Molecule brack = make_bracket (me, Y_AXIS,
- Offset (w, ry - ly), lt,
+ Offset (w, ry - ly),
height,
gh_scm2double (gap),
flare,
Tuplet_bracket::make_bracket (Grob *me, // for line properties.
Axis protusion_axis,
Offset dz,
- Real thick, Drul_array<Real> height,
+ Drul_array<Real> height,
Real gap,
Drul_array<Real> flare,
Drul_array<Real> shorten)
Molecule m;
do {
- m.add_molecule (Line_interface::dashed_line (me, thick, straight_corners[d],
+ m.add_molecule (Line_interface::line (me, straight_corners[d],
gap_corners[d]));
- m.add_molecule (Line_interface::dashed_line (me, thick, straight_corners[d],
+ m.add_molecule (Line_interface::line (me, straight_corners[d],
flare_corners[d]));
} while (flip (&d) != LEFT);
#include "box.hh"
#include "warn.hh"
#include "font-interface.hh"
+#include "line-interface.hh"
#include "molecule.hh"
#include "paper-column.hh"
#include "paper-def.hh"
&& strcmp(cs,":|:")!=0 && strcmp(cs,".|")!=0);
Paper_def * paper =me->get_paper ();
- Real staff_thick = paper->get_realvar (ly_symbol2scm ("linethickness"));
Real half_space = 0.5;
Item * bound = dynamic_cast<Spanner*> (me)->get_bound (LEFT);
Real w = dynamic_cast<Spanner*> (me)->spanner_length () - left - half_space;
Real h = gh_scm2double (me->get_grob_property ("height"));
- Real t = staff_thick * gh_scm2double (me->get_grob_property ("thickness"));
Molecule start,end ;
if (!no_vertical_start)
- start = Lookup::line (t, Offset (0,0), Offset (0, h));
+ start = Line_interface::line (me, Offset (0,0), Offset (0, h));
if (!no_vertical_end)
- end = Lookup::line (t, Offset (w, 0), Offset (w,h));
+ end = Line_interface::line (me, Offset (w, 0), Offset (w,h));
- Molecule mol = Lookup::line (t, Offset (0, h), Offset (w,h));
+ Molecule mol = Line_interface::line (me, Offset (0, h), Offset (w,h));
mol.add_molecule (start);
mol.add_molecule (end);
(minimum-space . 5)
(font-family . number)
(font-size . -4)
- (meta . ((interfaces . (volta-bracket-interface text-interface side-position-interface font-interface spanner-interface))))
+ (meta . ((interfaces . (volta-bracket-interface line-interface text-interface side-position-interface font-interface spanner-interface))))
))
(VerticalAlignment