-- TATypeSetterFaceImpl.mesa -- Michael Plass, July 20, 1982 10:52 am -- Rick Beach, April 15, 1983 2:36 pm -- Maureen Stone April 21, 1983 10:18 am DIRECTORY Graphics USING [Box, Context], GraphicsToPressPrivate USING[NewContextFromSirPressHandle], JaMOps USING [defaultFrame, Execute, MakeString], NodeStyle USING [Create, Ref], Real, TAGraphicsHacks USING [BeginBox, EndBox], TAPrivate USING [PopDC, PushDC, PushReal, Translate], TARender USING [RenderBranch], TextNode USING [Ref], TJaMGraphicsContexts USING [AddContext, RemoveContext, DisableViewer, EnableViewer], TSArtwork, TSGlue, TSGraphic, TSOutput USING [Handle], TSOutputPress USING [PressState], TSTypes USING [RealDimn, pt], TACallig, TATypeSetter; TATypeSetterFaceImpl: PROGRAM IMPORTS JaMOps, NodeStyle, TAGraphicsHacks, TAPrivate, TARender, TJaMGraphicsContexts, TSArtwork, TSTypes, GraphicsToPressPrivate, TACallig 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[]; TAGraphicsHacks.BeginBox[]; TARender.RenderBranch[handle: NIL, node: data.node, nodeStyle: nodeStyle, kind: print, paint: FALSE]; data.bbox _ TAGraphicsHacks.EndBox[]; 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; getDC: PROC RETURNS[Graphics.Context] = {RETURN[dc]}; IF dc=NIL THEN dc _ GraphicsToPressPrivate.NewContextFromSirPressHandle[pressState.pressHandle]; TJaMGraphicsContexts.AddContext[JaMOps.defaultFrame, getDC, $TAPress, TRUE]; TJaMGraphicsContexts.DisableViewer[JaMOps.defaultFrame]; TACallig.UseThisPressHandle[pressState.pressHandle]; JaMOps.Execute[JaMOps.defaultFrame, JaMOps.MakeString["(hsvcolor) (.presshsb) .cvx .def", X]]; { ENABLE UNWIND => { [] _TJaMGraphicsContexts.RemoveContext[JaMOps.defaultFrame, $TAPress]; TACallig.ForgetThePressHandle[]; JaMOps.Execute[JaMOps.defaultFrame, JaMOps.MakeString["(hsvcolor) (.hsvcolor) .cvx .def", X]]; }; 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[]; [] _TJaMGraphicsContexts.RemoveContext[JaMOps.defaultFrame, $TAPress]; TACallig.ForgetThePressHandle[]; JaMOps.Execute[JaMOps.defaultFrame, JaMOps.MakeString["(hsvcolor) (.hsvcolor) .cvx .def", X]]; TJaMGraphicsContexts.EnableViewer[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