Lomse Library. Log of changes
Version 0.20.0 (1/Sep/2016)
BACKWARDS INCOMPATIBLE CHANGES WITH 0.19.0
- LibraryScope methods 'set_draw_anchors()' and 'draw_anchors()'
have been renamed as 'set_draw_anchor_objects()' and
The spacing algorithm has been replaced. Previous algorithm was scattered
along several objects and was difficult to understand and, therefore, to
modify and to improve. It was first isolated in a single object with a
clear interface, and an abstract class was defined to facilitate
replacement and experimentation with different algorithms in future. Then
a new algorithm, based on Gourlay's approach, was implemented. The new
algorithm is easier to understand and gives more flexibility.
The lines break algorithm was still valid, but the penalty function has
been changed. This improves layout and gives more control and flexibility.
Lyrics are now taken into account for spacing notes, removing the lyrics
layout problems that were present in previous version. The internal model
for lyrics has been replaced by a new model, to allow for better control
of the layout process.
Also additional space between staves is added when lyrics are present.
The solution for vertical staves spacing is provisional and requires more
changes (in study). Nevertheless, in preparation for these changes, the
score layout algorithm have been modified for dealing with systems
with variable height.
Trace and debug options has been added to the library, to facilitate
experimentation and debugging of spacing algorithm and lines breaker
Although in finished scores is normal practice to justify the last system,
there are cases were this is not required or even need to be prevented.
Also, truncation of staff lines after last object is a need in some
cases. Therefore, scenarios for justification and truncation of last
system have been analyzed, and specific options for controlling the
behaviour have been added to the library. Now users can fully control
these aspects. LDP options for this have been reviewed and adapted.
As a consequence, two existing options ('Score.JustifyFinalBarline'
and 'StaffLines.StopAtFinalBarline') have been deprecated and replaced
by two new options ('Score.JustifyLastSystem' and 'StaffLines.Truncate').
For backwards compatibility to prevent undesired changes in existing
scores due to the new algorithms (that is, for ensuring that the visual
appearance of existing LDP scores, mainly for LenMus eBooks, is preserved),
the spacing algorithm parameters have been adjusted. New LDP options
('Render.SpacingOptions' and "Render.SpacingFopt") has been added for
controlling the behaviour of the new spacing algorithm and the lines
breaker algorithm, so that users can have now full control of spacing
and lines breaking algorithm options.
Renderization is improved in several aspects:
- Score titles are now rendered.
- Additional syllables and elision symbols in lyrics are now rendered.
- Added more symbols for fermata.
- Names and brackets/braces for groups of instruments now rendered.
- Barlines for groups now can be joined. Also mensurstrich layout is
- Left barline at start of systems now also drawn in empty scores.
Added support, in LDP, for many music notations: lyrics, articulations
(accents & stress marks), dynamics marks, groups of instruments and
Also several fixes and small changes:
- Fixes for avoiding compilation errors with c++11 compilers.
- Whitespace in text now properly managed in LMD files (issue #42).
- Default styles added to headings, paragraphs and tables (issue #43).
- New system tag now works again (issue #1).
- MusicXML importer now supports part groups.
- Added squared bracket for part groups (group symbol == line)
Version 0.19.0 (2/May/2016)
Continue defining and documenting the public API.
BACKWARDS INCOMPATIBLE CHANGES WITH 0.18.0
Some typos fixed in public members and enum values:
- Constant k_glyph_small_32th_note in enum EGlyphIndex renamed as k_glyph_small_32nd_note
- Constant k_32th in enum ENoteTypes renamed as k_32nd
- Constant k_duration_32th_dotted in enum ENotesDuration renamed as k_duration_32nd_dotted
- Constant k_duration_32th in enum ENotesDuration renamed as k_duration_32nd
- Method Interactor::get_ellapsed_times() renamed as Interactor::get_elapsed_times()
Some methods changed:
- Removed unnecesary parameter in some CmdCursor constructors.
And some methods removed from public API.
Version 0.18.0 (26/Mar/2016)
The public API of Lomse is being defined and documented.
API documentation is available at http://lenmus.github.io/lomse/
BACKWARDS INCOMPATIBLE CHANGES WITH 0.17.20
Version 0.18.0 includes changes for defining the public API of the
This implies that some methods are no longer available in public API.
Also, the API for printing has been reviewed:
- Removed method Interactor::get_page_size_in_pixels().
- Added method Interactor::set_print-ppi().
- Method Interactor::set_printing_buffer() renamed as
- Method Interactor::on_print_page() renamed as Interactor::print_page().
Parameter 'scale' has been removed.
Version 0.17.20 (5/Mar/2016)
Mainly, changes for improving the MusicXML importer, for supporting
more music notation elements and for implementing visual regression tests.
Development moved to GitHub.
BACKWARDS INCOMPATIBLE CHANGES WITH 0.16.1
- Version numbering scheme modified to add build inormation. Patch level
automatically increased with every merge.
- Added method Interactor::get_num_pages() for improving the print API
- The XML parser (rapidxml) has been replaced by pugixml for better
- Line number added to error messages related to XML files, for better
Score layouting improved:
- Fixed bug 80222: Some measures are splitted in two systems
- Fixed bug 80223: lack of space after intermediate barlines
- ColumnsBreaker algorithm reviewed and fixed. More tests added.
Added support for more music notation elements:
- technical notations (just a few)
- dynamics notations
Continue development of MusicXML importer:
- barlines, repetition barlines and barlines at start of measures
- augmentation dots for notes and rests
- full-measure rests
- technical notations (just a few)
- dynamics notations
- derive note type from duration when type not present
Modifications in internal model:
- duration now explicit value for note/rest in internal model
- explicit mark in rests for full measure rests
- orientation flag added to ties, for avoiding having to use a bezier
element for changing default orientation.
- added several classes for supporting the added elements.
- Added engravers and all need objects (glyphs, shapes, etc) for
the new added music notation elements.
- Removed background borders in document images generated for printing.
- CMakeLists.txt build script modified so that library name will be
always 'liblomse', without version numbers.
- CmakeLists.txt build script modified so that by default, the unit
tests runner program (testlib) is always built.
- All tests files reviewed and reorganized for visual regression
tests. Scripts for this created, so that regression tests will now
systematically be run after every library build.
- Added tutorial 1 for using Lomse in Qt applications.
- Fixed all warnings due to 'unused parameter'
Version 0.16.1 (7/Sep/2015)
Mainly, changes for using SMuFL compliant music fonts and for implementing support
for new features required by eBook L3_MusicReading in Phonascus. Some bug fixes.
BACKWARDS INCOMPATIBLE CHANGES WITH 0.15.0
- ImFactory modified to ensure that Id is assigned before the imo is created.
This fixes a design problem causing bug 80211.
- Code modified for using SMuFL compliant music fonts. Default font changed to
Bravura font. LenMus font (lmbasic2.ttf) removed, and from now unsupported.
- Defined default style for metronome marks. Added code for controlling that
default styles are not exported to source code unless they are modified.
- Added support for common time and cut time signatures (LDP language, LdpAnalyser,
LdpExporter, TimeSignatureEngraver, ImoTimeSignature and other related changes).
- Fixed bugs 80213 and 80214 in examples for tutorials
- Score chopin_prelude_v20.lms updated for fixing bug 80212
- Included all note symbols and dots in metronome marks
- Trace levels added to spacing algorithms
- Fixed bug 80215: First goFwd doesn't work properly and notes get overlapped.
- Fixed bug 80217: Stem length in chords incorrectly computed: too long.
- Fixed bug 80216: Fermata in note on second staff is positioned on first staff.
Version 0.15.0 (27/Mar/2015)
Development continues. Mainly changes for supporting document edition. A few backwards
incompatible changes, that will require a couple of fixes in existing code using this
BACKWARDS INCOMPATIBLE CHANGES WITH 0.14.0
- enum EBarlines created.
→ Backwards compatibility: You have to replace all barline constants,
such as "ImoBarline::k_simple" by "k_barline_simple", etc
- The update screen policy has been reviewed and clarified. As a consequence some
changes has been made affecting, mainly, to Interactor class.
→ Backwards compatibility: Interactor::new_viewport() and all Interactor
methods for changing scale and zooming factor, now force a redraw. A third
parameter (bool fForceRedraw=true) has been added to these methods. You can
modify your existing code by specifying fForceRedraw=false for preventing
redraws and keep the old behaviour
- File format parameter added to LomseDorway::new_document() and
PresenterBuilder::new_document() for choosing source code format.
→ Backwards compatibility: You will have to review your code and add
this parameter with value 'Document::k_format_ldp' as that was the
expected format in previous versions.
Version 0.14.0 (3/May/2013)
Fixes to support Chinese language, bug fixes related to multi-threading,
other fixes and some refactoring.
- Version number increased to 0.14.0 due to backwards incompatible API changes.
- Document and Interactor raw pointers are now converted to shared pointers
when ownership is transferred to Presenter.
- All Presenter API raw pointers to Document and to Interactor changed
- All events receive now a weak_ptr to Interactor instead of a raw_ptr so
that code processing event can check if the event is still valid.
- Limitation removed: Time units now represented as double.
- Fixed bug in Ctrol objects: bad font selected for Chinese language.
- Changed GmoShapeText and ImoScoreText to include language .
- PresentersCollection removed: not used and not needed.
- Fixed bug in ColStaffObjs iterator causing problems in destructor.
- ScorePlayerCtrol: changes to use a graphical UI.
- Refactoring: classes RefToGmo and MultiRefToGmo removed (not used).
- Refactoring: GmoShape Id type changed from int to ShapeId.
- Refactoring: ImoObj Id type changed from long to ImoId.
- Refactoring: GmoRef defined. Maps to get Gmo for Imo revised.
- Bug fixed in DefaultTextSplitter causing an infinite loop (app. hangs).
- Bug fixed in ScorePlayer causing occational crashes.
- Bug fixed in Interactor mouse events processing, causing crashes.
- Logger class developped. Logging messages added in many places.
Version 0.13.1 (18/Mar/2013)
Implementing edition (2). Caret and CaretPositioner.
- Version number increased to 0.13.1
- Caret object implemented: a displayable cursor on the document.
- CaretPositioner implemented: responsible for Caret layout and position.
- Interactor/Presented modified to create/own DocCursor & DocCommandExecuter
- GraphicView modified to display Caret
- Interactor: added methods to control Caret state and position
- ScoreCursor: state now includes timepos for ref_obj.
- ScoreCursor: added method to find previous staffobj
- ScoreCursor: added helper methods to test for position type.
- GModel modified for accesing a GmoBox given the id of its creator Imo
- GModel: added helper methods for positioning caret.
Version 0.13.0 (17/Feb/2013)
Implementing edition commands (1). Refactoring and required functionality.
Version 0.12.5 (24/Nov/2012)
- Added public method GmoShapeImage::set_image().
- Added progress bar control (class ProgressBarCtrl).
- Bug fixed: background color doesn't change if a different color specified.
Version 0.12 (7/Sep/2012)
- TextSplitter class added, to support different languages.
- Language and font-file tags added to LDP and LMD analysers.
- Added default font for Chinese.
- Added Metronome class.
- Added CheckboxCtrl class.
- Changes in PlayerGui class. Defined PlayerNoGui class.
- Changes for allowing customization of ScorePlayerCtrl at Lomse initialization.
- Changes in ScorePlayer for better usage of PlayerGui.
- Fixed bug in ScorePlayerCtrol, preventing labels translation.
- ScorePlayer::quit() method added, to avoid problems during user application quit.
- Added method LomseDoorway::set_default_fonts_path() so that applications linking Lomse statically can inform Lomse about the path where default fonts are located.
- Initial public release, used in Phonascus 5.0 beta for Linux.