| /* | |
| * 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 |