mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-11-05 13:26:48 +08:00
Merge pull request #911 from NativeScript/hhristov/apply-css-fix
Fix GridLayout desiredSize when not stretched.
This commit is contained in:
@@ -7,6 +7,7 @@ import view = require("ui/core/view");
|
|||||||
import navHelper = require("../ui/helper");
|
import navHelper = require("../ui/helper");
|
||||||
import utils = require("utils/utils");
|
import utils = require("utils/utils");
|
||||||
import builder = require("ui/builder");
|
import builder = require("ui/builder");
|
||||||
|
import enums = require("ui/enums");
|
||||||
|
|
||||||
var ASYNC = 2;
|
var ASYNC = 2;
|
||||||
var DELTA = 1;
|
var DELTA = 1;
|
||||||
@@ -203,37 +204,90 @@ export function test_removeColumn_shouldThrow_onNullValues() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function test_removeColumns() {
|
export function test_removeColumns() {
|
||||||
var columns = rootLayout.getColumns();
|
prepareGridLayout(false);
|
||||||
|
TKUnit.assertTrue(rootLayout.getColumns().length > 0, "There should be columns.");
|
||||||
rootLayout.removeColumns();
|
rootLayout.removeColumns();
|
||||||
|
TKUnit.assertTrue(rootLayout.getColumns().length === 0, "Columns should be empty.");
|
||||||
TKUnit.assertEqual(rootLayout.getColumns().length, 0);
|
|
||||||
|
|
||||||
columns.forEach(c=> rootLayout.addColumn(c));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export function test_removeRows() {
|
export function test_removeRows() {
|
||||||
var rows = rootLayout.getRows();
|
prepareGridLayout(false);
|
||||||
|
TKUnit.assertTrue(rootLayout.getRows().length > 0, "There should be rows.");
|
||||||
rootLayout.removeRows();
|
rootLayout.removeRows();
|
||||||
|
TKUnit.assertTrue(rootLayout.getRows().length === 0, "Rows should be empty.");
|
||||||
TKUnit.assertEqual(rootLayout.getRows().length, 0);
|
|
||||||
|
|
||||||
rows.forEach(r=> rootLayout.addRow(r));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export function test_removeChildren() {
|
export function test_removeChildren() {
|
||||||
var children = [];
|
prepareGridLayout(false);
|
||||||
|
TKUnit.assertTrue(rootLayout.getChildrenCount() > 0, "There should be children.");
|
||||||
|
rootLayout.removeChildren();
|
||||||
|
TKUnit.assertTrue(rootLayout.getChildrenCount() === 0, "Childrens should be empty.");
|
||||||
|
}
|
||||||
|
|
||||||
for (let i = 0; i < rootLayout.getChildrenCount(); i++) {
|
export function test_measuredWidth_when_not_stretched_single_column() {
|
||||||
children.push(rootLayout.getChildAt(i));
|
rootLayout.horizontalAlignment = enums.HorizontalAlignment.center;
|
||||||
|
let btn = new Button();
|
||||||
|
btn.text = "A";
|
||||||
|
rootLayout.addChild(btn);
|
||||||
|
TKUnit.waitUntilReady(function () {
|
||||||
|
return rootLayout.isLayoutValid;
|
||||||
|
}, ASYNC);
|
||||||
|
|
||||||
|
TKUnit.assertTrue(btn.getMeasuredWidth() === rootLayout.getMeasuredWidth());
|
||||||
|
}
|
||||||
|
|
||||||
|
export function test_measuredWidth_when_not_stretched_two_columns() {
|
||||||
|
rootLayout.horizontalAlignment = enums.HorizontalAlignment.center;
|
||||||
|
rootLayout.addColumn(new layout.ItemSpec(80, layout.GridUnitType.pixel));
|
||||||
|
rootLayout.addColumn(new layout.ItemSpec(1, layout.GridUnitType.star));
|
||||||
|
|
||||||
|
let btn = new Button();
|
||||||
|
btn.text = "A";
|
||||||
|
btn.width = 100;
|
||||||
|
MyGridLayout.setColumnSpan(btn, 2);
|
||||||
|
rootLayout.addChild(btn);
|
||||||
|
TKUnit.waitUntilReady(function () {
|
||||||
|
return rootLayout.isLayoutValid;
|
||||||
|
}, ASYNC);
|
||||||
|
|
||||||
|
var density = utils.layout.getDisplayDensity();
|
||||||
|
var delta = Math.floor(density) !== density ? 2 : DELTA;
|
||||||
|
var cols = rootLayout.getColumns();
|
||||||
|
TKUnit.assertAreClose(cols[0].actualLength, 80, delta);
|
||||||
|
TKUnit.assertAreClose(cols[1].actualLength, 20, delta);
|
||||||
|
TKUnit.assertAreClose(rootLayout.getMeasuredWidth(), 100 * density, delta);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function test_measuredWidth_when_not_stretched_three_columns() {
|
||||||
|
rootLayout.horizontalAlignment = enums.HorizontalAlignment.center;
|
||||||
|
rootLayout.addColumn(new layout.ItemSpec(80, layout.GridUnitType.pixel));
|
||||||
|
rootLayout.addColumn(new layout.ItemSpec(1, layout.GridUnitType.star));
|
||||||
|
rootLayout.addColumn(new layout.ItemSpec(1, layout.GridUnitType.auto));
|
||||||
|
|
||||||
|
for (let i = 1; i < 4; i++) {
|
||||||
|
let btn = new Button();
|
||||||
|
btn.text = "A";
|
||||||
|
btn.width = i * 20;
|
||||||
|
MyGridLayout.setColumn(btn, i - 1);
|
||||||
|
rootLayout.addChild(btn);
|
||||||
}
|
}
|
||||||
|
|
||||||
rootLayout.removeChildren();
|
let btn = new Button();
|
||||||
|
btn.text = "B";
|
||||||
|
btn.width = 100;
|
||||||
|
MyGridLayout.setColumnSpan(btn, 3);
|
||||||
|
rootLayout.addChild(btn);
|
||||||
|
TKUnit.waitUntilReady(function () {
|
||||||
|
return rootLayout.isLayoutValid;
|
||||||
|
}, ASYNC);
|
||||||
|
|
||||||
TKUnit.assertEqual(rootLayout.getChildrenCount(), 0);
|
var density = utils.layout.getDisplayDensity();
|
||||||
|
var delta = Math.floor(density) !== density ? 2 : DELTA;
|
||||||
children.forEach(c=> rootLayout.addChild(c));
|
var cols = rootLayout.getColumns();
|
||||||
|
TKUnit.assertAreClose(cols[0].actualLength, 80, delta);
|
||||||
|
TKUnit.assertAreClose(cols[1].actualLength, 40, delta);
|
||||||
|
TKUnit.assertAreClose(cols[2].actualLength, 60, delta);
|
||||||
|
TKUnit.assertAreClose(rootLayout.getMeasuredWidth(), 180 * density, delta);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function test_getRows_shouldNotReturnNULL() {
|
export function test_getRows_shouldNotReturnNULL() {
|
||||||
|
|||||||
@@ -450,7 +450,7 @@ var NativeActivity = {
|
|||||||
|
|
||||||
this.androidFrame.rootViewGroup = root;
|
this.androidFrame.rootViewGroup = root;
|
||||||
this.androidFrame.rootViewGroup.setId(this.frame.containerViewId);
|
this.androidFrame.rootViewGroup.setId(this.frame.containerViewId);
|
||||||
this.setContentView(this.androidFrame.rootViewGroup);
|
this.setContentView(this.androidFrame.rootViewGroup, new org.nativescript.widgets.CommonLayoutParams());
|
||||||
|
|
||||||
// If there is no instance state - we call navigateCore from here since Activity is created AFTER the navigate call and navigateCore will fail.
|
// If there is no instance state - we call navigateCore from here since Activity is created AFTER the navigate call and navigateCore will fail.
|
||||||
var isRestart = !!savedInstanceState;
|
var isRestart = !!savedInstanceState;
|
||||||
|
|||||||
@@ -50,26 +50,18 @@ export class GridLayout extends common.GridLayout {
|
|||||||
public onMeasure(widthMeasureSpec: number, heightMeasureSpec: number): void {
|
public onMeasure(widthMeasureSpec: number, heightMeasureSpec: number): void {
|
||||||
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
|
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
|
||||||
|
|
||||||
var measureWidth = 0;
|
let width = utils.layout.getMeasureSpecSize(widthMeasureSpec);
|
||||||
var measureHeight = 0;
|
let widthMode = utils.layout.getMeasureSpecMode(widthMeasureSpec);
|
||||||
|
|
||||||
var width = utils.layout.getMeasureSpecSize(widthMeasureSpec);
|
let height = utils.layout.getMeasureSpecSize(heightMeasureSpec);
|
||||||
var widthMode = utils.layout.getMeasureSpecMode(widthMeasureSpec);
|
let heightMode = utils.layout.getMeasureSpecMode(heightMeasureSpec);
|
||||||
|
|
||||||
var height = utils.layout.getMeasureSpecSize(heightMeasureSpec);
|
let density = utils.layout.getDisplayDensity();
|
||||||
var heightMode = utils.layout.getMeasureSpecMode(heightMeasureSpec);
|
let infinityWidth = widthMode === utils.layout.UNSPECIFIED;
|
||||||
|
let infinityHeight = heightMode === utils.layout.UNSPECIFIED;
|
||||||
|
|
||||||
var density = utils.layout.getDisplayDensity();
|
let rows = this.getRows();
|
||||||
var infinityWidth = widthMode === utils.layout.UNSPECIFIED;
|
let cols = this.getColumns();
|
||||||
var infinityHeight = heightMode === utils.layout.UNSPECIFIED;
|
|
||||||
|
|
||||||
var column: common.ItemSpec;
|
|
||||||
var columnGroup: ColumnGroup;
|
|
||||||
var row: common.ItemSpec;
|
|
||||||
var rowGroup: RowGroup;
|
|
||||||
|
|
||||||
var rows = this.getRows();
|
|
||||||
var cols = this.getColumns();
|
|
||||||
if (!this._isValid) {
|
if (!this._isValid) {
|
||||||
|
|
||||||
rows.forEach((value: common.ItemSpec, index: number, array: common.ItemSpec[]) => {
|
rows.forEach((value: common.ItemSpec, index: number, array: common.ItemSpec[]) => {
|
||||||
@@ -87,18 +79,18 @@ export class GridLayout extends common.GridLayout {
|
|||||||
this.helper.infinityWidth = infinityWidth;
|
this.helper.infinityWidth = infinityWidth;
|
||||||
this.helper.infinityHeight = infinityHeight;
|
this.helper.infinityHeight = infinityHeight;
|
||||||
|
|
||||||
for (i = 0; i < cols.length; i++) {
|
for (let i = 0; i < cols.length; i++) {
|
||||||
column = cols[i];
|
let column = cols[i];
|
||||||
columnGroup = new ColumnGroup(column, this.helper);
|
let columnGroup = new ColumnGroup(column, this.helper);
|
||||||
this.helper.columns.push(columnGroup);
|
this.helper.columns.push(columnGroup);
|
||||||
if (column.isAbsolute) {
|
if (column.isAbsolute) {
|
||||||
columnGroup.width = column.value * density;
|
columnGroup.width = column.value * density;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < rows.length; i++) {
|
for (let i = 0; i < rows.length; i++) {
|
||||||
row = rows[i];
|
let row = rows[i];
|
||||||
rowGroup = new RowGroup(row, this.helper);
|
let rowGroup = new RowGroup(row, this.helper);
|
||||||
this.helper.rows.push(rowGroup);
|
this.helper.rows.push(rowGroup);
|
||||||
if (row.isAbsolute) {
|
if (row.isAbsolute) {
|
||||||
rowGroup.height = row.value * density;
|
rowGroup.height = row.value * density;
|
||||||
@@ -114,34 +106,33 @@ export class GridLayout extends common.GridLayout {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var i: number = 0;
|
let childrenCount = this.getChildrenCount();
|
||||||
var childrenCount = this.getChildrenCount();
|
for (let i = 0; i < childrenCount; i++) {
|
||||||
for (i = 0; i < childrenCount; i++) {
|
let child = this.getChildAt(i);
|
||||||
var child = this.getChildAt(i);
|
|
||||||
if (!child || !child._isVisible) {
|
if (!child || !child._isVisible) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
column = this.getColumn(child);
|
let column = this.getColumn(child);
|
||||||
row = this.getRow(child);
|
let row = this.getRow(child);
|
||||||
var columnSpan = this.getColumnSpan(child, column.index);
|
let columnSpan = this.getColumnSpan(child, column.index);
|
||||||
var rowSpan = this.getRowSpan(child, row.index);
|
let rowSpan = this.getRowSpan(child, row.index);
|
||||||
|
|
||||||
var measureSpec = new MeasureSpecs(child, column, row, columnSpan, rowSpan);
|
let measureSpec = new MeasureSpecs(child, column, row, columnSpan, rowSpan);
|
||||||
|
|
||||||
this.helper.addMeasureSpec(measureSpec, density);
|
this.helper.addMeasureSpec(measureSpec, density);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.helper.measure();
|
this.helper.measure();
|
||||||
|
|
||||||
measureWidth = this.helper.measuredWidth + (this.paddingLeft + this.paddingRight) * density;
|
let measureWidth = this.helper.measuredWidth + (this.paddingLeft + this.paddingRight) * density;
|
||||||
measureHeight = this.helper.measuredHeight + (this.paddingTop + this.paddingBottom) * density;
|
let measureHeight = this.helper.measuredHeight + (this.paddingTop + this.paddingBottom) * density;
|
||||||
|
|
||||||
measureWidth = Math.max(measureWidth, this.minWidth * density);
|
measureWidth = Math.max(measureWidth, this.minWidth * density);
|
||||||
measureHeight = Math.max(measureHeight, this.minHeight * density);
|
measureHeight = Math.max(measureHeight, this.minHeight * density);
|
||||||
|
|
||||||
var widthAndState = view.View.resolveSizeAndState(measureWidth, width, widthMode, 0);
|
let widthAndState = view.View.resolveSizeAndState(measureWidth, width, widthMode, 0);
|
||||||
var heightAndState = view.View.resolveSizeAndState(measureHeight, height, heightMode, 0);
|
let heightAndState = view.View.resolveSizeAndState(measureHeight, height, heightMode, 0);
|
||||||
|
|
||||||
this.setMeasuredDimension(widthAndState, heightAndState);
|
this.setMeasuredDimension(widthAndState, heightAndState);
|
||||||
}
|
}
|
||||||
@@ -149,23 +140,20 @@ export class GridLayout extends common.GridLayout {
|
|||||||
public onLayout(left: number, top: number, right: number, bottom: number): void {
|
public onLayout(left: number, top: number, right: number, bottom: number): void {
|
||||||
super.onLayout(left, top, right, bottom);
|
super.onLayout(left, top, right, bottom);
|
||||||
|
|
||||||
var density = utils.layout.getDisplayDensity();
|
let density = utils.layout.getDisplayDensity();
|
||||||
|
|
||||||
var columnOffsets = new Array<number>();
|
let columnOffsets = new Array<number>();
|
||||||
columnOffsets.push(this.paddingLeft * density);
|
columnOffsets.push(this.paddingLeft * density);
|
||||||
|
|
||||||
var rowOffsets = new Array<number>();
|
let rowOffsets = new Array<number>();
|
||||||
rowOffsets.push(this.paddingTop * density);
|
rowOffsets.push(this.paddingTop * density);
|
||||||
|
|
||||||
var offset = columnOffsets[0];
|
let offset = columnOffsets[0];
|
||||||
var i: number = 0;
|
let roundedOffset: number = this.paddingLeft;
|
||||||
var j: number = 0;
|
let roundedLength: number = 0;
|
||||||
var columnGroup: ColumnGroup;
|
let actualLength: number = 0;
|
||||||
var roundedOffset: number = this.paddingLeft;
|
for (let i = 0; i < this.helper.columns.length; i++) {
|
||||||
var roundedLength: number = 0;
|
let columnGroup = this.helper.columns[i];
|
||||||
var actualLength: number = 0;
|
|
||||||
for (i = 0; i < this.helper.columns.length; i++) {
|
|
||||||
columnGroup = this.helper.columns[i];
|
|
||||||
offset += columnGroup.width;
|
offset += columnGroup.width;
|
||||||
columnOffsets.push(offset);
|
columnOffsets.push(offset);
|
||||||
|
|
||||||
@@ -179,8 +167,8 @@ export class GridLayout extends common.GridLayout {
|
|||||||
roundedOffset = this.paddingTop;
|
roundedOffset = this.paddingTop;
|
||||||
roundedLength = 0;
|
roundedLength = 0;
|
||||||
actualLength = 0;
|
actualLength = 0;
|
||||||
for (i = 0; i < this.helper.rows.length; i++) {
|
for (let i = 0; i < this.helper.rows.length; i++) {
|
||||||
var rowGroup = this.helper.rows[i];
|
let rowGroup = this.helper.rows[i];
|
||||||
offset += rowGroup.height;
|
offset += rowGroup.height;
|
||||||
rowOffsets.push(offset);
|
rowOffsets.push(offset);
|
||||||
|
|
||||||
@@ -190,15 +178,15 @@ export class GridLayout extends common.GridLayout {
|
|||||||
roundedOffset += roundedLength;
|
roundedOffset += roundedLength;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < this.helper.columns.length; i++) {
|
for (let i = 0; i < this.helper.columns.length; i++) {
|
||||||
columnGroup = this.helper.columns[i];
|
let columnGroup = this.helper.columns[i];
|
||||||
for (j = 0; j < columnGroup.children.length; j++) {
|
for (let j = 0; j < columnGroup.children.length; j++) {
|
||||||
|
|
||||||
var measureSpec = columnGroup.children[j];
|
let measureSpec = columnGroup.children[j];
|
||||||
var childLeft = columnOffsets[measureSpec.columnIndex];
|
let childLeft = columnOffsets[measureSpec.columnIndex];
|
||||||
var childRight = columnOffsets[measureSpec.columnIndex + measureSpec.columnSpan];
|
let childRight = columnOffsets[measureSpec.columnIndex + measureSpec.columnSpan];
|
||||||
var childTop = rowOffsets[measureSpec.rowIndex];
|
let childTop = rowOffsets[measureSpec.rowIndex];
|
||||||
var childBottom = rowOffsets[measureSpec.rowIndex + measureSpec.rowSpan];
|
let childBottom = rowOffsets[measureSpec.rowIndex + measureSpec.rowSpan];
|
||||||
|
|
||||||
// No need to include margins in the width, height
|
// No need to include margins in the width, height
|
||||||
view.View.layoutChild(this, measureSpec.child, childLeft, childTop, childRight, childBottom);
|
view.View.layoutChild(this, measureSpec.child, childLeft, childTop, childRight, childBottom);
|
||||||
@@ -375,12 +363,9 @@ class MeasureHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public addMeasureSpec(measureSpec: MeasureSpecs, density: number) {
|
public addMeasureSpec(measureSpec: MeasureSpecs, density: number) {
|
||||||
var i: number = 0;
|
|
||||||
|
|
||||||
// Get column stats
|
// Get column stats
|
||||||
var columnGroup: ColumnGroup;
|
for (let i = measureSpec.columnIndex; i < measureSpec.columnIndex + measureSpec.columnSpan; i++) {
|
||||||
for (i = measureSpec.columnIndex; i < measureSpec.columnIndex + measureSpec.columnSpan; i++) {
|
let columnGroup = this.columns[i];
|
||||||
columnGroup = this.columns[i];
|
|
||||||
if (columnGroup.isAuto) {
|
if (columnGroup.isAuto) {
|
||||||
measureSpec.autoColumnsCount++;
|
measureSpec.autoColumnsCount++;
|
||||||
}
|
}
|
||||||
@@ -394,8 +379,8 @@ class MeasureHelper {
|
|||||||
|
|
||||||
if (measureSpec.autoColumnsCount > 0 && measureSpec.starColumnsCount === 0) {
|
if (measureSpec.autoColumnsCount > 0 && measureSpec.starColumnsCount === 0) {
|
||||||
// Determine which auto columns are affected by this element
|
// Determine which auto columns are affected by this element
|
||||||
for (i = measureSpec.columnIndex; i < measureSpec.columnIndex + measureSpec.columnSpan; i++) {
|
for (let i = measureSpec.columnIndex; i < measureSpec.columnIndex + measureSpec.columnSpan; i++) {
|
||||||
columnGroup = this.columns[i];
|
let columnGroup = this.columns[i];
|
||||||
if (columnGroup.isAuto) {
|
if (columnGroup.isAuto) {
|
||||||
columnGroup.measureToFix++;
|
columnGroup.measureToFix++;
|
||||||
}
|
}
|
||||||
@@ -403,9 +388,8 @@ class MeasureHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Get row stats
|
// Get row stats
|
||||||
var rowGroup: RowGroup;
|
for (let i = measureSpec.rowIndex; i < measureSpec.rowIndex + measureSpec.rowSpan; i++) {
|
||||||
for (i = measureSpec.rowIndex; i < measureSpec.rowIndex + measureSpec.rowSpan; i++) {
|
let rowGroup = this.rows[i];
|
||||||
rowGroup = this.rows[i];
|
|
||||||
if (rowGroup.isAuto) {
|
if (rowGroup.isAuto) {
|
||||||
measureSpec.autoRowsCount++;
|
measureSpec.autoRowsCount++;
|
||||||
}
|
}
|
||||||
@@ -419,8 +403,8 @@ class MeasureHelper {
|
|||||||
|
|
||||||
if (measureSpec.autoRowsCount > 0 && measureSpec.starRowsCount === 0) {
|
if (measureSpec.autoRowsCount > 0 && measureSpec.starRowsCount === 0) {
|
||||||
// Determine which auto rows are affected by this element
|
// Determine which auto rows are affected by this element
|
||||||
for (i = measureSpec.rowIndex; i < measureSpec.rowIndex + measureSpec.rowSpan; i++) {
|
for (let i = measureSpec.rowIndex; i < measureSpec.rowIndex + measureSpec.rowSpan; i++) {
|
||||||
rowGroup = this.rows[i];
|
let rowGroup = this.rows[i];
|
||||||
if (rowGroup.isAuto) {
|
if (rowGroup.isAuto) {
|
||||||
rowGroup.measureToFix++;
|
rowGroup.measureToFix++;
|
||||||
}
|
}
|
||||||
@@ -446,11 +430,9 @@ class MeasureHelper {
|
|||||||
measureSpec.measured = true;
|
measureSpec.measured = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
var i: number = 0;
|
|
||||||
if (measureSpec.autoColumnsCount > 0 && measureSpec.starColumnsCount === 0) {
|
if (measureSpec.autoColumnsCount > 0 && measureSpec.starColumnsCount === 0) {
|
||||||
var columnGroup: ColumnGroup;
|
for (let i = measureSpec.columnIndex; i < measureSpec.columnIndex + measureSpec.columnSpan; i++) {
|
||||||
for (i = measureSpec.columnIndex; i < measureSpec.columnIndex + measureSpec.columnSpan; i++) {
|
let columnGroup = this.columns[i];
|
||||||
columnGroup = this.columns[i];
|
|
||||||
if (columnGroup.isAuto) {
|
if (columnGroup.isAuto) {
|
||||||
columnGroup.currentMeasureToFixCount++;
|
columnGroup.currentMeasureToFixCount++;
|
||||||
}
|
}
|
||||||
@@ -458,9 +440,8 @@ class MeasureHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (measureSpec.autoRowsCount > 0 && measureSpec.starRowsCount === 0) {
|
if (measureSpec.autoRowsCount > 0 && measureSpec.starRowsCount === 0) {
|
||||||
var rowGroup: RowGroup;
|
for (let i = measureSpec.rowIndex; i < measureSpec.rowIndex + measureSpec.rowSpan; i++) {
|
||||||
for (i = measureSpec.rowIndex; i < measureSpec.rowIndex + measureSpec.rowSpan; i++) {
|
let rowGroup = this.rows[i];
|
||||||
rowGroup = this.rows[i];
|
|
||||||
if (rowGroup.isAuto) {
|
if (rowGroup.isAuto) {
|
||||||
rowGroup.currentMeasureToFixCount++;
|
rowGroup.currentMeasureToFixCount++;
|
||||||
}
|
}
|
||||||
@@ -469,11 +450,12 @@ class MeasureHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fixColumns() {
|
private fixColumns() {
|
||||||
var currentColumnWidth = 0;
|
let currentColumnWidth = 0;
|
||||||
var columnStarCount = 0;
|
let columnStarCount = 0;
|
||||||
this.columns.forEach((value: ColumnGroup, index: number, array: ColumnGroup[]) => {
|
this.columns.forEach((value: ColumnGroup, index: number, array: ColumnGroup[]) => {
|
||||||
// Star columns are still zeros (not calculated).
|
// Star columns are still zeros (not calculated).
|
||||||
currentColumnWidth += value.width;
|
currentColumnWidth += value.width;
|
||||||
|
// Should we use value.isStar instead? It returns star only if space is not infinity.
|
||||||
if (value.column.isStar) {
|
if (value.column.isStar) {
|
||||||
columnStarCount += value.column.value;
|
columnStarCount += value.column.value;
|
||||||
}
|
}
|
||||||
@@ -481,19 +463,22 @@ class MeasureHelper {
|
|||||||
|
|
||||||
this.columnStarValue = columnStarCount > 0 ? (this.width - currentColumnWidth) / columnStarCount : 0;
|
this.columnStarValue = columnStarCount > 0 ? (this.width - currentColumnWidth) / columnStarCount : 0;
|
||||||
|
|
||||||
this.columns.forEach((value: ColumnGroup, index: number, array: ColumnGroup[]) => {
|
if (this.horizontalStretch) {
|
||||||
if (value.isStar) {
|
this.columns.forEach((value: ColumnGroup, index: number, array: ColumnGroup[]) => {
|
||||||
value.width = value.column.value * this.columnStarValue;
|
if (value.isStar) {
|
||||||
}
|
value.width = value.column.value * this.columnStarValue;
|
||||||
});
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fixRows() {
|
private fixRows() {
|
||||||
var currentRowHeight = 0;
|
let currentRowHeight = 0;
|
||||||
var rowStarCount = 0;
|
let rowStarCount = 0;
|
||||||
this.rows.forEach((value: RowGroup, index: number, array: RowGroup[]) => {
|
this.rows.forEach((value: RowGroup, index: number, array: RowGroup[]) => {
|
||||||
// Star rows are still zeros (not calculated).
|
// Star rows are still zeros (not calculated).
|
||||||
currentRowHeight += value.height;
|
currentRowHeight += value.height;
|
||||||
|
// Should we use value.isStar instead? It returns star only if space is not infinity.
|
||||||
if (value.row.isStar) {
|
if (value.row.isStar) {
|
||||||
rowStarCount += value.row.value;
|
rowStarCount += value.row.value;
|
||||||
}
|
}
|
||||||
@@ -501,23 +486,25 @@ class MeasureHelper {
|
|||||||
|
|
||||||
this.rowStarValue = rowStarCount > 0 ? (this.height - currentRowHeight) / rowStarCount : 0;
|
this.rowStarValue = rowStarCount > 0 ? (this.height - currentRowHeight) / rowStarCount : 0;
|
||||||
|
|
||||||
this.rows.forEach((value: RowGroup, index: number, array: RowGroup[]) => {
|
if (this.verticalStretch) {
|
||||||
if (value.isStar) {
|
this.rows.forEach((value: RowGroup, index: number, array: RowGroup[]) => {
|
||||||
value.height = value.row.value * this.rowStarValue;
|
if (value.isStar) {
|
||||||
}
|
value.height = value.row.value * this.rowStarValue;
|
||||||
});
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fakeMeasure() {
|
private fakeMeasure() {
|
||||||
// Fake measure - measure all elemtns that have star rows and auto columns - with infinity Width and infinity Height
|
// Fake measure - measure all elemtns that have star rows and auto columns - with infinity Width and infinity Height
|
||||||
for (var i = 0; i < this.columns.length; i++) {
|
for (let i = 0; i < this.columns.length; i++) {
|
||||||
var columnGroup = this.columns[i];
|
let columnGroup = this.columns[i];
|
||||||
if (columnGroup.allMeasured) {
|
if (columnGroup.allMeasured) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (var j = 0; j < columnGroup.children.length; j++) {
|
for (let j = 0; j < columnGroup.children.length; j++) {
|
||||||
var measureSpec = columnGroup.children[j];
|
let measureSpec = columnGroup.children[j];
|
||||||
if (measureSpec.starRowsCount > 0 && measureSpec.autoColumnsCount > 0 && measureSpec.starColumnsCount === 0) {
|
if (measureSpec.starRowsCount > 0 && measureSpec.autoColumnsCount > 0 && measureSpec.starColumnsCount === 0) {
|
||||||
this.measureChild(measureSpec, true);
|
this.measureChild(measureSpec, true);
|
||||||
}
|
}
|
||||||
@@ -526,10 +513,10 @@ class MeasureHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private measureFixedColumnsNoStarRows() {
|
private measureFixedColumnsNoStarRows() {
|
||||||
for (var i = 0; i < this.columns.length; i++) {
|
for (let i = 0; i < this.columns.length; i++) {
|
||||||
var columnGroup = this.columns[i];
|
let columnGroup = this.columns[i];
|
||||||
for (var j = 0; j < columnGroup.children.length; j++) {
|
for (let j = 0; j < columnGroup.children.length; j++) {
|
||||||
var measureSpec = columnGroup.children[j];
|
let measureSpec = columnGroup.children[j];
|
||||||
if (measureSpec.starColumnsCount > 0 && measureSpec.starRowsCount === 0) {
|
if (measureSpec.starColumnsCount > 0 && measureSpec.starRowsCount === 0) {
|
||||||
this.measureChildFixedColumns(measureSpec);
|
this.measureChildFixedColumns(measureSpec);
|
||||||
}
|
}
|
||||||
@@ -538,10 +525,10 @@ class MeasureHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private measureNoStarColumnsFixedRows() {
|
private measureNoStarColumnsFixedRows() {
|
||||||
for (var i = 0; i < this.columns.length; i++) {
|
for (let i = 0; i < this.columns.length; i++) {
|
||||||
var columnGroup = this.columns[i];
|
let columnGroup = this.columns[i];
|
||||||
for (var j = 0; j < columnGroup.children.length; j++) {
|
for (let j = 0; j < columnGroup.children.length; j++) {
|
||||||
var measureSpec = columnGroup.children[j];
|
let measureSpec = columnGroup.children[j];
|
||||||
if (measureSpec.starRowsCount > 0 && measureSpec.starColumnsCount === 0) {
|
if (measureSpec.starRowsCount > 0 && measureSpec.starColumnsCount === 0) {
|
||||||
this.measureChildFixedRows(measureSpec);
|
this.measureChildFixedRows(measureSpec);
|
||||||
}
|
}
|
||||||
@@ -551,15 +538,12 @@ class MeasureHelper {
|
|||||||
|
|
||||||
public measure() {
|
public measure() {
|
||||||
this.init();
|
this.init();
|
||||||
var i: number = 0;
|
|
||||||
var j: number = 0;
|
|
||||||
var columnGroup: ColumnGroup;
|
|
||||||
var measureSpec: MeasureSpecs;
|
|
||||||
// Measure auto & pixel columns and rows (no spans).
|
// Measure auto & pixel columns and rows (no spans).
|
||||||
for (i = 0; i < this.columns.length; i++) {
|
for (let i = 0; i < this.columns.length; i++) {
|
||||||
columnGroup = this.columns[i];
|
let columnGroup = this.columns[i];
|
||||||
for (j = 0; j < columnGroup.children.length; j++) {
|
for (let j = 0; j < columnGroup.children.length; j++) {
|
||||||
measureSpec = columnGroup.children[j];
|
let measureSpec = columnGroup.children[j];
|
||||||
if (measureSpec.isStar || measureSpec.spanned) {
|
if (measureSpec.isStar || measureSpec.spanned) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -569,10 +553,10 @@ class MeasureHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Measure auto & pixel columns and rows (with spans).
|
// Measure auto & pixel columns and rows (with spans).
|
||||||
for (i = 0; i < this.columns.length; i++) {
|
for (let i = 0; i < this.columns.length; i++) {
|
||||||
columnGroup = this.columns[i];
|
let columnGroup = this.columns[i];
|
||||||
for (j = 0; j < columnGroup.children.length; j++) {
|
for (let j = 0; j < columnGroup.children.length; j++) {
|
||||||
measureSpec = columnGroup.children[j];
|
let measureSpec = columnGroup.children[j];
|
||||||
if (measureSpec.isStar || !measureSpec.spanned) {
|
if (measureSpec.isStar || !measureSpec.spanned) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -582,8 +566,8 @@ class MeasureHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// try fix stars!
|
// try fix stars!
|
||||||
var fixColumns: boolean = this.columns.every((colGroup, i, a) => colGroup.canBeFixed);
|
let fixColumns: boolean = this.columns.every((colGroup, i, a) => colGroup.canBeFixed);
|
||||||
var fixRows: boolean = this.rows.every((rowGroup, i, a) => rowGroup.canBeFixed);
|
let fixRows: boolean = this.rows.every((rowGroup, i, a) => rowGroup.canBeFixed);
|
||||||
|
|
||||||
if (fixColumns) {
|
if (fixColumns) {
|
||||||
this.fixColumns();
|
this.fixColumns();
|
||||||
@@ -621,10 +605,10 @@ class MeasureHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Rows and columns are fixed here - measure remaining elements
|
// Rows and columns are fixed here - measure remaining elements
|
||||||
for (i = 0; i < this.columns.length; i++) {
|
for (let i = 0; i < this.columns.length; i++) {
|
||||||
columnGroup = this.columns[i];
|
let columnGroup = this.columns[i];
|
||||||
for (j = 0; j < columnGroup.children.length; j++) {
|
for (let j = 0; j < columnGroup.children.length; j++) {
|
||||||
measureSpec = columnGroup.children[j];
|
let measureSpec = columnGroup.children[j];
|
||||||
if (!measureSpec.measured) {
|
if (!measureSpec.measured) {
|
||||||
this.measureChildFixedColumnsAndRows(measureSpec);
|
this.measureChildFixedColumnsAndRows(measureSpec);
|
||||||
}
|
}
|
||||||
@@ -643,32 +627,26 @@ class MeasureHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
measureChild(measureSpec: MeasureSpecs, isFakeMeasure: boolean = false) {
|
measureChild(measureSpec: MeasureSpecs, isFakeMeasure: boolean = false) {
|
||||||
var widthMeasureSpec: number = (measureSpec.autoColumnsCount > 0) ? this.infinity : utils.layout.makeMeasureSpec(measureSpec.pixelWidth, utils.layout.EXACTLY);
|
let widthMeasureSpec: number = (measureSpec.autoColumnsCount > 0) ? this.infinity : utils.layout.makeMeasureSpec(measureSpec.pixelWidth, utils.layout.EXACTLY);
|
||||||
var heightMeasureSpec: number = (isFakeMeasure || measureSpec.autoRowsCount > 0) ? this.infinity : utils.layout.makeMeasureSpec(measureSpec.pixelHeight, utils.layout.EXACTLY);
|
let heightMeasureSpec: number = (isFakeMeasure || measureSpec.autoRowsCount > 0) ? this.infinity : utils.layout.makeMeasureSpec(measureSpec.pixelHeight, utils.layout.EXACTLY);
|
||||||
|
|
||||||
var childSize = view.View.measureChild(this.grid, measureSpec.child, widthMeasureSpec, heightMeasureSpec);
|
let childSize = view.View.measureChild(this.grid, measureSpec.child, widthMeasureSpec, heightMeasureSpec);
|
||||||
|
|
||||||
var i;
|
let columnSpanEnd = measureSpec.columnIndex + measureSpec.columnSpan;
|
||||||
var columnSpanEnd = measureSpec.columnIndex + measureSpec.columnSpan;
|
let rowSpanEnd = measureSpec.rowIndex + measureSpec.rowSpan;
|
||||||
var rowSpanEnd = measureSpec.rowIndex + measureSpec.rowSpan;
|
|
||||||
|
|
||||||
var columnGroup: ColumnGroup;
|
|
||||||
var rowGroup: RowGroup;
|
|
||||||
var growSize: number;
|
|
||||||
|
|
||||||
var remainingSpace = 0;
|
|
||||||
if (measureSpec.autoColumnsCount > 0) {
|
if (measureSpec.autoColumnsCount > 0) {
|
||||||
remainingSpace = childSize.measuredWidth;
|
let remainingSpace = childSize.measuredWidth;
|
||||||
|
|
||||||
for (i = measureSpec.columnIndex; i < columnSpanEnd; i++) {
|
for (let i = measureSpec.columnIndex; i < columnSpanEnd; i++) {
|
||||||
columnGroup = this.columns[i];
|
let columnGroup = this.columns[i];
|
||||||
remainingSpace -= columnGroup.width;
|
remainingSpace -= columnGroup.width;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (remainingSpace > 0) {
|
if (remainingSpace > 0) {
|
||||||
growSize = remainingSpace / measureSpec.autoColumnsCount;
|
let growSize = remainingSpace / measureSpec.autoColumnsCount;
|
||||||
for (i = measureSpec.columnIndex; i < columnSpanEnd; i++) {
|
for (let i = measureSpec.columnIndex; i < columnSpanEnd; i++) {
|
||||||
columnGroup = this.columns[i];
|
let columnGroup = this.columns[i];
|
||||||
if (columnGroup.isAuto) {
|
if (columnGroup.isAuto) {
|
||||||
columnGroup.width += growSize;
|
columnGroup.width += growSize;
|
||||||
}
|
}
|
||||||
@@ -677,17 +655,17 @@ class MeasureHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!isFakeMeasure && measureSpec.autoRowsCount > 0) {
|
if (!isFakeMeasure && measureSpec.autoRowsCount > 0) {
|
||||||
remainingSpace = childSize.measuredHeight;
|
let remainingSpace = childSize.measuredHeight;
|
||||||
|
|
||||||
for (i = measureSpec.rowIndex; i < rowSpanEnd; i++) {
|
for (let i = measureSpec.rowIndex; i < rowSpanEnd; i++) {
|
||||||
rowGroup = this.rows[i];
|
let rowGroup = this.rows[i];
|
||||||
remainingSpace -= rowGroup.height;
|
remainingSpace -= rowGroup.height;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (remainingSpace > 0) {
|
if (remainingSpace > 0) {
|
||||||
growSize = remainingSpace / measureSpec.autoRowsCount;
|
let growSize = remainingSpace / measureSpec.autoRowsCount;
|
||||||
for (i = measureSpec.rowIndex; i < rowSpanEnd; i++) {
|
for (let i = measureSpec.rowIndex; i < rowSpanEnd; i++) {
|
||||||
rowGroup = this.rows[i];
|
let rowGroup = this.rows[i];
|
||||||
if (rowGroup.isAuto) {
|
if (rowGroup.isAuto) {
|
||||||
rowGroup.height += growSize;
|
rowGroup.height += growSize;
|
||||||
}
|
}
|
||||||
@@ -699,64 +677,40 @@ class MeasureHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
measureChildFixedColumns(measureSpec: MeasureSpecs) {
|
measureChildFixedColumns(measureSpec: MeasureSpecs) {
|
||||||
var columnIndex = measureSpec.columnIndex;
|
let columnIndex = measureSpec.columnIndex;
|
||||||
var columnSpanEnd = columnIndex + measureSpec.columnSpan;
|
let columnSpanEnd = columnIndex + measureSpec.columnSpan;
|
||||||
var rowIndex = measureSpec.rowIndex;
|
let rowIndex = measureSpec.rowIndex;
|
||||||
var rowSpanEnd = rowIndex + measureSpec.rowSpan;
|
let rowSpanEnd = rowIndex + measureSpec.rowSpan;
|
||||||
|
|
||||||
var i = 0;
|
let columnsWidth: number = 0;
|
||||||
var columnsWidth: number = 0;
|
for (let i = columnIndex; i < columnSpanEnd; i++) {
|
||||||
var columnGroup: ColumnGroup;
|
let columnGroup = this.columns[i];
|
||||||
var rowGroup: RowGroup;
|
|
||||||
var growSize: number;
|
|
||||||
|
|
||||||
for (i = columnIndex; i < columnSpanEnd; i++) {
|
|
||||||
columnGroup = this.columns[i];
|
|
||||||
if (!columnGroup.isStar) {
|
if (!columnGroup.isStar) {
|
||||||
columnsWidth += columnGroup.width;
|
columnsWidth += columnGroup.width;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var measureWidth = columnsWidth + measureSpec.starColumnsCount * this.columnStarValue;
|
let measureWidth = columnsWidth + measureSpec.starColumnsCount * this.columnStarValue;
|
||||||
|
|
||||||
var widthMeasureSpec = utils.layout.makeMeasureSpec(measureWidth, this.horizontalStretch ? utils.layout.EXACTLY : utils.layout.AT_MOST);
|
let widthMeasureSpec = utils.layout.makeMeasureSpec(measureWidth, this.horizontalStretch ? utils.layout.EXACTLY : utils.layout.AT_MOST);
|
||||||
var heightMeasureSpec: number = (measureSpec.autoRowsCount > 0) ? this.infinity : utils.layout.makeMeasureSpec(measureSpec.pixelHeight, utils.layout.EXACTLY);
|
let heightMeasureSpec: number = (measureSpec.autoRowsCount > 0) ? this.infinity : utils.layout.makeMeasureSpec(measureSpec.pixelHeight, utils.layout.EXACTLY);
|
||||||
var childSize = view.View.measureChild(this.grid, measureSpec.child, widthMeasureSpec, heightMeasureSpec);
|
let childSize = view.View.measureChild(this.grid, measureSpec.child, widthMeasureSpec, heightMeasureSpec);
|
||||||
|
|
||||||
var remainingSpace = 0;
|
this.updateColumnGroupWidth(measureSpec, childSize.measuredWidth);
|
||||||
|
|
||||||
// Distribute width over star columns
|
|
||||||
if (!this.horizontalStretch) {
|
|
||||||
remainingSpace = childSize.measuredWidth;
|
|
||||||
for (i = columnIndex; i < columnSpanEnd; i++) {
|
|
||||||
columnGroup = this.columns[i];
|
|
||||||
remainingSpace -= columnGroup.width;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (remainingSpace > 0) {
|
|
||||||
growSize = remainingSpace / measureSpec.starColumnsCount;
|
|
||||||
for (i = columnIndex; i < columnSpanEnd; i++) {
|
|
||||||
columnGroup = this.columns[i];
|
|
||||||
if (columnGroup.isStar) {
|
|
||||||
columnGroup.width += growSize;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Distribute height over auto rows
|
// Distribute height over auto rows
|
||||||
if (measureSpec.autoRowsCount > 0) {
|
if (measureSpec.autoRowsCount > 0) {
|
||||||
remainingSpace = childSize.measuredHeight;
|
let remainingSpace = childSize.measuredHeight;
|
||||||
|
|
||||||
for (i = rowIndex; i < rowSpanEnd; i++) {
|
for (let i = rowIndex; i < rowSpanEnd; i++) {
|
||||||
rowGroup = this.rows[i];
|
let rowGroup = this.rows[i];
|
||||||
remainingSpace -= rowGroup.height;
|
remainingSpace -= rowGroup.height;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (remainingSpace > 0) {
|
if (remainingSpace > 0) {
|
||||||
growSize = remainingSpace / measureSpec.autoRowsCount;
|
let growSize = remainingSpace / measureSpec.autoRowsCount;
|
||||||
for (i = rowIndex; i < rowSpanEnd; i++) {
|
for (let i = rowIndex; i < rowSpanEnd; i++) {
|
||||||
rowGroup = this.rows[i];
|
let rowGroup = this.rows[i];
|
||||||
if (rowGroup.isAuto) {
|
if (rowGroup.isAuto) {
|
||||||
rowGroup.height += growSize;
|
rowGroup.height += growSize;
|
||||||
}
|
}
|
||||||
@@ -768,45 +722,38 @@ class MeasureHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
measureChildFixedRows(measureSpec: MeasureSpecs) {
|
measureChildFixedRows(measureSpec: MeasureSpecs) {
|
||||||
var i = 0;
|
let columnIndex = measureSpec.columnIndex;
|
||||||
var columnIndex = measureSpec.columnIndex;
|
let columnSpanEnd = columnIndex + measureSpec.columnSpan;
|
||||||
var columnSpanEnd = columnIndex + measureSpec.columnSpan;
|
let rowIndex = measureSpec.rowIndex;
|
||||||
var rowIndex = measureSpec.rowIndex;
|
let rowSpanEnd = rowIndex + measureSpec.rowSpan;
|
||||||
var rowSpanEnd = rowIndex + measureSpec.rowSpan;
|
let rowsHeight: number = 0;
|
||||||
var rowsHeight: number = 0;
|
|
||||||
var rowGroup: RowGroup;
|
|
||||||
|
|
||||||
for (i = rowIndex; i < rowSpanEnd; i++) {
|
for (let i = rowIndex; i < rowSpanEnd; i++) {
|
||||||
rowGroup = this.rows[i];
|
let rowGroup = this.rows[i];
|
||||||
if (!rowGroup.isStar) {
|
if (!rowGroup.isStar) {
|
||||||
rowsHeight += rowGroup.height;
|
rowsHeight += rowGroup.height;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var measureHeight = rowsHeight + measureSpec.starRowsCount * this.rowStarValue;
|
let measureHeight = rowsHeight + measureSpec.starRowsCount * this.rowStarValue;
|
||||||
|
|
||||||
var widthMeasureSpec: number = (measureSpec.autoColumnsCount > 0) ? this.infinity : utils.layout.makeMeasureSpec(measureSpec.pixelWidth, utils.layout.EXACTLY);
|
|
||||||
var heightMeasureSpec = utils.layout.makeMeasureSpec(measureHeight, this.verticalStretch ? utils.layout.EXACTLY : utils.layout.AT_MOST);
|
|
||||||
var childSize = view.View.measureChild(this.grid, measureSpec.child, widthMeasureSpec, heightMeasureSpec);
|
|
||||||
|
|
||||||
var remainingSpace = 0;
|
|
||||||
var columnGroup: ColumnGroup;
|
|
||||||
var growSize: number;
|
|
||||||
|
|
||||||
|
let widthMeasureSpec: number = (measureSpec.autoColumnsCount > 0) ? this.infinity : utils.layout.makeMeasureSpec(measureSpec.pixelWidth, utils.layout.EXACTLY);
|
||||||
|
let heightMeasureSpec = utils.layout.makeMeasureSpec(measureHeight, this.verticalStretch ? utils.layout.EXACTLY : utils.layout.AT_MOST);
|
||||||
|
let childSize = view.View.measureChild(this.grid, measureSpec.child, widthMeasureSpec, heightMeasureSpec);
|
||||||
|
|
||||||
// Distribute width over auto columns
|
// Distribute width over auto columns
|
||||||
if (measureSpec.autoColumnsCount > 0) {
|
if (measureSpec.autoColumnsCount > 0) {
|
||||||
remainingSpace = childSize.measuredWidth;
|
let remainingSpace = childSize.measuredWidth;
|
||||||
|
|
||||||
for (i = columnIndex; i < columnSpanEnd; i++) {
|
for (let i = columnIndex; i < columnSpanEnd; i++) {
|
||||||
columnGroup = this.columns[i];
|
let columnGroup = this.columns[i];
|
||||||
remainingSpace -= columnGroup.width;
|
remainingSpace -= columnGroup.width;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (remainingSpace > 0) {
|
if (remainingSpace > 0) {
|
||||||
growSize = remainingSpace / measureSpec.autoColumnsCount;
|
let growSize = remainingSpace / measureSpec.autoColumnsCount;
|
||||||
for (i = columnIndex; i < columnSpanEnd; i++) {
|
for (let i = columnIndex; i < columnSpanEnd; i++) {
|
||||||
columnGroup = this.columns[i];
|
let columnGroup = this.columns[i];
|
||||||
|
|
||||||
if (columnGroup.isAuto) {
|
if (columnGroup.isAuto) {
|
||||||
columnGroup.width += growSize;
|
columnGroup.width += growSize;
|
||||||
}
|
}
|
||||||
@@ -814,102 +761,95 @@ class MeasureHelper {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Distribute height over star rows
|
this.updateRowGroupHeight(measureSpec, childSize.measuredHeight);
|
||||||
if (!this.verticalStretch) {
|
|
||||||
remainingSpace = childSize.measuredHeight;
|
|
||||||
for (i = rowIndex; i < rowSpanEnd; i++) {
|
|
||||||
rowGroup = this.rows[i];
|
|
||||||
remainingSpace -= rowGroup.height;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (remainingSpace > 0) {
|
|
||||||
growSize = remainingSpace / measureSpec.starRowsCount;
|
|
||||||
for (i = rowIndex; i < rowSpanEnd; i++) {
|
|
||||||
rowGroup = this.rows[i];
|
|
||||||
if (rowGroup.isStar) {
|
|
||||||
rowGroup.height += growSize;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
this.itemMeasured(measureSpec);
|
this.itemMeasured(measureSpec);
|
||||||
}
|
}
|
||||||
|
|
||||||
measureChildFixedColumnsAndRows(measureSpec: MeasureSpecs): void {
|
measureChildFixedColumnsAndRows(measureSpec: MeasureSpecs): void {
|
||||||
var i = 0;
|
let columnIndex = measureSpec.columnIndex;
|
||||||
var columnIndex = measureSpec.columnIndex;
|
let columnSpanEnd = columnIndex + measureSpec.columnSpan;
|
||||||
var columnSpanEnd = columnIndex + measureSpec.columnSpan;
|
let rowIndex = measureSpec.rowIndex;
|
||||||
var rowIndex = measureSpec.rowIndex;
|
let rowSpanEnd = rowIndex + measureSpec.rowSpan;
|
||||||
var rowSpanEnd = rowIndex + measureSpec.rowSpan;
|
|
||||||
|
|
||||||
var columnGroup: ColumnGroup;
|
let columnGroup: ColumnGroup;
|
||||||
var rowGroup: RowGroup;
|
let rowGroup: RowGroup;
|
||||||
|
|
||||||
var columnsWidth: number = 0;
|
let columnsWidth: number = 0;
|
||||||
for (i = columnIndex; i < columnSpanEnd; i++) {
|
for (let i = columnIndex; i < columnSpanEnd; i++) {
|
||||||
columnGroup = this.columns[i];
|
columnGroup = this.columns[i];
|
||||||
if (!columnGroup.isStar) {
|
if (!columnGroup.isStar) {
|
||||||
columnsWidth += columnGroup.width;
|
columnsWidth += columnGroup.width;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var rowsHeight: number = 0;
|
let rowsHeight: number = 0;
|
||||||
for (i = rowIndex; i < rowSpanEnd; i++) {
|
for (let i = rowIndex; i < rowSpanEnd; i++) {
|
||||||
rowGroup = this.rows[i];
|
rowGroup = this.rows[i];
|
||||||
if (!rowGroup.isStar) {
|
if (!rowGroup.isStar) {
|
||||||
rowsHeight += rowGroup.height;
|
rowsHeight += rowGroup.height;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var measureWidth = columnsWidth + measureSpec.starColumnsCount * this.columnStarValue;
|
let measureWidth = columnsWidth + measureSpec.starColumnsCount * this.columnStarValue;
|
||||||
var measureHeight = rowsHeight + measureSpec.starRowsCount * this.rowStarValue;
|
let measureHeight = rowsHeight + measureSpec.starRowsCount * this.rowStarValue;
|
||||||
|
|
||||||
// if (have stars) & (not stretch) - at most
|
// if (have stars) & (not stretch) - at most
|
||||||
var widthMeasureSpec = utils.layout.makeMeasureSpec(measureWidth, (measureSpec.starColumnsCount > 0 && !this.horizontalStretch) ? utils.layout.AT_MOST : utils.layout.EXACTLY);
|
let widthMeasureSpec = utils.layout.makeMeasureSpec(measureWidth, (measureSpec.starColumnsCount > 0 && !this.horizontalStretch) ? utils.layout.AT_MOST : utils.layout.EXACTLY);
|
||||||
var heightMeasureSpec = utils.layout.makeMeasureSpec(measureHeight, (measureSpec.starRowsCount > 0 && !this.verticalStretch) ? utils.layout.AT_MOST : utils.layout.EXACTLY);
|
let heightMeasureSpec = utils.layout.makeMeasureSpec(measureHeight, (measureSpec.starRowsCount > 0 && !this.verticalStretch) ? utils.layout.AT_MOST : utils.layout.EXACTLY);
|
||||||
|
|
||||||
var childSize = view.View.measureChild(this.grid, measureSpec.child, widthMeasureSpec, heightMeasureSpec);
|
let childSize = view.View.measureChild(this.grid, measureSpec.child, widthMeasureSpec, heightMeasureSpec);
|
||||||
|
|
||||||
var remainingSpace = childSize.measuredWidth;
|
this.updateColumnGroupWidth(measureSpec, childSize.measuredWidth);
|
||||||
var growSize: number;
|
this.updateRowGroupHeight(measureSpec, childSize.measuredHeight);
|
||||||
|
|
||||||
if (!this.horizontalStretch) {
|
this.itemMeasured(measureSpec);
|
||||||
for (i = columnIndex; i < columnSpanEnd; i++) {
|
}
|
||||||
columnGroup = this.columns[i];
|
|
||||||
remainingSpace -= columnGroup.width;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (remainingSpace > 0) {
|
|
||||||
growSize = remainingSpace / measureSpec.starColumnsCount;
|
|
||||||
for (i = columnIndex; i < columnSpanEnd; i++) {
|
|
||||||
columnGroup = this.columns[i];
|
|
||||||
if (columnGroup.isStar) {
|
|
||||||
columnGroup.width += growSize;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
remainingSpace = childSize.measuredHeight;
|
|
||||||
|
|
||||||
|
private updateRowGroupHeight(measureSpec: MeasureSpecs, remainingSpace: number): void {
|
||||||
|
// Distribute height over star rows
|
||||||
if (!this.verticalStretch) {
|
if (!this.verticalStretch) {
|
||||||
for (i = rowIndex; i < rowSpanEnd; i++) {
|
let rowIndex = measureSpec.rowIndex;
|
||||||
rowGroup = this.rows[i];
|
let rowSpanEnd = rowIndex + measureSpec.rowSpan;
|
||||||
|
|
||||||
|
for (let i = rowIndex; i < rowSpanEnd; i++) {
|
||||||
|
let rowGroup = this.rows[i];
|
||||||
remainingSpace -= rowGroup.height;
|
remainingSpace -= rowGroup.height;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (remainingSpace > 0) {
|
if (remainingSpace > 0) {
|
||||||
growSize = remainingSpace / measureSpec.starRowsCount;
|
let growSize = remainingSpace / measureSpec.starRowsCount;
|
||||||
for (i = rowIndex; i < rowSpanEnd; i++) {
|
for (let i = rowIndex; i < rowSpanEnd; i++) {
|
||||||
rowGroup = this.rows[i];
|
let rowGroup = this.rows[i];
|
||||||
if (rowGroup.isStar) {
|
if (rowGroup.isStar) {
|
||||||
rowGroup.height += growSize;
|
rowGroup.height += growSize;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.itemMeasured(measureSpec);
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
private updateColumnGroupWidth(measureSpec: MeasureSpecs, remainingSpace: number): void {
|
||||||
|
|
||||||
|
// Distribute width over star columns
|
||||||
|
if (!this.horizontalStretch) {
|
||||||
|
let columnIndex = measureSpec.columnIndex;
|
||||||
|
let columnSpanEnd = columnIndex + measureSpec.columnSpan;
|
||||||
|
|
||||||
|
for (let i = columnIndex; i < columnSpanEnd; i++) {
|
||||||
|
let columnGroup = this.columns[i];
|
||||||
|
remainingSpace -= columnGroup.width;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (remainingSpace > 0) {
|
||||||
|
let growSize = remainingSpace / measureSpec.starColumnsCount;
|
||||||
|
for (let i = columnIndex; i < columnSpanEnd; i++) {
|
||||||
|
let columnGroup = this.columns[i];
|
||||||
|
if (columnGroup.isStar) {
|
||||||
|
columnGroup.width += growSize;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -26,7 +26,14 @@ class DialogFragmentClass extends android.app.DialogFragment {
|
|||||||
public onCreateDialog(savedInstanceState: android.os.Bundle): android.app.Dialog {
|
public onCreateDialog(savedInstanceState: android.os.Bundle): android.app.Dialog {
|
||||||
var dialog = new android.app.Dialog(this._owner._context);
|
var dialog = new android.app.Dialog(this._owner._context);
|
||||||
dialog.requestWindowFeature(android.view.Window.FEATURE_NO_TITLE);
|
dialog.requestWindowFeature(android.view.Window.FEATURE_NO_TITLE);
|
||||||
dialog.setContentView(this._owner._nativeView);
|
|
||||||
|
// Hide actionBar and adjust alignment based on _fullscreen value.
|
||||||
|
this._owner.horizontalAlignment = this._fullscreen ? enums.HorizontalAlignment.stretch : enums.HorizontalAlignment.center;
|
||||||
|
this._owner.verticalAlignment = this._fullscreen ? enums.VerticalAlignment.stretch : enums.VerticalAlignment.center;
|
||||||
|
this._owner.actionBarHidden = true;
|
||||||
|
|
||||||
|
dialog.setContentView(this._owner._nativeView, this._owner._nativeView.getLayoutParams());
|
||||||
|
|
||||||
var window = dialog.getWindow();
|
var window = dialog.getWindow();
|
||||||
window.setBackgroundDrawable(new android.graphics.drawable.ColorDrawable(android.graphics.Color.TRANSPARENT));
|
window.setBackgroundDrawable(new android.graphics.drawable.ColorDrawable(android.graphics.Color.TRANSPARENT));
|
||||||
|
|
||||||
@@ -65,11 +72,7 @@ export class Page extends pageCommon.Page {
|
|||||||
public _createUI() {
|
public _createUI() {
|
||||||
this._grid = new org.nativescript.widgets.GridLayout(this._context);
|
this._grid = new org.nativescript.widgets.GridLayout(this._context);
|
||||||
this._grid.addRow(new org.nativescript.widgets.ItemSpec(1, org.nativescript.widgets.GridUnitType.auto));
|
this._grid.addRow(new org.nativescript.widgets.ItemSpec(1, org.nativescript.widgets.GridUnitType.auto));
|
||||||
var gridUnitType = org.nativescript.widgets.GridUnitType.star
|
this._grid.addRow(new org.nativescript.widgets.ItemSpec(1, org.nativescript.widgets.GridUnitType.star));
|
||||||
if (this._closeModalCallback) {
|
|
||||||
gridUnitType = org.nativescript.widgets.GridUnitType.auto;
|
|
||||||
}
|
|
||||||
this._grid.addRow(new org.nativescript.widgets.ItemSpec(1, gridUnitType));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public _addViewToNativeVisualTree(child: view.View, atIndex?: number): boolean {
|
public _addViewToNativeVisualTree(child: view.View, atIndex?: number): boolean {
|
||||||
@@ -119,18 +122,18 @@ export class Page extends pageCommon.Page {
|
|||||||
this.onLoaded();
|
this.onLoaded();
|
||||||
|
|
||||||
var that = this;
|
var that = this;
|
||||||
this._dialogFragment = new DialogFragmentClass(this, fullscreen, function() {
|
this._dialogFragment = new DialogFragmentClass(this, fullscreen, function () {
|
||||||
that.closeModal();
|
that.closeModal();
|
||||||
});
|
});
|
||||||
this._dialogFragment.show(parent.frame.android.activity.getFragmentManager(), "dialog");
|
this._dialogFragment.show(parent.frame.android.activity.getFragmentManager(), "dialog");
|
||||||
|
|
||||||
super._raiseShownModallyEvent(parent, context, closeCallback);
|
super._raiseShownModallyEvent(parent, context, closeCallback);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected _hideNativeModalView(parent: Page) {
|
protected _hideNativeModalView(parent: Page) {
|
||||||
this._dialogFragment.dismissAllowingStateLoss();
|
this._dialogFragment.dismissAllowingStateLoss();
|
||||||
this._dialogFragment = null;
|
this._dialogFragment = null;
|
||||||
|
|
||||||
this.onUnloaded();
|
this.onUnloaded();
|
||||||
this._isAddedToNativeVisualTree = false;
|
this._isAddedToNativeVisualTree = false;
|
||||||
this._onDetached(true);
|
this._onDetached(true);
|
||||||
|
|||||||
Reference in New Issue
Block a user