Esempio n. 1
0
bool
ContainerLayer::InsertAfter(Layer* aChild, Layer* aAfter)
{
  if(aChild->Manager() != Manager()) {
    NS_ERROR("Child has wrong manager");
    return false;
  }
  if(aChild->GetParent()) {
    NS_ERROR("aChild already in the tree");
    return false;
  }
  if (aChild->GetNextSibling() || aChild->GetPrevSibling()) {
    NS_ERROR("aChild already has siblings?");
    return false;
  }
  if (aAfter && (aAfter->Manager() != Manager() ||
                 aAfter->GetParent() != this))
  {
    NS_ERROR("aAfter is not our child");
    return false;
  }

  aChild->SetParent(this);
  if (aAfter == mLastChild) {
    mLastChild = aChild;
  }
  if (!aAfter) {
    aChild->SetNextSibling(mFirstChild);
    if (mFirstChild) {
      mFirstChild->SetPrevSibling(aChild);
    }
    mFirstChild = aChild;
    NS_ADDREF(aChild);
    DidInsertChild(aChild);
    return true;
  }

  Layer* next = aAfter->GetNextSibling();
  aChild->SetNextSibling(next);
  aChild->SetPrevSibling(aAfter);
  if (next) {
    next->SetPrevSibling(aChild);
  }
  aAfter->SetNextSibling(aChild);
  NS_ADDREF(aChild);
  DidInsertChild(aChild);
  return true;
}
void
ContainerLayerComposite::InsertAfter(Layer* aChild, Layer* aAfter)
{
  NS_ASSERTION(aChild->Manager() == Manager(),
               "Child has wrong manager");
  NS_ASSERTION(!aChild->GetParent(),
               "aChild already in the tree");
  NS_ASSERTION(!aChild->GetNextSibling() && !aChild->GetPrevSibling(),
               "aChild already has siblings?");
  NS_ASSERTION(!aAfter ||
               (aAfter->Manager() == Manager() &&
                aAfter->GetParent() == this),
               "aAfter is not our child");

  aChild->SetParent(this);
  if (aAfter == mLastChild) {
    mLastChild = aChild;
  }
  if (!aAfter) {
    aChild->SetNextSibling(mFirstChild);
    if (mFirstChild) {
      mFirstChild->SetPrevSibling(aChild);
    }
    mFirstChild = aChild;
    NS_ADDREF(aChild);
    DidInsertChild(aChild);
    return;
  }

  Layer* next = aAfter->GetNextSibling();
  aChild->SetNextSibling(next);
  aChild->SetPrevSibling(aAfter);
  if (next) {
    next->SetPrevSibling(aChild);
  }
  aAfter->SetNextSibling(aChild);
  NS_ADDREF(aChild);
  DidInsertChild(aChild);
}
Esempio n. 3
0
void
ContainerLayerD3D10::InsertAfter(Layer* aChild, Layer* aAfter)
{
    aChild->SetParent(this);
    if (!aAfter) {
        Layer *oldFirstChild = GetFirstChild();
        mFirstChild = aChild;
        aChild->SetNextSibling(oldFirstChild);
        aChild->SetPrevSibling(nsnull);
        if (oldFirstChild) {
            oldFirstChild->SetPrevSibling(aChild);
        } else {
            mLastChild = aChild;
        }
        NS_ADDREF(aChild);
        DidInsertChild(aChild);
        return;
    }
    for (Layer *child = GetFirstChild();
            child; child = child->GetNextSibling()) {
        if (aAfter == child) {
            Layer *oldNextSibling = child->GetNextSibling();
            child->SetNextSibling(aChild);
            aChild->SetNextSibling(oldNextSibling);
            if (oldNextSibling) {
                oldNextSibling->SetPrevSibling(aChild);
            } else {
                mLastChild = aChild;
            }
            aChild->SetPrevSibling(child);
            NS_ADDREF(aChild);
            DidInsertChild(aChild);
            return;
        }
    }
    NS_WARNING("Failed to find aAfter layer!");
}