15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (c) 2012, Google Inc. All rights reserved. 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions are 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * met: 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Redistributions of source code must retain the above copyright 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Redistributions in binary form must reproduce the above 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * in the documentation and/or other materials provided with the 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * distribution. 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Neither the name of Google Inc. nor the names of its 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * contributors may be used to endorse or promote products derived from 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * this software without specific prior written permission. 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef LayoutUnit_h 325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define LayoutUnit_h 335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 348abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)#include "wtf/Assertions.h" 35c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)#include "wtf/MathExtras.h" 36c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)#include "wtf/SaturatedArithmetic.h" 375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include <limits.h> 385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include <limits> 398abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)#include <stdlib.h> 405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace WebCore { 425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifdef NDEBUG 445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define REPORT_OVERFLOW(doesOverflow) ((void)0) 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#else 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define REPORT_OVERFLOW(doesOverflow) do \ 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!(doesOverflow)) { \ 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WTFReportError(__FILE__, __LINE__, WTF_PRETTY_FUNCTION, "!(%s)", #doesOverflow); \ 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } \ 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)while (0) 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 57f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liustatic const int kLayoutUnitFractionalBits = 6; 58f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liustatic const int kFixedPointDenominator = 1 << kLayoutUnitFractionalBits; 59926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 6053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)const int intMaxForLayoutUnit = INT_MAX / kFixedPointDenominator; 6153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)const int intMinForLayoutUnit = INT_MIN / kFixedPointDenominator; 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class LayoutUnit { 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutUnit() : m_value(0) { } 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutUnit(int value) { setValue(value); } 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutUnit(unsigned short value) { setValue(value); } 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutUnit(unsigned value) { setValue(value); } 6953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) LayoutUnit(unsigned long value) { m_value = clampTo<int>(value * kFixedPointDenominator); } 7053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) LayoutUnit(unsigned long long value) { m_value = clampTo<int>(value * kFixedPointDenominator); } 7153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) LayoutUnit(float value) { m_value = clampTo<float>(value * kFixedPointDenominator, static_cast<float>(INT_MIN), static_cast<float>(INT_MAX)); } 7253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) LayoutUnit(double value) { m_value = clampTo<double>(value * kFixedPointDenominator, static_cast<double>(INT_MIN), static_cast<double>(INT_MAX)); } 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) static LayoutUnit fromFloatCeil(float value) 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutUnit v; 7753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) v.m_value = clampToInteger(ceilf(value * kFixedPointDenominator)); 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return v; 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) static LayoutUnit fromFloatFloor(float value) 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutUnit v; 8453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) v.m_value = clampToInteger(floorf(value * kFixedPointDenominator)); 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return v; 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) static LayoutUnit fromFloatRound(float value) 895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (value >= 0) 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return clamp(value + epsilon() / 2.0f); 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return clamp(value - epsilon() / 2.0f); 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) int toInt() const { return m_value / kFixedPointDenominator; } 9653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) float toFloat() const { return static_cast<float>(m_value) / kFixedPointDenominator; } 9753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) double toDouble() const { return static_cast<double>(m_value) / kFixedPointDenominator; } 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) float ceilToFloat() const 995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) float floatValue = toFloat(); 10153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) if (static_cast<int>(floatValue * kFixedPointDenominator) == m_value) 1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return floatValue; 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (floatValue > 0) 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return nextafterf(floatValue, std::numeric_limits<float>::max()); 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return nextafterf(floatValue, std::numeric_limits<float>::min()); 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned toUnsigned() const { REPORT_OVERFLOW(m_value >= 0); return toInt(); } 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) operator int() const { return toInt(); } 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) operator unsigned() const { return toUnsigned(); } 1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) operator double() const { return toDouble(); } 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) operator bool() const { return m_value; } 1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutUnit operator++(int) 1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 11653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) m_value += kFixedPointDenominator; 1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return *this; 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) inline int rawValue() const { return m_value; } 1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) inline void setRawValue(int value) { m_value = value; } 1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setRawValue(long long value) 1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) REPORT_OVERFLOW(value > std::numeric_limits<int>::min() && value < std::numeric_limits<int>::max()); 1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_value = static_cast<int>(value); 1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutUnit abs() const 1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutUnit returnValue; 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) returnValue.setRawValue(::abs(m_value)); 1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return returnValue; 1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1348abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)#if OS(MACOSX) 1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int wtf_ceil() const 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#else 1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int ceil() const 1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 14053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) if (UNLIKELY(m_value >= INT_MAX - kFixedPointDenominator + 1)) 141926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return intMaxForLayoutUnit; 14253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_value >= 0) 14453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return (m_value + kFixedPointDenominator - 1) / kFixedPointDenominator; 1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return toInt(); 1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 147d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) ALWAYS_INLINE int round() const 1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 149f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu return saturatedAddition(rawValue(), kFixedPointDenominator / 2) >> kLayoutUnitFractionalBits; 1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int floor() const 1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 15453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) if (UNLIKELY(m_value <= INT_MIN + kFixedPointDenominator - 1)) 155926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return intMinForLayoutUnit; 15653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 157f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu return m_value >> kLayoutUnitFractionalBits; 1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutUnit fraction() const 16102772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch { 1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Add the fraction to the size (as opposed to the full location) to avoid overflows. 1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Compute fraction using the mod operator to preserve the sign of the value as it may affect rounding. 1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutUnit fraction; 16553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) fraction.setRawValue(rawValue() % kFixedPointDenominator); 1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return fraction; 1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) bool mightBeSaturated() const 17093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) { 17193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) return rawValue() == std::numeric_limits<int>::max() 17293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) || rawValue() == std::numeric_limits<int>::min(); 17393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) } 17493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 17553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) static float epsilon() { return 1.0f / kFixedPointDenominator; } 17653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) static const LayoutUnit max() 1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutUnit m; 1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m.m_value = std::numeric_limits<int>::max(); 1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m; 1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) static const LayoutUnit min() 1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutUnit m; 1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m.m_value = std::numeric_limits<int>::min(); 1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m; 1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Versions of max/min that are slightly smaller/larger than max/min() to allow for roinding without overflowing. 1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) static const LayoutUnit nearlyMax() 1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutUnit m; 19453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) m.m_value = std::numeric_limits<int>::max() - kFixedPointDenominator / 2; 1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m; 1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) static const LayoutUnit nearlyMin() 1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutUnit m; 20053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) m.m_value = std::numeric_limits<int>::min() + kFixedPointDenominator / 2; 2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m; 2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 20302772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) static LayoutUnit clamp(double value) 2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return clampTo<LayoutUnit>(value, LayoutUnit::min(), LayoutUnit::max()); 2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private: 2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) static bool isInBounds(int value) 2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 21253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return ::abs(value) <= std::numeric_limits<int>::max() / kFixedPointDenominator; 2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) static bool isInBounds(unsigned value) 2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 21653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return value <= static_cast<unsigned>(std::numeric_limits<int>::max()) / kFixedPointDenominator; 2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) static bool isInBounds(double value) 2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 22053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return ::fabs(value) <= std::numeric_limits<int>::max() / kFixedPointDenominator; 2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 22202772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) inline void setValue(int value) 2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (value > intMaxForLayoutUnit) 2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_value = std::numeric_limits<int>::max(); 2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else if (value < intMinForLayoutUnit) 2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_value = std::numeric_limits<int>::min(); 2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 23053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) m_value = value * kFixedPointDenominator; 2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) inline void setValue(unsigned value) 2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (value >= static_cast<unsigned>(intMaxForLayoutUnit)) 2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_value = std::numeric_limits<int>::max(); 2365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 23753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) m_value = value * kFixedPointDenominator; 2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int m_value; 2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline bool operator<=(const LayoutUnit& a, const LayoutUnit& b) 2445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a.rawValue() <= b.rawValue(); 2465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline bool operator<=(const LayoutUnit& a, float b) 2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a.toFloat() <= b; 2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline bool operator<=(const LayoutUnit& a, int b) 2545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a <= LayoutUnit(b); 2565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline bool operator<=(const float a, const LayoutUnit& b) 2595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a <= b.toFloat(); 2615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline bool operator<=(const int a, const LayoutUnit& b) 2645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return LayoutUnit(a) <= b; 2665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline bool operator>=(const LayoutUnit& a, const LayoutUnit& b) 2695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a.rawValue() >= b.rawValue(); 2715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline bool operator>=(const LayoutUnit& a, int b) 2745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a >= LayoutUnit(b); 2765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline bool operator>=(const float a, const LayoutUnit& b) 2795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a >= b.toFloat(); 2815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline bool operator>=(const LayoutUnit& a, float b) 2845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a.toFloat() >= b; 2865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline bool operator>=(const int a, const LayoutUnit& b) 2895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return LayoutUnit(a) >= b; 2915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline bool operator<(const LayoutUnit& a, const LayoutUnit& b) 2945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a.rawValue() < b.rawValue(); 2965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline bool operator<(const LayoutUnit& a, int b) 2995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a < LayoutUnit(b); 3015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline bool operator<(const LayoutUnit& a, float b) 3045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a.toFloat() < b; 3065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline bool operator<(const LayoutUnit& a, double b) 3095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a.toDouble() < b; 3115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline bool operator<(const int a, const LayoutUnit& b) 3145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return LayoutUnit(a) < b; 3165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline bool operator<(const float a, const LayoutUnit& b) 3195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a < b.toFloat(); 3215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline bool operator>(const LayoutUnit& a, const LayoutUnit& b) 3245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a.rawValue() > b.rawValue(); 3265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline bool operator>(const LayoutUnit& a, double b) 3295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a.toDouble() > b; 3315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline bool operator>(const LayoutUnit& a, float b) 3345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a.toFloat() > b; 3365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline bool operator>(const LayoutUnit& a, int b) 3395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a > LayoutUnit(b); 3415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline bool operator>(const int a, const LayoutUnit& b) 3445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return LayoutUnit(a) > b; 3465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline bool operator>(const float a, const LayoutUnit& b) 3495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a > b.toFloat(); 3515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline bool operator>(const double a, const LayoutUnit& b) 3545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a > b.toDouble(); 3565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline bool operator!=(const LayoutUnit& a, const LayoutUnit& b) 3595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a.rawValue() != b.rawValue(); 3615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline bool operator!=(const LayoutUnit& a, float b) 3645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a != LayoutUnit(b); 3665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline bool operator!=(const int a, const LayoutUnit& b) 3695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return LayoutUnit(a) != b; 3715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline bool operator!=(const LayoutUnit& a, int b) 3745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a != LayoutUnit(b); 3765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline bool operator==(const LayoutUnit& a, const LayoutUnit& b) 3795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a.rawValue() == b.rawValue(); 3815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline bool operator==(const LayoutUnit& a, int b) 3845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a == LayoutUnit(b); 3865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline bool operator==(const int a, const LayoutUnit& b) 3895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return LayoutUnit(a) == b; 3915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline bool operator==(const LayoutUnit& a, float b) 3945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a.toFloat() == b; 3965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline bool operator==(const float a, const LayoutUnit& b) 3995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a == b.toFloat(); 4015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// For multiplication that's prone to overflow, this bounds it to LayoutUnit::max() and ::min() 4045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline LayoutUnit boundedMultiply(const LayoutUnit& a, const LayoutUnit& b) 4055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 40653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) int64_t result = static_cast<int64_t>(a.rawValue()) * static_cast<int64_t>(b.rawValue()) / kFixedPointDenominator; 407926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) int32_t high = static_cast<int32_t>(result >> 32); 408926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) int32_t low = static_cast<int32_t>(result); 409926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) uint32_t saturated = (static_cast<uint32_t>(a.rawValue() ^ b.rawValue()) >> 31) + std::numeric_limits<int>::max(); 410926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) // If the higher 32 bits does not match the lower 32 with sign extension the operation overflowed. 411926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (high != low >> 31) 412926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) result = saturated; 413926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 4145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutUnit returnVal; 415926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) returnVal.setRawValue(static_cast<int>(result)); 4165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return returnVal; 4175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline LayoutUnit operator*(const LayoutUnit& a, const LayoutUnit& b) 4205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return boundedMultiply(a, b); 42253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)} 4235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline double operator*(const LayoutUnit& a, double b) 4255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a.toDouble() * b; 4275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline float operator*(const LayoutUnit& a, float b) 4305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a.toFloat() * b; 4325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline LayoutUnit operator*(const LayoutUnit& a, int b) 4355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a * LayoutUnit(b); 4375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 439926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)inline LayoutUnit operator*(const LayoutUnit& a, unsigned short b) 440926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 441926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return a * LayoutUnit(b); 442926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 443926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 4445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline LayoutUnit operator*(const LayoutUnit& a, unsigned b) 4455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a * LayoutUnit(b); 4475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 449926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)inline LayoutUnit operator*(const LayoutUnit& a, unsigned long b) 450926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 451926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return a * LayoutUnit(b); 452926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 453926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 454926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)inline LayoutUnit operator*(const LayoutUnit& a, unsigned long long b) 455926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 456926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return a * LayoutUnit(b); 457926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 458926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 459926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)inline LayoutUnit operator*(unsigned short a, const LayoutUnit& b) 460926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 461926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return LayoutUnit(a) * b; 462926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 463926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 4645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline LayoutUnit operator*(unsigned a, const LayoutUnit& b) 4655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return LayoutUnit(a) * b; 4675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 469926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)inline LayoutUnit operator*(unsigned long a, const LayoutUnit& b) 470926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 471926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return LayoutUnit(a) * b; 472926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 473926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 474926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)inline LayoutUnit operator*(unsigned long long a, const LayoutUnit& b) 475926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 476926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return LayoutUnit(a) * b; 477926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 478926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 4795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline LayoutUnit operator*(const int a, const LayoutUnit& b) 4805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return LayoutUnit(a) * b; 4825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline float operator*(const float a, const LayoutUnit& b) 4855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a * b.toFloat(); 4875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline double operator*(const double a, const LayoutUnit& b) 4905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a * b.toDouble(); 4925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline LayoutUnit operator/(const LayoutUnit& a, const LayoutUnit& b) 4955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutUnit returnVal; 49753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) long long rawVal = static_cast<long long>(kFixedPointDenominator) * a.rawValue() / b.rawValue(); 498926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) returnVal.setRawValue(clampTo<int>(rawVal)); 4995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return returnVal; 50002772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch} 5015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline float operator/(const LayoutUnit& a, float b) 5035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a.toFloat() / b; 5055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline double operator/(const LayoutUnit& a, double b) 5085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a.toDouble() / b; 5105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline LayoutUnit operator/(const LayoutUnit& a, int b) 5135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a / LayoutUnit(b); 5155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 517926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)inline LayoutUnit operator/(const LayoutUnit& a, unsigned short b) 518926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 519926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return a / LayoutUnit(b); 520926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 521926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 5225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline LayoutUnit operator/(const LayoutUnit& a, unsigned b) 5235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a / LayoutUnit(b); 5255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 527926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)inline LayoutUnit operator/(const LayoutUnit& a, unsigned long b) 528926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 529926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return a / LayoutUnit(b); 530926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 531926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 532926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)inline LayoutUnit operator/(const LayoutUnit& a, unsigned long long b) 533926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 534926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return a / LayoutUnit(b); 535926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 536926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 5375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline float operator/(const float a, const LayoutUnit& b) 5385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a / b.toFloat(); 5405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline double operator/(const double a, const LayoutUnit& b) 5435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a / b.toDouble(); 5455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline LayoutUnit operator/(const int a, const LayoutUnit& b) 5485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return LayoutUnit(a) / b; 5505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 552926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)inline LayoutUnit operator/(unsigned short a, const LayoutUnit& b) 553926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 554926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return LayoutUnit(a) / b; 555926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 556926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 5575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline LayoutUnit operator/(unsigned a, const LayoutUnit& b) 5585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return LayoutUnit(a) / b; 5605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 562926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)inline LayoutUnit operator/(unsigned long a, const LayoutUnit& b) 563926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 564926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return LayoutUnit(a) / b; 565926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 566926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 567926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)inline LayoutUnit operator/(unsigned long long a, const LayoutUnit& b) 568926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 569926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return LayoutUnit(a) / b; 570926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 571926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 572d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)ALWAYS_INLINE LayoutUnit operator+(const LayoutUnit& a, const LayoutUnit& b) 5735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutUnit returnVal; 5755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) returnVal.setRawValue(saturatedAddition(a.rawValue(), b.rawValue())); 5765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return returnVal; 5775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline LayoutUnit operator+(const LayoutUnit& a, int b) 5805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a + LayoutUnit(b); 5825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline float operator+(const LayoutUnit& a, float b) 5855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a.toFloat() + b; 5875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline double operator+(const LayoutUnit& a, double b) 5905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a.toDouble() + b; 5925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline LayoutUnit operator+(const int a, const LayoutUnit& b) 5955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return LayoutUnit(a) + b; 5975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline float operator+(const float a, const LayoutUnit& b) 6005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a + b.toFloat(); 6025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline double operator+(const double a, const LayoutUnit& b) 6055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a + b.toDouble(); 6075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 609d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)ALWAYS_INLINE LayoutUnit operator-(const LayoutUnit& a, const LayoutUnit& b) 6105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutUnit returnVal; 6125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) returnVal.setRawValue(saturatedSubtraction(a.rawValue(), b.rawValue())); 6135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return returnVal; 6145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline LayoutUnit operator-(const LayoutUnit& a, int b) 6175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a - LayoutUnit(b); 6195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline LayoutUnit operator-(const LayoutUnit& a, unsigned b) 6225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a - LayoutUnit(b); 6245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline float operator-(const LayoutUnit& a, float b) 6275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a.toFloat() - b; 6295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline LayoutUnit operator-(const int a, const LayoutUnit& b) 6325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return LayoutUnit(a) - b; 6345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline float operator-(const float a, const LayoutUnit& b) 6375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a - b.toFloat(); 6395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline LayoutUnit operator-(const LayoutUnit& a) 6425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutUnit returnVal; 6445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) returnVal.setRawValue(-a.rawValue()); 6455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return returnVal; 6465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// For returning the remainder after a division with integer results. 6495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline LayoutUnit intMod(const LayoutUnit& a, const LayoutUnit& b) 6505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // This calculates the modulo so that: a = static_cast<int>(a / b) * b + intMod(a, b). 6525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutUnit returnVal; 6535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) returnVal.setRawValue(a.rawValue() % b.rawValue()); 6545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return returnVal; 6555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline LayoutUnit operator%(const LayoutUnit& a, const LayoutUnit& b) 6585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // This calculates the modulo so that: a = (a / b) * b + a % b. 6605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutUnit returnVal; 66153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) long long rawVal = (static_cast<long long>(kFixedPointDenominator) * a.rawValue()) % b.rawValue(); 66253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) returnVal.setRawValue(rawVal / kFixedPointDenominator); 6635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return returnVal; 6645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline LayoutUnit operator%(const LayoutUnit& a, int b) 6675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a % LayoutUnit(b); 6695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline LayoutUnit operator%(int a, const LayoutUnit& b) 6725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return LayoutUnit(a) % b; 6745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline LayoutUnit& operator+=(LayoutUnit& a, const LayoutUnit& b) 6775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) a.setRawValue(saturatedAddition(a.rawValue(), b.rawValue())); 6795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a; 6805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline LayoutUnit& operator+=(LayoutUnit& a, int b) 6835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) a = a + b; 6855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a; 6865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline LayoutUnit& operator+=(LayoutUnit& a, float b) 6895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) a = a + b; 6915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a; 6925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline float& operator+=(float& a, const LayoutUnit& b) 6955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) a = a + b; 6975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a; 6985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline LayoutUnit& operator-=(LayoutUnit& a, int b) 7015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) a = a - b; 7035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a; 7045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline LayoutUnit& operator-=(LayoutUnit& a, const LayoutUnit& b) 7075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) a.setRawValue(saturatedSubtraction(a.rawValue(), b.rawValue())); 7095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a; 7105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline LayoutUnit& operator-=(LayoutUnit& a, float b) 7135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) a = a - b; 7155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a; 7165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline float& operator-=(float& a, const LayoutUnit& b) 7195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) a = a - b; 7215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a; 7225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline LayoutUnit& operator*=(LayoutUnit& a, const LayoutUnit& b) 7255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) a = a * b; 7275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a; 7285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// operator*=(LayoutUnit& a, int b) is supported by the operator above plus LayoutUnit(int). 7305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline LayoutUnit& operator*=(LayoutUnit& a, float b) 7325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) a = a * b; 7345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a; 7355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline float& operator*=(float& a, const LayoutUnit& b) 7385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) a = a * b; 7405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a; 7415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline LayoutUnit& operator/=(LayoutUnit& a, const LayoutUnit& b) 7445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) a = a / b; 7465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a; 7475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// operator/=(LayoutUnit& a, int b) is supported by the operator above plus LayoutUnit(int). 7495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline LayoutUnit& operator/=(LayoutUnit& a, float b) 7515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) a = a / b; 7535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a; 7545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline float& operator/=(float& a, const LayoutUnit& b) 7575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) a = a / b; 7595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return a; 7605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 76202772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdochinline int snapSizeToPixel(LayoutUnit size, LayoutUnit location) 7635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutUnit fraction = location.fraction(); 7655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return (fraction + size).round() - fraction.round(); 7665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline int roundToInt(LayoutUnit value) 7695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return value.round(); 7715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline int floorToInt(LayoutUnit value) 7745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return value.floor(); 7765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline LayoutUnit absoluteValue(const LayoutUnit& value) 7795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return value.abs(); 7815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline LayoutUnit layoutMod(const LayoutUnit& numerator, const LayoutUnit& denominator) 7845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return numerator % denominator; 7865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline bool isIntegerValue(const LayoutUnit value) 7895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return value.toInt() == value; 7915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 793d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)inline LayoutUnit clampToLayoutUnit(LayoutUnit value, LayoutUnit min, LayoutUnit max) 794d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){ 795d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (value >= max) 796d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return max; 797d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (value <= min) 798d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return min; 799d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return value; 800d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)} 801d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 8025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} // namespace WebCore 8035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif // LayoutUnit_h 805