-1.3.53.uu1
-==========
+1.3.54.hwn2
+===========
+
+* Experimental property collapse for most score-elements. (notable
+exceptions: Scripts, pedals). Change all Score_element constructors to
+take a basic-property list. The suffix of a property list may be
+shared by several score-elements, for instance all default G-clefs in
+a score share the following settings
+
+ (breakable . #t)
+ (break-align-symbol . Clef_item)
+ (visibility-lambda . ,begin-of-line-visible)
+
+This should reduce memory usage further.
+
+* Magically fixed the disappearing Lyrics problem.
+
+* Removed used_b_ field from Score_element.
+
+* Massive search-replace patch: store pointers and properties
+separately, in preparation of property collapse.
+
+
+1.3.54
+======
* Bugfix: don't crash on tuplet spanners that don't contain any notes.
-* Small cleanup of Dimension_cache: removed a few redundant
-fields. Slightly lower memory usage. Dimension_cache is now a `dumb'
-struct again.
+* Cleanup of Dimension_cache: removed a few redundant
+fields. Slightly lower memory usage (32 bytes per
+score-element). Dimension_cache is now a `dumb' struct again.
* Add array index to priority field of text scripts to ensure that
order is unique, and sensible.
PACKAGE_NAME=LilyPond
MAJOR_VERSION=1
MINOR_VERSION=3
-PATCH_LEVEL=54
+PATCH_LEVEL=55
MY_PATCH_LEVEL=
# use the above to send patches: MY_PATCH_LEVEL is always empty for a
#include "debug.hh"
#include "all-font-metrics.hh"
-Bar::Bar ()
+Bar::Bar (SCM s)
+ : Item (s)
{
- set_elt_property ("breakable", SCM_BOOL_T);
}
Bar::before_line_breaking ()
{
SCM g = get_elt_property ("glyph");
+ SCM orig = g;
Direction bsd = break_status_dir ();
if (gh_string_p (g))
{
set_elt_property ("transparent", SCM_BOOL_T);
set_extent_callback (0, X_AXIS);
}
- else
+ else if (! gh_equal_p (g, orig))
set_elt_property ("glyph", g);
}
void
Span_bar::add_bar (Score_element*b)
{
- Group_interface gi (this);
+ Pointer_group_interface gi (this);
gi.add_element (b);
add_dependency (b);
Interval
-Span_bar::width_callback (Score_element const *se, Axis a)
+Span_bar::width_callback (Score_element const *se, Axis )
{
Span_bar* s= dynamic_cast<Span_bar*> ((Score_element*)se);
String gl = ly_scm2string (s->get_elt_property ("glyph"));
void
Span_bar::evaluate_empty ()
{
- if (!gh_pair_p (get_elt_property ("elements")))
+ if (!gh_pair_p (get_elt_pointer ("elements")))
{
set_elt_property ("transparent", SCM_BOOL_T);
set_extent_callback (0, X_AXIS);
}
else {
String type_str = ly_scm2string (gl);
+ String orig = type_str;
if (type_str == "|:")
{
type_str= ".|";
{
type_str= ".|.";
}
-
- set_elt_property ("glyph", ly_str02scm (type_str.ch_C()));
+ if (orig != type_str)
+ set_elt_property ("glyph", ly_str02scm (type_str.ch_C()));
}
}
return iv.length ();
}
-Span_bar::Span_bar ()
+Span_bar::Span_bar (SCM s)
+ : Bar (s)
{
- group (this).set_interface ();
+ Pointer_group_interface(this).set_interface ();
set_extent_callback (width_callback, X_AXIS);
// dim_cache_[Y_AXIS]->set_extent_callback (Axis_group_interface::group_extent_callback);