]> git.donarmstrong.com Git - lilypond.git/commitdiff
* lily/pointer-group-interface.cc (set_ordered): new function.
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Thu, 16 Mar 2006 14:39:46 +0000 (14:39 +0000)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Thu, 16 Mar 2006 14:39:46 +0000 (14:39 +0000)
(add_unordered_grob): new function.

* lily/grob-array.cc (Grob_array): grob-arrays are always assumed
to ordered, unless the opposite has been proved.  This fixes
random reordering of large object groups across linebreaks,
eg. beams.

49 files changed:
ChangeLog
input/typography-demo.ly
lily/axis-group-engraver.cc
lily/axis-group-interface.cc
lily/grob-array.cc
lily/hara-kiri-group-spanner.cc
lily/include/pointer-group-interface.hh
lily/instrument-name-engraver.cc
lily/ledger-line-engraver.cc
lily/ottava-engraver.cc
lily/pointer-group-interface.cc
lily/separating-group-spanner.cc
lily/side-position-interface.cc
lily/vertically-spaced-context-engraver.cc
ly/Welcome_to_LilyPond.ly
ly/accordion-defs-init.ly
ly/bagpipe.ly
ly/catalan.ly
ly/chord-modifiers-init.ly
ly/declarations-init.ly
ly/deutsch.ly
ly/drumpitch-init.ly
ly/dynamic-scripts-init.ly
ly/english.ly
ly/engraver-init.ly
ly/espanol.ly
ly/generate-documentation.ly
ly/generate-interface-doc-init.ly
ly/grace-init.ly
ly/gregorian-init.ly
ly/init.ly
ly/italiano.ly
ly/midi-init.ly
ly/music-functions-init.ly
ly/nederlands.ly
ly/norsk.ly
ly/paper-defaults.ly
ly/params-init.ly
ly/performer-init.ly
ly/portugues.ly
ly/property-init.ly
ly/scale-definitions-init.ly
ly/script-init.ly
ly/spanners-init.ly
ly/suomi.ly
ly/svenska.ly
ly/titling-init.ly
ly/vlaams.ly
python/convertrules.py

index fc2e6fccb854f66172944a0dd220f7a5ce7ce9e0..854f5bb89d0415b564523a179c646e8b0fe10aae 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
 2006-03-16  Han-Wen Nienhuys  <hanwen@xs4all.nl>
 
+       * lily/pointer-group-interface.cc (set_ordered): new function. 
+       (add_unordered_grob): new function.
+
+       * lily/grob-array.cc (Grob_array): grob-arrays are always assumed
+       to ordered, unless the opposite has been proved.  This fixes
+       random reordering of large object groups across linebreaks,
+       eg. beams.
+
        * lily/main.cc (do_chroot_jail): printf format fix.
 
        * lily/tie-formatting-problem.cc (generate_configuration):
@@ -40,7 +48,7 @@
 
 2006-03-14  Graham Percival  <gpermus@gmail.com>
 
-       * Documentaiton/user/global.itely: small fix from mailist.
+       * Documentation/user/global.itely: small fix from mailist.
 
 2006-03-14  Mats Bengtsson  <mabe@drongo.s3.kth.se>
 
index fd92803c6fc0543ff640e417b8998a070db4adb4..8dfc39302c242a6293da21c050a30454963c0082 100644 (file)
@@ -8,7 +8,7 @@ heavily mutilated Edition Peters Morgenlied by Schubert"
 
 }
 
-\version "2.7.32"
+\version "2.7.39"
 
 ignoreMelisma =        \set ignoreMelismata = ##t
 ignoreMelismaOff = \unset ignoreMelismata 
index b582fa417f43f1de177018ca17a463a67c4c6a53..fc4cc7b9a432fbadf9eb737ccee8822f5c8c1294 100644 (file)
@@ -9,6 +9,7 @@
 #include "axis-group-engraver.hh"
 
 #include "axis-group-interface.hh"
+#include "pointer-group-interface.hh"
 #include "context.hh"
 #include "international.hh"
 #include "spanner.hh"
@@ -50,6 +51,8 @@ Axis_group_engraver::finalize ()
     {
       Grob *it = unsmob_grob (get_property ("currentCommandColumn"));
       staffline_->set_bound (RIGHT, it);
+
+      Pointer_group_interface::set_ordered (staffline_, ly_symbol2scm ("elements"), false);
     }
 }
 
@@ -101,5 +104,9 @@ ADD_TRANSLATOR (Axis_group_engraver,
                /* doc */ "Group all objects created in this context in a VerticalAxisGroup spanner.",
                /* create */ "VerticalAxisGroup",
                /* accept */ "",
-               /* read */ "verticalExtent minimumVerticalExtent extraVerticalExtent",
+               /* read */
+               "verticalExtent "
+               "minimumVerticalExtent "
+               "extraVerticalExtent ",
+
                /* write */ "");
index b13eecd868d33c684e74cca529a3732aa8f650f0..d590813abf5cedab94f4b9dd1df4582341ad3ca0 100644 (file)
@@ -33,6 +33,8 @@ Axis_group_interface::add_element (Grob *me, Grob *e)
                              me->self_scm ());
     }
 
+  /* must be ordered, because Align_interface also uses
+     Axis_group_interface  */
   Pointer_group_interface::add_grob (me, ly_symbol2scm ("elements"), e);
 }
 
index 1656fc821f44e4813e806c2ea0dcb3b1ae189307..7b462cbba241faed09cabda115c9c24cf71ad5b5 100644 (file)
@@ -26,7 +26,7 @@ Grob_array::spanner (vsize i)
 
 Grob_array::Grob_array ()
 {
-  ordered_ = false;
+  ordered_ = true;
 }
 
 vector<Grob*> &
index 3a686dfcf03974481f0f4ccb174c83544b8dad6e..981639c237d81db41dc4f37ca5354a38a8f2bba9 100644 (file)
@@ -88,7 +88,7 @@ Hara_kiri_group_spanner::force_hara_kiri_in_y_parent_callback (SCM smob)
 void
 Hara_kiri_group_spanner::add_interesting_item (Grob *me, Grob *n)
 {
-  Pointer_group_interface::add_grob (me, ly_symbol2scm ("items-worth-living"), n);
+  Pointer_group_interface::add_unordered_grob (me, ly_symbol2scm ("items-worth-living"), n);
 }
 
 ADD_INTERFACE (Hara_kiri_group_spanner, "hara-kiri-group-interface",
index 52adf53942380b97c6d8914ddd5b25a642075b58..4238871b8e36cb1c61bd9909248db36007eb9e6b 100644 (file)
@@ -19,6 +19,9 @@ public:
   static int count (Grob *, SCM);
   static void add_grob (Grob *, SCM nm, Grob *e);
   static void add_grob (Grob *, SCM nm, SCM x);
+  static void add_unordered_grob (Grob *, SCM nm, Grob *);
+  static void set_ordered (Grob *, SCM, bool);
+  static Grob_array *get_grob_array (Grob*, SCM);
 };
 
 vector<Grob*> const &internal_extract_grob_array (Grob const *elt, SCM symbol);
index 5320dfd5f77bb8d7403624b0c7614bc1403cec14..f3f1d9018563401749235d16a143c62c8472e328 100644 (file)
@@ -82,6 +82,8 @@ Instrument_name_engraver::finalize ()
     {
       text_spanner_->set_bound (RIGHT,
                                unsmob_grob (get_property ("currentCommandColumn")));
+
+      Pointer_group_interface::set_ordered (text_spanner_, ly_symbol2scm ("elements"), false);
     }
 }
 
index 1cd6e9671474e2c84ced499cd8c05066a6bee0ee..770eb02e14bc52de884a5a7c969c3d1702dc5d24 100644 (file)
@@ -62,6 +62,7 @@ Ledger_line_engraver::stop_spanner ()
   if (span_)
     {
       span_->set_bound (RIGHT, unsmob_grob (get_property ("currentCommandColumn")));
+      Pointer_group_interface::set_ordered (span_, ly_symbol2scm ("elements"), false);
       span_ = 0;
     }
 }
index 4b430b3882c87f45332303f18bae57ae87514cf1..9a6230ee8c8982c074fe54eafea34d17c56a16f5 100644 (file)
@@ -124,7 +124,9 @@ Ottava_spanner_engraver::finalize ()
 }
 
 #include "translator.icc"
+
 ADD_ACKNOWLEDGER (Ottava_spanner_engraver, note_column);
+
 ADD_TRANSLATOR (Ottava_spanner_engraver,
                /* doc */ "Create a text spanner when the ottavation property changes..",
                /* create */ "OttavaBracket",
index 6366fb1fa12caa323f6770f3db87d15e96de019a..1ab1d02c6e8f73d8d36924d1dcf8d3cb2091c21b 100644 (file)
@@ -27,7 +27,14 @@ Pointer_group_interface::add_grob (Grob *me, SCM sym, SCM p)
 }
 
 void
-Pointer_group_interface::add_grob (Grob *me, SCM sym, Grob *p)
+Pointer_group_interface::set_ordered (Grob *me, SCM sym, bool ordered)
+{
+  Grob_array *arr = get_grob_array (me, sym);
+  arr->set_ordered (ordered);
+}
+
+Grob_array *
+Pointer_group_interface::get_grob_array (Grob *me, SCM sym)
 {
   SCM scm_arr = me->internal_get_object (sym);
   Grob_array *arr = unsmob_grob_array (scm_arr);
@@ -37,7 +44,22 @@ Pointer_group_interface::add_grob (Grob *me, SCM sym, Grob *p)
       arr = unsmob_grob_array (scm_arr);
       me->internal_set_object (sym, scm_arr);
     }
+  return arr;
+}
+
+void
+Pointer_group_interface::add_grob (Grob *me, SCM sym, Grob *p)
+{
+  Grob_array *arr = get_grob_array (me, sym);
+  arr->add (p);
+}
+
+void
+Pointer_group_interface::add_unordered_grob (Grob *me, SCM sym, Grob *p)
+{
+  Grob_array *arr = get_grob_array (me, sym);
   arr->add (p);
+  arr->set_ordered (false);
 }
 
 static vector<Grob*> empty_array;
index 944b08fdc025a59722ae41b76548a40c6c522d15..5ef9038dfbc3859c1377da7368c658b4db08b855 100644 (file)
@@ -106,7 +106,7 @@ Separating_group_spanner::set_spacing_rods (SCM smob)
 void
 Separating_group_spanner::add_spacing_unit (Grob *me, Item *i)
 {
-  Pointer_group_interface::add_grob (me, ly_symbol2scm ("elements"), i);
+  Pointer_group_interface::add_unordered_grob (me, ly_symbol2scm ("elements"), i);
 }
 
 ADD_INTERFACE (Separating_group_spanner, "separation-spanner-interface",
index 97c83b0f6554faa79efa153305f11c2d94c9fbe1..4964c475727014e80f3795faaaa438ef1288786c 100644 (file)
@@ -26,7 +26,7 @@ using namespace std;
 void
 Side_position_interface::add_support (Grob *me, Grob *e)
 {
-  Pointer_group_interface::add_grob (me, ly_symbol2scm ("side-support-elements"), e);
+  Pointer_group_interface::add_unordered_grob (me, ly_symbol2scm ("side-support-elements"), e);
 }
 
 Direction
index 9fa0f172f1800894e97d6026a06a74ef63d5d665..d00433051eefd37f561b7644cbbb7196e13d4dd0 100644 (file)
@@ -45,9 +45,9 @@ Vertically_spaced_contexts_engraver::acknowledge_vertically_spaceable (Grob_info
       if (scm_memq (ly_symbol2scm (orig->context_name ().c_str ()),
                    spaceable) != SCM_BOOL_F)
        {
-         Pointer_group_interface::add_grob (system_,
-                                            ly_symbol2scm ("spaceable-staves"),
-                                            gi.grob ());
+         Pointer_group_interface::add_unordered_grob (system_,
+                                                      ly_symbol2scm ("spaceable-staves"),
+                                                      gi.grob ());
        }
     }
 }
index 21f7475c01bc5ba8db9124e751bc0898b537374e..a9643238fb43f91f11e311d777ab8df105abfd15 100644 (file)
@@ -31,4 +31,4 @@ That's it.  For more information, visit http://lilypond.org .
 }
 
 
-\version "2.7.36"  % necessary for upgrading to future LilyPond versions.
+\version "2.7.39"  % necessary for upgrading to future LilyPond versions.
index 3167a35faa7a2afcfe7a2e0c6cc0176b6f051f38..75f7d518d6f0b8921d13c86ae25debe45e6f7024 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.7.36"
+\version "2.7.39"
 % Symbols needed to print accordion music
 % 
 %  2' = T
index d3794ba34ec1698b33aff06cc099d91adca18430..edced01ded43d093afbf04609aad6f2b06f245c7 100755 (executable)
@@ -6,10 +6,10 @@
   Sven Axelsson, the Murray Pipes & Drums of Gothenburg
   (http://www.murrays.nu)
   
-  $Id: bagpipe.ly,v 1.11 2006/03/16 13:28:24 hanwen Exp $
+  $Id: bagpipe.ly,v 1.12 2006/03/16 14:39:46 hanwen Exp $
 %}
 
-\version "2.7.36"
+\version "2.7.39"
 
 % Notes of the scale of the Great Highland Bagpipe. Extra high notes for bombarde.
 % Flat notes used mainly in some modern music.
index 3eb707988d1d9e1c7e084408bbe5356f8ff45759..01c7fd5f2a3ff34187e4929fe954e210984e3771 100644 (file)
@@ -74,6 +74,6 @@ pitchnamesCatalan = #`(
 
 pitchnames = \pitchnamesCatalan
 
-\version "2.7.36"
+\version "2.7.39"
 
 #(ly:parser-set-note-names parser pitchnames)
index eaa843f7f46bb4dee11dedddbc0dca5e97c45e8d..24a02b95eca37c7e8b33544b6ba7b7ed126f89ca 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.7.36"
+\version "2.7.39"
 
 chordmodifiers = #default-chord-modifier-list
 
index 629b86169ae8f89c6a4b96140f33797870f1fe47..f60c9f4578ba2004ecfe1bbebffe7aefc4711291 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.7.36"
+\version "2.7.39"
 
 %% < 1.8 compatibility switch
 #(ly:set-option 'old-relative)
index 13c45c00c168b6887b95a004d1f04a1886760a13..b9f619951f585cee225b980eac41210f9fa92039 100644 (file)
@@ -63,6 +63,6 @@ pitchnamesDeutsch = #`(
 
 pitchnames = \pitchnamesDeutsch
 
-\version "2.7.36"
+\version "2.7.39"
 
 #(ly:parser-set-note-names parser pitchnames)
index 43ebbebe705bcce0a53cfab4ec73718b51e625c3..df947ead4dd9d210e19f51bdecac3d101beaeadf 100644 (file)
@@ -1,5 +1,5 @@
 
-\version "2.7.36"
+\version "2.7.39"
 
 drumPitchNames =
 #'((acousticbassdrum . acousticbassdrum)
index c04e909ac6d236e1c931f2dd2f3476ea43673c1b..a0686e2e9a3d722616a70a20e935c8dff097d369 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.7.36"
+\version "2.7.39"
 
 %
 % declare the standard dynamic identifiers.
index 759771d59b296881d74cb569701470cf48828632..67820fffb5d14103592125d55c1fe8db99d409d2 100644 (file)
@@ -87,7 +87,7 @@ pitchnamesEnglish = #`(
 
 pitchnames = \pitchnamesEnglish
 
-\version "2.7.36"
+\version "2.7.39"
 
 
 #(ly:parser-set-note-names parser pitchnames)
index 0d213efe7f43f8babbf752b2d2f33fb34a23a985..59f8d7c0eb4ffa0a6be05cd40ab75a9142e58995 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.7.36"
+\version "2.7.39"
 
 \context {
   \name "Global"
index 8b15b99f5acb741ad48e09f8fa036f94db09bdc5..b1cd2e71a9b411e83dc616fbb4d3249a99b6f64d 100644 (file)
@@ -58,6 +58,6 @@ pitchnamesEspanol = #`(
 
 pitchnames = \pitchnamesEspanol
 
-\version "2.7.36"
+\version "2.7.39"
 
 #(ly:parser-set-note-names parser pitchnames)
index 0d21d8423641d20dcb54b9c82d23ea599b578690..ebb1ce8f7fc39482525fd04c537d190ee1a6ae3b 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.7.36"
+\version "2.7.39"
 
 %
 % Running LilyPond on this file generates the documentation
index 73c8c9d9350b5ecae0dec4512c038d284273c4b4..8f090349e3da3e3b4a55dcbf47ea8a4f13cfd96b 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.7.36"
+\version "2.7.39"
 
 %
 % Running LilyPond on this file generates the short interface doc
index dec071f21528c1fc95402efad9f57d64ecb08f72..0f31f45815c89e8c28b29ad119c4fd2c98f1b75c 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.7.36"
+\version "2.7.39"
 
 
 startGraceMusic =  {
index fccaa43b45071dac87c04deee1d87815696f0752..2719813e92ce59d54af803a675e16d3938800756 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.7.36"
+\version "2.7.39"
 
 %%%%%%%%
 %%%%%%%% shortcuts common for all styles of gregorian chant notation
index 24e53f8baa956514485c7fbed61c4615f11650c6..71633013a6b3ede8bee6b484a9a0d23a804c6f8d 100644 (file)
@@ -7,7 +7,7 @@
 #(define-public midi-debug  #f)
 
 
-\version "2.7.36"
+\version "2.7.39"
 
 \include "declarations-init.ly"
 
index ae7e6e8815e9aab189301aa411edde256b185ea3..e7ae81ec153f7007b5eff4eff329c412eb8c29a1 100644 (file)
@@ -86,6 +86,6 @@ pitchnamesItaliano = #`(
 
 pitchnames = \pitchnamesItaliano
 
-\version "2.7.36"
+\version "2.7.39"
 
 #(ly:parser-set-note-names parser pitchnames)
index 1c55a3eeb2b4e3e4f6211fb72b13660e70b72d75..a2a65b51cdb5ed3229da2dbe37cccdd3c941c8f0 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.7.36"
+\version "2.7.39"
 \midi {
         \tempo 4=60
        \include "performer-init.ly"
index d096f1094ae1cca74dee1075d0df319bc03d4b08..a76b9286034cac7f2cb1c33c9391a4fea129b376 100644 (file)
@@ -1,6 +1,6 @@
 % -*-Scheme-*-
 
-\version "2.7.36"
+\version "2.7.39"
 
 %% need SRFI-1 filter 
 
index 1871daed0225e0646c359d926775dc2860125a6d..5ede11b8af57b743d5e84908dffc94b6099aa2be 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.7.36"
+\version "2.7.39"
 %{
  common dutch names for notes. es means flat, is means sharp
 
index cb96886152c5684cddcac42d865863c896ed3aaa..fe633d24fb6e1b86ba4852da40c9c935163763bc 100644 (file)
@@ -105,6 +105,6 @@ pitchnamesNorsk = #`(
 
 pitchnames =\pitchnamesNorsk
 
-\version "2.7.36"
+\version "2.7.39"
 
 #(ly:parser-set-note-names parser pitchnames)
index 94f5ea6a6df6713e86bf3dc951d5963abe076832..41c846feaba445f170dfbea38b6d4bae1bd8084c 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.7.36"
+\version "2.7.39"
 
 \paper {
 
index 90d21ecce23de06d887bd3db339d950d3aa13af5..f4f62b0e02180e1d9f8f371bfbf1e0934eabc1f7 100644 (file)
@@ -1,2 +1,2 @@
-\version "2.7.36"
+\version "2.7.39"
 
index 538a8ea2948b61e32217630dbc586d41afc6020a..d22c42277531198414fcad979d63ea8ef534905a 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.7.36"
+\version "2.7.39"
 
 %%
 %% setup for Request->Element conversion. 
index f4477b1db1c5fe9d00f062f103e192e13d5816b0..7f174c3bb8c3ff268ef09ebc8c16b16ff01709c6 100644 (file)
@@ -86,6 +86,6 @@ pitchnamesPortuguese = #`(
 
 pitchnames = \pitchnamesPortuguese
 
-\version "2.7.36"
+\version "2.7.39"
 
 #(ly:parser-set-note-names parser pitchnames)
index c672a75e1da696693f438ddd834a1d11ccfa29b2..73c3357d7cec2412962cd8d0aa97b042cd6bef6a 100644 (file)
@@ -1,6 +1,6 @@
 % property-init.ly
 
-\version "2.7.36"
+\version "2.7.39"
 
 stemUp = \override Stem  #'direction = #UP
 stemDown = \override Stem  #'direction = #DOWN 
index 3bbcb2cfcfcf23cf52263d94405c7587c94a811e..1ca80b100487ad182e7be680375af3f4cf9ba050 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.7.36"
+\version "2.7.39"
 
 
 major = #`(
index 38ae4547f5412d2fbfc8aabfa997d0a85ecc7cd2..68d4de9d9a827f1daf2f80791fcec41b0210eb59 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.7.36"
+\version "2.7.39"
 
 
 % code char abbreviations
index ab810296a2fe1706f13d2e5d5bb7659ebbc2c86a..d2493903c99f186582b674e26fe3e1c6718505ed 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.7.36"
+\version "2.7.39"
 
 startGroup = #(make-span-event 'NoteGroupingEvent START)
 stopGroup = #(make-span-event 'NoteGroupingEvent STOP)
index 74af495aedf64507f9afd1a23e5a0008f2d5e890..1cdf637b8b4ec8aabaa8354f94cb26575158f289 100644 (file)
@@ -48,6 +48,6 @@ pitchnamesSuomi = #`(
 
 pitchnames = \pitchnamesSuomi
 
-\version "2.7.36"
+\version "2.7.39"
 
 #(ly:parser-set-note-names parser pitchnames)
index e2a2c478a5e0bc115305d96de660c14f8aa1293a..4c07f68680eea0972891b755a4e3011cd60ec1d7 100644 (file)
@@ -42,6 +42,6 @@ pitchnamesSvenska = #`(
 )
 
 pitchnames = \pitchnamesSvenska
-\version "2.7.36"
+\version "2.7.39"
 
 #(ly:parser-set-note-names parser pitchnames)
index fff502214115adc373803b074947389d581f0b9c..26bca808c8f19cb8faf78e0ea5dad23c45b3fda6 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.7.36"
+\version "2.7.39"
 
 slashSeparator = \markup {
   \hcenter
index 7020954b551a59d04c83e4b7b746bb25a7569c61..7207ea964a1baf2d855b68b1f9a0c0e869d5c98a 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.7.36" %hier stond 2.1.36, mocht ik dat wel veranderen?
+\version "2.7.39" %hier stond 2.1.36, mocht ik dat wel veranderen?
 
 %{
 
index 457616e0dd3dea18c28ea73ce95f0ba268937510..0fa0cdae7ba5d95ba227f5d224198f6e496c0f65 100644 (file)
@@ -2760,6 +2760,7 @@ conversions.append (((2, 7, 32), conv,
                     """debug-beam-quanting -> debug-beam-scoring"""))
 
 
+
 def conv (str):
        str = re.sub ('def-music-function', 'define-music-function', str)
        str = re.sub ('def-markup-command', 'define-markup-command', str)
@@ -2767,3 +2768,7 @@ def conv (str):
 
 conversions.append (((2, 7, 36), conv,
                    """def-(music-function|markup-command) -> define-(music-function|markup-command)"""))
+
+
+conversions.append (((2, 7, 39), lambda x: x,
+                   "Minimum version for 2.8"))