Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//
// Copyright (c) 2001 Microsoft Corporation. All rights reserved.
//
// Module:
// volcano/dll/strkutil.c
//
// Description:
// Functions to implement the functionality of managing breakpoint structures.
//
// Author:
// hrowley & ahmadab 12/05/01
//
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
#include "common.h"
#include "volcanop.h"
// Make a copy of the points in a stroke. Used so that when we free
// the glyph we don't free the passed in points.
POINT * DupPoints(POINT *pOldPoints, int nPoints) { int ii; POINT *pPoints;
// Alloc space.
pPoints = (POINT *) ExternAlloc(nPoints * sizeof(POINT)); if (!pPoints) { return (POINT *)0; }
// Copy point data.
for (ii = 0; ii < nPoints; ++ii) { pPoints[ii] = pOldPoints[ii]; }
// Return the new copy.
return pPoints; }
// Build glyph structure from stroke array.
GLYPH * GlyphFromStrokes(UINT cStrokes, STROKE *pStrokes) { int ii; GLYPH *pGlyph;
// Convert strokes to GLYPHs and FRAMEs so that we can call the
// old code.
pGlyph = (GLYPH *)0; for (ii = cStrokes - 1; ii >= 0; --ii) { STROKE *pStroke; GLYPH *pGlyphCur;
// Alloc glyph.
pGlyphCur = NewGLYPH(); if (!pGlyphCur) { goto error; }
// Add to list, and alloc frame
pGlyphCur->next = pGlyph; pGlyph = pGlyphCur; pGlyphCur->frame = NewFRAME(); if (!pGlyphCur->frame) { goto error; }
// Get stroke to process.
pStroke = pStrokes + ii;
// Fill in frame. We just fill in what we need, and ignore
// fields not used by Otter and Zilla, or are set by them.
pGlyphCur->frame->info.cPnt = pStroke->nInk; pGlyphCur->frame->info.wPdk = PDK_TRANSITION | PDK_DOWN; pGlyphCur->frame->rgrawxy = DupPoints(pStroke->pts, pStroke->nInk); pGlyphCur->frame->rect = pStroke->bbox; pGlyphCur->frame->iframe = ii;
if (pGlyphCur->frame->rgrawxy == NULL) { goto error; } }
return pGlyph;
error: // Cleanup glyphs on error.
if (pGlyph) { DestroyFramesGLYPH(pGlyph); DestroyGLYPH(pGlyph); } return (GLYPH *)0; }
|