@@ -41,15 +41,17 @@ def layout_part(document, fonts):
|
||||
header_style = dataclasses.replace(style, width=style.width // 2, margin_x=style.margin_x / 2, margin_y=style.margin_y / 2)
|
||||
header = tuple(p.scaled(2) for p in generator.engraving.layout.part_header(document, fonts, header_style))
|
||||
top = generator.engraving.types.bounds(header).bottom + style.page_clearance
|
||||
bottom = style.height - style.margin_y - 20 - style.page_clearance
|
||||
# Reserve the measured outline for every possible page number, just as
|
||||
# screen pagination does. A nominal font size is not its actual ascent.
|
||||
footers = tuple(fonts.text(str(number), style.width / 2, style.height - style.margin_y - 8, 20, 'page_number', (), True)
|
||||
for number in range(1, len(systems) + 1))
|
||||
bottom = min(p.box.top for p in footers) - style.page_clearance
|
||||
pages, placed, cursor = [], [], top
|
||||
|
||||
def finish():
|
||||
number = len(pages) + 1
|
||||
# Include clearance for numeric descenders and JPEG block-edge ringing.
|
||||
footer = fonts.text(str(number), style.width / 2, style.height - style.margin_y - 8, 20, 'page_number', (), True)
|
||||
pages.append(generator.engraving.types.Page(number, style.width, style.height, style.supersampling, tuple(placed),
|
||||
(*header, *(p for system in placed for p in system.primitives), footer)))
|
||||
(*header, *(p for system in placed for p in system.primitives), footers[number - 1])))
|
||||
|
||||
for system in systems:
|
||||
system = generator.engraving.layout.make_system(index, system.start, system.end, fonts, style, justify=system.end < index.end, staff_width=style.width - 2 * style.margin_x - 2)
|
||||
|
||||
Reference in New Issue
Block a user