X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fcanvas%2Ftypes.cc;h=a8c690bbbe85e2a9bea8cbc7af143f82a3cb0807;hb=2d283c17e17940c356af0cc1366b714e0d7b76be;hp=ef5d3bb293406e7331d82d0bd17bcd562e0a5c50;hpb=f208593249c7bc1f139809aa32c8aa6320782af0;p=ardour.git diff --git a/libs/canvas/types.cc b/libs/canvas/types.cc index ef5d3bb293..a8c690bbbe 100644 --- a/libs/canvas/types.cc +++ b/libs/canvas/types.cc @@ -1,14 +1,34 @@ +/* + Copyright (C) 2011-2013 Paul Davis + Author: Carl Hetherington + + 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 of the License, 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 this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + #include #include #include + +#include + #include "canvas/types.h" using namespace std; using namespace ArdourCanvas; -Coord const ArdourCanvas::COORD_MAX = DBL_MAX; -/* XXX: empirically arrived at */ -Coord const ArdourCanvas::CAIRO_MAX = 65536; +Coord const ArdourCanvas::COORD_MAX = 1.7e307; static inline Coord safe_add (Coord a, Coord b) @@ -101,6 +121,39 @@ Rect::fix () const return r; } +Rect +Rect::convert_to_device (Cairo::RefPtr c) const +{ + Coord xa, ya, xb, yb; + + xa = x0; + xb = x1; + ya = y0; + yb = y1; + + c->user_to_device (xa, ya); + c->user_to_device (xb, yb); + + return Rect (xa, ya, xb, yb); +} + + +Rect +Rect::convert_to_user (Cairo::RefPtr c) const +{ + Coord xa, ya, xb, yb; + + xa = x0; + xb = x1; + ya = y0; + yb = y1; + + c->device_to_user (xa, ya); + c->device_to_user (xb, yb); + + return Rect (xa, ya, xb, yb); +} + Duple ArdourCanvas::operator- (Duple const & o) { @@ -113,6 +166,12 @@ ArdourCanvas::operator+ (Duple const & a, Duple const & b) return Duple (safe_add (a.x, b.x), safe_add (a.y, b.y)); } +bool +ArdourCanvas::operator== (Duple const & a, Duple const & b) +{ + return a.x == b.x && a.y == b.y; +} + Duple ArdourCanvas::operator- (Duple const & a, Duple const & b) {