// Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef FLUTTER_SHELL_PLATFORM_COMMON_GEOMETRY_H_ #define FLUTTER_SHELL_PLATFORM_COMMON_GEOMETRY_H_ #include namespace flutter { // A point in Cartesian space relative to a separately-maintained origin. class Point { public: Point() = default; Point(double x, double y) : x_(x), y_(y) {} Point(const Point& point) = default; Point& operator=(const Point& other) = default; double x() const { return x_; } double y() const { return y_; } bool operator==(const Point& other) const { return x_ == other.x_ && y_ == other.y_; } private: double x_ = 0.0; double y_ = 0.0; }; // A 2D floating-point size with non-negative dimensions. class Size { public: Size() = default; Size(double width, double height) : width_(std::fmax(0.0, width)), height_(std::fmax(0.0, height)) {} Size(const Size& size) = default; Size& operator=(const Size& other) = default; double width() const { return width_; } double height() const { return height_; } bool operator==(const Size& other) const { return width_ == other.width_ && height_ == other.height_; } private: double width_ = 0.0; double height_ = 0.0; }; // A rectangle with position in Cartesian space specified relative to a // separately-maintained origin. class Rect { public: Rect() = default; Rect(const Point& origin, const Size& size) : origin_(origin), size_(size) {} Rect(const Rect& rect) = default; Rect& operator=(const Rect& other) = default; double left() const { return origin_.x(); } double top() const { return origin_.y(); } double right() const { return origin_.x() + size_.width(); } double bottom() const { return origin_.y() + size_.height(); } double width() const { return size_.width(); } double height() const { return size_.height(); } Point origin() const { return origin_; } Size size() const { return size_; } bool operator==(const Rect& other) const { return origin_ == other.origin_ && size_ == other.size_; } private: Point origin_; Size size_; }; } // namespace flutter #endif // FLUTTER_SHELL_PLATFORM_COMMON_GEOMETRY_H_