diff options
Diffstat (limited to 'layout/xul/grid/nsGridCell.cpp')
-rw-r--r-- | layout/xul/grid/nsGridCell.cpp | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/layout/xul/grid/nsGridCell.cpp b/layout/xul/grid/nsGridCell.cpp new file mode 100644 index 000000000..c54256297 --- /dev/null +++ b/layout/xul/grid/nsGridCell.cpp @@ -0,0 +1,127 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +// +// Eric Vaughan +// Netscape Communications +// +// See documentation in associated header file +// + +#include "nsGridCell.h" +#include "nsFrame.h" +#include "nsBox.h" +#include "nsGridLayout2.h" + + +nsGridCell::nsGridCell():mBoxInColumn(nullptr),mBoxInRow(nullptr) +{ + MOZ_COUNT_CTOR(nsGridCell); +} + +nsGridCell::~nsGridCell() +{ + MOZ_COUNT_DTOR(nsGridCell); +} + +nsSize +nsGridCell::GetXULPrefSize(nsBoxLayoutState& aState) +{ + nsSize sum(0,0); + + // take our 2 children and add them up. + // we are as wide as the widest child plus its left offset + // we are tall as the tallest child plus its top offset + + if (mBoxInColumn) { + nsSize pref = mBoxInColumn->GetXULPrefSize(aState); + + nsBox::AddMargin(mBoxInColumn, pref); + nsGridLayout2::AddOffset(mBoxInColumn, pref); + + nsBoxLayout::AddLargestSize(sum, pref); + } + + if (mBoxInRow) { + nsSize pref = mBoxInRow->GetXULPrefSize(aState); + + nsBox::AddMargin(mBoxInRow, pref); + nsGridLayout2::AddOffset(mBoxInRow, pref); + + nsBoxLayout::AddLargestSize(sum, pref); + } + + return sum; +} + +nsSize +nsGridCell::GetXULMinSize(nsBoxLayoutState& aState) +{ + nsSize sum(0, 0); + + // take our 2 children and add them up. + // we are as wide as the widest child plus its left offset + // we are tall as the tallest child plus its top offset + + if (mBoxInColumn) { + nsSize min = mBoxInColumn->GetXULMinSize(aState); + + nsBox::AddMargin(mBoxInColumn, min); + nsGridLayout2::AddOffset(mBoxInColumn, min); + + nsBoxLayout::AddLargestSize(sum, min); + } + + if (mBoxInRow) { + nsSize min = mBoxInRow->GetXULMinSize(aState); + + nsBox::AddMargin(mBoxInRow, min); + nsGridLayout2::AddOffset(mBoxInRow, min); + + nsBoxLayout::AddLargestSize(sum, min); + } + + return sum; +} + +nsSize +nsGridCell::GetXULMaxSize(nsBoxLayoutState& aState) +{ + nsSize sum(NS_INTRINSICSIZE, NS_INTRINSICSIZE); + + // take our 2 children and add them up. + // we are as wide as the smallest child plus its left offset + // we are tall as the shortest child plus its top offset + + if (mBoxInColumn) { + nsSize max = mBoxInColumn->GetXULMaxSize(aState); + + nsBox::AddMargin(mBoxInColumn, max); + nsGridLayout2::AddOffset(mBoxInColumn, max); + + nsBoxLayout::AddSmallestSize(sum, max); + } + + if (mBoxInRow) { + nsSize max = mBoxInRow->GetXULMaxSize(aState); + + nsBox::AddMargin(mBoxInRow, max); + nsGridLayout2::AddOffset(mBoxInRow, max); + + nsBoxLayout::AddSmallestSize(sum, max); + } + + return sum; +} + + +bool +nsGridCell::IsXULCollapsed() +{ + return ((mBoxInColumn && mBoxInColumn->IsXULCollapsed()) || + (mBoxInRow && mBoxInRow->IsXULCollapsed())); +} + + |