| Index: client/layout/GridTracks.dart
|
| ===================================================================
|
| --- client/layout/GridTracks.dart (revision 4144)
|
| +++ client/layout/GridTracks.dart (working copy)
|
| @@ -1,187 +0,0 @@
|
| -// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
|
| -// for details. All rights reserved. Use of this source code is governed by a
|
| -// BSD-style license that can be found in the LICENSE file.
|
| -
|
| -// This file has classes representing the grid tracks and grid template
|
| -
|
| -/**
|
| - * The data structure representing the grid-rows or grid-columns
|
| - * properties.
|
| - */
|
| -class GridTrackList {
|
| - /** The set of tracks defined in CSS via grid-rows and grid-columns */
|
| - final List<GridTrack> tracks;
|
| -
|
| - /**
|
| - * Maps edge names to the corresponding track. Depending on whether the index
|
| - * is used as a start or end, it might be interpreted exclusively or
|
| - * inclusively.
|
| - */
|
| - final Map<String, int> lineNames;
|
| -
|
| - GridTrackList(this.tracks, this.lineNames) {}
|
| -}
|
| -
|
| -
|
| -/** Represents a row or a column. */
|
| -class GridTrack {
|
| - /**
|
| - * The start position of this track. Equal to the sum of previous track's
|
| - * usedBreadth.
|
| - */
|
| - num start;
|
| -
|
| - /** The final computed breadth of this track. */
|
| - num usedBreadth;
|
| -
|
| - // Fields used internally by the sizing algorithm
|
| - num maxBreadth;
|
| - num updatedBreadth;
|
| - num tempBreadth;
|
| -
|
| - final TrackSizing sizing;
|
| -
|
| - GridTrack(this.sizing) {}
|
| -
|
| - /**
|
| - * Support for the feature that repeats rows and columns, e.g.
|
| - * [:grid-columns: 10px ("content" 250px 10px)[4]:]
|
| - */
|
| - GridTrack clone() => new GridTrack(sizing.clone());
|
| -
|
| - /** The min sizing function for the track. */
|
| - SizingFunction get minSizing() => sizing.min;
|
| -
|
| - /** The min sizing function for the track. */
|
| - SizingFunction get maxSizing() => sizing.max;
|
| -
|
| - num get end() => start + usedBreadth;
|
| -
|
| - bool get isFractional() => minSizing.isFraction || maxSizing.isFraction;
|
| -}
|
| -
|
| -
|
| -/** Represents the grid-row-align or grid-column-align. */
|
| -class GridItemAlignment {
|
| - // TODO(jmesserly): should this be stored as an int for performance?
|
| - final String value;
|
| -
|
| - // 'start' | 'end' | 'center' | 'stretch'
|
| - GridItemAlignment.fromString(String value)
|
| - : this.value = (value == null) ? 'stretch' : value {
|
| -
|
| - switch (this.value) {
|
| - case 'start': case 'end': case 'center': case 'stretch':
|
| - break;
|
| - default:
|
| - throw new UnsupportedOperationException(
|
| - 'invalid row/column alignment "$value"');
|
| - }
|
| - }
|
| -
|
| - _GridLocation align(_GridLocation span, int size) {
|
| - switch (value) {
|
| - case 'start':
|
| - return new _GridLocation(span.start, size);
|
| - case 'end':
|
| - return new _GridLocation(span.end - size, size);
|
| - case 'center':
|
| - size = Math.min(size, span.length);
|
| - num center = span.start + span.length / 2;
|
| - num left = center - size / 2;
|
| - return new _GridLocation(left.round().toInt(), size);
|
| - case 'stretch':
|
| - return span;
|
| - }
|
| - }
|
| -}
|
| -
|
| -
|
| -/**
|
| - * Represents a grid-template. Used in conjunction with a grid-cell to
|
| - * place cells in the grid, without needing to specify the exact row/column.
|
| - */
|
| -class GridTemplate {
|
| - final Map<int, _GridTemplateRect> _rects;
|
| - final int _numRows;
|
| -
|
| - GridTemplate(List<String> rows)
|
| - : _rects = new Map<int, _GridTemplateRect>(),
|
| - _numRows = rows.length {
|
| - _buildRects(rows);
|
| - }
|
| -
|
| - /** Scans the template strings and computes bounds for each one. */
|
| - void _buildRects(List<String> templateRows) {
|
| - for (int r = 0; r < templateRows.length; r++) {
|
| - String row = templateRows[r];
|
| - for (int c = 0; c < row.length; c++) {
|
| - int cell = row.charCodeAt(c);
|
| - final rect = _rects[cell];
|
| - if (rect != null) {
|
| - rect.add(r + 1, c + 1);
|
| - } else {
|
| - _rects[cell] = new _GridTemplateRect(cell, r + 1, c + 1);
|
| - }
|
| - }
|
| - }
|
| -
|
| - // Finally, check that each rectangle is valid (i.e. all spaces filled)
|
| - for (final rect in _rects.getValues()) {
|
| - rect.checkValid();
|
| - }
|
| - }
|
| -
|
| - /**
|
| - * Looks up the given cell in the template, and returns the rect.
|
| - */
|
| - _GridTemplateRect lookupCell(String cell) {
|
| - if (cell.length != 1) {
|
| - throw new UnsupportedOperationException(
|
| - 'grid-cell "$cell" must be a one character string');
|
| - }
|
| - final rect = _rects[cell.charCodeAt(0)];
|
| - if (rect == null) {
|
| - throw new UnsupportedOperationException(
|
| - 'grid-cell "$cell" not found in parent\'s grid-template');
|
| - }
|
| - return rect;
|
| - }
|
| -}
|
| -
|
| -/** Used by GridTemplate to track a single cell's bounds. */
|
| -class _GridTemplateRect {
|
| - int row, column, rowSpan, columnSpan, _count, _char;
|
| - _GridTemplateRect(this._char, this.row, this.column)
|
| - : rowSpan = 1, columnSpan = 1, _count = 1 {}
|
| -
|
| - void add(int r, int c) {
|
| - assert (r >= row && c >= column);
|
| - _count++;
|
| - rowSpan = Math.max(rowSpan, r - row + 1);
|
| - columnSpan = Math.max(columnSpan, c - column + 1);
|
| - }
|
| -
|
| - void checkValid() {
|
| - int expected = rowSpan * columnSpan;
|
| - if (expected != _count) {
|
| - // TODO(jmesserly): not sure if we should throw here, due to CSS's
|
| - // permissiveness. At the moment we're noisy about errors.
|
| - String cell = new String.fromCharCodes([_char]);
|
| - throw new UnsupportedOperationException('grid-template "$cell"' +
|
| - ' is not square, expected $expected cells but got $_count');
|
| - }
|
| - }
|
| -}
|
| -
|
| -
|
| -/**
|
| - * Used to return a row/column and span during parsing of grid-row and
|
| - * grid-column during parsing.
|
| - */
|
| -class _GridLocation {
|
| - final int start, length;
|
| - _GridLocation(this.start, this.length) {}
|
| -
|
| - int get end() => start + length;
|
| -}
|
|
|