// Only place the selected child ... /* virtual */ nsresult nsMathMLmactionFrame::Place(nsRenderingContext& aRenderingContext, bool aPlaceOrigin, nsHTMLReflowMetrics& aDesiredSize) { nsIFrame* childFrame = GetSelectedFrame(); if (mSelection == -1) { return ReflowError(aRenderingContext, aDesiredSize); } aDesiredSize.width = aDesiredSize.height = 0; aDesiredSize.ascent = 0; mBoundingMetrics = nsBoundingMetrics(); if (childFrame) { GetReflowAndBoundingMetricsFor(childFrame, aDesiredSize, mBoundingMetrics); if (aPlaceOrigin) { FinishReflowChild(childFrame, PresContext(), nullptr, aDesiredSize, 0, 0, 0); } mReference.x = 0; mReference.y = aDesiredSize.ascent; } aDesiredSize.mBoundingMetrics = mBoundingMetrics; return NS_OK; }
// Only reflow the selected child ... NS_IMETHODIMP nsMathMLmactionFrame::Reflow(nsPresContext* aPresContext, nsHTMLReflowMetrics& aDesiredSize, const nsHTMLReflowState& aReflowState, nsReflowStatus& aStatus) { nsresult rv = NS_OK; aStatus = NS_FRAME_COMPLETE; aDesiredSize.width = aDesiredSize.height = 0; aDesiredSize.ascent = 0; mBoundingMetrics = nsBoundingMetrics(); nsIFrame* childFrame = GetSelectedFrame(); if (childFrame) { nsSize availSize(aReflowState.ComputedWidth(), NS_UNCONSTRAINEDSIZE); nsHTMLReflowState childReflowState(aPresContext, aReflowState, childFrame, availSize); rv = ReflowChild(childFrame, aPresContext, aDesiredSize, childReflowState, aStatus); SaveReflowAndBoundingMetricsFor(childFrame, aDesiredSize, aDesiredSize.mBoundingMetrics); mBoundingMetrics = aDesiredSize.mBoundingMetrics; } FinalizeReflow(*aReflowState.rendContext, aDesiredSize); NS_FRAME_SET_TRUNCATION(aStatus, aReflowState, aDesiredSize); return rv; }
// Only paint the selected child... NS_IMETHODIMP nsMathMLmactionFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder, const nsRect& aDirtyRect, const nsDisplayListSet& aLists) { // Report an error if something wrong was found in this frame. // We can't call nsDisplayMathMLError from here, // so ask nsMathMLContainerFrame to do the work for us. if (NS_MATHML_HAS_ERROR(mPresentationData.flags)) { return nsMathMLContainerFrame::BuildDisplayList(aBuilder, aDirtyRect, aLists); } nsresult rv = DisplayBorderBackgroundOutline(aBuilder, aLists); NS_ENSURE_SUCCESS(rv, rv); nsIFrame* childFrame = GetSelectedFrame(); if (childFrame) { // Put the child's background directly onto the content list nsDisplayListSet set(aLists, aLists.Content()); // The children should be in content order rv = BuildDisplayListForChild(aBuilder, childFrame, aDirtyRect, set); NS_ENSURE_SUCCESS(rv, rv); } #if defined(DEBUG) && defined(SHOW_BOUNDING_BOX) // visual debug rv = DisplayBoundingMetrics(aBuilder, this, mReference, mBoundingMetrics, aLists); #endif return rv; }
nsresult nsMathMLmactionFrame::ChildListChanged(int32_t aModType) { // update cached values mChildCount = -1; mSelection = 0; mSelectedFrame = nullptr; GetSelectedFrame(); return nsMathMLContainerFrame::ChildListChanged(aModType); }
// Only paint the selected child... NS_IMETHODIMP nsMathMLmactionFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder, const nsRect& aDirtyRect, const nsDisplayListSet& aLists) { nsresult rv = DisplayBorderBackgroundOutline(aBuilder, aLists); NS_ENSURE_SUCCESS(rv, rv); nsIFrame* childFrame = GetSelectedFrame(); if (childFrame) { // Put the child's background directly onto the content list nsDisplayListSet set(aLists, aLists.Content()); // The children should be in content order rv = BuildDisplayListForChild(aBuilder, childFrame, aDirtyRect, set); NS_ENSURE_SUCCESS(rv, rv); } #if defined(NS_DEBUG) && defined(SHOW_BOUNDING_BOX) // visual debug rv = DisplayBoundingMetrics(aBuilder, this, mReference, mBoundingMetrics, aLists); #endif return rv; }
NS_IMETHODIMP nsMathMLmactionFrame::SetInitialChildList(ChildListID aListID, nsFrameList& aChildList) { nsresult rv = nsMathMLContainerFrame::SetInitialChildList(aListID, aChildList); // This very first call to GetSelectedFrame() will cause us to be marked as an // embellished operator if the selected child is an embellished operator if (!GetSelectedFrame()) { mActionType = NS_MATHML_ACTION_TYPE_NONE; } else { // create mouse event listener and register it mListener = new nsMathMLmactionFrame::MouseListener(this); // printf("maction:%p registering as mouse event listener ...\n", this); mContent->AddSystemEventListener(NS_LITERAL_STRING("click"), mListener, false, false); mContent->AddSystemEventListener(NS_LITERAL_STRING("mouseover"), mListener, false, false); mContent->AddSystemEventListener(NS_LITERAL_STRING("mouseout"), mListener, false, false); } return rv; }