- /* we simulate positioning-done if we are the child of a VerticalAlignment */
- Grob *p = get_parent (Y_AXIS);
- Real trans = 0;
- if (Align_interface::has_interface (p))
- trans = Align_interface::get_pure_child_y_translation (p, this, start, end);
+ /* we simulate positioning-done if we are the child of a VerticalAlignment,
+ but only if we don't have a cached offset. If we do have a cached offset,
+ it probably means that the Alignment was fixed and it has already been
+ calculated.
+ */
+ if (Grob *p = get_parent (Y_AXIS))
+ {
+ Real trans = 0;
+ if (Align_interface::has_interface (p) && !dim_cache_[Y_AXIS].offset_)
+ trans = Align_interface::get_pure_child_y_translation (p, this, start, end);