| /* |
| * Copyright 2011 Google Inc. |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #ifndef SkSize_DEFINED |
| #define SkSize_DEFINED |
| |
| #include "SkScalar.h" |
| |
| template <typename T> struct SkTSize { |
| T fWidth; |
| T fHeight; |
| |
| static SkTSize Make(T w, T h) { |
| SkTSize s; |
| s.fWidth = w; |
| s.fHeight = h; |
| return s; |
| } |
| |
| void set(T w, T h) { |
| fWidth = w; |
| fHeight = h; |
| } |
| |
| /** Returns true iff fWidth == 0 && fHeight == 0 |
| */ |
| bool isZero() const { |
| return 0 == fWidth && 0 == fHeight; |
| } |
| |
| /** Returns true if either widht or height are <= 0 */ |
| bool isEmpty() const { |
| return fWidth <= 0 || fHeight <= 0; |
| } |
| |
| /** Set the width and height to 0 */ |
| void setEmpty() { |
| fWidth = fHeight = 0; |
| } |
| |
| T width() const { return fWidth; } |
| T height() const { return fHeight; } |
| |
| /** If width or height is < 0, it is set to 0 */ |
| void clampNegToZero() { |
| if (fWidth < 0) { |
| fWidth = 0; |
| } |
| if (fHeight < 0) { |
| fHeight = 0; |
| } |
| } |
| |
| bool equals(T w, T h) const { |
| return fWidth == w && fHeight == h; |
| } |
| }; |
| |
| template <typename T> |
| static inline bool operator==(const SkTSize<T>& a, const SkTSize<T>& b) { |
| return a.fWidth == b.fWidth && a.fHeight == b.fHeight; |
| } |
| |
| template <typename T> |
| static inline bool operator!=(const SkTSize<T>& a, const SkTSize<T>& b) { |
| return !(a == b); |
| } |
| |
| /////////////////////////////////////////////////////////////////////////////// |
| |
| typedef SkTSize<int32_t> SkISize; |
| |
| struct SkSize : public SkTSize<SkScalar> { |
| static SkSize Make(SkScalar w, SkScalar h) { |
| SkSize s; |
| s.fWidth = w; |
| s.fHeight = h; |
| return s; |
| } |
| |
| |
| SkSize& operator=(const SkISize& src) { |
| this->set(SkIntToScalar(src.fWidth), SkIntToScalar(src.fHeight)); |
| return *this; |
| } |
| |
| SkISize toRound() const { |
| SkISize s; |
| s.set(SkScalarRoundToInt(fWidth), SkScalarRoundToInt(fHeight)); |
| return s; |
| } |
| |
| SkISize toCeil() const { |
| SkISize s; |
| s.set(SkScalarCeilToInt(fWidth), SkScalarCeilToInt(fHeight)); |
| return s; |
| } |
| |
| SkISize toFloor() const { |
| SkISize s; |
| s.set(SkScalarFloorToInt(fWidth), SkScalarFloorToInt(fHeight)); |
| return s; |
| } |
| }; |
| |
| #endif |