[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: use X-parents to align MMRNumbers, MMRTexts and PercentRepeatCounter
From: |
janek . lilypond |
Subject: |
Re: use X-parents to align MMRNumbers, MMRTexts and PercentRepeatCounters (issue 108110045 by address@hidden) |
Date: |
Tue, 24 Jun 2014 06:32:58 +0000 |
Reviewers: Keith,
Message:
On 2014/06/24 05:42:36, Keith wrote:
looks good, and logical.
Yay! Thanks :)
Description:
use X-parents to align MMRNumbers, MMRTexts and PercentRepeatCounters
It makes more sense to use X-parents than Y-parents for horizontal
alignment. To be able to do this, we have to ensure that X-parents of
MultiMeasureRestNumber, MultiMeasureRestText and PercentRepeatCounter
won't be overwritten by set_bound (these grobs are spanners). We can
do this because parents of these grobs are spanners as well.
Expected changes in output: none.
Please review this at https://codereview.appspot.com/108110045/
Affected files (+18, -13 lines):
M lily/include/self-alignment-interface.hh
M lily/multi-measure-rest-engraver.cc
M lily/percent-repeat-engraver.cc
M lily/self-alignment-interface.cc
M lily/spanner.cc
M scm/define-grobs.scm
Index: lily/include/self-alignment-interface.hh
diff --git a/lily/include/self-alignment-interface.hh
b/lily/include/self-alignment-interface.hh
index
2b34b39eff78b1dd47b09d10b66c54c8555e86bc..823556a4c2f7ac30ec930927955423b958faf19d
100644
--- a/lily/include/self-alignment-interface.hh
+++ b/lily/include/self-alignment-interface.hh
@@ -41,7 +41,6 @@ struct Self_alignment_interface
DECLARE_SCHEME_CALLBACK (centered_on_note_columns, (SCM element));
DECLARE_SCHEME_CALLBACK (centered_on_x_parent, (SCM element));
DECLARE_SCHEME_CALLBACK (centered_on_y_parent, (SCM element));
- DECLARE_SCHEME_CALLBACK (x_centered_on_y_parent, (SCM element));
DECLARE_SCHEME_CALLBACK (aligned_on_x_parent, (SCM element));
DECLARE_SCHEME_CALLBACK (aligned_on_y_parent, (SCM element));
};
Index: lily/multi-measure-rest-engraver.cc
diff --git a/lily/multi-measure-rest-engraver.cc
b/lily/multi-measure-rest-engraver.cc
index
9f460dd981871ea7ab640838d49b5dc71aaf1dd1..3b968e654f87a2c5f3276d4426929e4140df9a9e
100644
--- a/lily/multi-measure-rest-engraver.cc
+++ b/lily/multi-measure-rest-engraver.cc
@@ -146,6 +146,7 @@ Multi_measure_rest_engraver::process_music ()
{
Side_position_interface::add_support (numbers_[i], mmrest_);
numbers_[i]->set_parent (mmrest_, Y_AXIS);
+ numbers_[i]->set_parent (mmrest_, X_AXIS);
}
start_measure_
Index: lily/percent-repeat-engraver.cc
diff --git a/lily/percent-repeat-engraver.cc
b/lily/percent-repeat-engraver.cc
index
008081f138f4ee897e2814cf062d04d9292801ac..98d840e0c72c2a13dd104975fef39f836e16f2f3
100644
--- a/lily/percent-repeat-engraver.cc
+++ b/lily/percent-repeat-engraver.cc
@@ -133,6 +133,7 @@ Percent_repeat_engraver::process_music ()
percent_counter_->set_bound (LEFT, col);
Side_position_interface::add_support (percent_counter_,
percent_);
percent_counter_->set_parent (percent_, Y_AXIS);
+ percent_counter_->set_parent (percent_, X_AXIS);
}
else
percent_counter_ = 0;
Index: lily/self-alignment-interface.cc
diff --git a/lily/self-alignment-interface.cc
b/lily/self-alignment-interface.cc
index
e0b7f00cb2887fc6e1c1e9afd194aa0045f86e5d..36fbfdb7c200b70789078fc3930e4d6b502e9c56
100644
--- a/lily/self-alignment-interface.cc
+++ b/lily/self-alignment-interface.cc
@@ -107,13 +107,6 @@ Self_alignment_interface::centered_on_y_parent (SCM
smob)
return centered_on_object (unsmob_grob (smob)->get_parent (Y_AXIS),
Y_AXIS);
}
-MAKE_SCHEME_CALLBACK (Self_alignment_interface, x_centered_on_y_parent, 1);
-SCM
-Self_alignment_interface::x_centered_on_y_parent (SCM smob)
-{
- return centered_on_object (unsmob_grob (smob)->get_parent (Y_AXIS),
X_AXIS);
-}
-
MAKE_SCHEME_CALLBACK (Self_alignment_interface, aligned_on_x_parent, 1);
SCM
Self_alignment_interface::aligned_on_x_parent (SCM smob)
Index: lily/spanner.cc
diff --git a/lily/spanner.cc b/lily/spanner.cc
index
5d0485f46e4007bc519a242415957a90fc02e92e..7c36f1755b5701a45d2ea42aea9b7b0bf7a60963
100644
--- a/lily/spanner.cc
+++ b/lily/spanner.cc
@@ -183,6 +183,10 @@ Spanner::get_bound (Direction d) const
/*
Set the items that this spanner spans. If D == LEFT, we also set the
X-axis parent of THIS to S.
+
+ For example, when a slur crosses a line break, it's broken into two
+ pieces. The second piece shouldn't be positioned relative to the
+ original NoteColumn, but rather to the PaperColumn after the break.
*/
void
Spanner::set_bound (Direction d, Grob *s)
@@ -200,7 +204,14 @@ Spanner::set_bound (Direction d, Grob *s)
We check for System to prevent the column -> line_of_score
-> column -> line_of_score -> etc situation */
if (d == LEFT && !dynamic_cast<System *> (this))
- set_parent (i, X_AXIS);
+ /*
+ If the X-parent is a spanner, it will be split across linebreaks,
too,
+ so we shouldn't have to overwrite it with the bound. Also, we need
+ original parent for alignment.
+ This happens e.g. for MultiMeasureRestNumbers and
PercentRepeatCounters.
+ */
+ if (!dynamic_cast <Spanner *> (this->get_parent (X_AXIS)))
+ set_parent (i, X_AXIS);
/*
Signal that this column needs to be kept alive. They need to be
Index: scm/define-grobs.scm
diff --git a/scm/define-grobs.scm b/scm/define-grobs.scm
index
62473075ded4b03a25a147420bd720e27fd34a0a..aa3e605aeb60423810836df9cbdf49cf70badc37
100644
--- a/scm/define-grobs.scm
+++ b/scm/define-grobs.scm
@@ -787,7 +787,7 @@
(X-offset . ,(ly:make-simple-closure
`(,+
,(ly:make-simple-closure
- (list
ly:self-alignment-interface::centered-on-y-parent))
+ (list
ly:self-alignment-interface::centered-on-x-parent))
,(ly:make-simple-closure
(list
ly:self-alignment-interface::x-aligned-on-self)))))
(Y-offset . ,side-position-interface::y-aligned-side)
@@ -1546,7 +1546,7 @@
,(ly:make-simple-closure
(list
ly:self-alignment-interface::x-aligned-on-self))
,(ly:make-simple-closure
- (list
ly:self-alignment-interface::x-centered-on-y-parent)))))
+ (list
ly:self-alignment-interface::centered-on-x-parent)))))
(Y-offset . ,side-position-interface::y-aligned-side)
(vertical-skylines . ,grob::unpure-vertical-skylines-from-stencil)
(Y-extent . ,grob::always-Y-extent-from-stencil)
@@ -1570,7 +1570,7 @@
(X-offset . ,(ly:make-simple-closure
`(,+
,(ly:make-simple-closure
- (list
ly:self-alignment-interface::x-centered-on-y-parent))
+ (list
ly:self-alignment-interface::centered-on-x-parent))
,(ly:make-simple-closure
(list
ly:self-alignment-interface::x-aligned-on-self)))))
(Y-offset . ,side-position-interface::y-aligned-side)
@@ -1777,7 +1777,7 @@
(X-offset . ,(ly:make-simple-closure
`(,+
,(ly:make-simple-closure
- (list
ly:self-alignment-interface::x-centered-on-y-parent))
+ (list
ly:self-alignment-interface::centered-on-x-parent))
,(ly:make-simple-closure
(list
ly:self-alignment-interface::x-aligned-on-self)))))
(Y-offset . ,side-position-interface::y-aligned-side)
- Re: use X-parents to align MMRNumbers, MMRTexts and PercentRepeatCounters (issue 108110045 by address@hidden),
janek . lilypond <=