1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/* 2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc. 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * 4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file. 6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */ 7ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 86a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com#ifndef SkSize_DEFINED 96a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com#define SkSize_DEFINED 106a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com 11db3f0fda6899b11e3213c1213165f2d22ad0fb83reed@google.com#include "SkScalar.h" 12db3f0fda6899b11e3213c1213165f2d22ad0fb83reed@google.com 136a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.comtemplate <typename T> struct SkTSize { 146a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com T fWidth; 156a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com T fHeight; 166a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com 1760bc6d5cb0af7cef0e49cc35f28f36f89b10853ereed@android.com static SkTSize Make(T w, T h) { 1860bc6d5cb0af7cef0e49cc35f28f36f89b10853ereed@android.com SkTSize s; 1960bc6d5cb0af7cef0e49cc35f28f36f89b10853ereed@android.com s.fWidth = w; 2060bc6d5cb0af7cef0e49cc35f28f36f89b10853ereed@android.com s.fHeight = h; 2160bc6d5cb0af7cef0e49cc35f28f36f89b10853ereed@android.com return s; 2260bc6d5cb0af7cef0e49cc35f28f36f89b10853ereed@android.com } 2360bc6d5cb0af7cef0e49cc35f28f36f89b10853ereed@android.com 246a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com void set(T w, T h) { 256a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com fWidth = w; 266a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com fHeight = h; 276a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com } 286a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com 29f76bacff7f66724072c67edb185abf9e3add11a0reed@android.com /** Returns true iff fWidth == 0 && fHeight == 0 30f76bacff7f66724072c67edb185abf9e3add11a0reed@android.com */ 31f76bacff7f66724072c67edb185abf9e3add11a0reed@android.com bool isZero() const { 32f76bacff7f66724072c67edb185abf9e3add11a0reed@android.com return 0 == fWidth && 0 == fHeight; 33f76bacff7f66724072c67edb185abf9e3add11a0reed@android.com } 34f76bacff7f66724072c67edb185abf9e3add11a0reed@android.com 356a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com /** Returns true if either widht or height are <= 0 */ 366a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com bool isEmpty() const { 376a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com return fWidth <= 0 || fHeight <= 0; 386a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com } 39fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com 406a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com /** Set the width and height to 0 */ 416a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com void setEmpty() { 426a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com fWidth = fHeight = 0; 436a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com } 44fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com 45fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com T width() const { return fWidth; } 46fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com T height() const { return fHeight; } 47fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com 486a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com /** If width or height is < 0, it is set to 0 */ 496a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com void clampNegToZero() { 506a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com if (fWidth < 0) { 516a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com fWidth = 0; 526a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com } 536a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com if (fHeight < 0) { 546a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com fHeight = 0; 556a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com } 566a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com } 57fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com 58f16c899a74a82241a690d08250698cbb8c2609dfreed@android.com bool equals(T w, T h) const { 59f16c899a74a82241a690d08250698cbb8c2609dfreed@android.com return fWidth == w && fHeight == h; 60f16c899a74a82241a690d08250698cbb8c2609dfreed@android.com } 616a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com}; 626a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com 636a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.comtemplate <typename T> 646a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.comstatic inline bool operator==(const SkTSize<T>& a, const SkTSize<T>& b) { 656a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com return a.fWidth == b.fWidth && a.fHeight == b.fHeight; 666a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com} 676a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com 686a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.comtemplate <typename T> 696a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.comstatic inline bool operator!=(const SkTSize<T>& a, const SkTSize<T>& b) { 706a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com return !(a == b); 716a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com} 726a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com 736a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com/////////////////////////////////////////////////////////////////////////////// 746a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com 7560bc6d5cb0af7cef0e49cc35f28f36f89b10853ereed@android.comtypedef SkTSize<int32_t> SkISize; 766a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com 776a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.comstruct SkSize : public SkTSize<SkScalar> { 78c83d422b639a1c186d8e40e08ac895deef60410freed@android.com static SkSize Make(SkScalar w, SkScalar h) { 79c83d422b639a1c186d8e40e08ac895deef60410freed@android.com SkSize s; 80c83d422b639a1c186d8e40e08ac895deef60410freed@android.com s.fWidth = w; 81c83d422b639a1c186d8e40e08ac895deef60410freed@android.com s.fHeight = h; 82c83d422b639a1c186d8e40e08ac895deef60410freed@android.com return s; 83c83d422b639a1c186d8e40e08ac895deef60410freed@android.com } 84fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com 85fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com 866a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com SkSize& operator=(const SkISize& src) { 876a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com this->set(SkIntToScalar(src.fWidth), SkIntToScalar(src.fHeight)); 886a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com return *this; 896a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com } 906a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com 91f59799139bacd300bf5251a1ca4e6b2ad3196457reed@android.com SkISize toRound() const { 926a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com SkISize s; 93e1ca705cac4b946993f6cbf798e2a0ba27e739f3reed@google.com s.set(SkScalarRoundToInt(fWidth), SkScalarRoundToInt(fHeight)); 946a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com return s; 956a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com } 96f59799139bacd300bf5251a1ca4e6b2ad3196457reed@android.com 97f59799139bacd300bf5251a1ca4e6b2ad3196457reed@android.com SkISize toCeil() const { 986a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com SkISize s; 99e1ca705cac4b946993f6cbf798e2a0ba27e739f3reed@google.com s.set(SkScalarCeilToInt(fWidth), SkScalarCeilToInt(fHeight)); 1006a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com return s; 1016a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com } 1026a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com 103f59799139bacd300bf5251a1ca4e6b2ad3196457reed@android.com SkISize toFloor() const { 1046a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com SkISize s; 105e1ca705cac4b946993f6cbf798e2a0ba27e739f3reed@google.com s.set(SkScalarFloorToInt(fWidth), SkScalarFloorToInt(fHeight)); 1066a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com return s; 1076a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com } 1086a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com}; 1096a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com 1106a5a2667a7cb2a2ccbb8cc19fe1d5e9ee28bb1d3reed@android.com#endif 111