]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/paper-system.cc
* lily/book.cc (process): bugfix: flip ?: cases.
[lilypond.git] / lily / paper-system.cc
index 9c70473c405ccf75e0aad4f020b5ec247ca87bdb..87925402d467edefa6c04925bf88529a0c395faf 100644 (file)
@@ -7,8 +7,7 @@
 */
 
 #include "paper-system.hh"
-
-#include "virtual-methods.hh"
+#include "item.hh"
 
 #include "ly-smobs.icc"
 
@@ -16,8 +15,6 @@ IMPLEMENT_SMOBS (Paper_system);
 IMPLEMENT_TYPE_P (Paper_system, "ly:paper-system?");
 IMPLEMENT_DEFAULT_EQUAL_P (Paper_system);
 
-
-
 Paper_system::Paper_system (Stencil s, bool is_title)
 {
   is_title_ = is_title;
@@ -25,7 +22,7 @@ Paper_system::Paper_system (Stencil s, bool is_title)
   break_before_penalty_ = 0;
   smobify_self ();
   stencil_ = s;
-  staff_refpoints_ = Interval(0, 0);
+  staff_refpoints_ = Interval (0, 0);
 }
 
 Paper_system::~Paper_system ()
@@ -35,19 +32,20 @@ Paper_system::~Paper_system ()
 SCM
 Paper_system::mark_smob (SCM smob)
 {
-  Paper_system *system = (Paper_system*) SCM_CELL_WORD_1 (smob);
-  return system-> stencil_.expr ();
+  Paper_system *system = (Paper_system *) SCM_CELL_WORD_1 (smob);
+  scm_gc_mark (system->details_);
+  return system->stencil_.expr ();
 }
 
 int
 Paper_system::print_smob (SCM smob, SCM port, scm_print_state*)
 {
-  Paper_system *p = (Paper_system*) SCM_CELL_WORD_1 (smob);
+  Paper_system *p = (Paper_system *) SCM_CELL_WORD_1 (smob);
   scm_puts ("#<", port);
   scm_puts (classname (p), port);
-  scm_puts (" ", port);
+  scm_puts ("n ", port);
   scm_puts (to_string (p->number_).to_str0 (), port);
-  scm_puts ("p ", port);
+  scm_puts ("p ", port);
   scm_puts (to_string (p->break_before_penalty_).to_str0 (), port);
   if (p->is_title ())
     scm_puts (" t", port);
@@ -72,3 +70,53 @@ Paper_system::to_stencil () const
 {
   return stencil_;
 }
+
+void
+Paper_system::read_left_bound (Item *left)
+{
+  break_before_penalty_
+    = robust_scm2double (left->get_property ("page-penalty"), 0.0);
+
+  details_
+    = left->get_property ("line-break-system-details");
+
+  SCM yext
+    = scm_assq (ly_symbol2scm ("Y-extent"), details_);
+  
+  SCM staff_ext
+    = scm_assq (ly_symbol2scm ("refpoint-Y-extent"), details_);
+
+  if (scm_is_pair (yext)
+      && is_number_pair (scm_cdr (yext)))
+    {
+      Box b = stencil_.extent_box();
+      b[Y_AXIS] = ly_scm2interval (scm_cdr (yext));
+      
+      stencil_ = Stencil (b, stencil_.expr ());
+    }
+
+  if (scm_is_pair (staff_ext)
+      && is_number_pair (scm_cdr (staff_ext)))
+    {
+      staff_refpoints_ = ly_scm2interval (scm_cdr (staff_ext));
+    }
+}
+
+SCM
+Paper_system::internal_get_property (SCM sym) const
+{
+  SCM handle = scm_assq (sym, details_);
+  if (scm_is_pair (handle))
+    return scm_cdr (handle);
+  else
+    return SCM_EOL;
+}
+
+/*
+  todo: move to Paper_system property.
+ */
+Interval
+Paper_system::staff_refpoints () const
+{
+  return staff_refpoints_;
+}