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