57 if (outline == NULL || outline->
loop == NULL)
60 StartPoint = outline->
loop;
61 EdgePoint = StartPoint;
63 NextPoint = EdgePoint->
next;
66 if (EdgePoint->
pos.
x != NextPoint->
pos.
x ||
67 EdgePoint->
pos.
y != NextPoint->
pos.
y) {
73 MFOutline =
push(MFOutline, NewPoint);
75 EdgePoint = NextPoint;
76 }
while (EdgePoint != StartPoint);
78 if (MFOutline != NULL)
97 while (outline != NULL) {
99 if (mf_outline != NULL)
100 mf_outlines =
push(mf_outlines, mf_outline);
101 outline = outline->
next;
141 while (EdgePoint != Outline);
162 while (Start != NULL) {
214 while (Last != First);
241 while (!
PointAt(EdgePoint)->ExtremityMark)
277 }
while (EdgePoint != Outline);
308 ASSERT_HOST(!
"How did NormalizeOutlines get called in character mode?");
341 for (Current = Start; Current != End; Current =
NextPointAfter (Current))
342 PointAt (Current)->Direction = Direction;
344 PointAt (End)->PreviousDirection = Direction;
369 CurrentPoint =
PointAt(Current);
377 while (Current != First);
418 Start->
Slope = Delta.
y / Delta.
x;
421 if (Start->
Slope > MinSlope)
422 if (Start->
Slope < MaxSlope)
428 else if (Start->
Slope < -MinSlope)
429 if (Start->
Slope > -MaxSlope)
435 else if (Delta.
y > 0)
436 if (Start->
Slope < -MinSlope)
437 if (Start->
Slope > -MaxSlope)
443 else if (Start->
Slope > MinSlope)
444 if (Start->
Slope < MaxSlope)
468 InitialDirection =
PointAt (EdgePoint)->Direction;
474 }
while (
PointAt(EdgePoint)->Direction == InitialDirection &&
476 next_pt != NULL && !
PointAt(next_pt)->Hidden);
const int kBlnBaselineOffset
void free_struct(void *deadstruct, inT32, const char *)
void ComputeDirection(MFEDGEPT *Start, MFEDGEPT *Finish, FLOAT32 MinSlope, FLOAT32 MaxSlope)
MFEDGEPT * NewEdgePoint()
#define MakeOutlineCircular(O)
LIST ConvertOutlines(TESSLINE *outline, LIST mf_outlines, OUTLINETYPE outline_type)
#define NextPointAfter(E)
MFOUTLINE ConvertOutline(TESSLINE *outline)
void NormalizeOutline(MFOUTLINE Outline, FLOAT32 XOrigin)
void ChangeDirection(MFOUTLINE Start, MFOUTLINE End, DIRECTION Direction)
void LocalNormTransform(const TPOINT &pt, TPOINT *transformed) const
#define DegenerateOutline(O)
void FreeOutlines(LIST Outlines)
void FindDirectionChanges(MFOUTLINE Outline, FLOAT32 MinSlope, FLOAT32 MaxSlope)
void destroy_nodes(LIST list, void_dest destructor)
LIST push(LIST list, void *element)
LIST ConvertBlob(TBLOB *blob)
void FreeMFOutline(void *arg)
void MarkDirectionChanges(MFOUTLINE Outline)
DIRECTION PreviousDirection
void * alloc_struct(inT32 count, const char *)
#define set_rest(l, cell)
MFOUTLINE NextExtremity(MFOUTLINE EdgePoint)
void NormalizeOutlines(LIST Outlines, FLOAT32 *XScale, FLOAT32 *YScale)
void CharNormalizeOutline(MFOUTLINE Outline, const DENORM &cn_denorm)
MFOUTLINE NextDirectionChange(MFOUTLINE EdgePoint)