diff options
author | AlTheKiller <AlTheKiller@svn> | 2009-09-23 01:49:50 +0000 |
---|---|---|
committer | AlTheKiller <AlTheKiller@svn> | 2009-09-23 01:49:50 +0000 |
commit | 45285e8a9300cd754a760560640b75b09f98035e (patch) | |
tree | ad9f093885ad5c98e9dd4156674e7691c22ed0a2 /guilib/Geometry.h |
step 3/4: Move linuxport to trunk. How'd I get roped into this?
git-svn-id: https://xbmc.svn.sourceforge.net/svnroot/xbmc/trunk@23097 568bbfeb-2a22-0410-94d2-cc84cf5bfa90
Diffstat (limited to 'guilib/Geometry.h')
-rw-r--r-- | guilib/Geometry.h | 149 |
1 files changed, 149 insertions, 0 deletions
diff --git a/guilib/Geometry.h b/guilib/Geometry.h new file mode 100644 index 0000000000..2de87d2d64 --- /dev/null +++ b/guilib/Geometry.h @@ -0,0 +1,149 @@ +/* + * Copyright (C) 2005-2008 Team XBMC + * http://www.xbmc.org + * + * This Program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This Program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XBMC; see the file COPYING. If not, write to + * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + * http://www.gnu.org/copyleft/gpl.html + * + */ + +#pragma once + +#ifdef __GNUC__ +// under gcc, inline will only take place if optimizations are applied (-O). this will force inline even whith optimizations. +#define XBMC_FORCE_INLINE __attribute__((always_inline)) +#else +#define XBMC_FORCE_INLINE +#endif + + +class CPoint +{ +public: + CPoint() + { + x = 0; y = 0; + }; + + CPoint(float a, float b) + { + x = a; + y = b; + }; + + CPoint operator+(const CPoint &point) const + { + CPoint ans; + ans.x = x + point.x; + ans.y = y + point.y; + return ans; + }; + + const CPoint &operator+=(const CPoint &point) + { + x += point.x; + y += point.y; + return *this; + }; + + CPoint operator-(const CPoint &point) const + { + CPoint ans; + ans.x = x - point.x; + ans.y = y - point.y; + return ans; + }; + + const CPoint &operator-=(const CPoint &point) + { + x -= point.x; + y -= point.y; + return *this; + }; + + float x, y; +}; + +class CRect +{ +public: + CRect() { x1 = y1 = x2 = y2 = 0;}; + CRect(float left, float top, float right, float bottom) { x1 = left; y1 = top; x2 = right; y2 = bottom; }; + + void SetRect(float left, float top, float right, float bottom) { x1 = left; y1 = top; x2 = right; y2 = bottom; }; + + bool PtInRect(const CPoint &point) const + { + if (x1 <= point.x && point.x <= x2 && y1 <= point.y && point.y <= y2) + return true; + return false; + }; + + inline const CRect &operator -=(const CPoint &point) XBMC_FORCE_INLINE + { + x1 -= point.x; + y1 -= point.y; + x2 -= point.x; + y2 -= point.y; + return *this; + }; + + inline const CRect &operator +=(const CPoint &point) XBMC_FORCE_INLINE + { + x1 += point.x; + y1 += point.y; + x2 += point.x; + y2 += point.y; + return *this; + }; + + const CRect &Intersect(const CRect &rect) + { + if (rect.x2 < x2) x2 = rect.x2; + if (rect.y2 < y2) y2 = rect.y2; + if (rect.x1 > x1) x1 = rect.x1; + if (rect.y1 > y1) y1 = rect.y1; + if (x1 > x2) x1 = x2; + if (y1 > y2) y1 = y2; + return *this; + }; + + inline bool IsEmpty() const XBMC_FORCE_INLINE + { + return (x2 - x1) * (y2 - y1) == 0; + }; + + inline float Width() const XBMC_FORCE_INLINE + { + return x2 - x1; + }; + + inline float Height() const XBMC_FORCE_INLINE + { + return y2 - y1; + }; + + bool operator !=(const CRect &rect) const + { + if (x1 != rect.x1) return true; + if (x2 != rect.x2) return true; + if (y1 != rect.y1) return true; + if (y2 != rect.y2) return true; + return false; + }; + + float x1, y1, x2, y2; +}; + |