void vtElevLayer::ReRender() { if (IsGrid()) { m_bBitmapRendered = false; m_bNeedsDraw = true; } }
/** * This get the flexibilty of the row at aIndex. It's not trivial. There are a few * things we need to look at. Specifically we need to see if any <rows> or <columns> * tags are around us. Their flexibilty will affect ours. */ nscoord nsGrid::GetRowFlex(nsBoxLayoutState& aState, PRInt32 aIndex, bool aIsHorizontal) { RebuildIfNeeded(); nsGridRow* row = GetRowAt(aIndex, aIsHorizontal); if (row->IsFlexSet()) return row->mFlex; nsIBox* box = row->mBox; row->mFlex = 0; if (box) { // We need our flex but a inflexible row could be around us. If so // neither are we. However if its the row tag just inside the grid it won't // affect us. We need to do this for this case: // <grid> // <rows> // <rows> // this is not flexible. So our children should not be flexible // <row flex="1"/> // <row flex="1"/> // </rows> // <row/> // </rows> // </grid> // // or.. // // <grid> // <rows> // <rows> // this is not flexible. So our children should not be flexible // <rows flex="1"> // <row flex="1"/> // <row flex="1"/> // </rows> // <row/> // </rows> // </row> // </grid> // So here is how it looks // // <grid> // <rows> // parentsParent // <rows> // parent // <row flex="1"/> // <row flex="1"/> // </rows> // <row/> // </rows> // </grid> // so the answer is simple: 1) Walk our parent chain. 2) If we find // someone who is not flexible and they aren't the rows immediately in // the grid. 3) Then we are not flexible box = GetScrollBox(box); nsIBox* parent = box->GetParentBox(); nsIBox* parentsParent=nsnull; while(parent) { parent = GetScrollBox(parent); parentsParent = parent->GetParentBox(); // if our parents parent is not a grid // the get its flex. If its 0 then we are // not flexible. if (parentsParent) { if (!IsGrid(parentsParent)) { nscoord flex = parent->GetFlex(aState); nsIBox::AddCSSFlex(aState, parent, flex); if (flex == 0) { row->mFlex = 0; return row->mFlex; } } else break; } parent = parentsParent; } // get the row flex. row->mFlex = box->GetFlex(aState); nsIBox::AddCSSFlex(aState, box, row->mFlex); } return row->mFlex; }