I got a step further with this issue, that some content can be displayed on Win7, but not on XP.

The actual error happens in drawGlyphsToContext(cr, font, glyphs, numGlyphs), when 0 is passed as the cr argument.
in FontCairo.cpp, there is a statement in  Font::drawGlyphs that says:

       cairo_t* cr = platformContext->cr();

I assume that this should return a valid context (m_cr), but in my case it returns a null pointer. And as this context is used in further calls, all these cairo calls fail, some gracefully, the last one with the access violation in pixman called from the cairo,dll.

Does anybody know why the cr is 0x00, when the platformContext.m_cr seems to be a valid context? And this only on Windows XP?

Any comments are welcome

Thomas

=================================================================

void Font::drawGlyphs(GraphicsContext* context, const SimpleFontData* font, const GlyphBuffer& glyphBuffer, int from, int numGlyphs, const FloatPoint& point) const
{
    if (!font->platformData().size())
        return;

GlyphBufferGlyph* glyphs = const_cast<GlyphBufferGlyph*>(glyphBuffer.glyphs(from));

    float offset = point.x();
    for (int i = 0; i < numGlyphs; i++) {
        glyphs[i].x = offset;
        glyphs[i].y = point.y();
        offset += glyphBuffer.advanceAt(from + i);
    }

    PlatformContextCairo* platformContext = context->platformContext();
    drawGlyphsShadow(context, point, font, glyphs, numGlyphs);

    cairo_t* cr = platformContext->cr();

/*** here cr is 0x00000000  ***/

    cairo_save(cr);

    if (context->textDrawingMode() & TextModeFill) {
platformContext->prepareForFilling(context->state(), PlatformContextCairo::AdjustPatternForGlobalAlpha);
        drawGlyphsToContext(cr, font, glyphs, numGlyphs);
    }

// Prevent running into a long computation within cairo. If the stroke width is // twice the size of the width of the text we will not ask cairo to stroke // the text as even one single stroke would cover the full wdth of the text.
    //  See https://bugs.webkit.org/show_bug.cgi?id=33759.
if (context->textDrawingMode() & TextModeStroke && context->strokeThickness() < 2 * offset) {
platformContext->prepareForStroking(context->state());
        cairo_set_line_width(cr, context->strokeThickness());

// This may disturb the CTM, but we are going to call cairo_restore soon after.
        cairo_set_scaled_font(cr, font->platformData().scaledFont());
        cairo_glyph_path(cr, glyphs, numGlyphs);
        cairo_stroke(cr);
    }

    cairo_restore(cr);
}

_______________________________________________
webkit-help mailing list
webkit-help@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-help

Reply via email to