107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch/* 207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch * Copyright (C) 2013 Adobe Systems Incorporated. All rights reserved. 307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch * 407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch * Redistribution and use in source and binary forms, with or without 507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch * modification, are permitted provided that the following conditions 607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch * are met: 707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch * 807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch * 1. Redistributions of source code must retain the above 907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch * copyright notice, this list of conditions and the following 1007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch * disclaimer. 1107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch * 2. Redistributions in binary form must reproduce the above 1207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch * copyright notice, this list of conditions and the following 1307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch * disclaimer in the documentation and/or other materials 1407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch * provided with the distribution. 1507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch * 1607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY 1707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 1907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE 2007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, 2107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 2207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 2307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 2507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF 2607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch * SUCH DAMAGE. 2807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch */ 2907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 3007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch#ifndef FloatBoxExtent_h 3107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch#define FloatBoxExtent_h 3207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 3307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch#include "platform/geometry/FloatRect.h" 3407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 35c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 3607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 3707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdochclass FloatBoxExtent { 3807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdochpublic: 3907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch FloatBoxExtent() 4007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch : m_top(0) 4107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch , m_right(0) 4207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch , m_bottom(0) 4307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch , m_left(0) 4407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch { 4507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch } 4607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 4707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch FloatBoxExtent(float top, float right, float bottom, float left) 4807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch : m_top(top) 4907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch , m_right(right) 5007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch , m_bottom(bottom) 5107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch , m_left(left) 5207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch { 5307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch } 5407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 5507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch float top() const { return m_top; } 5607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch void setTop(float top) { m_top = top; } 5707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 5807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch float right() const { return m_right; } 5907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch void setRight(float right) { m_right = right; } 6007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 6107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch float bottom() const { return m_bottom; } 6207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch void setBottom(float bottom) { m_bottom = bottom; } 6307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 6407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch float left() const { return m_left; } 6507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch void setLeft(float left) { m_left = left; } 6607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 6707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch bool isZero() const { return !left() && !right() && !top() && !bottom(); } 6807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 6907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch void expandRect(FloatRect& rect) const 7007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch { 7107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch if (isZero()) 7207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return; 7307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 7407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch rect.move(-left(), -top()); 7507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch rect.expand(left() + right(), top() + bottom()); 7607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch } 7707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 7807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch void unite(const FloatBoxExtent& other) 7907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch { 8007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch m_top = std::min(m_top, other.top()); 8107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch m_right = std::max(m_right, other.right()); 8207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch m_bottom = std::max(m_bottom, other.bottom()); 8307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch m_left = std::min(m_left, other.left()); 8407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch } 8507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 8607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch void unite(const FloatRect& rect) 8707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch { 8807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch m_top = std::min(m_top, rect.y()); 8907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch m_right = std::max(m_right, rect.maxX()); 9007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch m_bottom = std::max(m_bottom, rect.maxY()); 9107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch m_left = std::min(m_left, rect.x()); 9207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch } 9307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 9407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdochprivate: 9507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch float m_top; 9607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch float m_right; 9707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch float m_bottom; 9807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch float m_left; 9907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch}; 10007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 10107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdochinline bool operator==(const FloatBoxExtent& a, const FloatBoxExtent& b) 10207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch{ 10307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return a.top() == b.top() 10407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch && a.right() == b.right() 10507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch && a.bottom() == b.bottom() 10607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch && a.left() == b.left(); 10707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch} 10807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 10907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdochinline bool operator!=(const FloatBoxExtent& a, const FloatBoxExtent& b) 11007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch{ 11107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return !(a == b); 11207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch} 11307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 11407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdochinline void operator+=(FloatBoxExtent& a, const FloatBoxExtent& b) 11507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch{ 11607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch a.setTop(a.top() + b.top()); 11707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch a.setRight(a.right() + b.right()); 11807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch a.setBottom(a.bottom() + b.bottom()); 11907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch a.setLeft(a.left() + b.left()); 12007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch} 12107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 122c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink 12307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 12407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 12507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch#endif // FloatBoxExtent_h 126