summaryrefslogtreecommitdiffstats
path: root/gfx/size.h
diff options
context:
space:
mode:
Diffstat (limited to 'gfx/size.h')
-rw-r--r--gfx/size.h83
1 files changed, 83 insertions, 0 deletions
diff --git a/gfx/size.h b/gfx/size.h
new file mode 100644
index 0000000..896908e8
--- /dev/null
+++ b/gfx/size.h
@@ -0,0 +1,83 @@
+// Copyright (c) 2006-2008 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 BASE_GFX_SIZE_H_
+#define BASE_GFX_SIZE_H_
+
+#include "build/build_config.h"
+
+#include <iosfwd>
+
+#if defined(OS_WIN)
+typedef struct tagSIZE SIZE;
+#elif defined(OS_MACOSX)
+#include <ApplicationServices/ApplicationServices.h>
+#endif
+
+namespace gfx {
+
+//
+// A size has width and height values.
+//
+class Size {
+ public:
+ Size() : width_(0), height_(0) {}
+ Size(int width, int height);
+#if defined(OS_MACOSX)
+ explicit Size(const CGSize& s);
+#endif
+
+ ~Size() {}
+
+#if defined(OS_MACOSX)
+ Size& operator=(const CGSize& s);
+#endif
+
+ int width() const { return width_; }
+ int height() const { return height_; }
+
+ int GetArea() const { return width_ * height_; }
+
+ void SetSize(int width, int height) {
+ set_width(width);
+ set_height(height);
+ }
+
+ void Enlarge(int width, int height) {
+ set_width(width_ + width);
+ set_height(height_ + height);
+ }
+
+ void set_width(int width);
+ void set_height(int height);
+
+ bool operator==(const Size& s) const {
+ return width_ == s.width_ && height_ == s.height_;
+ }
+
+ bool operator!=(const Size& s) const {
+ return !(*this == s);
+ }
+
+ bool IsEmpty() const {
+ // Size doesn't allow negative dimensions, so testing for 0 is enough.
+ return (width_ == 0) || (height_ == 0);
+ }
+
+#if defined(OS_WIN)
+ SIZE ToSIZE() const;
+#elif defined(OS_MACOSX)
+ CGSize ToCGSize() const;
+#endif
+
+ private:
+ int width_;
+ int height_;
+};
+
+} // namespace gfx
+
+std::ostream& operator<<(std::ostream& out, const gfx::Size& s);
+
+#endif // BASE_GFX_SIZE_H_