/** * Initialize us. If we are in a box get our alignment so we know what direction we are */ NS_IMETHODIMP nsSplitterFrame::Init(nsIContent* aContent, nsIFrame* aParent, nsIFrame* aPrevInFlow) { NS_ENSURE_FALSE(mInner, NS_ERROR_ALREADY_INITIALIZED); mInner = new nsSplitterFrameInner(this); if (!mInner) return NS_ERROR_OUT_OF_MEMORY; mInner->AddRef(); mInner->mChildInfosAfter = nullptr; mInner->mChildInfosBefore = nullptr; mInner->mState = nsSplitterFrameInner::Open; mInner->mDragging = false; // determine orientation of parent, and if vertical, set orient to vertical // on splitter content, then re-resolve style // XXXbz this is pretty messed up, since this can change whether we should // have a frame at all. This really needs a better solution. if (aParent && aParent->IsBoxFrame()) { if (!aParent->IsHorizontal()) { if (!nsContentUtils::HasNonEmptyAttr(aContent, kNameSpaceID_None, nsGkAtoms::orient)) { aContent->SetAttr(kNameSpaceID_None, nsGkAtoms::orient, NS_LITERAL_STRING("vertical"), false); nsStyleContext* parentStyleContext = GetStyleContext()->GetParent(); nsRefPtr<nsStyleContext> newContext = PresContext()->StyleSet()-> ResolveStyleFor(aContent->AsElement(), parentStyleContext); SetStyleContextWithoutNotification(newContext); } } } nsresult rv = nsBoxFrame::Init(aContent, aParent, aPrevInFlow); NS_ENSURE_SUCCESS(rv, rv); mInner->mState = nsSplitterFrameInner::Open; mInner->AddListener(PresContext()); mInner->mParentBox = nullptr; return rv; }
NS_IMETHODIMP nsFirstLetterFrame::Init(nsIContent* aContent, nsIFrame* aParent, nsIFrame* aPrevInFlow) { nsRefPtr<nsStyleContext> newSC; if (aPrevInFlow) { // Get proper style context for ourselves. We're creating the frame // that represents everything *except* the first letter, so just create // a style context like we would for a text node. nsStyleContext* parentStyleContext = mStyleContext->GetParent(); if (parentStyleContext) { newSC = mStyleContext->GetRuleNode()->GetPresContext()->StyleSet()-> ResolveStyleForNonElement(parentStyleContext); if (newSC) SetStyleContextWithoutNotification(newSC); } } return nsFirstLetterFrameSuper::Init(aContent, aParent, aPrevInFlow); }