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 ¤TATypeSetterFaceImpl.mesa Copyright c 1985 by Xerox Corporation. All rights reserved. Michael Plass, July 20, 1982 10:52 am Rick Beach, February 11, 1985 11:54:56 am PST Maureen Stone April 21, 1983 10:18 am supply Typesetter with Paint and Layout procedures determine the size of the artwork in the current style state paint the artwork object given the position by the Typesetter display in JaMGraphics viewer Ê»˜šœ™Jšœ Ïmœ1™