1 /* 2 * Copyright (C) 2012 Carl Hetherington <carl@carlh.net> 3 * Copyright (C) 2013-2018 Paul Davis <paul@linuxaudiosystems.com> 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation; either version 2 of the License, or 8 * (at your option) any later version. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License along 16 * with this program; if not, write to the Free Software Foundation, Inc., 17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 */ 19 20 #ifndef __CANVAS_RECTANGLE_H__ 21 #define __CANVAS_RECTANGLE_H__ 22 23 #include "canvas/visibility.h" 24 #include "canvas/item.h" 25 #include "canvas/types.h" 26 27 namespace ArdourCanvas 28 { 29 30 class LIBCANVAS_API Rectangle : public Item 31 { 32 public: 33 Rectangle (Canvas*); 34 Rectangle (Canvas*, Rect const &); 35 Rectangle (Item*); 36 Rectangle (Item*, Rect const &); 37 38 void render (Rect const &, Cairo::RefPtr<Cairo::Context>) const; 39 void compute_bounding_box () const; 40 get()41 Rect const & get () const { 42 return _rect; 43 } 44 x0()45 Coord x0 () const { 46 return _rect.x0; 47 } 48 y0()49 Coord y0 () const { 50 return _rect.y0; 51 } 52 x1()53 Coord x1 () const { 54 return _rect.x1; 55 } 56 y1()57 Coord y1 () const { 58 return _rect.y1; 59 } 60 61 void set (Rect const &); 62 void set_x0 (Coord); 63 void set_y0 (Coord); 64 void set_x1 (Coord); 65 void set_y1 (Coord); 66 67 /** return @param y as a floating point fraction of the overall 68 * height of the rectangle. @param y is in canvas coordinate space. 69 * 70 * A value of zero indicates that y is at the bottom of the 71 * rectangle; a value of 1 indicates that y is at the top. 72 * 73 * Will return zero if there is no bounding box or if y 74 * is outside the bounding box. 75 */ 76 double vertical_fraction (double y) const; 77 78 enum What { 79 NOTHING = 0x0, 80 LEFT = 0x1, 81 RIGHT = 0x2, 82 TOP = 0x4, 83 BOTTOM = 0x8, 84 ALL = LEFT|RIGHT|TOP|BOTTOM, 85 }; 86 87 void set_outline_what (What); set_outline_all()88 void set_outline_all () { set_outline_what (ArdourCanvas::Rectangle::ALL); } 89 90 private: 91 /** Our rectangle; note that x0 may not always be less than x1 92 * and likewise with y0 and y1. 93 */ 94 Rect _rect; 95 What _outline_what; 96 }; 97 98 } 99 100 #endif 101