Search in sources :

Example 1 with PageMargins

use of com.xenoage.zong.core.format.PageMargins in project Zong by Xenoage.

the class ScoreDocScoreView method updateScreen.

@Override
public void updateScreen(Size2i screenSizePx, float zoom) {
    this.screenSizePx = screenSizePx;
    this.zoom = zoom;
    // recompute the layout, so that each page fits into the available screen space
    Size2f pageSizeMm = pxToMm(screenSizePx, zoom);
    float marginMm = pxToMm(marginPx, zoom);
    PageFormat pageFormat = new PageFormat(pageSizeMm, new PageMargins(marginMm, marginMm, marginMm, marginMm));
    Size2f frameSizeMm = new Size2f(pageFormat.getUseableWidth(), pageFormat.getUseableHeight());
    // first page needs space for title text
    titleTextHeightPx = screenSizePx.height / 20f;
    float firstFrameOffsetY = pxToMm(titleTextHeightPx, zoom);
    Size2f firstFrameSizeMm = new Size2f(frameSizeMm.width, frameSizeMm.height - firstFrameOffsetY);
    // delete unnecessary layout information, like system distances or system breaks
    Score score = doc.getScore();
    score.setFormat(new ScoreFormat());
    ScoreHeader header = score.getHeader();
    for (int i : range(header.getSystemLayouts())) {
        SystemLayout sl = header.getSystemLayout(i);
        if (sl != null)
            sl.setDistance(SystemLayout.defaultDistance);
    }
    for (int i : range(header.getColumnHeaders())) {
        ColumnHeader ch = header.getColumnHeader(i);
        if (ch.getMeasureBreak() != null)
            ch.setBreak(null);
    }
    // layout the score to find out the needed space
    Context context = new Context(score, App.getSymbolPool(), doc.getLayout().getDefaults().getLayoutSettings());
    Target target = new Target(alist(new ScoreLayoutArea(firstFrameSizeMm)), new ScoreLayoutArea(frameSizeMm), true);
    ScoreLayouter layouter = new ScoreLayouter(context, target);
    ScoreLayout scoreLayout = layouter.createScoreLayout();
    // create and fill at least one page
    Layout layout = new Layout(doc.getLayout().getDefaults());
    ScoreFrameChain chain = null;
    for (int i = 0; i < scoreLayout.frames.size(); i++) {
        Page page = new Page(pageFormat);
        Point2f position;
        Size2f size;
        if (i == 0) {
            // first page
            position = new Point2f(pageSizeMm.width / 2, pageSizeMm.height / 2 + firstFrameOffsetY);
            size = firstFrameSizeMm;
        } else {
            // other pages
            position = new Point2f(pageSizeMm.width / 2, pageSizeMm.height / 2);
            size = frameSizeMm;
        }
        ScoreFrame frame = new ScoreFrame();
        frame.setPosition(position);
        frame.setSize(size);
        page.addFrame(frame);
        layout.addPage(page);
        if (chain == null) {
            chain = new ScoreFrameChain(score);
            chain.setScoreLayout(scoreLayout);
        }
        chain.add(frame);
    }
    this.layout = layout;
}
Also used : Context(com.xenoage.zong.musiclayout.layouter.Context) ScoreFrame(com.xenoage.zong.layout.frames.ScoreFrame) ScoreLayouter(com.xenoage.zong.musiclayout.layouter.ScoreLayouter) ScoreLayout(com.xenoage.zong.musiclayout.ScoreLayout) Page(com.xenoage.zong.layout.Page) Paint(android.graphics.Paint) ScoreFormat(com.xenoage.zong.core.format.ScoreFormat) PageMargins(com.xenoage.zong.core.format.PageMargins) PageFormat(com.xenoage.zong.core.format.PageFormat) Score(com.xenoage.zong.core.Score) ScoreHeader(com.xenoage.zong.core.header.ScoreHeader) ColumnHeader(com.xenoage.zong.core.header.ColumnHeader) Target(com.xenoage.zong.musiclayout.layouter.Target) Point2f(com.xenoage.utils.math.geom.Point2f) ScoreLayout(com.xenoage.zong.musiclayout.ScoreLayout) SystemLayout(com.xenoage.zong.core.format.SystemLayout) Layout(com.xenoage.zong.layout.Layout) SystemLayout(com.xenoage.zong.core.format.SystemLayout) ScoreFrameChain(com.xenoage.zong.layout.frames.ScoreFrameChain) Size2f(com.xenoage.utils.math.geom.Size2f) ScoreLayoutArea(com.xenoage.zong.musiclayout.layouter.ScoreLayoutArea)

Example 2 with PageMargins

use of com.xenoage.zong.core.format.PageMargins in project Zong by Xenoage.

the class PageTest method createPageWithUnrotatedFrames.

/**
 * Creates a layout with a page with some unrotated frames for testing.
 */
private Layout createPageWithUnrotatedFrames() {
    Layout layout = new Layout(null);
    PageFormat pf = new PageFormat(new Size2f(200, 200), new PageMargins(10, 10, 10, 10));
    Page page = new Page(pf);
    layout.addPage(page);
    // Frame 1
    frm1 = new ScoreFrame();
    frm1.setPosition(p(120, 120));
    frm1.setSize(s(60, 80));
    page.addFrame(frm1);
    // Frame 2
    frm2 = new GroupFrame();
    frm2.setPosition(p(90, 110));
    frm2.setSize(s(60, 40));
    page.addFrame(frm2);
    // Childframe 2a
    frm2a = new ScoreFrame();
    frm2a.setPosition(p(30, 0));
    frm2a.setSize(s(10, 10));
    frm2.addChildFrame(frm2a);
    // Childframe 2b
    frm2b = new ScoreFrame();
    frm2b.setPosition(p(-10, -20));
    frm2b.setSize(s(10, 10));
    frm2.addChildFrame(frm2b);
    // Frame 3
    frm3 = new ScoreFrame();
    frm3.setPosition(p(30, 80));
    frm3.setSize(s(30, 60));
    page.addFrame(frm3);
    return layout;
}
Also used : PageMargins(com.xenoage.zong.core.format.PageMargins) PageFormat(com.xenoage.zong.core.format.PageFormat) ScoreFrame(com.xenoage.zong.layout.frames.ScoreFrame) Size2f(com.xenoage.utils.math.geom.Size2f) GroupFrame(com.xenoage.zong.layout.frames.GroupFrame)

Example 3 with PageMargins

use of com.xenoage.zong.core.format.PageMargins in project Zong by Xenoage.

the class PageViewManagerTest method setUp.

@Before
public void setUp() {
    Layout layout = new Layout(null);
    // 3 pages:
    // ----          --------
    // |1 | -2------ |3     |
    // |  | -------- |      |
    // ----          --------
    layout.addPage(new Page(new PageFormat(new Size2f(100, 200), new PageMargins(0, 0, 0, 0))));
    layout.addPage(new Page(new PageFormat(new Size2f(200, 100), new PageMargins(0, 0, 0, 0))));
    layout.addPage(new Page(new PageFormat(new Size2f(200, 200), new PageMargins(0, 0, 0, 0))));
    // create view
    view = new PageViewManager(layout);
    view.setPageDisplayAlignment(PageDisplayAlignment.Horizontal);
}
Also used : PageMargins(com.xenoage.zong.core.format.PageMargins) PageFormat(com.xenoage.zong.core.format.PageFormat) Layout(com.xenoage.zong.layout.Layout) Size2f(com.xenoage.utils.math.geom.Size2f) Page(com.xenoage.zong.layout.Page) Before(org.junit.Before)

Example 4 with PageMargins

use of com.xenoage.zong.core.format.PageMargins in project Zong by Xenoage.

the class PageTest method createPageWithRotatedFrames.

/**
 * Creates a layout with a page with some rotated frames for testing.
 * See PageTest.odg for a preview of the page.
 */
private Layout createPageWithRotatedFrames() {
    Layout layout = new Layout(null);
    PageFormat pf = new PageFormat(new Size2f(200, 200), new PageMargins(10, 10, 10, 10));
    Page page = new Page(pf);
    layout.addPage(page);
    // Frame 1
    frm1 = new ScoreFrame();
    frm1.setPosition(p(120, 120));
    frm1.setSize(s(60, 80));
    frm1.setRotation(-30);
    page.addFrame(frm1);
    // Frame 2
    frm2 = new GroupFrame();
    frm2.setPosition(p(90, 110));
    frm2.setSize(s(60, 40));
    frm2.setRotation(70);
    page.addFrame(frm2);
    // Childframe 2a
    frm2a = new ScoreFrame();
    frm2a.setPosition(p(20, 10));
    frm2a.setSize(s(10, 10));
    frm2a.setRotation(0);
    frm2.addChildFrame(frm2a);
    // Childframe 2b
    frm2b = new ScoreFrame();
    frm2b.setPosition(p(-10, -5));
    frm2b.setSize(s(20, 20));
    frm2b.setRotation(70);
    frm2.addChildFrame(frm2b);
    // Frame 3
    frm3 = new ScoreFrame();
    frm3.setPosition(p(95, 155));
    frm3.setSize(s(80, 40));
    frm3.setRotation(30);
    page.addFrame(frm3);
    return layout;
}
Also used : PageMargins(com.xenoage.zong.core.format.PageMargins) PageFormat(com.xenoage.zong.core.format.PageFormat) ScoreFrame(com.xenoage.zong.layout.frames.ScoreFrame) Size2f(com.xenoage.utils.math.geom.Size2f) GroupFrame(com.xenoage.zong.layout.frames.GroupFrame)

Example 5 with PageMargins

use of com.xenoage.zong.core.format.PageMargins in project Zong by Xenoage.

the class LayoutFormatReader method readPageLayout.

private void readPageLayout() {
    MxlPageLayout mxlPageLayout = mxlLayout.getPageLayout();
    if (mxlPageLayout == null)
        return;
    Size2f size = PageFormat.Companion.getDefaultValue().getSize();
    // page-width and page-height
    Size2f mxlPageSize = mxlPageLayout.getPageSize();
    if (mxlPageSize != null)
        size = new Size2f(tenthsMm * mxlPageSize.width, tenthsMm * mxlPageSize.height);
    // page-margins
    PageMargins pageMarginsLeft = PageMargins.Companion.getDefaultValue();
    PageMargins pageMarginsRight = PageMargins.Companion.getDefaultValue();
    for (MxlPageMargins mxlMargins : mxlPageLayout.getPageMargins()) {
        PageMargins pageMargins = new PageMargins(tenthsMm * mxlMargins.getLeftMargin(), tenthsMm * mxlMargins.getRightMargin(), tenthsMm * mxlMargins.getTopMargin(), tenthsMm * mxlMargins.getBottomMargin());
        // left, right page or both? default: both
        switch(mxlMargins.getType()) {
            case Both:
                pageMarginsLeft = pageMargins;
                pageMarginsRight = pageMargins;
                break;
            case Odd:
                pageMarginsRight = pageMargins;
                break;
            case Even:
                pageMarginsRight = pageMargins;
                break;
        }
    }
    layoutFormat = new LayoutFormat(new PageFormat(size, pageMarginsLeft), new PageFormat(size, pageMarginsRight));
}
Also used : MxlPageMargins(com.xenoage.zong.musicxml.types.MxlPageMargins) PageMargins(com.xenoage.zong.core.format.PageMargins) PageFormat(com.xenoage.zong.core.format.PageFormat) MxlPageLayout(com.xenoage.zong.musicxml.types.MxlPageLayout) Size2f(com.xenoage.utils.math.geom.Size2f) LayoutFormat.defaultLayoutFormat(com.xenoage.zong.core.format.LayoutFormat.defaultLayoutFormat) LayoutFormat(com.xenoage.zong.core.format.LayoutFormat) MxlPageMargins(com.xenoage.zong.musicxml.types.MxlPageMargins)

Aggregations

Size2f (com.xenoage.utils.math.geom.Size2f)5 PageFormat (com.xenoage.zong.core.format.PageFormat)5 PageMargins (com.xenoage.zong.core.format.PageMargins)5 ScoreFrame (com.xenoage.zong.layout.frames.ScoreFrame)3 Layout (com.xenoage.zong.layout.Layout)2 Page (com.xenoage.zong.layout.Page)2 GroupFrame (com.xenoage.zong.layout.frames.GroupFrame)2 Paint (android.graphics.Paint)1 Point2f (com.xenoage.utils.math.geom.Point2f)1 Score (com.xenoage.zong.core.Score)1 LayoutFormat (com.xenoage.zong.core.format.LayoutFormat)1 LayoutFormat.defaultLayoutFormat (com.xenoage.zong.core.format.LayoutFormat.defaultLayoutFormat)1 ScoreFormat (com.xenoage.zong.core.format.ScoreFormat)1 SystemLayout (com.xenoage.zong.core.format.SystemLayout)1 ColumnHeader (com.xenoage.zong.core.header.ColumnHeader)1 ScoreHeader (com.xenoage.zong.core.header.ScoreHeader)1 ScoreFrameChain (com.xenoage.zong.layout.frames.ScoreFrameChain)1 ScoreLayout (com.xenoage.zong.musiclayout.ScoreLayout)1 Context (com.xenoage.zong.musiclayout.layouter.Context)1 ScoreLayoutArea (com.xenoage.zong.musiclayout.layouter.ScoreLayoutArea)1