<> <> <> <> <> DIRECTORY Graphics USING [Box, Context], GraphicsToPressPrivate USING[NewContextFromSirPressHandle], JaM USING [Execute], NodeStyle USING [Create, Ref], Process USING [GetCurrent], Real, TAGraphicsHacks USING [BeginBox, EndBox], TAPrivate USING [PopDC, PushDC, PushReal, state, 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: CEDAR PROGRAM IMPORTS JaM, NodeStyle, Process, TAGraphicsHacks, TAPrivate, TARender, TJaMGraphicsContexts, TSArtwork, TSTypes, GraphicsToPressPrivate, TACallig EXPORTS TATypeSetter = BEGIN OPEN TSTypes; CreateArtworkObject: TSArtwork.ObjectFromBranchProc = CHECKED { <> 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 { <> 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 { <> data: REF ArtworkObjectRec _ NARROW[self.data]; nodeStyle: NodeStyle.Ref _ NodeStyle.Create[]; outputHandle: TSOutput.Handle _ NARROW[context]; IF useJaMGraphics OR outputHandle.outputState = NIL THEN { <> 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]; SaveDC[dc]; TJaMGraphicsContexts.AddContext[TAPrivate.state, GetDC, $TAPress, TRUE]; TJaMGraphicsContexts.DisableViewer[TAPrivate.state]; TACallig.UseThisPressHandle[pressState.pressHandle]; JaM.Execute[TAPrivate.state, "(hsvcolor) (.presshsb) .cvx .def"]; { ENABLE UNWIND => { [] _TJaMGraphicsContexts.RemoveContext[TAPrivate.state, $TAPress]; TACallig.ForgetThePressHandle[]; JaM.Execute[TAPrivate.state, "(hsvcolor) (.hsvcolor) .cvx .def"]; }; 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[TAPrivate.state, $TAPress]; TACallig.ForgetThePressHandle[]; JaM.Execute[TAPrivate.state, "(hsvcolor) (.hsvcolor) .cvx .def"]; TJaMGraphicsContexts.EnableViewer[TAPrivate.state]; }; outputHandle.colorProc[outputHandle, 0, 0, 0]; } ELSE ERROR; }; SaveDC: PROC [dc: Graphics.Context] ~ { globalDC _ dc; globalDCProcess _ Process.GetCurrent[]; }; GetDC: PROC RETURNS [dc: Graphics.Context] ~ { IF globalDCProcess # Process.GetCurrent[] THEN ERROR; RETURN [globalDC] }; globalDC: Graphics.Context; globalDCProcess: UNSAFE PROCESS; 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