summaryrefslogtreecommitdiff
path: root/render/glyph.c
diff options
context:
space:
mode:
authorEamon Walsh <ewalsh@tycho.nsa.gov>2007-08-28 09:28:25 -0400
committerEamon Walsh <ewalsh@moss-charon.epoch.ncsc.mil>2007-08-28 09:28:25 -0400
commit4017d3190234e189a0bbd33193a148d4d3c7556b (patch)
tree2ab228113d410386afde50c893f137d95974b8f3 /render/glyph.c
parent85547073265ae9bc4ae3af920a6d3214fd1ca0c5 (diff)
devPrivates rework: since API is already broken, switch everything
over to new system. Need to update documentation and address some remaining vestiges of old system such as CursorRec structure, fb "offman" structure, and FontRec privates.
Diffstat (limited to 'render/glyph.c')
-rw-r--r--render/glyph.c321
1 files changed, 15 insertions, 306 deletions
diff --git a/render/glyph.c b/render/glyph.c
index 583a52ba3..cb1534d6e 100644
--- a/render/glyph.c
+++ b/render/glyph.c
@@ -81,220 +81,18 @@ static const CARD8 glyphDepths[GlyphFormatNum] = { 1, 4, 8, 16, 32 };
static GlyphHashRec globalGlyphs[GlyphFormatNum];
-static int globalTotalGlyphPrivateSize = 0;
-
-static int glyphPrivateCount = 0;
-
-void
-ResetGlyphPrivates (void)
-{
- glyphPrivateCount = 0;
-}
-
-int
-AllocateGlyphPrivateIndex (void)
-{
- return glyphPrivateCount++;
-}
-
-Bool
-AllocateGlyphPrivate (ScreenPtr pScreen,
- int index2,
- unsigned amount)
-{
- PictureScreenPtr ps;
- unsigned oldamount;
-
- ps = GetPictureScreenIfSet (pScreen);
- if (!ps)
- return FALSE;
-
- /* Round up sizes for proper alignment */
- amount = ((amount + (sizeof (DevUnion) - 1)) / sizeof (DevUnion)) *
- sizeof (DevUnion);
-
- if (index2 >= ps->glyphPrivateLen)
- {
- unsigned *nsizes;
- nsizes = (unsigned *) xrealloc (ps->glyphPrivateSizes,
- (index2 + 1) * sizeof (unsigned));
- if (!nsizes)
- return FALSE;
-
- while (ps->glyphPrivateLen <= index2)
- {
- nsizes[ps->glyphPrivateLen++] = 0;
- ps->totalGlyphPrivateSize += sizeof (DevUnion);
- }
- ps->glyphPrivateSizes = nsizes;
- }
- oldamount = ps->glyphPrivateSizes[index2];
- if (amount > oldamount)
- {
- ps->glyphPrivateSizes[index2] = amount;
- ps->totalGlyphPrivateSize += (amount - oldamount);
- }
- ps->totalGlyphPrivateSize = BitmapBytePad (ps->totalGlyphPrivateSize * 8);
-
- return TRUE;
-}
-
static void
-SetGlyphScreenPrivateOffsets (void)
+FreeGlyphPrivates (GlyphPtr glyph)
{
- PictureScreenPtr ps;
- int offset = 0;
- int i;
+ ScreenPtr pScreen;
+ int i;
- for (i = 0; i < screenInfo.numScreens; i++)
- {
- ps = GetPictureScreenIfSet (screenInfo.screens[i]);
- if (ps && ps->totalGlyphPrivateSize)
- {
- ps->glyphPrivateOffset = offset;
- offset += ps->totalGlyphPrivateSize / sizeof (DevUnion);
- }
+ for (i = 0; i < screenInfo.numScreens; i++) {
+ pScreen = screenInfo.screens[i];
+ dixFreePrivates(*GetGlyphPrivatesForScreen(glyph, pScreen));
}
-}
-static void
-SetGlyphPrivatePointers (GlyphPtr glyph)
-{
- PictureScreenPtr ps;
- int i;
- char *ptr;
- DevUnion *ppriv;
- unsigned *sizes;
- unsigned size;
- int len;
-
- for (i = 0; i < screenInfo.numScreens; i++)
- {
- ps = GetPictureScreenIfSet (screenInfo.screens[i]);
- if (ps && ps->totalGlyphPrivateSize)
- {
- ppriv = glyph->devPrivates + ps->glyphPrivateOffset;
- sizes = ps->glyphPrivateSizes;
- ptr = (char *) (ppriv + ps->glyphPrivateLen);
- for (len = ps->glyphPrivateLen; --len >= 0; ppriv++, sizes++)
- {
- if ((size = *sizes) != 0)
- {
- ppriv->ptr = (pointer) ptr;
- ptr += size;
- }
- else
- ppriv->ptr = (pointer) 0;
- }
- }
- }
-}
-
-static Bool
-ReallocGlobalGlyphPrivate (GlyphPtr glyph)
-{
- PictureScreenPtr ps;
- DevUnion *devPrivates;
- char *ptr;
- int i;
-
- devPrivates = xalloc (globalTotalGlyphPrivateSize);
- if (!devPrivates)
- return FALSE;
-
- ptr = (char *) devPrivates;
- for (i = 0; i < screenInfo.numScreens; i++)
- {
- ps = GetPictureScreenIfSet (screenInfo.screens[i]);
- if (ps && ps->totalGlyphPrivateSize)
- {
- if (ps->glyphPrivateOffset != -1)
- {
- memcpy (ptr, glyph->devPrivates + ps->glyphPrivateOffset,
- ps->totalGlyphPrivateSize);
- }
- else if (ps->totalGlyphPrivateSize)
- {
- memset (ptr, 0, ps->totalGlyphPrivateSize);
- }
-
- ptr += ps->totalGlyphPrivateSize;
- }
- }
-
- if (glyph->devPrivates)
- xfree (glyph->devPrivates);
-
- glyph->devPrivates = devPrivates;
-
- return TRUE;
-}
-
-Bool
-GlyphInit (ScreenPtr pScreen)
-{
- PictureScreenPtr ps = GetPictureScreen (pScreen);
-
- ps->totalGlyphPrivateSize = 0;
- ps->glyphPrivateSizes = 0;
- ps->glyphPrivateLen = 0;
- ps->glyphPrivateOffset = -1;
-
- return TRUE;
-}
-
-Bool
-GlyphFinishInit (ScreenPtr pScreen)
-{
- PictureScreenPtr ps = GetPictureScreen (pScreen);
-
- if (ps->totalGlyphPrivateSize)
- {
- GlyphPtr glyph;
- int fdepth, i;
-
- globalTotalGlyphPrivateSize += ps->totalGlyphPrivateSize;
-
- for (fdepth = 0; fdepth < GlyphFormatNum; fdepth++)
- {
- if (!globalGlyphs[fdepth].hashSet)
- continue;
-
- for (i = 0; i < globalGlyphs[fdepth].hashSet->size; i++)
- {
- glyph = globalGlyphs[fdepth].table[i].glyph;
- if (glyph && glyph != DeletedGlyph)
- {
- if (!ReallocGlobalGlyphPrivate (glyph))
- return FALSE;
- }
- }
- }
-
- SetGlyphScreenPrivateOffsets ();
-
- for (fdepth = 0; fdepth < GlyphFormatNum; fdepth++)
- {
- if (!globalGlyphs[fdepth].hashSet)
- continue;
-
- for (i = 0; i < globalGlyphs[fdepth].hashSet->size; i++)
- {
- glyph = globalGlyphs[fdepth].table[i].glyph;
- if (glyph && glyph != DeletedGlyph)
- {
- SetGlyphPrivatePointers (glyph);
-
- if (!(*ps->RealizeGlyph) (pScreen, glyph))
- return FALSE;
- }
- }
- }
- }
- else
- ps->glyphPrivateOffset = 0;
-
- return TRUE;
+ dixFreePrivates(glyph->devPrivates);
}
void
@@ -304,8 +102,6 @@ GlyphUninit (ScreenPtr pScreen)
GlyphPtr glyph;
int fdepth, i;
- globalTotalGlyphPrivateSize -= ps->totalGlyphPrivateSize;
-
for (fdepth = 0; fdepth < GlyphFormatNum; fdepth++)
{
if (!globalGlyphs[fdepth].hashSet)
@@ -317,43 +113,20 @@ GlyphUninit (ScreenPtr pScreen)
if (glyph && glyph != DeletedGlyph)
{
(*ps->UnrealizeGlyph) (pScreen, glyph);
-
- if (globalTotalGlyphPrivateSize)
- {
- if (!ReallocGlobalGlyphPrivate (glyph))
- return;
- }
- else
- {
- if (glyph->devPrivates)
- xfree (glyph->devPrivates);
- glyph->devPrivates = NULL;
- }
+ FreeGlyphPrivates(glyph);
+ glyph->devPrivates = NULL;
}
}
}
- if (globalTotalGlyphPrivateSize)
- SetGlyphScreenPrivateOffsets ();
-
for (fdepth = 0; fdepth < GlyphFormatNum; fdepth++)
{
if (!globalGlyphs[fdepth].hashSet)
continue;
for (i = 0; i < globalGlyphs[fdepth].hashSet->size; i++)
- {
glyph = globalGlyphs[fdepth].table[i].glyph;
- if (glyph && glyph != DeletedGlyph)
- {
- if (globalTotalGlyphPrivateSize)
- SetGlyphPrivatePointers (glyph);
- }
- }
}
-
- if (ps->glyphPrivateSizes)
- xfree (ps->glyphPrivateSizes);
}
GlyphHashSetPtr
@@ -367,50 +140,6 @@ FindGlyphHashSet (CARD32 filled)
return 0;
}
-static int _GlyphSetPrivateAllocateIndex = 0;
-
-int
-AllocateGlyphSetPrivateIndex (void)
-{
- return _GlyphSetPrivateAllocateIndex++;
-}
-
-void
-ResetGlyphSetPrivateIndex (void)
-{
- _GlyphSetPrivateAllocateIndex = 0;
-}
-
-Bool
-_GlyphSetSetNewPrivate (GlyphSetPtr glyphSet, int n, pointer ptr)
-{
- pointer *new;
-
- if (n > glyphSet->maxPrivate) {
- if (glyphSet->devPrivates &&
- glyphSet->devPrivates != (pointer)(&glyphSet[1])) {
- new = (pointer *) xrealloc (glyphSet->devPrivates,
- (n + 1) * sizeof (pointer));
- if (!new)
- return FALSE;
- } else {
- new = (pointer *) xalloc ((n + 1) * sizeof (pointer));
- if (!new)
- return FALSE;
- if (glyphSet->devPrivates)
- memcpy (new,
- glyphSet->devPrivates,
- (glyphSet->maxPrivate + 1) * sizeof (pointer));
- }
- glyphSet->devPrivates = new;
- /* Zero out new, uninitialize privates */
- while (++glyphSet->maxPrivate < n)
- glyphSet->devPrivates[glyphSet->maxPrivate] = (pointer)0;
- }
- glyphSet->devPrivates[n] = ptr;
- return TRUE;
-}
-
GlyphRefPtr
FindGlyphRef (GlyphHashPtr hash, CARD32 signature, Bool match, GlyphPtr compare)
{
@@ -539,8 +268,7 @@ FreeGlyph (GlyphPtr glyph, int format)
(*ps->UnrealizeGlyph) (screenInfo.screens[i], glyph);
}
- if (glyph->devPrivates)
- xfree (glyph->devPrivates);
+ FreeGlyphPrivates(glyph);
xfree (glyph);
}
}
@@ -566,8 +294,7 @@ AddGlyph (GlyphSetPtr glyphSet, GlyphPtr glyph, Glyph id)
if (ps)
(*ps->UnrealizeGlyph) (screenInfo.screens[i], glyph);
}
- if (glyph->devPrivates)
- xfree (glyph->devPrivates);
+ FreeGlyphPrivates(glyph);
xfree (glyph);
glyph = gr->glyph;
}
@@ -634,16 +361,7 @@ AllocateGlyph (xGlyphInfo *gi, int fdepth)
glyph->refcnt = 0;
glyph->size = size + sizeof (xGlyphInfo);
glyph->info = *gi;
-
- if (globalTotalGlyphPrivateSize)
- {
- glyph->devPrivates = xalloc (globalTotalGlyphPrivateSize);
- if (!glyph->devPrivates)
- return 0;
-
- SetGlyphPrivatePointers (glyph);
- } else
- glyph->devPrivates = NULL;
+ glyph->devPrivates = NULL;
for (i = 0; i < screenInfo.numScreens; i++)
{
@@ -659,8 +377,7 @@ AllocateGlyph (xGlyphInfo *gi, int fdepth)
(*ps->UnrealizeGlyph) (screenInfo.screens[i], glyph);
}
- if (glyph->devPrivates)
- xfree (glyph->devPrivates);
+ FreeGlyphPrivates(glyph);
xfree (glyph);
return 0;
}
@@ -744,15 +461,11 @@ AllocateGlyphSet (int fdepth, PictFormatPtr format)
return FALSE;
}
- size = (sizeof (GlyphSetRec) +
- (sizeof (pointer) * _GlyphSetPrivateAllocateIndex));
+ size = sizeof (GlyphSetRec);
glyphSet = xalloc (size);
if (!glyphSet)
return FALSE;
bzero((char *)glyphSet, size);
- glyphSet->maxPrivate = _GlyphSetPrivateAllocateIndex - 1;
- if (_GlyphSetPrivateAllocateIndex)
- glyphSet->devPrivates = (pointer)(&glyphSet[1]);
if (!AllocateGlyphHash (&glyphSet->hash, &glyphHashSets[0]))
{
@@ -792,11 +505,7 @@ FreeGlyphSet (pointer value,
else
ResizeGlyphHash (&globalGlyphs[glyphSet->fdepth], 0, TRUE);
xfree (table);
-
- if (glyphSet->devPrivates &&
- glyphSet->devPrivates != (pointer)(&glyphSet[1]))
- xfree(glyphSet->devPrivates);
-
+ dixFreePrivates(glyphSet->devPrivates);
xfree (glyphSet);
}
return Success;