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;
}
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;
}
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);
}
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;
}
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));
}
Aggregations