本文整理汇总了C++中CounterNode::firstChild方法的典型用法代码示例。如果您正苦于以下问题:C++ CounterNode::firstChild方法的具体用法?C++ CounterNode::firstChild怎么用?C++ CounterNode::firstChild使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CounterNode
的用法示例。
在下文中一共展示了CounterNode::firstChild方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: makeCounterNode
static CounterNode* makeCounterNode(RenderObject* object, const AtomicString& identifier, bool alwaysCreateCounter)
{
ASSERT(object);
if (object->m_hasCounterNodeMap)
if (CounterMap* nodeMap = counterMaps().get(object))
if (CounterNode* node = nodeMap->get(identifier.impl()))
return node;
bool isReset = false;
int value = 0;
if (!planCounter(object, identifier, isReset, value) && !alwaysCreateCounter)
return 0;
CounterNode* newParent = 0;
CounterNode* newPreviousSibling = 0;
CounterNode* newNode = new CounterNode(object, isReset, value);
if (findPlaceForCounter(object, identifier, isReset, newParent, newPreviousSibling))
newParent->insertAfter(newNode, newPreviousSibling, identifier);
CounterMap* nodeMap;
if (object->m_hasCounterNodeMap)
nodeMap = counterMaps().get(object);
else {
nodeMap = new CounterMap;
counterMaps().set(object, nodeMap);
object->m_hasCounterNodeMap = true;
}
nodeMap->set(identifier.impl(), newNode);
if (newNode->parent() || !object->nextInPreOrder(object->parent()))
return newNode;
// Checking if some nodes that were previously counter tree root nodes
// should become children of this node now.
CounterMaps& maps = counterMaps();
RenderObject* stayWithin = object->parent();
for (RenderObject* currentRenderer = object->nextInPreOrder(stayWithin); currentRenderer; currentRenderer = currentRenderer->nextInPreOrder(stayWithin)) {
if (!currentRenderer->m_hasCounterNodeMap)
continue;
CounterNode* currentCounter = maps.get(currentRenderer)->get(identifier.impl());
if (!currentCounter)
continue;
if (currentCounter->parent()) {
ASSERT(newNode->firstChild());
if (currentRenderer->lastChild())
currentRenderer = currentRenderer->lastChild();
continue;
}
if (stayWithin != currentRenderer->parent() || !currentCounter->hasResetType())
newNode->insertAfter(currentCounter, newNode->lastChild(), identifier);
if (currentRenderer->lastChild())
currentRenderer = currentRenderer->lastChild();
}
return newNode;
}