blob: 1b4de907a99c96fba65a1cb6e4b895a00b3c98a6 [file] [log] [blame]
// Copyright (c) 2012 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.
#include "cobalt/layout/rect_layout_unit.h"
#include <algorithm>
#include "base/logging.h"
#include "base/stringprintf.h"
#include "cobalt/layout/insets_layout_unit.h"
#include "cobalt/layout/layout_unit.h"
#include "cobalt/layout/point_layout_unit.h"
#include "cobalt/layout/size_layout_unit.h"
#include "cobalt/layout/vector2d_layout_unit.h"
#include "cobalt/math/rect_base_impl.h"
#include "cobalt/math/safe_integer_conversions.h"
namespace cobalt {
namespace layout {
typedef class math::RectBase<RectLayoutUnit, PointLayoutUnit, SizeLayoutUnit,
InsetsLayoutUnit, Vector2dLayoutUnit,
LayoutUnit> RectBaseT;
bool RectLayoutUnit::IsExpressibleAsRect() const {
return math::IsExpressibleAsInt(x().toFloat()) &&
math::IsExpressibleAsInt(y().toFloat()) &&
math::IsExpressibleAsInt(width().toFloat()) &&
math::IsExpressibleAsInt(height().toFloat()) &&
math::IsExpressibleAsInt(right().toFloat()) &&
math::IsExpressibleAsInt(bottom().toFloat());
}
std::string RectLayoutUnit::ToString() const {
return base::StringPrintf("%s %s", origin().ToString().c_str(),
size().ToString().c_str());
}
RectLayoutUnit IntersectRects(const RectLayoutUnit& a,
const RectLayoutUnit& b) {
RectLayoutUnit result = a;
result.Intersect(b);
return result;
}
RectLayoutUnit UnionRects(const RectLayoutUnit& a, const RectLayoutUnit& b) {
RectLayoutUnit result = a;
result.Union(b);
return result;
}
RectLayoutUnit SubtractRects(const RectLayoutUnit& a, const RectLayoutUnit& b) {
RectLayoutUnit result = a;
result.Subtract(b);
return result;
}
RectLayoutUnit BoundingRect(const PointLayoutUnit& p1,
const PointLayoutUnit& p2) {
LayoutUnit rx(std::min(p1.x(), p2.x()));
LayoutUnit ry(std::min(p1.y(), p2.y()));
LayoutUnit rr(std::max(p1.x(), p2.x()));
LayoutUnit rb(std::max(p1.y(), p2.y()));
return RectLayoutUnit(rx, ry, rr - rx, rb - ry);
}
} // namespace layout
} // namespace cobalt
namespace cobalt {
namespace math {
template class math::RectBase<layout::RectLayoutUnit, layout::PointLayoutUnit,
layout::SizeLayoutUnit, layout::InsetsLayoutUnit,
layout::Vector2dLayoutUnit, layout::LayoutUnit>;
} // namespace math
} // namespace cobalt