]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/include/score-element.hh
release: 1.3.105
[lilypond.git] / lily / include / score-element.hh
index e803d487fe66a838239921c7b9c2000b6c5c05e2..424a182932976f093dffb25dee832f73a39b55f7 100644 (file)
 #include "smobs.hh"
 #include "dimension-cache.hh"
 
-typedef Interval (*Extent_callback)(Score_element const *,Axis);
-typedef Real (*Offset_callback)(Score_element const *,Axis);
-
-
 /**
     for administration of what was done already
     */
 enum Score_element_status {
-  ORPHAN=0,                    // not yet added to pstaff
-  VIRGIN,                      // added to pstaff
+  ORPHAN=0,                    // not yet added to Paper_score
+  VIRGIN,      
   PRECALCING,
   PRECALCED,           // calcs before spacing done
   POSTCALCING,         // busy calculating. This is used to trap cyclic deps.
   POSTCALCED,          // after spacing calcs done
-  BREWING,
-  BREWED,
 };
 
 typedef void (Score_element::*Score_element_method_pointer) (void);
 
-/**
+/*
    Basic output object.
-
-    Element Properties:
-
-   transparent -- boolean: if true, do not print anything black.
-
-   dependencies -- list of score-element pointers that indicate who to
-   compute first.
-
-   interfaces -- list of symbols indicating the interfaces supported
-   by this object.
-
-   extra-offset -- pair of reals (a cons) forcing an extra offset
-   before outputting
-
-   glyph -- afm character name to output.
-   
 */
 class Score_element  {
-  /**
-     The lookup, determined by the font size. Cache this value.
-   */
-  Lookup * lookup_l_;
 public:
-  /**
-     properties specific for this element. Destructor will not call
-     scm_unprotect, so as to allow more flexible GC arrangements.  The
-     real alist is in (cdr element_property_alist_), to reduce the
-     need for more scm_protect calls.
-
-  */
-  SCM element_property_alist_;
-  
+  SCM immutable_property_alist_;
+  SCM mutable_property_alist_;
   Score_element *original_l_;
 
   /**
@@ -77,14 +44,7 @@ public:
     0 means ORPHAN,
    */
   char status_i_;
-  /**
-     Set this if anyone points to me, or if I point to anyone.
-
-     JUNKME.
-   */
-  bool used_b_;
-  
-  char const * name () const;
+  String name () const;
 
   /*
     IDEA: make this a global variable. This is the same for all
@@ -93,39 +53,26 @@ public:
    */
   Paper_score *pscore_l_;
 
-  Score_element ();
+  Score_element (SCM basic_props);
   Score_element (Score_element const&);
 
   /*
     properties
    */
-  SCM get_elt_property (String nm) const;
-  void set_elt_property (String, SCM val);
-
-  /**
-     UGH! JUNKME ?
-
-     This gets messy because it changes state
-
-     calling 
-
-     Bar::proc ()
-     {
-       s->remove_elt_property ("foo")
-     } 
-
-     twice may do weird things if Bar::foo has a default set.
-     
-   */
-  SCM remove_elt_property (String nm);
+  SCM get_elt_property (const char*) const;
+  SCM get_elt_property (SCM) const;
+  void set_elt_property (const char * , SCM val);
+  void set_immutable_elt_property (const char * , SCM val);
+  void set_immutable_elt_property (SCM key, SCM val);  
+  void set_elt_property (SCM , SCM val);  
+  void set_elt_pointer (const char*, SCM val);
+  friend class Property_engraver; //  UGHUGHUGH.
+  SCM remove_elt_property (const char* nm);
 
   /*
     related classes.
    */
   Paper_def *paper_l () const;
-  Lookup const *lookup_l () const;
-
-  void add_processing ();
 
   /**
     add a dependency. It may be the 0 pointer, in which case, it is ignored.
@@ -145,52 +92,33 @@ public:
 
      #funcptr# is the function to call to update this element.
    */
-  void calculate_dependencies (int final, int busy, Score_element_method_pointer funcptr);
-
-
+  void calculate_dependencies (int final, int busy, SCM funcname);
   static SCM handle_broken_smobs (SCM, SCM criterion);
 
   virtual void do_break_processing ();
   virtual Score_element *find_broken_piece (Line_of_score*) const;
-  /// generate rods & springs
-  virtual void do_space_processing ();
   virtual void discretionary_processing ();
+  virtual SCM do_derived_mark ();
 
-  /// do calculations before determining horizontal spacing
-  virtual void before_line_breaking ();
-  /// do calculations after determining horizontal spacing
-  virtual void after_line_breaking ();
-
-  Molecule get_molecule () const;
+  Molecule * get_molecule () const;
   void suicide ();
   
-  static Interval preset_extent (Score_element const*,Axis);
-  static Interval point_dimension_callback (Score_element const*,Axis );
-  static Interval molecule_extent (Score_element const*,Axis);
+  DECLARE_SCHEME_CALLBACK(preset_extent, (SCM smob, SCM axis));
+  DECLARE_SCHEME_CALLBACK(point_dimension_callback, (SCM smob, SCM axis));
+  DECLARE_SCHEME_CALLBACK(molecule_extent, (SCM smob, SCM axis));
 
-protected:
 
-  /**
-    Junk score element. This is protected because this is supposed to
-    be handled by GUILE gc.  */
-  virtual ~Score_element ();
-  
-  /// generate the molecule    
-  virtual Molecule do_brew_molecule () const;
-  ///executed directly after the item is added to the Paper_score
-  virtual void do_add_processing ();
-    
-  static Interval dim_cache_callback (Dimension_cache const*);
-  
-public:
   static SCM ly_set_elt_property (SCM, SCM,SCM);
   static SCM ly_get_elt_property (SCM, SCM);  
 
+  bool has_interface (SCM intf);
+  void set_interface (SCM intf);
+
   virtual void handle_broken_dependencies ();
   virtual void handle_prebroken_dependencies ();
 
 
-  DECLARE_SMOBS;
+  DECLARE_SMOBS(Score_element,foo);
 
   void init ();
 
@@ -198,7 +126,8 @@ public:
 
 public:
   bool empty_b (Axis a) const;
-  Interval extent (Axis) const;
+
+  Interval extent (Score_element * refpoint, Axis) const;
  
   /**
     translate in one direction
@@ -219,11 +148,14 @@ public:
   Score_element*common_refpoint (Score_element const* s, Axis a) const;
   Score_element*common_refpoint (SCM elt_list, Axis a) const;
 
-  bool has_offset_callback_b (Offset_callback, Axis)const;
-  void add_offset_callback (Offset_callback, Axis);
-  bool has_extent_callback_b (Extent_callback, Axis)const;  
-  void set_extent_callback (Extent_callback , Axis);
+  // duh. slim down interface here. (todo)
+  bool has_offset_callback_b (SCM callback, Axis)const;
+  void add_offset_callback (SCM callback, Axis);
+  bool has_extent_callback_b (SCM, Axis)const;  
+  void set_extent_callback (SCM , Axis);
+  bool has_extent_callback_b (Axis) const;
 
+  
   /**
     Invoke callbacks to get offset relative to parent.
    */
@@ -234,12 +166,10 @@ public:
   void set_parent (Score_element* e, Axis);
   
   Score_element *parent_l (Axis a) const;
-  void fixup_refpoint ();
+  DECLARE_SCHEME_CALLBACK(fixup_refpoint, (SCM));
 };
 
 Score_element * unsmob_element (SCM);
 
-
-
 #endif // STAFFELEM_HH