blob: b3ce9fea4cb00c90b0a8a1ae9832dfa3b1f64298 [file] [log] [blame]
// Copyright 2015 The Chromium 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 DoubleRect_h
#define DoubleRect_h
#include "platform/geometry/DoublePoint.h"
#include "platform/geometry/DoubleSize.h"
#include "wtf/Allocator.h"
#include "wtf/Forward.h"
namespace blink {
class FloatRect;
class IntRect;
class LayoutRect;
class PLATFORM_EXPORT DoubleRect {
STACK_ALLOCATED();
public:
DoubleRect() {}
DoubleRect(const DoublePoint& location, const DoubleSize& size)
: m_location(location), m_size(size) {}
DoubleRect(double x, double y, double width, double height)
: m_location(DoublePoint(x, y)), m_size(DoubleSize(width, height)) {}
DoubleRect(const IntRect&);
DoubleRect(const FloatRect&);
DoubleRect(const LayoutRect&);
DoublePoint location() const { return m_location; }
DoubleSize size() const { return m_size; }
void setLocation(const DoublePoint& location) { m_location = location; }
void setSize(const DoubleSize& size) { m_size = size; }
double x() const { return m_location.x(); }
double y() const { return m_location.y(); }
double maxX() const { return x() + width(); }
double maxY() const { return y() + height(); }
double width() const { return m_size.width(); }
double height() const { return m_size.height(); }
void setX(double x) { m_location.setX(x); }
void setY(double y) { m_location.setY(y); }
void setWidth(double width) { m_size.setWidth(width); }
void setHeight(double height) { m_size.setHeight(height); }
bool isEmpty() const { return m_size.isEmpty(); }
bool isZero() const { return m_size.isZero(); }
void move(const DoubleSize& delta) { m_location += delta; }
void move(double dx, double dy) { m_location.move(dx, dy); }
void moveBy(const DoublePoint& delta) {
m_location.move(delta.x(), delta.y());
}
DoublePoint minXMinYCorner() const {
return m_location;
} // typically topLeft
DoublePoint maxXMinYCorner() const {
return DoublePoint(m_location.x() + m_size.width(), m_location.y());
} // typically topRight
DoublePoint minXMaxYCorner() const {
return DoublePoint(m_location.x(), m_location.y() + m_size.height());
} // typically bottomLeft
DoublePoint maxXMaxYCorner() const {
return DoublePoint(m_location.x() + m_size.width(),
m_location.y() + m_size.height());
} // typically bottomRight
void scale(float s) { scale(s, s); }
void scale(float sx, float sy);
String toString() const;
private:
DoublePoint m_location;
DoubleSize m_size;
};
PLATFORM_EXPORT IntRect enclosingIntRect(const DoubleRect&);
// Returns a valid IntRect contained within the given DoubleRect.
PLATFORM_EXPORT IntRect enclosedIntRect(const DoubleRect&);
PLATFORM_EXPORT IntRect roundedIntRect(const DoubleRect&);
// Redeclared here to avoid ODR issues.
// See platform/testing/GeometryPrinters.h.
void PrintTo(const DoubleRect&, std::ostream*);
} // namespace blink
#endif