reverse (*ret);
}
+vector<Real>
+Align_interface::get_minimum_translations (Grob *me,
+ vector<Grob*> const &all_grobs,
+ Axis a)
+{
+ return internal_get_minimum_translations (me, all_grobs, a, true, false, 0, 0);
+}
+
+vector<Real>
+Align_interface::get_pure_minimum_translations (Grob *me,
+ vector<Grob*> const &all_grobs,
+ Axis a, int start, int end)
+{
+ return internal_get_minimum_translations (me, all_grobs, a, true, true, start, end);
+}
+
+vector<Real>
+Align_interface::get_minimum_translations_without_min_dist (Grob *me,
+ vector<Grob*> const &all_grobs,
+ Axis a)
+{
+ return internal_get_minimum_translations (me, all_grobs, a, false, false, 0, 0);
+}
+
// If include_fixed_spacing is true, the manually fixed spacings
// induced by stretchable=0 or alignment-distances are included
// in the minimum translations here. If you want to find the minimum
// want to actually lay out the page, then it should be false (or
// else centered dynamics will break when there is a fixed alignment).
vector<Real>
-Align_interface::get_minimum_translations (Grob *me,
- vector<Grob*> const &all_grobs,
- Axis a,
- bool include_fixed_spacing,
- bool pure, int start, int end)
+Align_interface::internal_get_minimum_translations (Grob *me,
+ vector<Grob*> const &all_grobs,
+ Axis a,
+ bool include_fixed_spacing,
+ bool pure, int start, int end)
{
if (!pure && a == Y_AXIS && dynamic_cast<Spanner*> (me) && !me->get_system ())
me->programming_error ("vertical alignment called before line-breaking");
{
extract_grob_set (me, "elements", all_grobs);
- vector<Real> translates = get_minimum_translations (me, all_grobs, a, true, false, 0, 0);
+ vector<Real> translates = get_minimum_translations (me, all_grobs, a);
if (translates.size ())
for (vsize j = 0; j < all_grobs.size (); j++)
all_grobs[j]->translate_axis (translates[j], a);
Align_interface::get_pure_child_y_translation (Grob *me, Grob *ch, int start, int end)
{
extract_grob_set (me, "elements", all_grobs);
- vector<Real> translates = get_minimum_translations (me, all_grobs, Y_AXIS, true, true, start, end);
+ vector<Real> translates = get_pure_minimum_translations (me, all_grobs, Y_AXIS, start, end);
if (translates.size ())
{
#include "std-vector.hh"
#include "grob-interface.hh"
-struct Align_interface
+class Align_interface
{
+public:
DECLARE_SCHEME_CALLBACK (align_to_minimum_distances, (SCM));
DECLARE_SCHEME_CALLBACK (align_to_ideal_distances, (SCM));
static void align_elements_to_minimum_distances(Grob *, Axis a);
static void align_elements_to_ideal_distances(Grob *);
- static vector<Real> get_minimum_translations (Grob *, vector<Grob*> const&,
- Axis a,
- bool include_fixed_spacing,
- bool pure, int start, int end);
+ static vector<Real> get_minimum_translations (Grob *, vector<Grob*> const&, Axis a);
+ static vector<Real> get_minimum_translations_without_min_dist (Grob *, vector<Grob*> const&, Axis a);
+ static vector<Real> get_pure_minimum_translations (Grob *, vector<Grob*> const&,
+ Axis a, int start, int end);
static void set_ordered (Grob *);
static Axis axis (Grob *);
static void add_element (Grob *, Grob *);
DECLARE_GROB_INTERFACE();
static Real get_pure_child_y_translation (Grob *, Grob *child, int start, int end);
+
+protected:
+ static vector<Real> internal_get_minimum_translations (Grob *, vector<Grob*> const&,
+ Axis a,
+ bool include_fixed_spacing,
+ bool pure, int start, int end);
};
#endif /* ALIGN_INTERFACE_HH */
return Interval ();
extract_grob_set (alignment, "elements", staves);
- vector<Real> offsets = Align_interface::get_minimum_translations (alignment, staves, Y_AXIS, true, true, start, end);
+ vector<Real> offsets = Align_interface::get_pure_minimum_translations (alignment, staves, Y_AXIS, start, end);
for (vsize i = 0; i < offsets.size (); ++i)
if (Page_layout_problem::is_spaceable (staves[i]))
return Interval ();
extract_grob_set (alignment, "elements", staves);
- vector<Real> offsets = Align_interface::get_minimum_translations (alignment, staves, Y_AXIS, true, true, start, end);
+ vector<Real> offsets = Align_interface::get_pure_minimum_translations (alignment, staves, Y_AXIS, start, end);
Interval ret;
for (vsize i = 0; i < staves.size (); ++i)