summaryrefslogtreecommitdiffstats
path: root/layout/xul/grid/nsGridCell.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'layout/xul/grid/nsGridCell.cpp')
-rw-r--r--layout/xul/grid/nsGridCell.cpp127
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()));
+}
+
+