Slides6UpImpl.mesa
Copyright Ó 1987 by Xerox Corporation. All rights reserved.
Maureen Stone July 23, 1987 9:13:39 pm PDT
DIRECTORY
ImagerInterpress,
ImagerFont,
Interpress,
Rope,
Imager;
Slides6UpImpl: CEDAR PROGRAM
IMPORTS ImagerInterpress, Imager, ImagerFont, Interpress
EXPORTS
~ BEGIN
ROPE: TYPE = Rope.ROPE;
VEC: TYPE = Imager.VEC;
MakeIP: PROC [files: LIST OF ROPE, outputFile: ROPE, talkTitle: ROPE] ~ {
Make one large Interpress Master with 6 pages/page. Input is list of file names.
self: ImagerInterpress.Ref ← ImagerInterpress.Create[outputFile];
pageRef: PageRef ← StartPage[files];
finished: BOOLEANFALSE;
imagePage: PROC[ctx: Imager.Context, origin: VEC] = {
doIt: PROC ={
w: REAL ← 640*Imager.metersPerPoint;
h: REAL ← 480*Imager.metersPerPoint;
Imager.TranslateT[ctx, origin];
Imager.ScaleT[ctx,(3.0*Imager.metersPerInch)/w];
Imager.ClipRectangle[ctx, [0,0,w,h]];
Interpress.DoPage[pageRef.master, pageRef.page, ctx, LogProc];
Imager.SetStrokeWidth[ctx, 12*Imager.metersPerPoint]; --scaled width
Imager.SetStrokeEnd[ctx, square];
Imager.MaskVector[ctx, [0,0],[0,h]];
Imager.MaskVector[ctx, [0,h],[w,h]];
Imager.MaskVector[ctx, [w,h],[w,0]];
Imager.MaskVector[ctx, [w,0],[0,0]];
};
Imager.DoSaveAll[ctx,doIt];
};
image6Pages: PROC[ctx: Imager.Context] = {
Center: PROC [v: VEC, r: ROPE] RETURNS [VEC] ~ {
extents: ImagerFont.Extents ← ImagerFont.RopeBoundingBox[font, r];
RETURN [[v.x-0.5*(extents.rightExtent-extents.leftExtent), v.y]];
};
leftMargin: REAL ← 1.0*Imager.metersPerInch;
centerMargin: REAL ← 4.5*Imager.metersPerInch;
topRow: REAL ← 7.325*Imager.metersPerInch;
middleRow: REAL ← 4.325*Imager.metersPerInch;
bottomRow: REAL ← 1.325*Imager.metersPerInch;
header: VEC ← [4.25*Imager.metersPerInch,10.5*Imager.metersPerInch];
footer: VEC ← [4.25*Imager.metersPerInch,0.5*Imager.metersPerInch];
font: Imager.Font ← ImagerFont.FindScaled["Xerox/PressFonts/Helvetica-brr",10*Imager.metersPerPoint];
Imager.SetFont[ctx, font];
Imager.SetXY[ctx,Center[header, talkTitle]];
Imager.ShowRope[ctx, talkTitle];
Imager.SetXY[ctx, Center[footer, tutorialTitle]];
Imager.ShowRope[ctx, tutorialTitle];
imagePage[ctx, [leftMargin, topRow]];
NextPage[pageRef ! Done => GOTO done];
imagePage[ctx, [centerMargin, topRow]];
NextPage[pageRef ! Done => GOTO done];
imagePage[ctx, [leftMargin, middleRow]];
NextPage[pageRef ! Done => GOTO done];
imagePage[ctx, [centerMargin, middleRow]];
NextPage[pageRef ! Done => GOTO done];
imagePage[ctx, [leftMargin, bottomRow]];
NextPage[pageRef ! Done => GOTO done];
imagePage[ctx, [centerMargin, bottomRow]];
NextPage[pageRef ! Done => GOTO done];
EXITS done => {finished ← TRUE};
};
UNTIL finished DO
ImagerInterpress.DoPage[self: self, action: image6Pages, scale: 1];
ENDLOOP;
ImagerInterpress.Close[self];
};
tutorialTitle: ROPE ← "DOCUMENTATION GRAPHICS TUTORIAL / SIGGRAPH '87";
Done: SIGNAL = CODE;
PageRef: TYPE = REF PageRefRecord;
PageRefRecord: TYPE = RECORD[
remainingFiles: LIST OF ROPE,
master: Interpress.Master,
page: NAT];
LogProc: Interpress.LogProc = {};
StartPage: PROC [files: LIST OF ROPE] RETURNS [ref: PageRef] ~ {
ref ← NEW[PageRefRecord];
ref.master ← Interpress.Open[files.first, LogProc];
ref.page ← 1;
ref.remainingFiles ← files.rest;
};
NextPage: PROC [ref: PageRef] ~ {
IF ref.page < ref.master.pages THEN {ref.page ← ref.page+1; RETURN};
Now need a new master
IF ref.remainingFiles=NIL THEN SIGNAL Done;
ref.master ← Interpress.Open[ref.remainingFiles.first, LogProc];
ref.page ← 1;
ref.remainingFiles ← ref.remainingFiles.rest;
};
END.