#include <vector>
#include <boost/multi_array.hpp>
+
+#include "canvas/visibility.h"
#include "canvas/types.h"
class OptimizingLookupTableTest;
namespace ArdourCanvas {
class Item;
-class Group;
-class LookupTable
+class LIBCANVAS_API LookupTable
{
public:
- LookupTable (Group const &);
- virtual ~LookupTable ();
+ LookupTable (Item const &);
+ virtual ~LookupTable ();
- virtual std::vector<Item*> get (Rect const &) = 0;
- virtual std::vector<Item*> items_at_point (Duple) const = 0;
+ virtual std::vector<Item*> get (Rect const &) = 0;
+ virtual std::vector<Item*> items_at_point (Duple const &) const = 0;
+ virtual bool has_item_at_point (Duple const & point) const = 0;
protected:
-
- Group const & _group;
+
+ Item const & _item;
};
-class DumbLookupTable : public LookupTable
+class LIBCANVAS_API DumbLookupTable : public LookupTable
{
public:
- DumbLookupTable (Group const &);
+ DumbLookupTable (Item const &);
- std::vector<Item*> get (Rect const &);
- std::vector<Item*> items_at_point (Duple) const;
+ std::vector<Item*> get (Rect const &);
+ std::vector<Item*> items_at_point (Duple const &) const;
+ bool has_item_at_point (Duple const & point) const;
};
-class OptimizingLookupTable : public LookupTable
+class LIBCANVAS_API OptimizingLookupTable : public LookupTable
{
public:
- OptimizingLookupTable (Group const &, int);
- ~OptimizingLookupTable ();
- std::vector<Item*> get (Rect const &);
- std::vector<Item*> items_at_point (Duple) const;
+ OptimizingLookupTable (Item const &, int);
+ ~OptimizingLookupTable ();
+ std::vector<Item*> get (Rect const &);
+ std::vector<Item*> items_at_point (Duple const &) const;
+ bool has_item_at_point (Duple const & point) const;
- static int default_items_per_cell;
+ static int default_items_per_cell;
-private:
+ private:
- void area_to_indices (Rect const &, int &, int &, int &, int &) const;
- void point_to_indices (Duple, int &, int &) const;
+ void area_to_indices (Rect const &, int &, int &, int &, int &) const;
+ void point_to_indices (Duple, int &, int &) const;
- friend class ::OptimizingLookupTableTest;
+ friend class ::OptimizingLookupTableTest;
- typedef std::vector<Item*> Cell;
- int _items_per_cell;
- int _dimension;
- Duple _cell_size;
- Duple _offset;
- Cell** _cells;
- bool _added;
+ typedef std::vector<Item*> Cell;
+ int _items_per_cell;
+ int _dimension;
+ Duple _cell_size;
+ Duple _offset;
+ Cell** _cells;
+ bool _added;
};
}