X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fvaticana-ligature.cc;h=ddbe0d86bd2ffa12f3054c5b005cb21c73754d6c;hb=2bbacb364aa29041af9cbbbd32cfad2e8e387cb3;hp=eefe2fe760dc85ae4fa292957d64a0f2db51cbb6;hpb=4ecdbd7d70ca7441be4dddd15ac01cc255bc2a35;p=lilypond.git diff --git a/lily/vaticana-ligature.cc b/lily/vaticana-ligature.cc index eefe2fe760..ddbe0d86bd 100644 --- a/lily/vaticana-ligature.cc +++ b/lily/vaticana-ligature.cc @@ -1,35 +1,43 @@ /* - vaticana-ligature.cc -- implement Vaticana_ligature + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 2003--2015 Juergen Reuter - (c) 2003--2005 Juergen Reuter + LilyPond is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + LilyPond is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with LilyPond. If not, see . */ #include "vaticana-ligature.hh" -#include -using namespace std; - -#include "item.hh" +#include "bezier.hh" #include "font-interface.hh" +#include "international.hh" +#include "item.hh" #include "lookup.hh" -#include "staff-symbol-referencer.hh" #include "note-head.hh" #include "output-def.hh" -#include "bezier.hh" +#include "staff-symbol-referencer.hh" #include "warn.hh" Stencil vaticana_brew_cauda (Grob *me, - int pos, - int delta_pitch, - Real thickness, - Real blotdiameter) + int pos, + int delta_pitch, + Real thickness, + Real blotdiameter) { - bool on_staffline = Staff_symbol_referencer::on_staffline (me, pos); - int interspaces = Staff_symbol_referencer::line_count (me) - 1; - bool above_staff = pos > interspaces; + bool on_staffline = Staff_symbol_referencer::on_line (me, pos); + bool above_staff = pos > Staff_symbol_referencer::staff_span (me)[UP]; if (delta_pitch > -1) { @@ -40,25 +48,25 @@ vaticana_brew_cauda (Grob *me, if (on_staffline) { if (delta_pitch >= -1) - length = 1.30; + length = 1.30; else if (delta_pitch >= -2) - length = 1.35; + length = 1.35; else - length = 1.85; + length = 1.85; } else { if (delta_pitch >= -1) - if (above_staff) - length = 1.30; - else - length = 1.00; + if (above_staff) + length = 1.30; + else + length = 1.00; else if (delta_pitch >= -2) - length = 1.35; + length = 1.35; else if (delta_pitch >= -3) - length = 1.50; + length = 1.50; else - length = 1.85; + length = 1.85; } Box cauda_box (Interval (0, thickness), Interval (-length, 0)); return Lookup::round_filled_box (cauda_box, blotdiameter); @@ -69,8 +77,8 @@ vaticana_brew_cauda (Grob *me, */ Stencil vaticana_brew_flexa (Grob *me, - bool solid, - Real line_thickness) + bool solid, + Real line_thickness) { Real staff_space = Staff_symbol_referencer::staff_space (me); Stencil stencil; @@ -78,12 +86,12 @@ vaticana_brew_flexa (Grob *me, Real interval; SCM flexa_height_scm = me->get_property ("flexa-height"); - if (flexa_height_scm != SCM_EOL) + if (!scm_is_null (flexa_height_scm)) interval = scm_to_int (flexa_height_scm); else { me->warning ("Vaticana_ligature: " - + _ ("flexa-height undefined; assuming 0")); + + _ ("flexa-height undefined; assuming 0")); interval = 0.0; } @@ -98,7 +106,7 @@ vaticana_brew_flexa (Grob *me, */ Real left_height = right_height - + min (0.12 * abs (interval), 0.3) * staff_space; + + min (0.12 * abs (interval), 0.3) * staff_space; /* * Compensate optical illusion regarding vertical position of left @@ -128,7 +136,7 @@ vaticana_brew_flexa (Grob *me, if (solid) { Stencil solid_head - = Lookup::bezier_sandwich (top_curve, bottom_curve); + = Lookup::bezier_sandwich (top_curve, bottom_curve, 0.0); stencil.add_stencil (solid_head); } else // outline @@ -136,13 +144,13 @@ vaticana_brew_flexa (Grob *me, Bezier inner_top_curve = top_curve; inner_top_curve.translate (Offset (0.0, -line_thickness)); Stencil top_edge - = Lookup::bezier_sandwich (top_curve, inner_top_curve); + = Lookup::bezier_sandwich (top_curve, inner_top_curve, 0.0); stencil.add_stencil (top_edge); Bezier inner_bottom_curve = bottom_curve; inner_bottom_curve.translate (Offset (0.0, +line_thickness)); Stencil bottom_edge - = Lookup::bezier_sandwich (bottom_curve, inner_bottom_curve); + = Lookup::bezier_sandwich (bottom_curve, inner_bottom_curve, 0.0); stencil.add_stencil (bottom_edge); /* @@ -154,12 +162,12 @@ vaticana_brew_flexa (Grob *me, * the left end of the bezier curve. */ Box left_edge_box (Interval (0, line_thickness), - Interval (-0.5 * left_height, +0.5 * left_height)); + Interval (-0.5 * left_height, +0.5 * left_height)); Stencil left_edge = Lookup::filled_box (left_edge_box); stencil.add_stencil (left_edge); Box right_edge_box (Interval (-line_thickness, 0), - Interval (-0.5 * right_height, +0.5 * right_height)); + Interval (-0.5 * right_height, +0.5 * right_height)); Stencil right_edge = Lookup::filled_box (right_edge_box); right_edge.translate_axis (width, X_AXIS); right_edge.translate_axis (corrected_interval / 2.0, Y_AXIS); @@ -171,19 +179,19 @@ vaticana_brew_flexa (Grob *me, Stencil vaticana_brew_join (Grob *me, int delta_pitch, - Real join_thickness, Real blotdiameter) + Real join_thickness, Real blotdiameter) { Real staff_space = Staff_symbol_referencer::staff_space (me); if (!delta_pitch) { - me->programming_error (_f ("Vaticana_ligature: " - "zero join (delta_pitch == 0)")); - return Stencil (); + me->programming_error ("Vaticana_ligature: " + "zero join (delta_pitch == 0)"); + return Lookup::blank (Box (Interval (0, 0), Interval (0, 0))); } Interval x_extent = Interval (0, join_thickness); Interval y_extent = (delta_pitch > 0) - ? Interval (0, delta_pitch * 0.5 * staff_space) : // ascending join - Interval (delta_pitch * 0.5 * staff_space, 0); // descending join + ? Interval (0, delta_pitch * 0.5 * staff_space) : // ascending join + Interval (delta_pitch * 0.5 * staff_space, 0); // descending join Box join_box (x_extent, y_extent); return Lookup::round_filled_box (join_box, blotdiameter); } @@ -192,29 +200,29 @@ Stencil vaticana_brew_primitive (Grob *me) { SCM glyph_name_scm = me->get_property ("glyph-name"); - if (glyph_name_scm == SCM_EOL) + if (scm_is_null (glyph_name_scm)) { me->programming_error ("Vaticana_ligature: " - "undefined glyph-name -> ignoring grob"); - return Stencil (); + "undefined glyph-name -> ignoring grob"); + return Lookup::blank (Box (Interval (0, 0), Interval (0, 0))); } - String glyph_name = ly_scm2string (glyph_name_scm); + string glyph_name = ly_scm2string (glyph_name_scm); Stencil out; Real thickness = robust_scm2double (me->get_property ("thickness"), 1); Real line_thickness - = thickness * me->get_layout ()->get_dimension (ly_symbol2scm ("linethickness")); + = thickness * me->layout ()->get_dimension (ly_symbol2scm ("line-thickness")); Real blotdiameter - = (me->get_layout ()->get_dimension (ly_symbol2scm ("blotdiameter"))); + = (me->layout ()->get_dimension (ly_symbol2scm ("blot-diameter"))); int pos = Staff_symbol_referencer::get_rounded_position (me); - SCM delta_pitch_scm = me->get_property ("delta-pitch"); + SCM delta_pitch_scm = me->get_property ("delta-position"); int delta_pitch; - if (delta_pitch_scm != SCM_EOL) + if (!scm_is_null (delta_pitch_scm)) delta_pitch = scm_to_int (delta_pitch_scm); else delta_pitch = 0; @@ -225,7 +233,7 @@ vaticana_brew_primitive (Grob *me) bool add_cauda = to_boolean (me->get_property ("add-cauda")); bool add_join = to_boolean (me->get_property ("add-join")); - if (!String::compare (glyph_name, "")) + if (glyph_name == "") { /* * This is an empty head. This typically applies for the right @@ -237,15 +245,15 @@ vaticana_brew_primitive (Grob *me) Real staff_space = Staff_symbol_referencer::staff_space (me); Real flexa_width = robust_scm2double (me->get_property ("flexa-width"), 2) * staff_space; out - = Lookup::blank (Box (Interval (0, 0.5 * flexa_width), Interval (0, 0))); + = Lookup::blank (Box (Interval (0, 0.5 * flexa_width), Interval (0, 0))); } - else if (!String::compare (glyph_name, "flexa")) + else if (glyph_name == "flexa") out = vaticana_brew_flexa (me, true, line_thickness); else { out - = Font_interface::get_default_font (me)-> - find_by_name ("noteheads." + glyph_name); + = Font_interface::get_default_font (me)-> + find_by_name ("noteheads.s" + glyph_name); } out.translate_axis (x_offset, X_AXIS); Real head_width = out.extent (X_AXIS).length (); @@ -253,16 +261,16 @@ vaticana_brew_primitive (Grob *me) if (add_cauda) { Stencil cauda - = vaticana_brew_cauda (me, pos, delta_pitch, - line_thickness, blotdiameter); + = vaticana_brew_cauda (me, pos, delta_pitch, + line_thickness, blotdiameter); out.add_stencil (cauda); } if (add_stem) { Stencil stem - = vaticana_brew_cauda (me, pos, -1, - line_thickness, blotdiameter); + = vaticana_brew_cauda (me, pos, -1, + line_thickness, blotdiameter); stem.translate_axis (head_width - line_thickness, X_AXIS); out.add_stencil (stem); } @@ -270,7 +278,7 @@ vaticana_brew_primitive (Grob *me) if (add_join) { Stencil join - = vaticana_brew_join (me, delta_pitch, line_thickness, blotdiameter); + = vaticana_brew_join (me, delta_pitch, line_thickness, blotdiameter); join.translate_axis (head_width - line_thickness, X_AXIS); out.add_stencil (join); } @@ -282,7 +290,7 @@ MAKE_SCHEME_CALLBACK (Vaticana_ligature, brew_ligature_primitive, 1); SCM Vaticana_ligature::brew_ligature_primitive (SCM smob) { - Grob *me = unsmob_grob (smob); + Grob *me = unsmob (smob); SCM primitive = vaticana_brew_primitive (me).smobbed_copy (); return primitive; } @@ -294,8 +302,17 @@ Vaticana_ligature::print (SCM) return SCM_EOL; } -ADD_INTERFACE (Vaticana_ligature, "vaticana-ligature-interface", - "A vaticana style gregorian ligature", - "glyph-name flexa-height flexa-width thickness add-cauda " - "add-stem add-join delta-pitch x-offset " - "ligature-primitive-callback"); +ADD_INTERFACE (Vaticana_ligature, + "A vaticana style Gregorian ligature.", + + /* properties */ + "glyph-name " + "flexa-height " + "flexa-width " + "thickness " + "add-cauda " + "add-stem " + "add-join " + "delta-position " + "x-offset " + );