diff options
Diffstat (limited to 'chromium/ui/gfx/geometry/size_base.h')
-rw-r--r-- | chromium/ui/gfx/geometry/size_base.h | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/chromium/ui/gfx/geometry/size_base.h b/chromium/ui/gfx/geometry/size_base.h new file mode 100644 index 00000000000..88a98ef4584 --- /dev/null +++ b/chromium/ui/gfx/geometry/size_base.h @@ -0,0 +1,69 @@ +// 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. + +#ifndef UI_GFX_GEOMETRY_SIZE_BASE_H_ +#define UI_GFX_GEOMETRY_SIZE_BASE_H_ + +#include "ui/gfx/gfx_export.h" + +namespace gfx { + +// A size has width and height values. +template<typename Class, typename Type> +class GFX_EXPORT SizeBase { + public: + Type width() const { return width_; } + Type height() const { return height_; } + + Type GetArea() const { return width_ * height_; } + + void SetSize(Type width, Type height) { + set_width(width); + set_height(height); + } + + void Enlarge(Type width, Type height) { + set_width(width_ + width); + set_height(height_ + height); + } + + void set_width(Type width) { + width_ = width < 0 ? 0 : width; + } + void set_height(Type height) { + height_ = height < 0 ? 0 : height; + } + + void SetToMin(const Class& other) { + width_ = width_ <= other.width_ ? width_ : other.width_; + height_ = height_ <= other.height_ ? height_ : other.height_; + } + + void SetToMax(const Class& other) { + width_ = width_ >= other.width_ ? width_ : other.width_; + height_ = height_ >= other.height_ ? height_ : other.height_; + } + + bool IsEmpty() const { + return (width_ == 0) || (height_ == 0); + } + + protected: + SizeBase(Type width, Type height) + : width_(width < 0 ? 0 : width), + height_(height < 0 ? 0 : height) { + } + + // Destructor is intentionally made non virtual and protected. + // Do not make this public. + ~SizeBase() {} + + private: + Type width_; + Type height_; +}; + +} // namespace gfx + +#endif // UI_GFX_GEOMETRY_SIZE_BASE_H_ |