//--------------------------------------------------------------------------------------- void GmoBoxDocPage::select_objects_in_rectangle(SelectionSet* selection, const URect& selRect, unsigned UNUSED(flags)) { bool fSomethingSelected = false; std::list<GmoShape*>::reverse_iterator it; for (it = m_allShapes.rbegin(); it != m_allShapes.rend(); ++it) { URect bbox = (*it)->get_bounds(); if (selRect.contains(bbox)) { selection->add(*it); fSomethingSelected = true; } } //if no objects in rectangle try to select clicked object if (!fSomethingSelected) { GmoShape* pShape = find_shape_at(selRect.get_x(), selRect.get_y()); if (pShape) selection->add(pShape); } }
//--------------------------------------------------------------------------------------- GmoBox* GmoBox::find_inner_box_at(LUnits x, LUnits y) { URect bbox = get_bounds(); if (bbox.contains(x, y)) { std::vector<GmoBox*>::iterator it; for (it=m_childBoxes.begin(); it != m_childBoxes.end(); ++it) { GmoBox* pBox = (*it)->find_inner_box_at(x, y); if (pBox) return pBox; } return this; } return NULL; }
//--------------------------------------------------------------------------------------- bool GmoShape::hit_test(LUnits x, LUnits y) { URect bbox = get_bounds(); return bbox.contains(x, y); }