damage: Don't rewrite Text ops to GlyphBlt ops
There's no particularly good reason to, and it breaks Xnest. Bugzilla: http://bugs.freedesktop.org/2454 Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Eric Anholt <eric@anholt.net> Signed-off-by: Adam Jackson <ajax@redhat.com>
This commit is contained in:
parent
d08966227e
commit
0f3f8e4295
|
@ -1336,7 +1336,7 @@ damageDamageChars(DrawablePtr pDrawable,
|
||||||
#define TT_POLY16 2
|
#define TT_POLY16 2
|
||||||
#define TT_IMAGE16 3
|
#define TT_IMAGE16 3
|
||||||
|
|
||||||
static int
|
static void
|
||||||
damageText(DrawablePtr pDrawable,
|
damageText(DrawablePtr pDrawable,
|
||||||
GCPtr pGC,
|
GCPtr pGC,
|
||||||
int x,
|
int x,
|
||||||
|
@ -1345,39 +1345,29 @@ damageText(DrawablePtr pDrawable,
|
||||||
char *chars, FontEncoding fontEncoding, Bool textType)
|
char *chars, FontEncoding fontEncoding, Bool textType)
|
||||||
{
|
{
|
||||||
CharInfoPtr *charinfo;
|
CharInfoPtr *charinfo;
|
||||||
CharInfoPtr *info;
|
|
||||||
unsigned long i;
|
unsigned long i;
|
||||||
unsigned int n;
|
unsigned int n;
|
||||||
int w;
|
|
||||||
Bool imageblt;
|
Bool imageblt;
|
||||||
|
|
||||||
imageblt = (textType == TT_IMAGE8) || (textType == TT_IMAGE16);
|
imageblt = (textType == TT_IMAGE8) || (textType == TT_IMAGE16);
|
||||||
|
|
||||||
|
if (!checkGCDamage(pDrawable, pGC))
|
||||||
|
return;
|
||||||
|
|
||||||
charinfo = malloc(count * sizeof(CharInfoPtr));
|
charinfo = malloc(count * sizeof(CharInfoPtr));
|
||||||
if (!charinfo)
|
if (!charinfo)
|
||||||
return x;
|
return;
|
||||||
|
|
||||||
GetGlyphs(pGC->font, count, (unsigned char *) chars,
|
GetGlyphs(pGC->font, count, (unsigned char *) chars,
|
||||||
fontEncoding, &i, charinfo);
|
fontEncoding, &i, charinfo);
|
||||||
n = (unsigned int) i;
|
n = (unsigned int) i;
|
||||||
w = 0;
|
|
||||||
if (!imageblt)
|
|
||||||
for (info = charinfo; i--; info++)
|
|
||||||
w += (*info)->metrics.characterWidth;
|
|
||||||
|
|
||||||
if (n != 0) {
|
if (n != 0) {
|
||||||
damageDamageChars(pDrawable, pGC->font, x + pDrawable->x,
|
damageDamageChars(pDrawable, pGC->font, x + pDrawable->x,
|
||||||
y + pDrawable->y, n, charinfo, imageblt,
|
y + pDrawable->y, n, charinfo, imageblt,
|
||||||
pGC->subWindowMode);
|
pGC->subWindowMode);
|
||||||
if (imageblt)
|
|
||||||
(*pGC->ops->ImageGlyphBlt) (pDrawable, pGC, x, y, n, charinfo,
|
|
||||||
FONTGLYPHS(pGC->font));
|
|
||||||
else
|
|
||||||
(*pGC->ops->PolyGlyphBlt) (pDrawable, pGC, x, y, n, charinfo,
|
|
||||||
FONTGLYPHS(pGC->font));
|
|
||||||
}
|
}
|
||||||
free(charinfo);
|
free(charinfo);
|
||||||
return x + w;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -1385,12 +1375,9 @@ damagePolyText8(DrawablePtr pDrawable,
|
||||||
GCPtr pGC, int x, int y, int count, char *chars)
|
GCPtr pGC, int x, int y, int count, char *chars)
|
||||||
{
|
{
|
||||||
DAMAGE_GC_OP_PROLOGUE(pGC, pDrawable);
|
DAMAGE_GC_OP_PROLOGUE(pGC, pDrawable);
|
||||||
|
damageText(pDrawable, pGC, x, y, (unsigned long) count, chars, Linear8Bit,
|
||||||
if (checkGCDamage(pDrawable, pGC))
|
TT_POLY8);
|
||||||
x = damageText(pDrawable, pGC, x, y, (unsigned long) count, chars,
|
x = (*pGC->ops->PolyText8) (pDrawable, pGC, x, y, count, chars);
|
||||||
Linear8Bit, TT_POLY8);
|
|
||||||
else
|
|
||||||
x = (*pGC->ops->PolyText8) (pDrawable, pGC, x, y, count, chars);
|
|
||||||
damageRegionProcessPending(pDrawable);
|
damageRegionProcessPending(pDrawable);
|
||||||
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
|
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
|
||||||
return x;
|
return x;
|
||||||
|
@ -1401,14 +1388,10 @@ damagePolyText16(DrawablePtr pDrawable,
|
||||||
GCPtr pGC, int x, int y, int count, unsigned short *chars)
|
GCPtr pGC, int x, int y, int count, unsigned short *chars)
|
||||||
{
|
{
|
||||||
DAMAGE_GC_OP_PROLOGUE(pGC, pDrawable);
|
DAMAGE_GC_OP_PROLOGUE(pGC, pDrawable);
|
||||||
|
damageText(pDrawable, pGC, x, y, (unsigned long) count, (char *) chars,
|
||||||
if (checkGCDamage(pDrawable, pGC))
|
FONTLASTROW(pGC->font) == 0 ? Linear16Bit : TwoD16Bit,
|
||||||
x = damageText(pDrawable, pGC, x, y, (unsigned long) count,
|
TT_POLY16);
|
||||||
(char *) chars,
|
x = (*pGC->ops->PolyText16) (pDrawable, pGC, x, y, count, chars);
|
||||||
FONTLASTROW(pGC->font) == 0 ? Linear16Bit : TwoD16Bit,
|
|
||||||
TT_POLY16);
|
|
||||||
else
|
|
||||||
x = (*pGC->ops->PolyText16) (pDrawable, pGC, x, y, count, chars);
|
|
||||||
damageRegionProcessPending(pDrawable);
|
damageRegionProcessPending(pDrawable);
|
||||||
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
|
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
|
||||||
return x;
|
return x;
|
||||||
|
@ -1419,12 +1402,9 @@ damageImageText8(DrawablePtr pDrawable,
|
||||||
GCPtr pGC, int x, int y, int count, char *chars)
|
GCPtr pGC, int x, int y, int count, char *chars)
|
||||||
{
|
{
|
||||||
DAMAGE_GC_OP_PROLOGUE(pGC, pDrawable);
|
DAMAGE_GC_OP_PROLOGUE(pGC, pDrawable);
|
||||||
|
damageText(pDrawable, pGC, x, y, (unsigned long) count, chars, Linear8Bit,
|
||||||
if (checkGCDamage(pDrawable, pGC))
|
TT_IMAGE8);
|
||||||
damageText(pDrawable, pGC, x, y, (unsigned long) count, chars,
|
(*pGC->ops->ImageText8) (pDrawable, pGC, x, y, count, chars);
|
||||||
Linear8Bit, TT_IMAGE8);
|
|
||||||
else
|
|
||||||
(*pGC->ops->ImageText8) (pDrawable, pGC, x, y, count, chars);
|
|
||||||
damageRegionProcessPending(pDrawable);
|
damageRegionProcessPending(pDrawable);
|
||||||
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
|
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
|
||||||
}
|
}
|
||||||
|
@ -1434,13 +1414,10 @@ damageImageText16(DrawablePtr pDrawable,
|
||||||
GCPtr pGC, int x, int y, int count, unsigned short *chars)
|
GCPtr pGC, int x, int y, int count, unsigned short *chars)
|
||||||
{
|
{
|
||||||
DAMAGE_GC_OP_PROLOGUE(pGC, pDrawable);
|
DAMAGE_GC_OP_PROLOGUE(pGC, pDrawable);
|
||||||
|
damageText(pDrawable, pGC, x, y, (unsigned long) count, (char *) chars,
|
||||||
if (checkGCDamage(pDrawable, pGC))
|
FONTLASTROW(pGC->font) == 0 ? Linear16Bit : TwoD16Bit,
|
||||||
damageText(pDrawable, pGC, x, y, (unsigned long) count, (char *) chars,
|
TT_IMAGE16);
|
||||||
FONTLASTROW(pGC->font) == 0 ? Linear16Bit : TwoD16Bit,
|
(*pGC->ops->ImageText16) (pDrawable, pGC, x, y, count, chars);
|
||||||
TT_IMAGE16);
|
|
||||||
else
|
|
||||||
(*pGC->ops->ImageText16) (pDrawable, pGC, x, y, count, chars);
|
|
||||||
damageRegionProcessPending(pDrawable);
|
damageRegionProcessPending(pDrawable);
|
||||||
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
|
DAMAGE_GC_OP_EPILOGUE(pGC, pDrawable);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue