+/*
+ script.cc -- implement Script
+
+ source file of the LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
#include "musical-request.hh"
#include "paper-def.hh"
#include "script.hh"
Script::set_stem(Stem*st_l)
{
stem_l_ = st_l;
- add_dependency(st_l);
+ add_support(st_l);
}
-void
-Script::set_support(Item*i)
-{
- support.push(i);
- add_dependency(i);
-}
-Script::Script(Script_req* rq, int staflen)
+Script::Script(Script_req* rq)
+ :Staff_side(this)
{
- staffsize =staflen;
specs_l_ = rq->scriptdef_p_;
+ inside_staff_b_ = specs_l_->inside_staff_b_;
stem_l_ = 0;
- pos = 0;
- symdir=1;
- dir =rq->dir_i_;
+ pos_i_ = 0;
+ symdir_i_=1;
+ dir_i_ =rq->dir_i_;
}
void
Script::set_symdir()
{
- if (specs_l_->invertsym)
- symdir = (dir < 0) ? -1:1;
+ if (specs_l_->invertsym_b_)
+ symdir_i_ = (dir_i_ < 0) ? -1:1;
}
void
Script::set_default_dir()
{
- if (specs_l_->stemdir) {
- if (!stem_l_)
- dir = 1;
- else
- dir = stem_l_->dir * specs_l_->stemdir;
+ int s_i=specs_l_->rel_stem_dir_i_;
+ if (s_i && stem_l_)
+ dir_i_ = stem_l_->dir_i_ * s_i;
+ else {
+ dir_i_ =specs_l_->staff_dir_i_;
}
}
-Interval
-Script::support_height() const return r;
-{
- for (int i=0; i < support.size(); i++)
- r.unite(support[i]->height());
-}
-
void
Script::set_default_index()
{
- Real inter_f= paper()->internote();
- Interval dy = symbol().dim.y;
-
- int d = specs_l_->staffdir;
- Real y ;
- if (!d) {
- Interval v= support_height();
- y = v[dir] -dy[-dir] + 2*dir*inter_f;
- } else {
- y = (d > 0) ? staffsize + 2: -2; // ug
- y *=inter_f;
- Interval v= support_height();
-
- if (d > 0) {
- y = y >? v.max();
- } else if (d < 0) {
- y = y <? v.min();
- }
- }
-
- if (stem_l_) {
- Interval v= stem_l_->height();
-
- if (d > 0 || (!d && dir > 0)) {
- y = y >? v.max();
- }else if (d < 0 || (!d && dir < 0)) {
- y = y <? v.min();
- }
- }
-
- pos = int(rint(Real(y)/inter_f));
+ pos_i_ = get_position_i();
}
Interval
-Script::width() const
+Script::do_width() const
{
return symbol().dim.x;
}
Symbol
Script::symbol()const
{
- String preidx_str = (symdir < 0) ?"-" :"";
+ String preidx_str = (symdir_i_ < 0) ?"-" :"";
return paper()->lookup_l()->script(preidx_str + specs_l_->symidx);
}
Real dy = paper()->internote();
Molecule*out = new Molecule(Atom(symbol()));
- out->translate(Offset(0,dy * pos));
+ out->translate(Offset(0,dy * pos_i_));
return out;
}
IMPLEMENT_STATIC_NAME(Script);
+
+int
+Script::compare(Script *const&l1, Script *const&l2)
+{
+ return l1->specs_l_->priority_i_ - l2->specs_l_->priority_i_;
+}
+