193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)/* 293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * Copyright (C) 2009 Google Inc. All rights reserved. 393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * 493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * modification, are permitted provided that the following conditions are 693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * met: 793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * 893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * * Redistributions of source code must retain the above copyright 993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 1093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * * Redistributions in binary form must reproduce the above 1193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer 1293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * in the documentation and/or other materials provided with the 1393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * distribution. 1493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * * Neither the name of Google Inc. nor the names of its 1593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * contributors may be used to endorse or promote products derived from 1693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * this software without specific prior written permission. 1793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * 1893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 2093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) */ 3093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 3193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#ifndef WebRect_h 3293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#define WebRect_h 3393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 3493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#include "WebCommon.h" 3593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 36bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)#if INSIDE_BLINK 371e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/geometry/IntRect.h" 3893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#else 399bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)#include <algorithm> 4093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#include <cmath> 4193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#include <ui/gfx/rect.h> 4293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#endif 4393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 4451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)namespace blink { 4593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 4693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)struct WebRect { 4793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) int x; 4893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) int y; 4993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) int width; 5093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) int height; 5193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 5293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) bool isEmpty() const { return width <= 0 || height <= 0; } 5393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 5493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) WebRect() 5593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) : x(0) 5693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) , y(0) 5793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) , width(0) 5893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) , height(0) 5993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) { 6093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) } 6193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 6293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) WebRect(int x, int y, int width, int height) 6393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) : x(x) 6493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) , y(y) 6593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) , width(width) 6693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) , height(height) 6793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) { 6893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) } 6993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 70bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)#if INSIDE_BLINK 71e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) WebRect(const IntRect& r) 7293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) : x(r.x()) 7393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) , y(r.y()) 7493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) , width(r.width()) 7593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) , height(r.height()) 7693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) { 7793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) } 7893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 79e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) WebRect& operator=(const IntRect& r) 8093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) { 8193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) x = r.x(); 8293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) y = r.y(); 8393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) width = r.width(); 8493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) height = r.height(); 8593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) return *this; 8693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) } 8793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 88e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) operator IntRect() const 8993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) { 90e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) return IntRect(x, y, width, height); 9193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) } 9293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#else 9393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) WebRect(const gfx::Rect& r) 9493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) : x(r.x()) 9593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) , y(r.y()) 9693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) , width(r.width()) 9793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) , height(r.height()) 9893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) { 9993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) } 10093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 10193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) WebRect& operator=(const gfx::Rect& r) 10293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) { 10393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) x = r.x(); 10493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) y = r.y(); 10593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) width = r.width(); 10693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) height = r.height(); 10793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) return *this; 10893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) } 10993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 11093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) operator gfx::Rect() const 11193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) { 11293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) return gfx::Rect(x, y, std::max(0, width), std::max(0, height)); 11393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) } 11493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#endif 11593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)}; 11693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 11793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)inline bool operator==(const WebRect& a, const WebRect& b) 11893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles){ 11993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) return a.x == b.x && a.y == b.y && a.width == b.width && a.height == b.height; 12093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)} 12193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 12293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)inline bool operator!=(const WebRect& a, const WebRect& b) 12393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles){ 12493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) return !(a == b); 12593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)} 12693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 12751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} // namespace blink 12893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 12993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#endif 130