--- /dev/null
+/*
+ general-script-def.hh -- declare General_script_def
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#ifndef GENERAL_SCRIPT_DEF_HH
+#define GENERAL_SCRIPT_DEF_HH
+
+#include "lily-proto.hh"
+#include "input.hh"
+#include "virtual-methods.hh"
+/**
+ Definition of anything that is put aside staff/notes.
+ */
+class General_script_def : public Input {
+public:
+ VIRTUAL_COPY_CONS(General_script_def,General_script_def)
+ NAME_MEMBERS();
+ virtual int staff_dir_i()const;
+ void print() const;
+ virtual int rel_stem_dir_i()const;
+ virtual int priority_i()const;
+ virtual bool inside_b()const;
+ virtual Atom get_atom(Paper_def* p, int dir_i_)const;
+ bool equal_b(General_script_def const&)const;
+ virtual ~General_script_def() {}
+
+protected:
+ virtual bool do_equal_b(General_script_def const &)const;
+ virtual void do_print()const;
+};
+
+#endif // GENERAL_SCRIPT_DEF_HH
Script::Script(Script_req* rq)
{
specs_l_ = rq->scriptdef_p_;
- inside_staff_b_ = specs_l_->inside_staff_b_;
+ inside_staff_b_ = specs_l_->inside_b();
stem_l_ = 0;
pos_i_ = 0;
- symdir_i_=1;
dir_i_ =rq->dir_i_;
}
-
-void
-Script::set_symdir()
-{
- if (specs_l_->invertsym_b_)
- symdir_i_ = (dir_i_ < 0) ? -1:1;
-}
-
void
Script::set_default_dir()
{
- int s_i=specs_l_->rel_stem_dir_i_;
+ 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_;
+ dir_i_ =specs_l_->staff_dir_i();
}
}
void
Script::set_default_index()
{
- pos_i_ = get_position_i(symbol().dim.y);
+ pos_i_ = get_position_i(specs_l_->get_atom(paper(), dir_i_).extent().y);
}
Interval
Script::do_width() const
{
- return symbol().dim.x;
-}
-
-Symbol
-Script::symbol()const
-{
- String preidx_str = (symdir_i_ < 0) ?"-" :"";
- return paper()->lookup_l()->script(preidx_str + specs_l_->symidx);
+ return specs_l_->get_atom(paper(), dir_i_).extent().x;
}
void
{
if (!dir_i_)
set_default_dir();
- set_symdir();
+
}
void
{
Real dy = paper()->internote_f();
- Molecule*out = new Molecule(Atom(symbol()));
+ Molecule*out = new Molecule(specs_l_->get_atom(paper(), dir_i_));
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_;
+ return l1->specs_l_->priority_i() - l2->specs_l_->priority_i();
}
bool
Slur_register::acceptable_request_b(Request*req_l)
{
- return req_l->musical() && req_l->musical()->slur();
+ Musical_req *mus_l = req_l->musical();
+
+ return mus_l && mus_l->slur();
}
bool
Slur_register::try_request(Request *req_l)
{
- if(!req_l->slur())
+ Musical_req *mus_l = req_l->musical();
+ if(!mus_l || !mus_l->slur())
return false;
- new_slur_req_l_arr_.push(req_l->slur());
+ new_slur_req_l_arr_.push(mus_l->slur());
return true;
}