2 This file is part of LilyPond, the GNU music typesetter.
4 Copyright (C) 1996--2009 Han-Wen Nienhuys
6 LilyPond is free software: you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation, either version 3 of the License, or
9 (at your option) any later version.
11 LilyPond is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
24 #include "virtual-methods.hh"
25 #include "dimension-cache.hh"
26 #include "grob-interface.hh"
32 DECLARE_CLASSNAME(Grob
);
38 Dimension_cache dim_cache_
[NO_AXES
];
43 SCM immutable_property_alist_
;
44 SCM mutable_property_alist_
;
48 If this is a property, it accounts for 25% of the property
53 void substitute_object_links (SCM
, SCM
);
54 Real
get_offset (Axis a
) const;
55 SCM
try_callback (SCM
, SCM
);
56 SCM
try_callback_on_alist (SCM
*, SCM
, SCM
);
57 void internal_set_value_on_alist (SCM
*alist
, SCM sym
, SCM val
);
64 friend SCM
ly_grob_properties (SCM
);
65 friend SCM
ly_grob_basic_properties (SCM
);
67 /* standard callbacks */
68 DECLARE_SCHEME_CALLBACK (x_parent_positioning
, (SCM
));
69 DECLARE_SCHEME_CALLBACK (y_parent_positioning
, (SCM
));
70 DECLARE_SCHEME_CALLBACK (stencil_height
, (SCM smob
));
71 DECLARE_SCHEME_CALLBACK (stencil_width
, (SCM smob
));
74 Output_def
*layout () const { return layout_
; }
75 Grob
*original () const { return original_
; }
76 SCM
interfaces () const { return interfaces_
; }
79 Grob (SCM basic_props
);
81 virtual Grob
*clone () const;
85 bool is_live () const;
91 SCM
get_property_alist_chain (SCM
) const;
92 SCM
internal_get_property (SCM symbol
) const;
93 SCM
internal_get_property_data (SCM symbol
) const;
94 SCM
internal_get_non_callback_marker_property_data (SCM symbol
) const;
95 SCM
internal_get_object (SCM symbol
) const;
96 void internal_set_object (SCM sym
, SCM val
);
97 void internal_del_property (SCM symbol
);
98 void instrumented_set_property (SCM
, SCM
, char const*, int, char const*);
99 void internal_set_property (SCM sym
, SCM val
);
102 void warning (string
) const;
103 void programming_error (string
) const;
106 /* class hierarchy */
107 virtual System
*get_system () const;
108 virtual void do_break_processing ();
109 virtual Grob
*find_broken_piece (System
*) const;
110 virtual void discretionary_processing ();
111 virtual void derived_mark () const;
112 virtual void handle_broken_dependencies ();
113 virtual void handle_prebroken_dependencies ();
116 Stencil
*get_stencil () const;
117 Stencil
get_print_stencil () const;
120 bool internal_has_interface (SCM intf
);
121 DECLARE_GROB_INTERFACE();
124 void translate_axis (Real
, Axis
);
125 Real
relative_coordinate (Grob
const *refp
, Axis
) const;
126 Real
pure_relative_y_coordinate (Grob
const *refp
, int start
, int end
);
127 Real
maybe_pure_coordinate (Grob
const *refp
, Axis a
, bool pure
, int start
, int end
);
130 Interval
extent (Grob
*refpoint
, Axis
) const;
131 void flush_extent_cache (Axis
);
132 virtual Interval
pure_height (Grob
*refpoint
, int start_col
, int end_col
);
133 Interval
maybe_pure_extent (Grob
*refpoint
, Axis
, bool pure
, int start
, int end
);
136 Grob
*common_refpoint (Grob
const *s
, Axis a
) const;
137 void set_parent (Grob
*e
, Axis
);
138 Grob
*get_parent (Axis a
) const;
139 void fixup_refpoint ();
141 virtual Interval_t
<int> spanned_rank_interval () const;
142 bool check_cross_staff (Grob
*common
);
146 DECLARE_UNSMOB (Grob
, grob
);
147 Spanner
*unsmob_spanner (SCM
);
148 Item
*unsmob_item (SCM
);
151 Grob
*common_refpoint_of_list (SCM elt_list
, Grob
*, Axis a
);
152 Grob
*common_refpoint_of_array (vector
<Grob
*> const &, Grob
*, Axis a
);
153 System
*get_root_system (Grob
*me
);
156 Interval
robust_relative_extent (Grob
*, Grob
*, Axis
);
158 /* offset/extent callbacks. */
159 void add_offset_callback (Grob
*g
, SCM proc
, Axis a
);
160 void chain_offset_callback (Grob
*g
, SCM proc
, Axis a
);
161 void chain_callback (Grob
*g
, SCM proc
, SCM sym
);
162 SCM
axis_offset_symbol (Axis a
);
163 SCM
axis_parent_positioning (Axis a
);
165 SCM
call_pure_function (SCM unpure
, SCM args
, int start
, int end
);
167 void set_nested_property (Grob
*, SCM property_path
, SCM value
);