-- TATypeSetterFaceImpl.mesa
-- Michael Plass, July 20, 1982 10:52 am
-- Rick Beach, July 5, 1982 2:38 pm
-- Maureen Stone December 8, 1982 5:18 pm
DIRECTORY
Graphics USING [Box, Context, NewContext],
GraphicsBasic USING[DeviceRef],
GraphicsToPressPrivate USING[NewContextFromSirPressHandle],
JaMOps USING [defaultFrame],
NodeStyle USING [Create, Ref],
Real,
TAGraphicsHacks USING [NewBoxerDevice, EndBox],
TAPrivate USING [InitJaMGraphics, NoJaMGraphicsViewer, PopDC, PushDC, PushReal, Translate],
TARender USING [RenderBranch],
TextNode USING [Ref],
TJaMGraphicsPrivate USING [EstablishNonViewerContext, ForgetNonViewerContext],
TSArtwork,
TSGlue,
TSGraphic,
TSOutput USING [Handle],
TSOutputPress USING [PressState],
TSTypes USING [RealDimn, pt],
TATypeSetter;
TATypeSetterFaceImpl: PROGRAM
IMPORTS Graphics, JaMOps, NodeStyle, TAGraphicsHacks, TAPrivate, TARender, TJaMGraphicsPrivate, TSArtwork, TSTypes, GraphicsToPressPrivate
EXPORTS TATypeSetter =
BEGIN OPEN TSTypes;
CreateArtworkObject: TSArtwork.ObjectFromBranchProc = CHECKED {
-- supply Typesetter with Paint and Layout procedures
object ← NEW[TSGraphic.ObjectRec];
object.paintProc ← ArtworkObjectPaint;
object.layoutProc ← ArtworkObjectLayout;
object.data ← NEW[ArtworkObjectRec ← [node: node]];
};
ArtworkObjectRec: TYPE = RECORD [
node: TextNode.Ref,
bbox: Graphics.Box ← [Real.LargestNumber, Real.LargestNumber, -Real.LargestNumber, -Real.LargestNumber]
];
ArtworkObjectLayout: TSGraphic.LayoutProc = TRUSTED {
-- determine the size of the artwork in the current style state
data: REF ArtworkObjectRec ← NARROW[self.data];
nodeStyle: NodeStyle.Ref ← NodeStyle.Create[];
dc: Graphics.Context ← Graphics.NewContext[TAGraphicsHacks.NewBoxerDevice[]];
TAPrivate.InitJaMGraphics[ ! TAPrivate.NoJaMGraphicsViewer => ERROR];
TJaMGraphicsPrivate.EstablishNonViewerContext[JaMOps.defaultFrame, dc];
{ ENABLE UNWIND => TJaMGraphicsPrivate.ForgetNonViewerContext[JaMOps.defaultFrame];
TARender.RenderBranch[handle: NIL,
node: data.node,
nodeStyle: nodeStyle,
kind: print,
paint: FALSE];
data.bbox ← TAGraphicsHacks.EndBox[dc];
TJaMGraphicsPrivate.ForgetNonViewerContext[JaMOps.defaultFrame];
};
extent[right] ← RealDimn[data.bbox.xmax, pt];
extent[left] ← RealDimn[data.bbox.xmin, pt];
extent[up] ← RealDimn[data.bbox.ymax, pt];
extent[down] ← RealDimn[data.bbox.ymin, pt];
};
ArtworkObjectPaint: TSGraphic.PaintProc = TRUSTED {
-- paint the artwork object given the position by the Typesetter
data: REF ArtworkObjectRec ← NARROW[self.data];
nodeStyle: NodeStyle.Ref ← NodeStyle.Create[];
outputHandle: TSOutput.Handle ← NARROW[context];
IF useJaMGraphics OR outputHandle.outputState = NIL THEN {
-- display in JaMGraphics viewer
TAPrivate.PushDC[];
TAPrivate.PushReal[originX.texPts];
TAPrivate.PushReal[originY.texPts-data.bbox.ymin];
TAPrivate.Translate[];
TARender.RenderBranch[handle: outputHandle,
node: data.node,
nodeStyle: nodeStyle,
kind: print,
paint: TRUE];
TAPrivate.PopDC[];
}
ELSE IF ISTYPE[outputHandle.outputState, TSOutputPress.PressState] THEN {
pressState: TSOutputPress.PressState ← NARROW[outputHandle.outputState];
dc: Graphics.Context ← pressState.graphicsContext;
IF dc=NIL THEN
dc ← GraphicsToPressPrivate.NewContextFromSirPressHandle[pressState.pressHandle];
TJaMGraphicsPrivate.EstablishNonViewerContext[JaMOps.defaultFrame, dc];
{ ENABLE UNWIND => TJaMGraphicsPrivate.ForgetNonViewerContext[JaMOps.defaultFrame];
TAPrivate.PushDC[];
TAPrivate.PushReal[originX.texPts];
TAPrivate.PushReal[originY.texPts-data.bbox.ymin];
TAPrivate.Translate[];
TARender.RenderBranch[handle: outputHandle,
node: data.node,
nodeStyle: nodeStyle,
kind: print,
paint: TRUE];
TAPrivate.PopDC[];
TJaMGraphicsPrivate.ForgetNonViewerContext[JaMOps.defaultFrame];
};
outputHandle.colorProc[outputHandle, 0, 0, 0];
}
ELSE ERROR;
};
useJaMGraphics: BOOLEAN ← FALSE;
RegisterProcs: PUBLIC PROC = {
TSArtwork.Register["ArtworkNode", CreateArtworkObject];
TSArtwork.Register["ArtworkFileName", CreateArtworkObject];
TSArtwork.Register["ArtworkImage", CreateArtworkObject];
};
END.
Split from TSArtworkImpl.mesa. Micahel Plass, July 19, 1982 10:22 am