if (!mXftFont && !GetXftFont()) return NS_ERROR_NOT_AVAILABLE;
nsFontXft::DrawStringSpec(FcChar32 *aString, PRUint32 aLen, void *aData){    DrawStringData *data = (DrawStringData *)aData;    if (!mXftFont && !GetXftFont())            return NS_ERROR_NOT_AVAILABLE;    FcChar32 *pstr = aString;    const FcChar32 *end = aString + aLen;    while(pstr < end) {        nscoord x = data->x + data->xOffset;                       nscoord y = data->y;                                /* Convert to device coordinate. */           data->context->GetTranMatrix()->TransformCoord(&x, &y);                                                                         /* position in X is the location offset in the string            plus whatever offset is required for the spacing              argument                                                   */                                                          FT_UInt glyph = CharToGlyphIndex(*pstr);        data->drawBuffer->Draw(x, y, mXftFont, glyph);        if (data->spacing) {            data->xOffset += *data->spacing;            data->spacing += IS_NON_BMP(*pstr) ? 2 : 1;         }        else {            XGlyphInfo info;                                    XftGlyphExtents(GDK_DISPLAY(), mXftFont, &glyph, 1, &info);            data->xOffset += NSToCoordRound(info.xOff * data->p2t);        }        ++pstr;    }                                                              return NS_OK;}