JaMImagerImpl.mesa
Copyright Ó 1985, 1986, 1987, 1992 by Xerox Corporation. All rights reserved.
Michael Plass, October 8, 1987 4:41:24 pm PDT
Tim Diebert: August 1, 1985 12:59:51 pm PDT
Doug Wyatt, August 7, 1986 11:28:07 am PDT
Last edited by: Mik Lamming - December 23, 1986 2:45:18 pm PST
Rick Beach, March 22, 1987 10:13:24 pm PST
Bier, September 15, 1992 5:18 pm PDT
DIRECTORY
Char, Imager, ImagerBackdoor, ImagerBox, ImagerColor, ImagerFont, ImagerPath, ImagerPixelArray, ImagerPixelArrayAIS, ImagerTransformation, JaM, JaMIPrivate, Vector2;
JaMImagerImpl: CEDAR PROGRAM
IMPORTS Char, Imager, ImagerBackdoor, ImagerColor, ImagerFont, ImagerPath, ImagerPixelArrayAIS, ImagerTransformation, JaM, JaMIPrivate
EXPORTS JaMIPrivate
~ BEGIN OPEN JaM;
VEC: TYPE ~ Vector2.VEC;
Outline: TYPE ~ ImagerPath.Outline;
PopVec:
PROC [self: State]
RETURNS [
VEC] ~ {
y: REAL ~ PopReal[self]; x: REAL ~ PopReal[self];
RETURN[[x, y]];
};
PopRectangle:
PROC [self: State]
RETURNS [ImagerBox.Rectangle] ~ {
h: REAL ~ PopReal[self]; w: REAL ~ PopReal[self];
y: REAL ~ PopReal[self]; x: REAL ~ PopReal[self];
RETURN[[x, y, w, h]];
};
PopFont:
PROC [self: State]
RETURNS [ImagerFont.Font] ~ {
x: Any ~ Pop[self];
WITH x
SELECT
FROM
x: ImagerFont.Font => RETURN[x];
ENDCASE => ERROR JaM.Error[WrongType];
};
PopTransformation:
PROC [self: State]
RETURNS [ImagerTransformation.Transformation] ~ {
x: Any ~ Pop[self];
WITH x
SELECT
FROM
x: ImagerTransformation.Transformation => RETURN[x];
ENDCASE => ERROR JaM.Error[WrongType];
};
PopPixelArray:
PROC [self: State]
RETURNS [ImagerPixelArray.PixelArray] ~ {
x: Any ~ Pop[self];
WITH x
SELECT
FROM
x: ImagerPixelArray.PixelArray => RETURN[x];
ENDCASE => ERROR JaM.Error[WrongType];
};
PopColor:
PROC [self: State]
RETURNS [ImagerColor.Color] ~ {
x: Any ~ Pop[self];
WITH x
SELECT
FROM
x: ImagerColor.Color => RETURN[x];
x: ImagerColor.ConstantColor => RETURN[x];
ENDCASE => ERROR JaM.Error[WrongType];
};
PopColorOperator:
PROC [self: State]
RETURNS [ImagerColor.ColorOperator] ~ {
x: Any ~ Pop[self];
WITH x
SELECT
FROM
x: ImagerColor.ColorOperator => RETURN[x];
ENDCASE => ERROR JaM.Error[WrongType];
};
PopTrajectory:
PROC [self: State]
RETURNS [ImagerPath.Trajectory] ~ {
x: Any ~ Pop[self];
WITH x
SELECT
FROM
x: ImagerPath.Trajectory => RETURN[x];
ENDCASE => ERROR JaM.Error[WrongType];
};
PopOutline:
PROC [self: State]
RETURNS [Outline] ~ {
x: Any ~ Pop[self];
WITH x
SELECT
FROM
x: Outline => RETURN[x];
ENDCASE => ERROR JaM.Error[WrongType];
};
PushVec:
PROC [self: State, v:
VEC] ~ {
PushReal[self, v.x]; PushReal[self, v.y];
};
PushRectangle:
PROC [self: State, r: ImagerBox.Rectangle] ~ {
PushReal[self, r.x]; PushReal[self, r.y];
PushReal[self, r.w]; PushReal[self, r.h];
};
PushFont:
PROC [self: State, x: ImagerFont.Font] ~ {
IF x#NIL THEN Push[self, x]
ELSE ERROR JaM.Error[WrongType];
};
PushTransformation:
PROC [self: State, x: ImagerTransformation.Transformation] ~ {
IF x#NIL THEN Push[self, x]
ELSE ERROR JaM.Error[WrongType];
};
PushColor:
PROC [self: State, x: ImagerColor.Color] ~ {
IF x#NIL THEN Push[self, x]
ELSE ERROR JaM.Error[WrongType];
};
PushColorOperator:
PROC [self: State, x: ImagerColor.ColorOperator] ~ {
IF x#NIL THEN Push[self, x]
ELSE ERROR JaM.Error[WrongType];
};
PushPixelArray:
PROC [self: State, x: ImagerPixelArray.PixelArray] ~ {
IF x#NIL THEN Push[self, x]
ELSE ERROR JaM.Error[WrongType];
};
PushTrajectory:
PROC [self: State, x: ImagerPath.Trajectory] ~ {
IF x#NIL THEN Push[self, x]
ELSE ERROR JaM.Error[WrongType];
};
PushOutline:
PROC [self: State, x: Outline] ~ {
IF x#NIL THEN Push[self, x]
ELSE ERROR JaM.Error[WrongType];
};
GetContext:
PROC [self: State]
RETURNS [Imager.Context] ~ {
info: JaMIPrivate.Info ¬ JaMIPrivate.GetInfo[self];
IF info = NIL THEN ERROR;
IF info.ipenabled THEN RETURN [info.ipdc];
RETURN[info.vdc];
};
GetInfoFromState:
PROC [self: State]
RETURNS [JaMIPrivate.Info] ~ {
info: JaMIPrivate.Info ¬ JaMIPrivate.GetInfo[self];
IF info = NIL THEN ERROR;
RETURN[info];
};
ApplyDoSave:
PUBLIC
PROC [self: State] ~ {
context: Imager.Context ~ GetContext[self];
x: Any ~ Pop[self];
action: PROC ~ { Execute[self, x] };
Imager.DoSave[context, action];
};
ApplyDoSaveAll:
PUBLIC
PROC [self: State] ~ {
context: Imager.Context ~ GetContext[self];
x: Any ~ Pop[self];
action: PROC ~ { Execute[self, x] };
Imager.DoSaveAll[context, action];
};
ApplyDRound:
PUBLIC
PROC [self: State] ~ {
p: VEC ~ PopVec[self];
PushVec[self, ImagerTransformation.DRound[p]];
};
ApplyMakeT:
PUBLIC
PROC [self: State] ~ {
f: REAL ~ PopReal[self]; e: REAL ~ PopReal[self]; d: REAL ~ PopReal[self];
c: REAL ~ PopReal[self]; b: REAL ~ PopReal[self]; a: REAL ~ PopReal[self];
PushTransformation[self, ImagerTransformation.Create[a, b, c, d, e, f]];
};
ApplyOpenT:
PUBLIC
PROC [self: State] ~ {
m: ImagerTransformation.Transformation ~ PopTransformation[self];
PushReal[self, m.a]; PushReal[self, m.b]; PushReal[self, m.c];
PushReal[self, m.d]; PushReal[self, m.e]; PushReal[self, m.f];
};
ApplyTranslate:
PUBLIC
PROC [self: State] ~ {
t: VEC ~ PopVec[self];
PushTransformation[self, ImagerTransformation.Translate[t]];
};
ApplyRotate:
PUBLIC
PROC [self: State] ~ {
a: REAL ~ PopReal[self];
PushTransformation[self, ImagerTransformation.Rotate[a]];
};
ApplyScale:
PUBLIC
PROC [self: State] ~ {
s: REAL ~ PopReal[self];
PushTransformation[self, ImagerTransformation.Scale[s]];
};
ApplyScale2:
PUBLIC
PROC [self: State] ~ {
s: VEC ~ PopVec[self];
PushTransformation[self, ImagerTransformation.Scale2[s]];
};
ApplyConcat:
PUBLIC
PROC [self: State] ~ {
n: ImagerTransformation.Transformation ~ PopTransformation[self];
m: ImagerTransformation.Transformation ~ PopTransformation[self];
PushTransformation[self, ImagerTransformation.Concat[m, n]];
};
ApplyInvert:
PUBLIC
PROC [self: State] ~ {
m: ImagerTransformation.Transformation ~ PopTransformation[self];
PushTransformation[self, ImagerTransformation.Invert[m]];
};
ApplyTransform:
PUBLIC
PROC [self: State] ~ {
m: ImagerTransformation.Transformation ~ PopTransformation[self];
p: VEC ~ PopVec[self];
PushVec[self, m.Transform[p]];
};
ApplyTransformVec:
PUBLIC
PROC [self: State] ~ {
m: ImagerTransformation.Transformation ~ PopTransformation[self];
v: VEC ~ PopVec[self];
PushVec[self, m.TransformVec[v]];
};
ApplyRoundXY:
PUBLIC
PROC [self: State] ~ {
m: ImagerTransformation.Transformation ~ PopTransformation[self];
p: VEC ~ PopVec[self];
PushVec[self, m.RoundXY[p]];
};
ApplyRoundXYVec:
PUBLIC
PROC [self: State] ~ {
m: ImagerTransformation.Transformation ~ PopTransformation[self];
v: VEC ~ PopVec[self];
PushVec[self, m.RoundXYVec[v]];
};
ApplyConcatT:
PUBLIC
PROC [self: State] ~ {
context: Imager.Context ~ GetContext[self];
m: ImagerTransformation.Transformation ~ PopTransformation[self];
Imager.ConcatT[context, m];
};
ApplyScaleT:
PUBLIC
PROC [self: State] ~ {
context: Imager.Context ~ GetContext[self];
s: REAL ~ PopReal[self];
Imager.ScaleT[context, s];
};
ApplyScale2T:
PUBLIC
PROC [self: State] ~ {
context: Imager.Context ~ GetContext[self];
s: VEC ~ PopVec[self];
Imager.Scale2T[context, s];
};
ApplyRotateT:
PUBLIC
PROC [self: State] ~ {
context: Imager.Context ~ GetContext[self];
a: REAL ~ PopReal[self];
Imager.RotateT[context, a];
};
ApplyTranslateT:
PUBLIC
PROC [self: State] ~ {
context: Imager.Context ~ GetContext[self];
t: VEC ~ PopVec[self];
Imager.TranslateT[context, t];
};
ApplyMove:
PUBLIC
PROC [self: State] ~ {
context: Imager.Context ~ GetContext[self];
Imager.Move[context];
};
ApplyTrans:
PUBLIC
PROC [self: State] ~ {
context: Imager.Context ~ GetContext[self];
Imager.Trans[context];
};
ApplySetXY:
PUBLIC
PROC [self: State] ~ {
context: Imager.Context ~ GetContext[self];
Imager.SetXY[context, PopVec[self]];
};
ApplySetXYRel:
PUBLIC
PROC [self: State] ~ {
context: Imager.Context ~ GetContext[self];
Imager.SetXYRel[context, PopVec[self]];
};
ApplySetXRel:
PUBLIC
PROC [self: State] ~ {
context: Imager.Context ~ GetContext[self];
Imager.SetXRel[context, PopReal[self]];
};
ApplySetYRel:
PUBLIC
PROC [self: State] ~ {
context: Imager.Context ~ GetContext[self];
Imager.SetYRel[context, PopReal[self]];
};
ApplyGetCP:
PUBLIC
PROC [self: State] ~ {
context: Imager.Context ~ GetContext[self];
PushVec[self, ImagerBackdoor.GetCP[context: context]];
};
ApplyGetCPRounded:
PUBLIC
PROC [self: State] ~ {
context: Imager.Context ~ GetContext[self];
PushVec[self, ImagerBackdoor.GetCP[context: context, rounded: TRUE]];
};
ApplyFindFont:
PUBLIC
PROC [self: State] ~ {
name: ROPE ~ PopRope[self];
PushFont[self, ImagerFont.Find[name]];
};
ApplyModifyFont:
PUBLIC
PROC [self: State] ~ {
m: ImagerTransformation.Transformation ~ PopTransformation[self];
font: ImagerFont.Font ~ PopFont[self];
PushFont[self, ImagerFont.Modify[font, m]];
};
ApplyScaleFont:
PUBLIC
PROC [self: State] ~ {
s: REAL ~ PopReal[self];
font: ImagerFont.Font ~ PopFont[self];
PushFont[self, ImagerFont.Scale[font, s]];
};
ApplySetFont:
PUBLIC
PROC [self: State] ~ {
context: Imager.Context ~ GetContext[self];
font: ImagerFont.Font ~ PopFont[self];
info: JaMIPrivate.Info ~ GetInfoFromState[self];
Imager.SetFont[context, font];
info.font ¬ font;
};
ApplyGetBoundingBox:
PUBLIC
PROC [self: State] ~ {
context: Imager.Context ~ GetContext[self];
font: ImagerFont.Font ~ GetInfoFromState[self].font;
extents: ImagerFont.Extents ~ ImagerFont.FontBoundingBox[font];
PushReal[self, extents.leftExtent]; PushReal[self, extents.descent];
PushReal[self, extents.rightExtent]; PushReal[self, extents.ascent];
};
ApplyGetTextBox:
PUBLIC
PROC [self: State] ~ {
context: Imager.Context ~ GetContext[self];
font: ImagerFont.Font ~ GetInfoFromState[self].font;
rope: ROPE ~ PopRope[self];
extents: ImagerFont.Extents ~ ImagerFont.RopeBoundingBox[font, rope];
PushReal[self, extents.leftExtent]; PushReal[self, extents.descent];
PushReal[self, extents.rightExtent]; PushReal[self, extents.ascent];
};
ApplySetAmplifySpace:
PUBLIC
PROC [self: State] ~ {
context: Imager.Context ~ GetContext[self];
Imager.SetAmplifySpace[context, PopReal[self]];
};
ApplyShowRope:
PUBLIC
PROC [self: State] ~ {
context: Imager.Context ~ GetContext[self];
rope: ROPE ~ PopRope[self];
Imager.ShowRope[context, rope];
};
ApplyShowXChar:
PUBLIC
PROC [self: State] ~ {
context: Imager.Context ~ GetContext[self];
lo: CARDINAL ~ PopInt[self];
hi: CARDINAL ~ PopInt[self];
xchar: ImagerFont.XChar ~ Char.Make[set: hi, code: lo];
Imager.ShowXChar[context, xchar];
};
ApplyStartUnderline:
PUBLIC
PROC [self: State] ~ {
context: Imager.Context ~ GetContext[self];
Imager.StartUnderline[context];
};
ApplyMaskUnderline:
PUBLIC
PROC [self: State] ~ {
context: Imager.Context ~ GetContext[self];
h: REAL ~ PopReal[self]; dy: REAL ~ PopReal[self];
Imager.MaskUnderline[context, dy, h];
};
ApplyCorrectMask:
PUBLIC
PROC [self: State] ~ {
context: Imager.Context ~ GetContext[self];
Imager.CorrectMask[context];
};
ApplyCorrectSpace:
PUBLIC
PROC [self: State] ~ {
context: Imager.Context ~ GetContext[self];
Imager.CorrectSpace[context, PopVec[self]];
};
ApplySpace:
PUBLIC
PROC [self: State] ~ {
context: Imager.Context ~ GetContext[self];
Imager.Space[context, PopReal[self]];
};
ApplyAmplifiedSpace:
PUBLIC
PROC [self: State] ~ {
context: Imager.Context ~ GetContext[self];
x: REAL ~ PopReal[self];
amplifySpace: REAL ~ ImagerBackdoor.GetReal[context, $amplifySpace];
Imager.Space[context, x*amplifySpace];
};
ApplySetCorrectMeasure:
PUBLIC
PROC [self: State] ~ {
context: Imager.Context ~ GetContext[self];
Imager.SetCorrectMeasure[context, PopVec[self]];
};
ApplySetCorrectTolerance:
PUBLIC
PROC [self: State] ~ {
context: Imager.Context ~ GetContext[self];
Imager.SetCorrectTolerance[context, PopVec[self]];
};
ApplySetCorrectShrink:
PUBLIC
PROC [self: State] ~ {
context: Imager.Context ~ GetContext[self];
Imager.SetCorrectShrink[context, PopReal[self]];
};
ApplyCorrect:
PUBLIC
PROC [self: State] ~ {
context: Imager.Context ~ GetContext[self];
x: Any ~ Pop[self];
action: PROC ~ { Execute[self, x] };
Imager.Correct[context, action];
};
ApplyDontCorrect:
PUBLIC
PROC [self: State] ~ {
context: Imager.Context ~ GetContext[self];
saveCP: BOOL ~ PopBool[self];
x: Any ~ Pop[self];
action: PROC ~ { Execute[self, x] };
Imager.DontCorrect[context, action, saveCP];
};
ApplySetColor:
PUBLIC
PROC [self: State] ~ {
context: Imager.Context ~ GetContext[self];
color: ImagerColor.Color ~ PopColor[self];
Imager.SetColor[context, color];
};
ApplyMakeGray:
PUBLIC
PROC [self: State] ~ {
f: REAL ~ PopReal[self];
PushColor[self, Imager.MakeGray[f]];
};
ApplySetGray:
PUBLIC
PROC [self: State] ~ {
context: Imager.Context ~ GetContext[self];
f: REAL ~ PopReal[self];
Imager.SetGray[context, f];
};
ApplyMakeGrayLinearColorModel:
PUBLIC
PROC [self: State] ~ {
colorOperator: ImagerColor.ColorOperator ~ ImagerColor.NewColorOperatorGrayLinear[255, 0, 256];
PushColorOperator[self, colorOperator];
};
ApplyMakeRGBLinearColorModel:
PUBLIC
PROC [self: State] ~ {
colorOperator: ImagerColor.ColorOperator ~ ImagerColor.NewColorOperatorRGB[255];
PushColorOperator[self, colorOperator];
};
ApplyMakePixelArrayFromAIS:
PUBLIC
PROC [self: State] ~ {
name: ROPE ~ PopRope[self];
PushPixelArray[self, ImagerPixelArrayAIS.FromAIS[name]];
};
ApplyMakePixelArrayJoin3AIS:
PUBLIC
PROC [self: State] ~ {
name3: ROPE ~ PopRope[self];
name2: ROPE ~ PopRope[self];
name1: ROPE ~ PopRope[self];
PushPixelArray[self, ImagerPixelArrayAIS.Join3AIS[name1, name2, name3]];
};
ApplyPixelArrayBounds:
PUBLIC
PROC [self: State] ~ {
pa: ImagerPixelArray.PixelArray ~ PopPixelArray[self];
r: ImagerBox.Rectangle ~ ImagerTransformation.TransformRectangle[pa.m, [0, 0, pa.sSize, pa.fSize]];
PushRectangle[self, r];
};
ApplyPixelArraySamplesPerPixel:
PUBLIC
PROC [self: State] ~ {
pa: ImagerPixelArray.PixelArray ~ PopPixelArray[self];
PushInt[self, pa.samplesPerPixel];
};
ApplyMakeSampledColor:
PUBLIC
PROC [self: State] ~ {
colorOperator: ImagerColor.ColorOperator ~ PopColorOperator[self];
um: ImagerTransformation.Transformation ~ PopTransformation[self];
pa: ImagerPixelArray.PixelArray ~ PopPixelArray[self];
PushColor[self, ImagerColor.MakeSampledColor[pa, um, colorOperator]];
};
ApplyMakeSampledBlack:
PUBLIC
PROC [self: State] ~ {
clear: BOOL ~ PopBool[self];
um: ImagerTransformation.Transformation ~ PopTransformation[self];
pa: ImagerPixelArray.PixelArray ~ PopPixelArray[self];
PushColor[self, ImagerColor.MakeSampledBlack[pa, um, clear]];
};
ApplySetSampledColor:
PUBLIC
PROC [self: State] ~ {
context: Imager.Context ~ GetContext[self];
colorOperator: ImagerColor.ColorOperator ~ PopColorOperator[self];
m: ImagerTransformation.Transformation ~ PopTransformation[self];
pa: ImagerPixelArray.PixelArray ~ PopPixelArray[self];
Imager.SetSampledColor[context, pa, m, colorOperator];
};
ApplySetSampledBlack:
PUBLIC
PROC [self: State] ~ {
context: Imager.Context ~ GetContext[self];
clear: BOOL ~ PopBool[self];
m: ImagerTransformation.Transformation ~ PopTransformation[self];
pa: ImagerPixelArray.PixelArray ~ PopPixelArray[self];
Imager.SetSampledBlack[context, pa, m, clear];
};
ApplyLastPoint:
PUBLIC
PROC [self: State] ~ {
t: ImagerPath.Trajectory ~ PopTrajectory[self];
PushVec[self, ImagerPath.LastPoint[t]];
};
ApplyMoveTo:
PUBLIC
PROC [self: State] ~ {
p: VEC ~ PopVec[self];
PushTrajectory[self, ImagerPath.MoveTo[p]];
};
ApplyLineTo:
PUBLIC
PROC [self: State] ~ {
p: VEC ~ PopVec[self];
t: ImagerPath.Trajectory ~ PopTrajectory[self];
PushTrajectory[self, ImagerPath.LineTo[t, p]];
};
ApplyLineToX:
PUBLIC
PROC [self: State] ~ {
x: REAL ~ PopReal[self];
t: ImagerPath.Trajectory ~ PopTrajectory[self];
PushTrajectory[self, ImagerPath.LineToX[t, x]];
};
ApplyLineToY:
PUBLIC
PROC [self: State] ~ {
y: REAL ~ PopReal[self];
t: ImagerPath.Trajectory ~ PopTrajectory[self];
PushTrajectory[self, ImagerPath.LineToY[t, y]];
};
ApplyCurveTo:
PUBLIC
PROC [self: State] ~ {
p3: VEC ~ PopVec[self];
p2: VEC ~ PopVec[self];
p1: VEC ~ PopVec[self];
t: ImagerPath.Trajectory ~ PopTrajectory[self];
PushTrajectory[self, ImagerPath.CurveTo[t, p1, p2, p3]];
};
ApplyConicTo:
PUBLIC
PROC [self: State] ~ {
r: REAL ~ PopReal[self];
p2: VEC ~ PopVec[self];
p1: VEC ~ PopVec[self];
t: ImagerPath.Trajectory ~ PopTrajectory[self];
PushTrajectory[self, ImagerPath.ConicTo[t, p1, p2, r]];
};
ApplyArcTo:
PUBLIC
PROC [self: State] ~ {
p2: VEC ~ PopVec[self];
p1: VEC ~ PopVec[self];
t: ImagerPath.Trajectory ~ PopTrajectory[self];
PushTrajectory[self, ImagerPath.ArcTo[t, p1, p2]];
};
MakeOutline:
PROC [self: State, odd:
BOOL ¬
FALSE] ~ {
n: INT ~ PopInt[self];
outline: Outline ~ NEW[ImagerPath.OutlineRep[n]];
outline.oddWrap ¬ odd;
FOR i: NAT DECREASING IN[0..outline.size) DO outline[i] ¬ PopTrajectory[self] ENDLOOP;
PushOutline[self, outline];
};
ApplyMakeOutline: PUBLIC PROC [self: State] ~ { MakeOutline[self] };
ApplyMakeOutlineOdd: PUBLIC PROC [self: State] ~ { MakeOutline[self, TRUE] };
MaskFill:
PROC [self: State, oddWrap:
BOOL ¬
FALSE] ~ {
context: Imager.Context ~ GetContext[self];
o: Outline ~ PopOutline[self];
path: ImagerPath.PathProc ~ {
FOR i:
NAT
IN[0..o.size)
DO
ImagerPath.MapTrajectory[o[i], moveTo, lineTo, curveTo, conicTo, arcTo];
ENDLOOP;
};
Imager.MaskFill[context: context, path: path, oddWrap: o.oddWrap OR oddWrap];
};
ApplyMaskFill: PUBLIC PROC [self: State] ~ { MaskFill[self] };
ApplyMaskFillParity: PUBLIC PROC [self: State] ~ { MaskFill[self, TRUE] };
ApplySetStrokeWidth:
PUBLIC
PROC [self: State] ~ {
context: Imager.Context ~ GetContext[self];
Imager.SetStrokeWidth[context, PopReal[self]];
};
ApplySetStrokeEnd:
PUBLIC
PROC [self: State] ~ {
context: Imager.Context ~ GetContext[self];
ImagerBackdoor.SetInt[context, $strokeEnd, PopInt[self]];
};
ApplySetStrokeJoint:
PUBLIC
PROC [self: State] ~ {
context: Imager.Context ~ GetContext[self];
feature: INT ¬ PopInt[self];
ImagerBackdoor.SetInt[context, $strokeJoint, feature];
};
ApplyMaskStroke:
PUBLIC
PROC [self: State] ~ {
context: Imager.Context ~ GetContext[self];
t: ImagerPath.Trajectory ~ PopTrajectory[self];
Imager.MaskStrokeTrajectory[context: context, trajectory: t];
};
ApplyMaskStrokeClosed:
PUBLIC
PROC [self: State] ~ {
context: Imager.Context ~ GetContext[self];
t: ImagerPath.Trajectory ~ PopTrajectory[self];
Imager.MaskStrokeTrajectory[context: context, trajectory: t, closed: TRUE];
};
NarrowToReal:
PROC [any:
REF
ANY]
RETURNS [
REAL] ~ {
WITH any
SELECT
FROM
real: REF REAL => RETURN [real];
int: REF INT => RETURN [int];
ENDCASE => ERROR Error[WrongType, "wrong type (pattern array must be numeric)"];
};
ApplyMaskDashedStroke:
PUBLIC
PROC [self: State] ~ {
context: Imager.Context ~ GetContext[self];
length: REAL ~ PopReal[self];
offset: REAL ~ PopReal[self];
pattern: Array ~ PopArray[self];
pGet: PROC [i: NAT] RETURNS [REAL] ~ { RETURN[NarrowToReal[AGet[pattern, i]]] };
t: ImagerPath.Trajectory ~ PopTrajectory[self];
path: ImagerPath.PathProc ~ { ImagerPath.MapTrajectory[trajectory: t,
moveTo: moveTo, lineTo: lineTo, curveTo: curveTo, conicTo: conicTo, arcTo: arcTo] };
Imager.MaskDashedStroke[context: context, path: path, patternLen: pattern.length, pattern: pGet, offset: offset, length: length];
};
ApplyMaskFillTrajectory:
PUBLIC
PROC [self: State] ~ {
context: Imager.Context ~ GetContext[self];
t: ImagerPath.Trajectory ~ PopTrajectory[self];
Imager.MaskFillTrajectory[context: context, trajectory: t];
};
ApplyMaskFillTrajectoryParity:
PUBLIC
PROC [self: State] ~ {
context: Imager.Context ~ GetContext[self];
t: ImagerPath.Trajectory ~ PopTrajectory[self];
Imager.MaskFillTrajectory[context: context, trajectory: t, oddWrap: TRUE];
};
ApplyMaskRectangle:
PUBLIC
PROC [self: State] ~ {
context: Imager.Context ~ GetContext[self];
Imager.MaskRectangle[context, PopRectangle[self]];
};
ApplyMaskBox:
PUBLIC
PROC [self: State] ~ {
context: Imager.Context ~ GetContext[self];
ymax: REAL ~ PopReal[self]; xmax: REAL ~ PopReal[self];
ymin: REAL ~ PopReal[self]; xmin: REAL ~ PopReal[self];
Imager.MaskBox[context, [xmin, ymin, xmax, ymax]];
};
ApplyMaskVector:
PUBLIC
PROC [self: State] ~ {
context: Imager.Context ~ GetContext[self];
p2: VEC ~ PopVec[self]; p1: VEC ~ PopVec[self];
Imager.MaskVector[context, p1, p2];
};
ApplyMaskPixel:
PUBLIC
PROC [self: State] ~ {
context: Imager.Context ~ GetContext[self];
pa: ImagerPixelArray.PixelArray ~ PopPixelArray[self];
Imager.MaskPixel[context, pa];
};
ApplySetPriorityImportant:
PUBLIC
PROC [self: State] ~ {
context: Imager.Context ~ GetContext[self];
Imager.SetPriorityImportant[context, PopBool[self]];
};
ApplySetNoImage:
PUBLIC
PROC [self: State] ~ {
context: Imager.Context ~ GetContext[self];
Imager.SetNoImage[context, PopBool[self]];
};
ClipOutline:
PROC [self: State, exclude:
BOOL ¬
FALSE] ~ {
context: Imager.Context ~ GetContext[self];
o: Outline ~ PopOutline[self];
path: ImagerPath.PathProc ~ {
FOR i:
NAT
IN[0..o.size)
DO
ImagerPath.MapTrajectory[o[i], moveTo, lineTo, curveTo, conicTo, arcTo];
ENDLOOP;
};
Imager.Clip[context: context, path: path, oddWrap: o.oddWrap, exclude: exclude];
};
ApplyClipOutline: PUBLIC PROC [self: State] ~ { ClipOutline[self] };
ApplyExcludeOutline: PUBLIC PROC [self: State] ~ { ClipOutline[self, TRUE] };
ClipRectangle:
PROC [self: State, exclude:
BOOL ¬
FALSE] ~ {
context: Imager.Context ~ GetContext[self];
r: ImagerBox.Rectangle ~ PopRectangle[self];
Imager.ClipRectangle[context: context, r: r, exclude: exclude];
};
ApplyClipRectangle: PUBLIC PROC [self: State] ~ { ClipRectangle[self] };
ApplyExcludeRectangle: PUBLIC PROC [self: State] ~ { ClipRectangle[self, TRUE] };
RegisterImager:
PUBLIC
PROC [self: State] ~ {
Register[self, ".dosave", ApplyDoSave];
Register[self, ".dosaveall", ApplyDoSaveAll];
Register[self, ".dround", ApplyDRound];
Register[self, ".maket", ApplyMakeT];
Register[self, ".opent", ApplyOpenT];
Register[self, ".translate", ApplyTranslate];
Register[self, ".rotate", ApplyRotate];
Register[self, ".scale", ApplyScale];
Register[self, ".scale2", ApplyScale2];
Register[self, ".concat", ApplyConcat];
Register[self, ".invert", ApplyInvert];
Register[self, ".transform", ApplyTransform];
Register[self, ".transformvec", ApplyTransformVec];
Register[self, ".roundxy", ApplyRoundXY];
Register[self, ".roundxyvec", ApplyRoundXYVec];
Register[self, ".concatt", ApplyConcatT];
Register[self, ".scalet", ApplyScaleT];
Register[self, ".scale2t", ApplyScale2T];
Register[self, ".rotatet", ApplyRotateT];
Register[self, ".translatet", ApplyTranslateT];
Register[self, ".move", ApplyMove];
Register[self, ".trans", ApplyTrans];
Register[self, ".setxy", ApplySetXY];
Register[self, ".setxyrel", ApplySetXYRel];
Register[self, ".setxrel", ApplySetXRel];
Register[self, ".setyrel", ApplySetYRel];
Register[self, ".getcp", ApplyGetCP];
Register[self, ".getcprounded", ApplyGetCPRounded];
Register[self, ".findfont", ApplyFindFont];
Register[self, ".modifyfont", ApplyModifyFont];
Register[self, ".scalefont", ApplyScaleFont];
Register[self, ".setfont", ApplySetFont];
Register[self, ".fontbox", ApplyGetBoundingBox];
Register[self, ".textbox", ApplyGetTextBox];
Register[self, ".setamplifyspace", ApplySetAmplifySpace];
Register[self, ".showrope", ApplyShowRope];
Register[self, ".showxchar", ApplyShowXChar];
Register[self, ".startunderline", ApplyStartUnderline];
Register[self, ".maskunderline", ApplyMaskUnderline];
Register[self, ".correctmask", ApplyCorrectMask];
Register[self, ".correctspace", ApplyCorrectSpace];
Register[self, ".space", ApplySpace];
Register[self, ".amplifiedspace", ApplyAmplifiedSpace];
Register[self, ".setcorrectmeasure", ApplySetCorrectMeasure];
Register[self, ".setcorrecttolerance", ApplySetCorrectTolerance];
Register[self, ".setcorrectshrink", ApplySetCorrectShrink];
Register[self, ".correct", ApplyCorrect];
Register[self, ".dontcorrect", ApplyDontCorrect];
Register[self, ".setcolor", ApplySetColor];
Register[self, ".makegray", ApplyMakeGray];
Register[self, ".setgray", ApplySetGray];
Register[self, ".graylinearcolormodel", ApplyMakeGrayLinearColorModel];
Register[self, ".rgblinearcolormodel", ApplyMakeRGBLinearColorModel];
Register[self, ".pixelarrayfromais", ApplyMakePixelArrayFromAIS];
Register[self, ".pixelarrayfrom3ais", ApplyMakePixelArrayJoin3AIS];
Register[self, ".pixelarraybounds", ApplyPixelArrayBounds];
Register[self, ".pixelarraysamplesperpixel", ApplyPixelArraySamplesPerPixel];
Register[self, ".makesampledcolor", ApplyMakeSampledColor];
Register[self, ".makesampledblack", ApplyMakeSampledBlack];
Register[self, ".setsampledcolor", ApplySetSampledColor];
Register[self, ".setsampledblack", ApplySetSampledBlack];
Register[self, ".lastpoint", ApplyLastPoint];
Register[self, ".moveto", ApplyMoveTo];
Register[self, ".lineto", ApplyLineTo];
Register[self, ".linetox", ApplyLineToX];
Register[self, ".linetoy", ApplyLineToY];
Register[self, ".curveto", ApplyCurveTo];
Register[self, ".conicto", ApplyConicTo];
Register[self, ".arcto", ApplyArcTo];
Register[self, ".makeoutline", ApplyMakeOutline];
Register[self, ".makeoutlineodd", ApplyMakeOutlineOdd];
Register[self, ".maskfill", ApplyMaskFill];
Register[self, ".maskfillparity", ApplyMaskFillParity];
Register[self, ".maskfilltrajectory", ApplyMaskFillTrajectory];
Register[self, ".maskfilltrajectoryparity", ApplyMaskFillTrajectoryParity];
Register[self, ".setstrokewidth", ApplySetStrokeWidth];
Register[self, ".setstrokeend", ApplySetStrokeEnd];
Register[self, ".setstrokejoint", ApplySetStrokeJoint];
Register[self, ".maskstroke", ApplyMaskStroke];
Register[self, ".maskstrokeclosed", ApplyMaskStrokeClosed];
Register[self, ".maskdashedstroke", ApplyMaskDashedStroke];
Register[self, ".maskrectangle", ApplyMaskRectangle];
Register[self, ".maskbox", ApplyMaskBox];
Register[self, ".maskvector", ApplyMaskVector];
Register[self, ".maskpixel", ApplyMaskPixel];
Register[self, ".setpriorityimportant", ApplySetPriorityImportant];
Register[self, ".setnoimage", ApplySetNoImage];
Register[self, ".clipoutline", ApplyClipOutline];
Register[self, ".excludeoutline", ApplyExcludeOutline];
Register[self, ".cliprectangle", ApplyClipRectangle];
Register[self, ".excluderectangle", ApplyExcludeRectangle];
};
END.