Skip to main content

LayoutResult

Struct LayoutResult 

Source
pub struct LayoutResult {
    pub vis_slots: Vec<usize>,
    pub rows: Vec<RowLayout>,
    pub spans: Vec<SpanMark>,
    pub concert_key_overrides: Vec<ConcertKeyOverride>,
    pub beam_groups: Vec<BeamGroup>,
    pub tuplet_groups: Vec<TupletGroup>,
    pub courtesy_accidentals: Vec<CourtesyAccidental>,
    pub accidentals: Vec<AccidentalMark>,
}
Expand description

The result of a layout pass.

Fields§

§vis_slots: Vec<usize>

Maps each visual column index to a physical measure index.

Each entry vis_slots[v] is the physical measure index for visual column v. Non-multi-rest measures each contribute exactly one entry. A measure with multi_rest_count = N contributes N consecutive entries all equal to that measure’s physical index.

Therefore vis_slots.len() equals the total number of visual columns — which is ≥ the number of physical measures (equal when no multi-rests are present, and greater when multi-rests expand visual space).

Example: 3 physical measures where measure 0 has multi_rest_count = Some(4) produces vis_slots = [0, 0, 0, 0, 1, 2] — six visual columns.

§rows: Vec<RowLayout>

Each row in display order; rows cover all parts simultaneously.

§spans: Vec<SpanMark>

Fully resolved span marks (hairpin / ottava / pedal start+end pairs).

§concert_key_overrides: Vec<ConcertKeyOverride>

Per-staff concert-pitch key signature overrides. Non-empty only when LayoutConfig::concert_pitch is true and at least one staff has a non-zero transpose_semitones.

§beam_groups: Vec<BeamGroup>

Beam groups across all parts, staves, measures, and voices.

Derived from BeamState flags on individual notes. Each group contains at least two note indices. Groups are ordered by (part, staff, measure, voice).

§tuplet_groups: Vec<TupletGroup>

Tuplet groups across all parts, staves, measures, and voices.

Each group represents one tuplet bracket. Notes in a group share the same TupletInfo. Groups are ordered by (part, staff, measure, voice).

§courtesy_accidentals: Vec<CourtesyAccidental>

Courtesy (cautionary) accidentals across all parts, staves, measures, and voices.

A courtesy accidental is emitted when the same pitch (step + octave) was chromatically altered in the immediately preceding measure, reminding the performer the alteration no longer applies. Ordered by (part, staff, measure, voice, note_index, pitch_index).

§accidentals: Vec<AccidentalMark>

Mandatory (non-courtesy) accidentals across all parts, staves, measures, and voices.

Emitted for the first chromatic alteration of a step+octave within a measure. See AccidentalMark for the precedence rule against courtesy_accidentals.

Trait Implementations§

Source§

impl Clone for LayoutResult

Source§

fn clone(&self) -> LayoutResult

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for LayoutResult

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for LayoutResult

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Serialize for LayoutResult

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.