-- 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 Ę(˜JšœæĪnœÎ˜ĩ!—…—¸æ