1d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi// Copyright 2014 The Chromium Authors. All rights reserved.
2d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi// Use of this source code is governed by a BSD-style license that can be
3d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi// found in the LICENSE file.
4d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
5d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi#ifndef DOMRectReadOnly_h
6d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi#define DOMRectReadOnly_h
7d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
8d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi#include "bindings/core/v8/ScriptWrappable.h"
9d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi#include "platform/heap/Handle.h"
10d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
11d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshinamespace blink {
12d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
13d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshiclass DOMRectReadOnly : public GarbageCollected<DOMRectReadOnly>, public ScriptWrappableBase {
14d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshipublic:
15d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    static DOMRectReadOnly* create(double x, double y, double width, double height);
16d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
17dc549d60f98d809f626c99de614960409a847054Takeshi Aimi    double x() const { return m_x; }
18c7b3ccc564448cb4b918728421f9402bc18278c5Takeshi Aimi    double y() const { return m_y; }
19d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    double width() const { return m_width; }
20d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    double height() const { return m_height; }
21d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
22d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    double top() const { return std::min(m_y, m_y + m_height); }
23d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    double right() const { return std::max(m_x, m_x + m_width); }
24d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    double bottom() const { return std::max(m_y, m_y + m_height); }
25d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    double left() const { return std::min(m_x, m_x + m_width); }
26d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
27d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    void trace(Visitor*) { }
28d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
29d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshiprotected:
30d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    DOMRectReadOnly(double x, double y, double width, double height);
31d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
32dc91865622e3cc9ff0bb33b83f1d3b38cd7a6d7aTakeshi Aimi    double m_x;
33d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    double m_y;
34d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    double m_width;
35d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi    double m_height;
36d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi};
37d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
38d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi} // namespace blink
39d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi
40d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi#endif
41d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi