1 /* 2 * Copyright (c) 2012, Google Inc. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions are 6 * met: 7 * 8 * * Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * * Redistributions in binary form must reproduce the above 11 * copyright notice, this list of conditions and the following disclaimer 12 * in the documentation and/or other materials provided with the 13 * distribution. 14 * * Neither the name of Google Inc. nor the names of its 15 * contributors may be used to endorse or promote products derived from 16 * this software without specific prior written permission. 17 * 18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 */ 30 31 #include "config.h" 32 #include "platform/geometry/LayoutBoxExtent.h" 33 34 #include "wtf/Assertions.h" 35 36 namespace blink { 37 38 LayoutUnit LayoutBoxExtent::logicalTop(WritingMode writingMode) const 39 { 40 return isHorizontalWritingMode(writingMode) ? m_top : m_left; 41 } 42 43 LayoutUnit LayoutBoxExtent::logicalBottom(WritingMode writingMode) const 44 { 45 return isHorizontalWritingMode(writingMode) ? m_bottom : m_right; 46 } 47 48 LayoutUnit LayoutBoxExtent::logicalLeft(WritingMode writingMode) const 49 { 50 return isHorizontalWritingMode(writingMode) ? m_left : m_top; 51 } 52 53 LayoutUnit LayoutBoxExtent::logicalRight(WritingMode writingMode) const 54 { 55 return isHorizontalWritingMode(writingMode) ? m_right : m_bottom; 56 } 57 58 LayoutUnit LayoutBoxExtent::before(WritingMode writingMode) const 59 { 60 switch (writingMode) { 61 case TopToBottomWritingMode: 62 return m_top; 63 case BottomToTopWritingMode: 64 return m_bottom; 65 case LeftToRightWritingMode: 66 return m_left; 67 case RightToLeftWritingMode: 68 return m_right; 69 } 70 ASSERT_NOT_REACHED(); 71 return m_top; 72 } 73 74 LayoutUnit LayoutBoxExtent::after(WritingMode writingMode) const 75 { 76 switch (writingMode) { 77 case TopToBottomWritingMode: 78 return m_bottom; 79 case BottomToTopWritingMode: 80 return m_top; 81 case LeftToRightWritingMode: 82 return m_right; 83 case RightToLeftWritingMode: 84 return m_left; 85 } 86 ASSERT_NOT_REACHED(); 87 return m_bottom; 88 } 89 90 LayoutUnit LayoutBoxExtent::start(WritingMode writingMode, TextDirection direction) const 91 { 92 if (isHorizontalWritingMode(writingMode)) 93 return isLeftToRightDirection(direction) ? m_left : m_right; 94 return isLeftToRightDirection(direction) ? m_top : m_bottom; 95 } 96 97 LayoutUnit LayoutBoxExtent::end(WritingMode writingMode, TextDirection direction) const 98 { 99 if (isHorizontalWritingMode(writingMode)) 100 return isLeftToRightDirection(direction) ? m_right : m_left; 101 return isLeftToRightDirection(direction) ? m_bottom : m_top; 102 } 103 104 void LayoutBoxExtent::setBefore(WritingMode writingMode, LayoutUnit value) 105 { 106 switch (writingMode) { 107 case TopToBottomWritingMode: 108 m_top = value; 109 break; 110 case BottomToTopWritingMode: 111 m_bottom = value; 112 break; 113 case LeftToRightWritingMode: 114 m_left = value; 115 break; 116 case RightToLeftWritingMode: 117 m_right = value; 118 break; 119 default: 120 ASSERT_NOT_REACHED(); 121 m_top = value; 122 } 123 } 124 125 void LayoutBoxExtent::setAfter(WritingMode writingMode, LayoutUnit value) 126 { 127 switch (writingMode) { 128 case TopToBottomWritingMode: 129 m_bottom = value; 130 break; 131 case BottomToTopWritingMode: 132 m_top = value; 133 break; 134 case LeftToRightWritingMode: 135 m_right = value; 136 break; 137 case RightToLeftWritingMode: 138 m_left = value; 139 break; 140 default: 141 ASSERT_NOT_REACHED(); 142 m_bottom = value; 143 } 144 } 145 146 void LayoutBoxExtent::setStart(WritingMode writingMode, TextDirection direction, LayoutUnit value) 147 { 148 if (isHorizontalWritingMode(writingMode)) { 149 if (isLeftToRightDirection(direction)) 150 m_left = value; 151 else 152 m_right = value; 153 } else { 154 if (isLeftToRightDirection(direction)) 155 m_top = value; 156 else 157 m_bottom = value; 158 } 159 } 160 161 void LayoutBoxExtent::setEnd(WritingMode writingMode, TextDirection direction, LayoutUnit value) 162 { 163 if (isHorizontalWritingMode(writingMode)) { 164 if (isLeftToRightDirection(direction)) 165 m_right = value; 166 else 167 m_left = value; 168 } else { 169 if (isLeftToRightDirection(direction)) 170 m_bottom = value; 171 else 172 m_top = value; 173 } 174 } 175 176 LayoutUnit& LayoutBoxExtent::mutableLogicalLeft(WritingMode writingMode) 177 { 178 return isHorizontalWritingMode(writingMode) ? m_left : m_top; 179 } 180 181 LayoutUnit& LayoutBoxExtent::mutableLogicalRight(WritingMode writingMode) 182 { 183 return isHorizontalWritingMode(writingMode) ? m_right : m_bottom; 184 } 185 186 LayoutUnit& LayoutBoxExtent::mutableBefore(WritingMode writingMode) 187 { 188 return isHorizontalWritingMode(writingMode) ? 189 (isFlippedBlocksWritingMode(writingMode) ? m_bottom : m_top) : 190 (isFlippedBlocksWritingMode(writingMode) ? m_right: m_left); 191 } 192 193 LayoutUnit& LayoutBoxExtent::mutableAfter(WritingMode writingMode) 194 { 195 return isHorizontalWritingMode(writingMode) ? 196 (isFlippedBlocksWritingMode(writingMode) ? m_top : m_bottom) : 197 (isFlippedBlocksWritingMode(writingMode) ? m_left: m_right); 198 } 199 200 } // namespace blink 201