のねのBlog

パソコンの問題や、ソフトウェアの開発で起きた問題など書いていきます。よろしくお願いします^^。

SkScalerContext::getGlyphContext

<S> : SkScalerCtx::getGlyphContext glyphID=0x0FAA
<V> : SkScalerCtx::getGlyphContext glyphID=0x0FAA count=0x041C fontID=0x0002  glyphID >= count
<V> : SkScalerCtx::getGlyphContext glyphID=0x0B8E count=0x1DC6 fontID=0x003B glyphID < count
<E> : SkScalerCtx::getGlyphContext glyphID=0x0B8E count=0x1DC6 fontID=0x003B
SkScalerContext* SkScalerContext::getGlyphContext(const SkGlyph& glyph) {
    unsigned glyphID = glyph.getGlyphID();
    SkScalerContext* ctx = this;
    LOGD("<S> : glyphID=0x%04X", glyphID);
       // <S> : glyphID=0x0FAA

    for (;;) {
        unsigned count = ctx->getGlyphCount();
        if (glyphID < count) {
            LOGD("<V> : glyphID=0x%04X count=0x%04X fontID=0x%04X glyphID < count",
                glyphID, count, ctx->fRec.fFontID);
                //<V> : glyphID=0x0B8E count=0x1DC6 fontID=0x003B glyphID < count
                //発見したのでbreak
            break;
        }
        LOGD("<V> : glyphID=0x%04X count=0x%04X fontID=0x%04X  glyphID >= count",
                    glyphID, count, ctx->fRec.fFontID);
            //<V> : glyphID=0x0FAA count=0x041C fontID=0x0002  glyphID >= count

        // このコンテキストにないから次のを見る
        glyphID -= count;
        ctx = ctx->getNextContext();
        if (NULL == ctx) {
            // just return the original context (this)
            LOGD("<E> : glyphID=0x%04X count=0x%04X fontID=0x%04X  NULL==ctx",
                glyphID, count, ctx->fRec.fFontID);
            return this;
        }
    }
    LOGD("<E> : SkScalerCtx::getGlyphContext "\
        "glyphID=0x%04X count=0x%04X fontID=0x%04X",
         glyphID, ctx->getGlyphCount(), ctx->fRec.fFontID);
        //<E> : glyphID=0x0B8E count=0x1DC6 fontID=0x003B
    //このコンテキストにglyphが含まれている
    return ctx;
}