X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=ETL%2Ftags%2FETL_0_04_10_rc2%2FETL%2F_rect.h;fp=ETL%2Ftags%2FETL_0_04_10_rc2%2FETL%2F_rect.h;h=0000000000000000000000000000000000000000;hb=3a6643238c67c043fc3592837a05d6d2861967f1;hp=d9ffe6417a74d08f74fa99e3b5c21fb43a860995;hpb=47fce282611fbba1044921d22ca887f9b53ad91a;p=synfig.git diff --git a/ETL/tags/ETL_0_04_10_rc2/ETL/_rect.h b/ETL/tags/ETL_0_04_10_rc2/ETL/_rect.h deleted file mode 100644 index d9ffe64..0000000 --- a/ETL/tags/ETL_0_04_10_rc2/ETL/_rect.h +++ /dev/null @@ -1,171 +0,0 @@ -/*! ======================================================================== -** Extended Template Library -** Rectangle Basic Class Implementation -** $Id$ -** -** Copyright (c) 2002 Adrian Bentley -** -** This package 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 of -** the License, or (at your option) any later version. -** -** This package 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. -** -** === N O T E S =========================================================== -** -** This is an internal header file, included by other ETL headers. -** You should not attempt to use it directly. -** -** ========================================================================= */ - -/* === S T A R T =========================================================== */ - -#ifndef __ETL_RECT_H -#define __ETL_RECT_H - -/* === H E A D E R S ======================================================= */ - -#include -#include - -/* === M A C R O S ========================================================= */ - -/* === T Y P E D E F S ===================================================== */ - -/* === C L A S S E S & S T R U C T S ======================================= */ - -_ETL_BEGIN_NAMESPACE - -template < typename T > -class rect -{ -public: //type niceties - typedef T value_type; - -public: //representation - - value_type minx,maxx,miny,maxy; - -public: //interface - - rect() {} - - rect(const value_type &x1,const value_type &y1) - { - set_point(x1,y1); - } - - rect(const value_type &x1,const value_type &y1, - const value_type &x2,const value_type &y2) - { - set_point(x1,y1); - expand(x2,y2); - } - - rect(const rect &o) - :minx(o.minx),maxx(o.maxx),miny(o.miny),maxy(o.maxy) - {} - - template < typename U > - rect(const rect &o) - :minx(o.minx),maxx(o.maxx),miny(o.miny),maxy(o.maxy) - {} - - void set_point(const value_type &x1,const value_type &y1) - { - minx = maxx = x1; - miny = maxy = y1; - } - - void expand(const value_type &x1,const value_type &y1) - { - minx = std::min(minx,x1); - maxx = std::max(maxx,x1); - miny = std::min(miny,y1); - maxy = std::max(maxy,y1); - } - - void set(const value_type &x1,const value_type &y1, - const value_type &x2,const value_type &y2) - { - minx = x1; maxx = x2; - miny = y1; maxy = y2; - } - - //HACK HACK HACK (stupid compiler doesn't like default arguments of any type) - bool valid() const - { - return valid(std::less()); - } - - template < typename F > - bool valid(const F & func) const - { - return func(minx,maxx) && func(miny,maxy); - } -}; - -template < typename T, typename F > -inline bool intersect(const rect &r1, const rect &r2, const F & func) -{ - /* We wan to do the edge compare test - |-----| - |------| intersecting - - |-----| - |-----| not intersecting - - So we want to compare the mins of the one against the maxs of the other, and - visa versa - - by default (exclude edge sharing) less will not be true if they are equal... - */ - - return func(r1.minx,r2.maxx) && - func(r2.minx,r1.maxx) && - func(r1.miny,r2.maxy) && - func(r2.miny,r1.maxy); -} - -template < typename T > -inline bool intersect(const rect &r1, const rect &r2) -{ - return intersect(r1,r2,std::less()); -} - -template < typename T > -void set_intersect(rect &rout, const rect &r1, const rect &r2) -{ - //takes the intersection of the two rectangles - rout.minx = std::max(r1.minx,r2.minx); - rout.miny = std::max(r1.miny,r2.miny); - rout.maxx = std::min(r1.maxx,r2.maxx); - rout.maxy = std::min(r1.maxy,r2.maxy); -} - -template < typename T > -void set_union(rect &rout, const rect &r1, const rect &r2) -{ - //takes the union of the two rectangles (bounds both... will contain extra info, but that's ok) - rout.set( - std::min(r1.minx,r2.minx), - std::min(r1.miny,r2.miny), - std::max(r1.maxx,r2.maxx), - std::max(r1.maxy,r2.maxy)); - /*rect local = r1; - rout.expand(r2.minx,r2.miny); - rout.expand(r2.maxx,r2.maxy); - rout = local;*/ -} - -_ETL_END_NAMESPACE - -/* === E X T E R N S ======================================================= */ - -/* === E N D =============================================================== */ - -#endif