2 item.cc -- implement Item
4 source file of the GNU LilyPond music typesetter
6 (c) 1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
9 #include "dimension-cache.hh"
10 #include "paper-score.hh"
13 #include "paper-column.hh"
15 #include "lily-guile.hh"
16 #include "line-of-score.hh"
21 broken_to_drul_
[LEFT
] = broken_to_drul_
[RIGHT
]=0;
25 Item copy ctor. Copy nothing: everything should be a elt property
26 or a special purpose pointer (such as broken_to_drul_[]) */
27 Item::Item (Item
const &s
)
30 broken_to_drul_
[LEFT
] = broken_to_drul_
[RIGHT
] =0;
36 Item::breakable_b () const
41 Item
* i
=dynamic_cast<Item
*> (parent_l (X_AXIS
));
42 return (i
) ? i
->breakable_b () : to_boolean (get_elt_property ("breakable"));
48 Score_element
*g
= parent_l (X_AXIS
);
49 return g
? g
->line_l () : 0;
54 Item::copy_breakable_items()
56 Drul_array
<Item
*> new_copies
;
60 Score_element
* dolly
= clone();
61 Item
* item_p
= dynamic_cast<Item
*>(dolly
);
62 pscore_l_
->line_l_
->typeset_element (item_p
);
63 new_copies
[i
] =item_p
;
65 while (flip(&i
) != LEFT
);
66 broken_to_drul_
= new_copies
;
71 Item::broken_b () const
73 return broken_to_drul_
[LEFT
] || broken_to_drul_
[RIGHT
];
78 Generate items for begin and end-of line.
81 Item::discretionary_processing()
87 copy_breakable_items();
91 Item::find_broken_piece (Line_of_score
*l
) const
98 Score_element
*s
= broken_to_drul_
[d
];
99 if (s
&& s
->line_l () == l
)
102 while (flip (&d
) != LEFT
);
109 Item::find_prebroken_piece (Direction d
) const
111 Item
* me
= (Item
*) (this);
114 return dynamic_cast<Item
*> (broken_to_drul_
[d
]);
118 Item::column_l () const
120 return dynamic_cast<Item
*> (parent_l (X_AXIS
))->column_l ();
124 Item::break_status_dir () const
128 Item
* i
= dynamic_cast<Item
*> (original_l_
);
130 return (i
->broken_to_drul_
[LEFT
] == this) ? LEFT
: RIGHT
;
137 Item::handle_prebroken_dependencies ()
142 = handle_broken_smobs (original_l_
->pointer_alist_
,
143 gh_int2scm (break_status_dir ()));
147 Can't do this earlier, because try_visibility_lambda () might set
148 the elt property transparent, which would then be copied.
150 SCM vis
= get_elt_property ("visibility-lambda");
151 if (gh_procedure_p (vis
))
153 SCM args
= scm_listify (gh_int2scm (break_status_dir ()), SCM_UNDEFINED
);
154 SCM result
= gh_apply (vis
, args
);
155 bool trans
= gh_scm2bool (gh_car (result
));
156 bool empty
= gh_scm2bool (gh_cdr (result
));
162 set_extent_callback (0, X_AXIS
);
163 set_extent_callback (0, Y_AXIS
);
166 set_elt_property ("molecule-callback", SCM_BOOL_T
);