]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/paper-system.cc
* lily/modified-font-metric.cc (text_dimension): try
[lilypond.git] / lily / paper-system.cc
index 340667b53670519f307e0dd6dee031d96a658a4a..49fe5cb0b726e686dd2904665535ccbb92793b70 100644 (file)
@@ -7,8 +7,7 @@
 */
 
 #include "paper-system.hh"
-#include "stencil.hh"
-#include "string.hh"
+
 #include "virtual-methods.hh"
 
 #include "ly-smobs.icc"
@@ -23,9 +22,10 @@ Paper_system::Paper_system (Stencil s, bool is_title)
 {
   is_title_ = is_title;
   number_ = 0;
-  penalty_ = 0;
+  break_before_penalty_ = 0;
   smobify_self ();
   stencil_ = s;
+  staff_refpoints_ = Interval(0,0);
 }
 
 Paper_system::~Paper_system ()
@@ -35,20 +35,20 @@ Paper_system::~Paper_system ()
 SCM
 Paper_system::mark_smob (SCM smob)
 {
-  Paper_system *line = (Paper_system*) ly_cdr (smob);
-  return line-> stencil_.expr ();
+  Paper_system *system = (Paper_system*) SCM_CELL_WORD_1 (smob);
+  return system-> stencil_.expr ();
 }
 
 int
 Paper_system::print_smob (SCM smob, SCM port, scm_print_state*)
 {
-  Paper_system *p = (Paper_system*) ly_cdr (smob);
+  Paper_system *p = (Paper_system*) SCM_CELL_WORD_1 (smob);
   scm_puts ("#<", port);
   scm_puts (classname (p), port);
   scm_puts (" ", port);
   scm_puts (to_string (p->number_).to_str0 (), port);
   scm_puts ("p ", port);
-  scm_puts (to_string (p->penalty_).to_str0 (), port);
+  scm_puts (to_string (p->break_before_penalty_).to_str0 (), port);
   if (p->is_title ())
     scm_puts (" t", port);
   scm_puts (" >", port);
@@ -62,16 +62,9 @@ Paper_system::is_title () const
 }
 
 Real
-Paper_system::penalty () const
+Paper_system::break_before_penalty () const
 {
-  return penalty_;
-}
-
-Offset
-Paper_system::dim () const
-{
-  return Offset (stencil_.extent (X_AXIS).length (),
-                stencil_.extent (Y_AXIS).length ());
+  return break_before_penalty_;
 }
 
 Stencil
@@ -80,52 +73,63 @@ Paper_system::to_stencil () const
   return stencil_;
 }
 
-LY_DEFINE (ly_paper_line_height, "ly:paper-system-extent",
-          2, 0, 0, (SCM line, SCM axis),
-          "Return the extent of @var{line}.")
+LY_DEFINE (ly_paper_system_height, "ly:paper-system-extent",
+          2, 0, 0, (SCM system, SCM axis),
+          "Return the extent of @var{system}.")
 {
-  Paper_system *pl = unsmob_paper_line (line);
-  SCM_ASSERT_TYPE (pl, line, SCM_ARG1, __FUNCTION__, "paper-system");
+  Paper_system *ps = unsmob_paper_system (system);
+  SCM_ASSERT_TYPE (ps, system, SCM_ARG1, __FUNCTION__, "paper-system");
   SCM_ASSERT_TYPE (is_axis (axis), axis, SCM_ARG2, __FUNCTION__, "axis");
-  Axis ax = (Axis)ly_scm2int (axis);
-  return scm_make_real (pl->dim ()[ax]);
+  Axis ax = (Axis)scm_to_int (axis);
+  return ly_interval2scm (ps->to_stencil().extent (ax));
 }
 
 
 
-LY_DEFINE (ly_paper_line_title_p, "ly:paper-system-title?",
-          1, 0, 0, (SCM line),
-          "Is  @var{line} a title line?")
+LY_DEFINE (ly_paper_system_title_p, "ly:paper-system-title?",
+          1, 0, 0, (SCM system),
+          "Is  @var{system} a title system?")
 {
-  Paper_system *pl = unsmob_paper_line (line);
-  SCM_ASSERT_TYPE (pl, line, SCM_ARG1, __FUNCTION__, "paper-system");
-  return SCM_BOOL (pl->is_title ());
+  Paper_system *ps = unsmob_paper_system (system);
+  SCM_ASSERT_TYPE (ps, system, SCM_ARG1, __FUNCTION__, "paper-system");
+  return SCM_BOOL (ps->is_title ());
 }
 
-LY_DEFINE (ly_paper_line_number, "ly:paper-system-number",
-          1, 0, 0, (SCM line),
-          "Return the number of @var{line}.")
+LY_DEFINE (ly_paper_system_number, "ly:paper-system-number",
+          1, 0, 0, (SCM system),
+          "Return the number of @var{system}.")
 {
-  Paper_system *pl = unsmob_paper_line (line);
-  SCM_ASSERT_TYPE (pl, line, SCM_ARG1, __FUNCTION__, "paper-system");
-  return scm_int2num (pl->number_);
+  Paper_system *ps = unsmob_paper_system (system);
+  SCM_ASSERT_TYPE (ps, system, SCM_ARG1, __FUNCTION__, "paper-system");
+  return scm_int2num (ps->number_);
 }
 
-LY_DEFINE (ly_paper_line_break_score, "ly:paper-system-break-penalty",
-          1, 0, 0, (SCM line),
-          "Return the score for page break after @var{line}.")
+LY_DEFINE (ly_paper_system_break_before_penalty, "ly:paper-system-break-before-penalty",
+          1, 0, 0, (SCM system),
+          "Return the score for page break after @var{system}.")
 {
-  Paper_system *pl = unsmob_paper_line (line);
-  SCM_ASSERT_TYPE (pl, line, SCM_ARG1, __FUNCTION__, "paper-system");
-  return scm_int2num (int (pl->penalty ()));
+  Paper_system *ps = unsmob_paper_system (system);
+  SCM_ASSERT_TYPE (ps, system, SCM_ARG1, __FUNCTION__, "paper-system");
+  return scm_int2num (int (ps->break_before_penalty ()));
 }
 
-LY_DEFINE (ly_paper_line_stencil, "ly:paper-system-stencil",
-          1, 0, 0, (SCM line),
-          "Return the height of @var{line}.")
+LY_DEFINE (ly_paper_system_stencil, "ly:paper-system-stencil",
+          1, 0, 0, (SCM system),
+          "Return the height of @var{system}.")
+{
+  Paper_system *ps = unsmob_paper_system (system);
+  SCM_ASSERT_TYPE (ps, system, SCM_ARG1, __FUNCTION__, "paper-system");
+  return ps->to_stencil ().smobbed_copy ();
+}
+
+
+
+LY_DEFINE (ly_paper_system_staff_extent, "ly:paper-system-staff-extents",
+          1, 0, 0, (SCM system),
+          "Return the top and bottom staff refpoint.")
 {
-  Paper_system *pl = unsmob_paper_line (line);
-  SCM_ASSERT_TYPE (pl, line, SCM_ARG1, __FUNCTION__, "paper-system");
-  return pl->to_stencil ().smobbed_copy ();
+  Paper_system *ps = unsmob_paper_system (system);
+  SCM_ASSERT_TYPE (ps, system, SCM_ARG1, __FUNCTION__, "paper-system");
+  return ly_interval2scm (ps->staff_refpoints_);
 }