X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/fdd4e6cca80241785378714e59df3db3c23d4c9f..0e859e32234b3178254146f31653f478de0c5fba:/src/mac/carbon/listbox.cpp diff --git a/src/mac/carbon/listbox.cpp b/src/mac/carbon/listbox.cpp index 715abf0db0..cf43eeaa16 100644 --- a/src/mac/carbon/listbox.cpp +++ b/src/mac/carbon/listbox.cpp @@ -597,7 +597,7 @@ wxSize wxListBox::DoGetBestSize() const // don't make the listbox too tall (limit height to around 10 items) // but don't make it too small neither - lbHeight = (cy + 4) * wxMin( wxMax( GetCount(), 3 ), 10 ); + lbHeight = wxMax( (cy + 4) * wxMin( wxMax( GetCount(), 3 ), 10 ), 70 ); } return wxSize( lbWidth, lbHeight ); @@ -782,6 +782,43 @@ void wxListBox::MacScrollTo( int n ) verify_noerr( m_peer->RevealItem( id , kTextColumnId , kDataBrowserRevealWithoutSelecting ) ) ; } +int wxListBox::DoListHitTest(const wxPoint& point) const +{ + //Yuck - there is no easy way to get a databrowseritem from a point + //so we need to iterate through our items to see which one this falls under + + // TODO: binary search would be faster + int count = GetCount(); + DataBrowserTableViewColumnID colId = 0; + + //Get column property id (req. for call to itempartbounds) + GetDataBrowserTableViewColumnProperty(m_peer->GetControlRef(), 0, &colId); + + for(int i = 1; i <= count; ++i) + { + Rect bounds; + GetDataBrowserItemPartBounds(m_peer->GetControlRef(), i, colId, + kDataBrowserPropertyEnclosingPart, + &bounds); + + //translate to client coords + // + // TODO: it would probably be more efficient to translate point to + // screen coordinates once outside of the loop + MacRootWindowToWindow(&bounds.left, &bounds.top); + MacRootWindowToWindow(&bounds.right, &bounds.bottom); + + //if point is within the bounds, return this item + if( (point.x >= bounds.left && point.x <= bounds.right) && + (point.y >= bounds.top && point.y <= bounds.bottom) ) + { + return i - 1; //found + } + } + + return wxNOT_FOUND; +} + #if !TARGET_API_MAC_OSX void wxListBox::OnChar(wxKeyEvent& event)