111 lines
2.6 KiB
C++
111 lines
2.6 KiB
C++
#pragma once
|
|
|
|
#include <cstddef>
|
|
#include <cstdint>
|
|
#include <limits>
|
|
#include <string>
|
|
#include <string_view>
|
|
#include <vector>
|
|
|
|
#include <luma.hpp>
|
|
|
|
#include <vamp_zero/types.hpp>
|
|
|
|
namespace vamp_zero {
|
|
|
|
enum class score_accidental_mark {
|
|
NONE,
|
|
FLAT,
|
|
NATURAL,
|
|
SHARP,
|
|
DOUBLE_FLAT,
|
|
DOUBLE_SHARP,
|
|
TRIPLE_FLAT,
|
|
TRIPLE_SHARP,
|
|
};
|
|
|
|
enum class score_layout_item_kind {
|
|
FILL_RECT,
|
|
STROKE_RECT,
|
|
STROKE_LINE,
|
|
CURVE,
|
|
GLYPH,
|
|
TEXT,
|
|
};
|
|
|
|
enum class score_layout_item_role {
|
|
PAPER,
|
|
BORDER,
|
|
STAFF_LINE,
|
|
BARLINE,
|
|
FINAL_BARLINE,
|
|
CLEF,
|
|
KEY_SIGNATURE,
|
|
TIME_SIGNATURE,
|
|
NOTEHEAD,
|
|
REST,
|
|
ACCIDENTAL,
|
|
STEM,
|
|
FLAG,
|
|
BEAM,
|
|
DOT,
|
|
TIE,
|
|
TUPLET,
|
|
TUPLET_BRACKET,
|
|
OCTAVE_SHIFT,
|
|
TREMOLO,
|
|
TITLE,
|
|
COMPOSER,
|
|
PART,
|
|
PAGE_NUMBER,
|
|
MEASURE_NUMBER,
|
|
SECTION_LABEL,
|
|
CHORD_SYMBOL,
|
|
LYRIC,
|
|
};
|
|
|
|
struct score_layout_item {
|
|
vamp_zero::score_layout_item_kind kind{};
|
|
vamp_zero::score_layout_item_role role{};
|
|
luma::rect bounds{};
|
|
luma::point origin{};
|
|
luma::point from{};
|
|
luma::point control{};
|
|
luma::point to{};
|
|
luma::color color{};
|
|
std::float32_t thickness{};
|
|
std::float32_t staff_spacing{};
|
|
std::int32_t codepoint{};
|
|
std::int32_t text_scale{};
|
|
std::float32_t text_size_multiplier{1.0F};
|
|
std::size_t system_index{std::numeric_limits<std::size_t>::max()};
|
|
std::size_t measure_index{std::numeric_limits<std::size_t>::max()};
|
|
std::size_t note_index{std::numeric_limits<std::size_t>::max()};
|
|
std::string text{};
|
|
};
|
|
|
|
struct score_page_layout {
|
|
luma::rect bounds{};
|
|
std::float32_t staff_spacing{};
|
|
std::vector<vamp_zero::score_layout_item> items{};
|
|
};
|
|
|
|
struct score_system_range {
|
|
std::size_t first_measure{};
|
|
std::size_t measure_count{};
|
|
std::size_t first_note{};
|
|
std::size_t note_count{std::numeric_limits<std::size_t>::max()};
|
|
};
|
|
|
|
constexpr auto score_measures_per_system = std::size_t{4};
|
|
constexpr auto score_systems_per_page = std::size_t{3};
|
|
|
|
auto notated_accidentals_for_measure(vamp_zero::score_measure const& measure, std::string_view inherited_key_signature) -> std::vector<vamp_zero::score_accidental_mark>;
|
|
auto score_system_ranges(vamp_zero::score_document const& score) -> std::vector<vamp_zero::score_system_range>;
|
|
auto score_page_count(vamp_zero::score_document const& score) -> std::size_t;
|
|
auto layout_score_page(luma::rect bounds, vamp_zero::score_document const& score, std::size_t page_index) -> vamp_zero::score_page_layout;
|
|
auto draw_score_layout(luma::draw_context& context, vamp_zero::score_page_layout const& layout) -> void;
|
|
auto draw_score_page(luma::draw_context& context, luma::rect bounds, vamp_zero::score_document const& score, std::size_t page_index) -> void;
|
|
|
|
}
|