Applied patch #15744: wxRichTextCtrl: HitTest can't find top-level floats (dghart)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@75343 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Julian Smart
2013-12-03 18:41:09 +00:00
parent 0eae308634
commit bdfd48b69e

View File

@@ -108,7 +108,7 @@ public:
void Draw(wxDC& dc, wxRichTextDrawingContext& context, const wxRichTextRange& range, const wxRichTextSelection& selection, const wxRect& rect, int descent, int style);
// HitTest the floats
int HitTest(wxDC& dc, wxRichTextDrawingContext& context, const wxPoint& pt, long& textPosition, wxRichTextObject** obj, int flags);
int HitTest(wxDC& dc, wxRichTextDrawingContext& context, const wxPoint& pt, long& textPosition, wxRichTextObject** obj, wxRichTextObject** contextObj, int flags);
// Get floating object count
int GetFloatingObjectCount() const { return m_left.GetCount() + m_right.GetCount(); }
@@ -132,7 +132,7 @@ public:
static void DrawFloat(const wxRichTextFloatRectMapArray& array, wxDC& dc, wxRichTextDrawingContext& context, const wxRichTextRange& range, const wxRichTextSelection& selection, const wxRect& rect, int descent, int style);
static int HitTestFloat(const wxRichTextFloatRectMapArray& array, wxDC& dc, wxRichTextDrawingContext& context, const wxPoint& pt, long& textPosition, wxRichTextObject** obj, int flags);
static int HitTestFloat(const wxRichTextFloatRectMapArray& array, wxDC& dc, wxRichTextDrawingContext& context, const wxPoint& pt, long& textPosition, wxRichTextObject** obj, wxRichTextObject** contextObj, int flags);
private:
wxRichTextFloatRectMapArray m_left;
@@ -426,7 +426,7 @@ void wxRichTextFloatCollector::Draw(wxDC& dc, wxRichTextDrawingContext& context,
DrawFloat(m_right, dc, context, range, selection, rect, descent, style);
}
int wxRichTextFloatCollector::HitTestFloat(const wxRichTextFloatRectMapArray& array, wxDC& WXUNUSED(dc), wxRichTextDrawingContext& WXUNUSED(context), const wxPoint& pt, long& textPosition, wxRichTextObject** obj, int WXUNUSED(flags))
int wxRichTextFloatCollector::HitTestFloat(const wxRichTextFloatRectMapArray& array, wxDC& dc, wxRichTextDrawingContext& context, const wxPoint& pt, long& textPosition, wxRichTextObject** obj, wxRichTextObject** contextObj, int WXUNUSED(flags))
{
int i;
if (array.GetCount() == 0)
@@ -442,6 +442,15 @@ int wxRichTextFloatCollector::HitTestFloat(const wxRichTextFloatRectMapArray& ar
if (point.x <= pt.x && point.x + size.x >= pt.x
&& point.y <= pt.y && point.y + size.y >= pt.y)
{
if (array[i]->anchor->IsTopLevel())
{
int result = array[i]->anchor->HitTest(dc, context, pt, textPosition, obj, contextObj, 0);
if (result != wxRICHTEXT_HITTEST_NONE)
{
return result;
}
}
textPosition = array[i]->anchor->GetRange().GetStart();
* obj = array[i]->anchor;
if (pt.x > (pt.x + pt.x + size.x) / 2)
@@ -453,12 +462,12 @@ int wxRichTextFloatCollector::HitTestFloat(const wxRichTextFloatRectMapArray& ar
return wxRICHTEXT_HITTEST_NONE;
}
int wxRichTextFloatCollector::HitTest(wxDC& dc, wxRichTextDrawingContext& context, const wxPoint& pt, long& textPosition, wxRichTextObject** obj, int flags)
int wxRichTextFloatCollector::HitTest(wxDC& dc, wxRichTextDrawingContext& context, const wxPoint& pt, long& textPosition, wxRichTextObject** obj, wxRichTextObject** contextObj, int flags)
{
int ret = HitTestFloat(m_left, dc, context, pt, textPosition, obj, flags);
int ret = HitTestFloat(m_left, dc, context, pt, textPosition, obj, contextObj, flags);
if (ret == wxRICHTEXT_HITTEST_NONE)
{
ret = HitTestFloat(m_right, dc, context, pt, textPosition, obj, flags);
ret = HitTestFloat(m_right, dc, context, pt, textPosition, obj, contextObj, flags);
}
return ret;
}
@@ -1886,7 +1895,13 @@ int wxRichTextParagraphLayoutBox::HitTest(wxDC& dc, wxRichTextDrawingContext& co
int ret = wxRICHTEXT_HITTEST_NONE;
if (wxRichTextBuffer::GetFloatingLayoutMode() && m_floatCollector && (flags & wxRICHTEXT_HITTEST_NO_FLOATING_OBJECTS) == 0)
ret = m_floatCollector->HitTest(dc, context, pt, textPosition, obj, flags);
{
ret = m_floatCollector->HitTest(dc, context, pt, textPosition, obj, contextObj, flags);
if (ret != wxRICHTEXT_HITTEST_NONE)
{
return ret;
}
}
if (ret == wxRICHTEXT_HITTEST_NONE)
return wxRichTextCompositeObject::HitTest(dc, context, pt, textPosition, obj, contextObj, flags);