Example #1
0
void LayoutTreeBuilderForElement::createLayoutObject()
{
    ComputedStyle& style = this->style();

    LayoutObject* newLayoutObject = m_node->createLayoutObject(style);
    if (!newLayoutObject)
        return;

    LayoutObject* parentLayoutObject = this->parentLayoutObject();

    if (!parentLayoutObject->isChildAllowed(newLayoutObject, style)) {
        newLayoutObject->destroy();
        return;
    }

    // Make sure the LayoutObject already knows it is going to be added to a LayoutFlowThread before we set the style
    // for the first time. Otherwise code using inLayoutFlowThread() in the styleWillChange and styleDidChange will fail.
    newLayoutObject->setIsInsideFlowThread(parentLayoutObject->isInsideFlowThread());

    LayoutObject* nextLayoutObject = this->nextLayoutObject();
    m_node->setLayoutObject(newLayoutObject);
    newLayoutObject->setStyle(&style); // setStyle() can depend on layoutObject() already being set.

    if (Fullscreen::isActiveFullScreenElement(*m_node)) {
        newLayoutObject = LayoutFullScreen::wrapLayoutObject(newLayoutObject, parentLayoutObject, &m_node->document());
        if (!newLayoutObject)
            return;
    }

    // Note: Adding newLayoutObject instead of layoutObject(). layoutObject() may be a child of newLayoutObject.
    parentLayoutObject->addChild(newLayoutObject, nextLayoutObject);
}
void PseudoElement::attach(const AttachContext& context)
{
    ASSERT(!layoutObject());

    Element::attach(context);

    LayoutObject* renderer = this->layoutObject();
    if (!renderer)
        return;

    ComputedStyle& style = renderer->mutableStyleRef();
    if (style.styleType() != BEFORE && style.styleType() != AFTER)
        return;
    ASSERT(style.contentData());

    for (const ContentData* content = style.contentData(); content; content = content->next()) {
        LayoutObject* child = content->createLayoutObject(document(), style);
        if (renderer->isChildAllowed(child, style)) {
            renderer->addChild(child);
            if (child->isQuote())
                toLayoutQuote(child)->attachQuote();
        } else
            child->destroy();
    }
}
Example #3
0
void PseudoElement::attachLayoutTree(const AttachContext& context) {
  DCHECK(!layoutObject());

  Element::attachLayoutTree(context);

  LayoutObject* layoutObject = this->layoutObject();
  if (!layoutObject)
    return;

  ComputedStyle& style = layoutObject->mutableStyleRef();
  if (style.styleType() != PseudoIdBefore && style.styleType() != PseudoIdAfter)
    return;
  DCHECK(style.contentData());

  for (const ContentData* content = style.contentData(); content;
       content = content->next()) {
    LayoutObject* child = content->createLayoutObject(document(), style);
    if (layoutObject->isChildAllowed(child, style)) {
      layoutObject->addChild(child);
      if (child->isQuote())
        toLayoutQuote(child)->attachQuote();
    } else {
      child->destroy();
    }
  }
}