-- TAShadowImpl.mesa -- Rick Beach, June 30, 1982 11:51 pm --Maureen Stone April 25, 1983 5:12 pm -- Rick Beach, November 29, 1982 10:07 pm DIRECTORY NodeStyle USING [GetPathType, Ref], RealFns USING [SinDeg, CosDeg], TextNode USING [Ref], TAPrivate, TAStyle, TAShadow; TAShadowImpl: PROGRAM IMPORTS NodeStyle, RealFns, TAPrivate, TAStyle EXPORTS TAShadow = { EstablishShadow: PUBLIC PROCEDURE[node: TextNode.Ref, nodeStyle: NodeStyle.Ref] = { shadowAngle: REAL _ TAStyle.GetShadowAngle[nodeStyle]; SELECT TAStyle.GetShadowType[nodeStyle] FROM Offset => { shadowDistance: REAL _ TAStyle.GetShadowOffsetAmount[nodeStyle]; xSign, ySign: REAL; SELECT TAStyle.GetShadowDirection[nodeStyle] FROM UpLeft => {xSign _ -1; ySign _ 1}; UpRight => {xSign _ 1; ySign _ 1}; DownLeft => {xSign _ -1; ySign _ -1}; DownRight => {xSign _ 1; ySign _ -1}; ENDCASE => {xSign _ 1; ySign _ -1}; TAPrivate.PushDC[]; TAPrivate.PushReal[shadowDistance*xSign*RealFns.SinDeg[shadowAngle]]; TAPrivate.PushReal[shadowDistance*ySign*RealFns.CosDeg[shadowAngle]]; TAPrivate.Translate[]; SELECT TAStyle.GetShadowPathType[nodeStyle] FROM Filled, FilledAndOutlined => { TAPrivate.SetHSV[TAStyle.GetShadowAreaHue[nodeStyle], TAStyle.GetShadowAreaSaturation[nodeStyle], TAStyle.GetShadowAreaBrightness[nodeStyle]]; TAPrivate.ExecuteNode[node]; TAPrivate.DrawArea[]; }; ENDCASE; SELECT TAStyle.GetShadowPathType[nodeStyle] FROM Outlined, FilledAndOutlined => { TAPrivate.SetHSV[TAStyle.GetShadowOutlineHue[nodeStyle], TAStyle.GetShadowOutlineSaturation[nodeStyle], TAStyle.GetShadowOutlineBrightness[nodeStyle]]; TAPrivate.ExecuteNode[node]; TAPrivate.PushReal[TAStyle.GetShadowWeight[nodeStyle]]; --TAPrivate.RoundPen[]; --TAPrivate.ShadowPen[]; --TAPrivate.ShadowPath[]; some bug makes this not work TAPrivate.OutlinePath[]; }; ENDCASE; TAPrivate.PopDC[]; }; Drop => { TAPrivate.SetHSV[TAStyle.GetShadowAreaHue[nodeStyle], TAStyle.GetShadowAreaSaturation[nodeStyle], TAStyle.GetShadowAreaBrightness[nodeStyle]]; TAPrivate.PushReal[TAStyle.GetShadowWeight[nodeStyle]]; TAPrivate.PushReal[SELECT TAStyle.GetShadowDirection[nodeStyle] FROM UpLeft => 180-shadowAngle, UpRight => shadowAngle-180, DownLeft => shadowAngle, DownRight => -shadowAngle, ENDCASE => shadowAngle]; TAPrivate.ItalicPen[]; --TAPrivate.ShadowPen[]; TAPrivate.ExecuteNode[node]; --TAPrivate.ShadowPath[]; TAPrivate.OutlinePath[]; }; ENDCASE => NULL; IF NodeStyle.GetPathType[nodeStyle]=Outlined THEN { TAPrivate.SetHSV[0, 0, 1.0]; -- repaint white background for object TAPrivate.ExecuteNode[node]; TAPrivate.DrawArea[]}; }; }.