MuseScore/src/engraving/libmscore/lyrics.h

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

169 lines
5.7 KiB
C
Raw Normal View History

/*
* SPDX-License-Identifier: GPL-3.0-only
* MuseScore-CLA-applies
*
* MuseScore
* Music Composition & Notation
*
* Copyright (C) 2021 MuseScore BVBA and others
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 3 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
2012-05-26 14:26:10 +02:00
#ifndef __LYRICS_H__
#define __LYRICS_H__
#include "line.h"
2012-05-26 14:26:10 +02:00
#include "text.h"
namespace Ms {
2012-05-26 14:26:10 +02:00
//---------------------------------------------------------
// Lyrics
2012-05-26 14:26:10 +02:00
//---------------------------------------------------------
class LyricsLine;
2017-12-27 11:51:00 +01:00
class Lyrics final : public TextBase
{
2012-05-26 14:26:10 +02:00
public:
2019-03-21 17:37:06 +01:00
enum class Syllabic : char {
///.\{
SINGLE, BEGIN, END, MIDDLE
///\}
};
2020-05-26 15:54:26 +02:00
// MELISMA FIRST UNDERSCORE:
// used as_ticks value to mark a melisma for which only the first chord has been spanned so far
Spelling (#11566) * spelling: above Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: accessibility Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: accessible Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: account Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: action Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: activated Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: active Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: again Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: allegro Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: alternative Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: amplitude Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: and Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: annotation Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: appended Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: appending Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: appropriate Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: arbitrarily Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: architecture Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: arpeggio Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: arranger Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: assumed Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: asynchronous Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: automatically Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: availability Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: available Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: backslashes Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: before Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: beginning Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: between Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: bounding Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: bracket Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: builtin Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: calculated Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: categories Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: check Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: class Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: clearance Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: column Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: combinations Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: completed Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: composer Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: compression Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: consideration Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: constraints Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: container Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: continuous Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: contrabass Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: control Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: convergence Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: conversion Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: convert Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: coordinates Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: correctly Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: corresponds Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: counting Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: crescendo Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: customizable Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: cutout Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: deep Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: denom Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: denominator Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: diagram Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: diminished Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: direction Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: directories Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: disconnected Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: doesn't Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: dotted Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: easeinout Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: eighth Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: element Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: elements Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: enabled Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: engraving Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: evenly Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: exactly Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: exceed Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: excerpts Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: excessively Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: exclusive Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: extension Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: extrapolated Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: farthest Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: fits Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: friends Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: function Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: glissando Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: global Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: grid Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: halved Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: happen * spelling: harmonies Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: have Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: header Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: height Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: iabbrev Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: ideally Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: implementation Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: in Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: incoming Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: incomplete Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: increase Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: indentation Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: individual Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: infer Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: initial Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: initially Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: inputted Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: instrument Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: instruments Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: invalid Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: invocation Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: iplugin Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: javascript Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: label Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: laid out Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: languages Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: length Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: linked Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: lyrchord Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: lyricist Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: managed Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: manually Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: mapping Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: mappings Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: margins Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: measure Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: metric Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: metronome Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: military Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: milliseconds Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: minimum Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: modifiers Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: moving Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: multi Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: namespace Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: navigate Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: necessary Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: needs Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: newly Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: notation Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: numerator Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: occasionally Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: occurred Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: occurrence Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: omitted Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: or Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: oriented Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: originally Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: ornament Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: ornaments Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: output Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: outputted Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: outside Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: overlapping Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: overridden Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: package Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: padding Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: parameter Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: percussion Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: placement Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: playthrough Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: positive Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: preceded Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: precision Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: previous Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: process Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: property Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: proximity Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: publish Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: rasgueado Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: read Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: receive Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: received Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: rectangle Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: regarding Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: register Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: registry Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: rehearsal Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: related Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: repeat Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: repeatp Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: replacements Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: represent Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: representation Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: responses Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: rhythm Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: section Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: selected Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: selection Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: separation Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: separator Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: shortcuts Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: signatures Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: simile Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: slurred Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: sound Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: staccato Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: staff Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: stuff Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: style Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: suffix Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: supported Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: symbol Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: symbols Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: system Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: tablature Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: tcp_invalid Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: that Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: the Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: thickness Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: tibetan Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: of Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: to Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: transparent Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: transpose Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: tremolo Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: ultimately Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: unassigned Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: underscore Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: unhandled Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: uninstall Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: unknown Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: unnamed Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: useful Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: usually Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: vertical Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: violin Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: visible Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: when Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: whether Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: with Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: within Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: without Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: would Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: writing Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: written Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: xmlns Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * Remove unused avaiableArticulationTypesChanged Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: firstSystemIndentation [API] Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * Enable testIncompleteTuplet Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * Drop stray comment Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * Update license header in module.cmake per https://github.com/musescore/MuseScore/pull/11566#discussion_r870550003 Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> Co-authored-by: Josh Soref <jsoref@users.noreply.github.com>
2022-05-15 16:35:32 +02:00
// and to give the user a visible feedback that the underscore has been actually entered;
2015-01-23 23:50:49 +01:00
// it should be cleared to 0 at some point, so that it will not be carried over
// if the melisma is not extended beyond a single chord, but no suitable place to do this
// has been identified yet.
2018-08-02 13:27:08 +02:00
static constexpr int TEMP_MELISMA_TICKS = 1;
2020-05-26 15:54:26 +02:00
2018-08-02 13:27:08 +02:00
// WORD_MIN_DISTANCE has never been implemented
// static constexpr qreal LYRICS_WORD_MIN_DISTANCE = 0.33; // min. distance between lyrics from different words
2020-05-26 15:54:26 +02:00
2012-05-26 14:26:10 +02:00
private:
Fraction _ticks; ///< if > 0 then draw an underline to tick() + _ticks
2012-05-26 14:26:10 +02:00
///< (melisma)
Syllabic _syllabic;
LyricsLine* _separator;
2020-05-26 15:54:26 +02:00
friend class mu::engraving::Factory;
Lyrics(ChordRest* parent);
Lyrics(const Lyrics&);
2018-06-29 13:33:47 +02:00
bool isMelisma() const;
void undoChangeProperty(Pid id, const mu::engraving::PropertyValue&, PropertyFlags ps) override;
2020-05-26 15:54:26 +02:00
2012-05-26 14:26:10 +02:00
protected:
int _no; ///< row index
2018-07-02 10:24:58 +02:00
bool _even;
2020-05-26 15:54:26 +02:00
2012-05-26 14:26:10 +02:00
public:
~Lyrics();
2020-05-26 15:54:26 +02:00
2020-03-24 14:49:16 +01:00
Lyrics* clone() const override { return new Lyrics(*this); }
bool acceptDrop(EditData&) const override;
2021-09-02 15:26:45 +02:00
EngravingItem* drop(EditData&) override;
2020-05-26 15:54:26 +02:00
Segment* segment() const { return toSegment(explicitParent()->explicitParent()); }
Measure* measure() const { return toMeasure(explicitParent()->explicitParent()->explicitParent()); }
ChordRest* chordRest() const { return toChordRest(explicitParent()); }
2020-05-26 15:54:26 +02:00
2020-03-24 14:49:16 +01:00
void layout() override;
2018-07-19 13:03:25 +02:00
void layout2(int);
2020-05-26 15:54:26 +02:00
void scanElements(void* data, void (* func)(void*, EngravingItem*), bool all=true) override;
2020-03-24 14:49:16 +01:00
void write(XmlWriter& xml) const override;
void read(XmlReader&) override;
bool readProperties(XmlReader&) override;
int subtype() const override { return _no; }
QString subtypeName() const override { return QObject::tr("Verse %1").arg(_no + 1); }
2018-06-29 13:33:47 +02:00
void setNo(int n) { _no = n; }
int no() const { return _no; }
2017-07-10 11:45:50 +02:00
bool isEven() const { return _no % 1; }
void setSyllabic(Syllabic s) { _syllabic = s; }
Syllabic syllabic() const { return _syllabic; }
2021-09-02 15:26:45 +02:00
void add(EngravingItem*) override;
void remove(EngravingItem*) override;
2022-02-21 12:24:05 +01:00
bool isEditAllowed(EditData&) const override;
bool edit(EditData&) override;
2020-03-24 14:49:16 +01:00
void endEdit(EditData&) override;
2020-05-26 15:54:26 +02:00
Fraction ticks() const { return _ticks; }
void setTicks(const Fraction& tick) { _ticks = tick; }
Fraction endTick() const;
void removeFromScore();
2020-05-26 15:54:26 +02:00
using EngravingObject::undoChangeProperty;
void paste(EditData& ed, const QString& txt) override;
2020-05-26 15:54:26 +02:00
mu::engraving::PropertyValue getProperty(Pid propertyId) const override;
bool setProperty(Pid propertyId, const mu::engraving::PropertyValue&) override;
mu::engraving::PropertyValue propertyDefault(Pid id) const override;
2012-05-26 14:26:10 +02:00
};
//---------------------------------------------------------
// LyricsLine
2019-03-21 17:37:06 +01:00
/// \cond PLUGIN_API \private \endcond
//---------------------------------------------------------
class LyricsLine final : public SLine
{
protected:
Lyrics* _nextLyrics;
2020-05-26 15:54:26 +02:00
public:
2021-09-02 15:26:45 +02:00
LyricsLine(EngravingItem* parent);
LyricsLine(const LyricsLine&);
2020-05-26 15:54:26 +02:00
2020-03-24 14:49:16 +01:00
LyricsLine* clone() const override { return new LyricsLine(*this); }
void layout() override;
2021-09-16 15:36:40 +02:00
LineSegment* createLineSegment(System* parent) override;
2020-03-24 14:49:16 +01:00
void removeUnmanaged() override;
void styleChanged() override;
2020-05-26 15:54:26 +02:00
Lyrics* lyrics() const { return toLyrics(explicitParent()); }
Lyrics* nextLyrics() const { return _nextLyrics; }
bool isEndMelisma() const { return lyrics()->ticks().isNotZero(); }
bool isDash() const { return !isEndMelisma(); }
bool setProperty(Pid propertyId, const mu::engraving::PropertyValue& v) override;
2020-03-24 14:49:16 +01:00
SpannerSegment* layoutSystem(System*) override;
};
//---------------------------------------------------------
// LyricsLineSegment
2019-03-21 17:37:06 +01:00
/// \cond PLUGIN_API \private \endcond
//---------------------------------------------------------
class LyricsLineSegment final : public LineSegment
{
protected:
int _numOfDashes = 0;
qreal _dashLength = 0;
2020-05-26 15:54:26 +02:00
2017-11-27 16:55:52 +01:00
public:
2021-09-16 15:36:40 +02:00
LyricsLineSegment(LyricsLine*, System* parent);
2020-05-26 15:54:26 +02:00
2020-03-24 14:49:16 +01:00
LyricsLineSegment* clone() const override { return new LyricsLineSegment(*this); }
void draw(mu::draw::Painter*) const override;
2020-03-24 14:49:16 +01:00
void layout() override;
// helper functions
LyricsLine* lyricsLine() const { return toLyricsLine(spanner()); }
Lyrics* lyrics() const { return lyricsLine()->lyrics(); }
};
2013-05-13 18:49:17 +02:00
} // namespace Ms
2012-05-26 14:26:10 +02:00
#endif