]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/text-item.cc
patch::: 1.0.16.mb1: Re: LilyPond 1.0.16
[lilypond.git] / lily / text-item.cc
index ad5745f6a5fe9f3fb260d52480592afec66f3314..c23b63c9a575b69921a157f3beda7351e1ea01de 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+  (c)  1997--1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
 */
 
 
 #include "stem.hh"
 #include "molecule.hh"
 #include "lookup.hh"
+#include "debug.hh"
 
-Text_item::Text_item(General_script_def*tdef_l, int d)
+Text_item::Text_item (General_script_def* tdef_l, Direction d) 
 {
-    dir_i_ = d;
-    fat_b_ = false;
-    tdef_p_ = tdef_l->clone();
+  dir_ = d;
+  fat_b_ = false;
+  tdef_p_ = tdef_l->clone ();
 }
 
-Text_item::~Text_item()
+Text_item::~Text_item ()
 {
-    delete tdef_p_;
+  delete tdef_p_;
 }
 
 void
-Text_item::do_pre_processing()
+Text_item::do_pre_processing ()
 {
-    if (!dir_i_)
-       dir_i_ = -1;
+  if (!dir_)
+    dir_ = DOWN;
+}
+
+Real
+Text_item::get_position_f () const
+{
+  // uhuh, tdef/gdef?
+  if ( (tdef_p_->name () != Text_def::static_name ()) 
+    || ( ( (Text_def*)tdef_p_)->style_str_ != "finger"))
+    return Staff_side::get_position_f ();
+
+  if (!dir_)
+    {
+      warning (_ ("Text_item::get_position_f(): "
+                "somebody forgot to set my vertical direction, returning -20"));
+      return -20;
+    }
+
+  Interval v = support_extent ();
+  // add no extra: fingers should be just above note, no?
+  return v[dir_];
 }
 
 Interval
-Text_item::symbol_height()const
+Text_item::symbol_height () const
 {
-    return tdef_p_->get_atom(paper(), dir_i_).sym_.dim.y();
+  return tdef_p_->get_atom (paper (), dir_).dim_.y ();
 }
-    
+  
 Molecule*
-Text_item::brew_molecule_p() const
+Text_item::brew_molecule_p () const
 {
-    Atom a(tdef_p_->get_atom(paper(), dir_i_));
+  Atom a (tdef_p_->get_atom (paper (), dir_));
 
-/*
-  if ( fat_b_)
-       a.sym.dim.x = tdef_p_->width(paper());
-       */
-    Molecule* mol_p = new Molecule(a);
-
-    if(dir_i_<0 )              // should do something better anyway.
-       mol_p->translate( -mol_p->extent().y().left , Y_AXIS);
-    mol_p->translate( pos_i_ * paper()->internote_f(), Y_AXIS);
-    
-    return mol_p;
+
+  if (fat_b_)
+    a.dim_[X_AXIS] = tdef_p_->width (paper ());
+  Molecule* mol_p = new Molecule (a);
+
+  if (dir_<0)          // should do something better anyway.
+    mol_p->translate_axis (-mol_p->extent ().y ().left , Y_AXIS);
+  mol_p->translate_axis (coordinate_offset_f_, Y_AXIS);
+
+  
+  return mol_p;
 }
 
 
-IMPLEMENT_IS_TYPE_B1(Text_item,Item);
+IMPLEMENT_IS_TYPE_B1 (Text_item,Item);