From e8742b92323c1025d5bfbebd778ec043ab333fcf Mon Sep 17 00:00:00 2001 From: fred Date: Thu, 28 Nov 1996 11:53:56 +0000 Subject: [PATCH] lilypond-0.0.11 --- src/slur.cc | 105 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 src/slur.cc diff --git a/src/slur.cc b/src/slur.cc new file mode 100644 index 0000000000..171f3b04dd --- /dev/null +++ b/src/slur.cc @@ -0,0 +1,105 @@ +#include "slur.hh" +#include "lookup.hh" +#include "paper.hh" +#include "notehead.hh" +#include "pcol.hh" +#include "molecule.hh" +#include "debug.hh" +#include "boxes.hh" + +void +Slur::add(Notehead*n) +{ + encompass.add(n); + dir = 0; + open_right=open_left=false; +} + +Interval +Slur::height() const +{ + return Interval(0,0); // todo +} + +void +Slur::set_default_dir() +{ + int sumpos=0; + for (int i=0; i < encompass.sz(); i ++) { + sumpos += encompass[i]->position; + } + + /* should consult stems */ + Real meanpos = sumpos/Real(encompass.sz()); + if (meanpos < 5) // todo + dir = -1; + else + dir = 1; +} + +void +Slur::print()const +{ + mtor << "Slur.\n"; +} + +void +Slur::preprocess() +{ + right = encompass.last()->pcol_; + left = encompass[0]->pcol_; +} + +Spanner* +Slur::broken_at(const PCol*l, const PCol*r) const +{ + assert(l->line == r->line); + Slur*ret = new Slur(*this); + ret->encompass.set_size(0); + for (int i =0; i < encompass.sz(); i++) { + if (encompass[i]->pcol_->line==l->line) + ret->encompass.add(encompass[i]); + } + if (right != r) + ret->open_right = true; + if (left != l) + ret->open_left = true; + + ret->left = l; + ret->right = r; + return ret; +} + +void +Slur::process() +{ + set_default_dir(); + brew_molecule(); +} + +void +Slur::brew_molecule() +{ + output = new Molecule; + assert(left->line == right->line); + int minp=1000, maxp=-1000; // todo + for (int i=0; iposition, minp); + maxp = MAX(encompass[i]->position, maxp); + } + + assert(encompass.sz()>0); // todo + int pos1 = encompass.last()->position; + int pos2 = encompass[0]->position; + + int dy = pos1-pos2; + + Real w = width().length(); + Real nw = paper()->note_width(); + w -= nw; + Symbol sl = paper()->lookup_->slur(dy , w, dir); + Atom a(sl); + a.translate(Offset(nw,pos2*paper()->internote())); + output->add(a); +} + -- 2.39.5