]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/lookup.cc
release: 1.1.64
[lilypond.git] / lily / lookup.cc
index 961a4b37c838a35cc718e15b23e86706789d7c80..d82c1f55baec45046d2ef0b9fa204b0910561038 100644 (file)
@@ -10,7 +10,7 @@
   TODO
       Glissando
 */
-
+#include <math.h>
 #include <ctype.h>
 #include "lookup.hh"
 #include "debug.hh"
@@ -120,6 +120,8 @@ Lookup::afm_find (String s, bool warn) const
                    gh_int2scm (cm.code ()),
                    SCM_UNDEFINED));
   at.font_ = ly_symbol (font_name_.ch_C());
+  at.magn_ = gh_int2scm (0);
+  
   m.dim_ = cm.dimensions();
   m.add_atom (&at);
   return m;
@@ -159,11 +161,13 @@ Lookup::bar (String str, Real h, Paper_def *paper_l) const
   if (str == "bracket")
     return staff_bracket (h);
   else if (str == "brace")
-    return staff_brace (h);
-  
+    {
+      Real staffht  = paper_l->get_var ("staffheight");
+      return staff_brace (h,staffht);
+    }
   Real kern = paper_l->get_var ("bar_kern");
   Real thinkern = paper_l->get_var ("bar_thinkern");
-  
+
   Molecule thin = simple_bar ("thin", h, paper_l);
   Molecule thick = simple_bar ("thick", h, paper_l);
   Molecule colon = afm_find ("dots-repeatcolon", paper_l);  
@@ -357,7 +361,7 @@ Lookup::filledbox (Box b ) const
 /**
    Magnification steps.  These are powers of 1.2. The numbers are
  taken from Knuth's plain.tex: */
-static Real mag_steps[] = {1, 1, 1.200, 1.440, 1.7280,  2.074, 2.488};
+
 
 /**
    TODO: THIS IS UGLY.  Since the user has direct access to TeX
@@ -371,16 +375,19 @@ Lookup::text (String style, String text, Paper_def *paper_l) const
   if (style.empty_b ())
     style = "roman";
   
-  int font_mag = 1;
+  int font_mag = 0;
   Real font_h = paper_l->get_var ("font_normal");
   if (paper_l->scope_p_->elem_b ("font_" + style))
     {
       font_h = paper_l->get_var ("font_" + style);
     }
-   
+
+
+  Real realmag = 1.0;
   if (paper_l->scope_p_->elem_b ("magnification_" + style))
     {
       font_mag = (int)paper_l->get_var ("magnification_" + style);
+      realmag = pow (1.2, font_mag);
     }
 
   /*
@@ -422,14 +429,6 @@ Lookup::text (String style, String text, Paper_def *paper_l) const
        }
     }
 
-  if (font_mag > 1 && font_mag < 7 )
-    {
-      /* UGH  */ 
-      style = style + String(" scaled \\magstep ") + to_str (font_mag);
-      w *= mag_steps[font_mag];
-      ydims *= mag_steps[font_mag];
-    }
-
   if(brace_count)
     {
       warning (_f ("Non-matching braces in text `%s', adding braces.", text.ch_C()));
@@ -444,9 +443,8 @@ Lookup::text (String style, String text, Paper_def *paper_l) const
        }
     }
 
-  
-  DOUT << "\n" << to_str (w) << "\n";
-  m.dim_.x () = Interval (0, w);
+  ydims *= realmag;
+  m.dim_.x () = Interval (0, w*realmag);
   m.dim_.y () = ydims;
 
   
@@ -454,6 +452,7 @@ Lookup::text (String style, String text, Paper_def *paper_l) const
                     gh_str02scm (text.ch_C()),
                     SCM_UNDEFINED));
   at.font_ = ly_symbol (style);
+  at.magn_ = gh_int2scm (font_mag);
   
   m.add_atom (&at);
   return m;
@@ -483,14 +482,32 @@ Lookup::time_signature (int num, int den, Paper_def *paper_l) const
 }
 
 Molecule
-Lookup::staff_brace (Real y) const
+Lookup::staff_brace (Real y, int staff_size) const
 {
   Molecule m;
+  /*
+  (define (pianobrace y staffht)
+    (let* ((step 1.0)
+          (minht (* 2 staffht))
+          (maxht (* 7 minht))
+          )
+      (string-append
+       (select-font (string-append "feta-braces" (number->string (inexact->exact staffht))) 0)
+       (char (max 0 (/  (- (min y (- maxht step)) minht) step))))
+      )
+    )
+  */
+
+  Real step  = 1.0;
+  int minht  = 2 * staff_size;
+  int maxht = 7 *  minht;
+  int idx = int (((maxht - step) <? y - minht) / step);
+  idx = idx >? 0;
   
-  Atom at  (gh_list (pianobrace_scm_sym,
-                    gh_double2scm (y),
-                    SCM_UNDEFINED
-                    ));
+  SCM f =  ly_symbol (String ("feta-braces" + to_str (staff_size)));
+  SCM e =gh_list (char_scm_sym, gh_int2scm (idx), SCM_UNDEFINED);
+  Atom at  (e);
+  at.font_ = f;
   
   m.dim_[Y_AXIS] = Interval (-y/2,y/2);
   m.dim_[X_AXIS] = Interval (0,0);
@@ -499,12 +516,13 @@ Lookup::staff_brace (Real y) const
 }
 
 Molecule
-Lookup::hairpin (Real width, Real height, bool decresc, bool continued) const
+Lookup::hairpin (Real width, Real height, Real thick, bool decresc, bool continued) const
 {
   Molecule m;   
 
   String hairpin = String (decresc ? "de" : "") + "crescendo";
   Atom at  (gh_list (ly_symbol (hairpin),
+                    gh_double2scm (thick),
                     gh_double2scm (width),
                     gh_double2scm (height),
                     gh_double2scm (continued ? height/2 : 0.0),
@@ -538,7 +556,7 @@ Lookup::tuplet_bracket (Real dy , Real dx, Real thick, Real gap, Real interline_
   Make a smooth curve along the points 
  */
 Molecule
-Lookup::slur (Array<Offset> controls) const
+Lookup::slur (Array<Offset> controls, Real linethick) const
 {
   Offset  delta_off = controls[3]- controls[0];
   Molecule m; 
@@ -552,6 +570,7 @@ Lookup::slur (Array<Offset> controls) const
 
   Atom at  (gh_list (ly_symbol ("bezier-sandwich"),
                     ly_quote_scm (array_to_list (scontrols, 8)),
+                    gh_double2scm (linethick),
                     SCM_UNDEFINED));
 
   m.dim_[X_AXIS] = Interval (0, delta_off[X_AXIS]);
@@ -576,7 +595,7 @@ Lookup::staff_bracket (Real y) const
 }
 
 Molecule
-Lookup::volta (Real h, Real w, Real thick, bool last_b) const
+Lookup::volta (Real h, Real w, Real thick, bool vert_start, bool vert_end) const
 {
   Molecule m; 
 
@@ -584,7 +603,8 @@ Lookup::volta (Real h, Real w, Real thick, bool last_b) const
                     gh_double2scm (h),
                     gh_double2scm (w),
                     gh_double2scm (thick),
-                    gh_int2scm (last_b),
+                    gh_int2scm (vert_start),
+                    gh_int2scm (vert_end),
                     SCM_UNDEFINED));
 
   m.dim_[Y_AXIS] = Interval (- h/2, h/2);