GlyphPageTreeNode* GlyphPageTreeNode::getChild(const FontData* fontData, unsigned pageNumber) { ASSERT(fontData || !m_isSystemFallback); ASSERT(pageNumber == m_pageNumber); GlyphPageTreeNode* child = fontData ? m_children.get(fontData) : m_systemFallbackChild; if (!child) { child = new GlyphPageTreeNode; child->m_parent = this; child->m_level = m_level + 1; if (fontData && fontData->isCustomFont()) { for (GlyphPageTreeNode* curr = this; curr; curr = curr->m_parent) curr->m_customFontCount++; } #ifndef NDEBUG child->m_pageNumber = m_pageNumber; #endif if (fontData) { m_children.set(fontData, child); fontData->setMaxGlyphPageTreeLevel(max(fontData->maxGlyphPageTreeLevel(), child->m_level)); } else { m_systemFallbackChild = child; child->m_isSystemFallback = true; } child->initializePage(fontData, pageNumber); } return child; }
GlyphPageTreeNode* GlyphPageTreeNode::getNormalChild(const FontData* fontData, unsigned pageNumber) { ASSERT(fontData); ASSERT(pageNumber == m_pageNumber); if (GlyphPageTreeNode* foundChild = m_children.get(fontData)) return foundChild; GlyphPageTreeNode* child = new GlyphPageTreeNode(this); if (fontData->isCustomFont()) { for (GlyphPageTreeNode* curr = this; curr; curr = curr->m_parent) curr->m_customFontCount++; } #if ENABLE(ASSERT) child->m_pageNumber = m_pageNumber; #endif m_children.set(fontData, adoptPtr(child)); fontData->setMaxGlyphPageTreeLevel(max(fontData->maxGlyphPageTreeLevel(), child->m_level)); child->initializePage(fontData, pageNumber); return child; }