1/* 2 * Copyright (C) 2012 Google Inc. All rights reserved. 3 * Copyright (C) 2013, 2014 Igalia S.L. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are 7 * met: 8 * 9 * * Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * * Redistributions in binary form must reproduce the above 12 * copyright notice, this list of conditions and the following disclaimer 13 * in the documentation and/or other materials provided with the 14 * distribution. 15 * * Neither the name of Google Inc. nor the names of its 16 * contributors may be used to endorse or promote products derived from 17 * this software without specific prior written permission. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 */ 31 32#ifndef GridTrackSize_h 33#define GridTrackSize_h 34 35#if ENABLE(CSS_GRID_LAYOUT) 36 37#include "GridLength.h" 38 39namespace WebCore { 40 41enum GridTrackSizeType { 42 LengthTrackSizing, 43 MinMaxTrackSizing 44}; 45 46class GridTrackSize { 47public: 48 GridTrackSize(LengthType type = Undefined) 49 : m_type(LengthTrackSizing) 50 , m_minTrackBreadth(type) 51 , m_maxTrackBreadth(type) 52 { 53 } 54 55 const GridLength& length() const 56 { 57 ASSERT(m_type == LengthTrackSizing); 58 ASSERT(m_minTrackBreadth == m_maxTrackBreadth); 59 const GridLength& minTrackBreadth = m_minTrackBreadth; 60 ASSERT(!minTrackBreadth.isLength() || !minTrackBreadth.length().isUndefined()); 61 return minTrackBreadth; 62 } 63 64 void setLength(const GridLength& length) 65 { 66 m_type = LengthTrackSizing; 67 m_minTrackBreadth = length; 68 m_maxTrackBreadth = length; 69 } 70 71 const GridLength& minTrackBreadth() const 72 { 73 ASSERT(!m_minTrackBreadth.isLength() || !m_minTrackBreadth.length().isUndefined()); 74 if (m_minTrackBreadth.isLength() && m_minTrackBreadth.length().isAuto()) { 75 DEPRECATED_DEFINE_STATIC_LOCAL(GridLength, minContent, (MinContent)); 76 return minContent; 77 } 78 return m_minTrackBreadth; 79 } 80 81 const GridLength& maxTrackBreadth() const 82 { 83 ASSERT(!m_maxTrackBreadth.isLength() || !m_maxTrackBreadth.length().isUndefined()); 84 if (m_maxTrackBreadth.isLength() && m_maxTrackBreadth.length().isAuto()) { 85 DEPRECATED_DEFINE_STATIC_LOCAL(GridLength, maxContent, (MaxContent)); 86 return maxContent; 87 } 88 return m_maxTrackBreadth; 89 } 90 91 void setMinMax(const GridLength& minTrackBreadth, const GridLength& maxTrackBreadth) 92 { 93 m_type = MinMaxTrackSizing; 94 m_minTrackBreadth = minTrackBreadth; 95 m_maxTrackBreadth = maxTrackBreadth; 96 } 97 98 GridTrackSizeType type() const { return m_type; } 99 100 bool isContentSized() const { return m_minTrackBreadth.isContentSized() || m_maxTrackBreadth.isContentSized(); } 101 102 bool isPercentage() const { return m_type == LengthTrackSizing && length().isLength() && length().length().isPercent(); } 103 104 bool operator==(const GridTrackSize& other) const 105 { 106 return m_type == other.m_type && m_minTrackBreadth == other.m_minTrackBreadth && m_maxTrackBreadth == other.m_maxTrackBreadth; 107 } 108 109 bool hasMinOrMaxContentMinTrackBreadth() const { return minTrackBreadth().isLength() && (minTrackBreadth().length().isMinContent() || minTrackBreadth().length().isMaxContent()); } 110 bool hasMaxContentMinTrackBreadth() const { return minTrackBreadth().isLength() && minTrackBreadth().length().isMaxContent(); } 111 bool hasMinOrMaxContentMaxTrackBreadth() const { return maxTrackBreadth().isLength() && (maxTrackBreadth().length().isMinContent() || maxTrackBreadth().length().isMaxContent()); } 112 bool hasMaxContentMaxTrackBreadth() const { return maxTrackBreadth().isLength() && maxTrackBreadth().length().isMaxContent(); } 113 114private: 115 GridTrackSizeType m_type; 116 GridLength m_minTrackBreadth; 117 GridLength m_maxTrackBreadth; 118}; 119 120} // namespace WebCore 121 122#endif /* ENABLE(CSS_GRID_LAYOUT) */ 123 124#endif // GridTrackSize_h 125