Use S_ macro when comparing modifier names in User Interaction Preferences.
[ardour.git] / libs / canvas / lookup_table.cc
index 2396f596354504798f0cdbc625da9c3c8bccd0b5..3836ccd18a9af305a5b7b3b066a0eeb5a3338869 100644 (file)
@@ -41,11 +41,22 @@ DumbLookupTable::DumbLookupTable (Item const & item)
 }
 
 vector<Item *>
-DumbLookupTable::get (Rect const &)
+DumbLookupTable::get (Rect const &area)
 {
        list<Item *> const & items = _item.items ();
        vector<Item *> vitems;
+#if 1
+       for (list<Item *>::const_iterator i = items.begin(); i != items.end(); ++i) {
+               boost::optional<Rect> item_bbox = (*i)->bounding_box ();
+               if (!item_bbox) continue;
+               Rect item = (*i)->item_to_window (item_bbox.get());
+               if (item.intersection (area)) {
+                       vitems.push_back (*i);
+               }
+       }
+#else
        copy (items.begin(), items.end(), back_inserter (vitems));
+#endif
        return vitems;
 }
 
@@ -81,11 +92,11 @@ DumbLookupTable::has_item_at_point (Duple const & point) const
                if (!(*i)->visible()) {
                        continue;
                }
-               
+
                if ((*i)->covers (point)) {
                        // std::cerr << "\t\t" << (*i)->whatami() << '/' << (*i)->name << " covers " << point << std::endl;
                        return true;
-                       
+
                }
        }
 
@@ -224,7 +235,7 @@ OptimizingLookupTable::items_at_point (Duple const & point) const
        if (y >= _dimension) {
                cout << "WARNING: y=" << y << ", dim=" << _dimension << ", py=" << point.y << " cellsize=" << _cell_size << "\n";
        }
-       
+
        /* XXX: hmm */
        x = min (_dimension - 1, x);
        y = min (_dimension - 1, y);
@@ -261,7 +272,7 @@ OptimizingLookupTable::has_item_at_point (Duple const & point) const
        if (y >= _dimension) {
                cout << "WARNING: y=" << y << ", dim=" << _dimension << ", py=" << point.y << " cellsize=" << _cell_size << "\n";
        }
-       
+
        /* XXX: hmm */
        x = min (_dimension - 1, x);
        y = min (_dimension - 1, y);
@@ -283,7 +294,7 @@ OptimizingLookupTable::has_item_at_point (Duple const & point) const
 
        return false;
 }
-       
+
 /** @param area Area in our owning item's coordinates */
 vector<Item*>
 OptimizingLookupTable::get (Rect const & area)
@@ -310,7 +321,7 @@ OptimizingLookupTable::get (Rect const & area)
 
        vector<Item*> vitems;
        copy (items.begin (), items.end (), back_inserter (vitems));
-       
+
        return vitems;
 }