Clicking on a floating (non-container) object no longer sets the caret position.

Double-clicking on a floating (non-container) object selects it instead of selecting a word.
Selection refresh now takes floating objects into account.
The last line of a paragraph now takes floating objects into account.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@75360 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Julian Smart
2013-12-07 15:50:38 +00:00
parent 674c3fffbb
commit 548eb1850c
2 changed files with 124 additions and 20 deletions

View File

@@ -464,6 +464,7 @@ int wxRichTextFloatCollector::HitTestFloat(const wxRichTextFloatRectMapArray& ar
textPosition = array[i]->anchor->GetRange().GetStart();
* obj = array[i]->anchor;
* contextObj = array[i]->anchor->GetParentContainer();
if (pt.x > (pt.x + pt.x + size.x) / 2)
return wxRICHTEXT_HITTEST_BEFORE;
else
@@ -5218,7 +5219,30 @@ bool wxRichTextParagraph::Layout(wxDC& dc, wxRichTextDrawingContext& context, co
// Substract -1 because the last position is always the end-paragraph position.
if (lastCompletedEndPos <= GetRange().GetEnd()-1)
{
currentPosition.x = (lineCount == 0 ? startPositionFirstLine : startPositionSubsequentLines);
int startOffset = (lineCount == 0 ? startPositionFirstLine : startPositionSubsequentLines);
availableRect = wxRect(rect.x + startOffset, rect.y + currentPosition.y,
rect.width - startOffset - rightIndent, rect.height);
// Take into account floating objects for the last line
if (wxRichTextBuffer::GetFloatingLayoutMode() && collector)
{
wxRect floatAvailableRect = collector->GetAvailableRect(rect.y + currentPosition.y, rect.y + currentPosition.y + lineHeight);
// Adjust availableRect to the space that is available when taking floating objects into account.
if (floatAvailableRect.x + startOffset > availableRect.x)
{
int newX = floatAvailableRect.x + startOffset;
int newW = availableRect.width - (newX - availableRect.x);
availableRect.x = newX;
availableRect.width = newW;
}
if (floatAvailableRect.width < availableRect.width)
availableRect.width = floatAvailableRect.width;
}
currentPosition.x = availableRect.x - rect.x;
wxRichTextLine* line = AllocateLine(lineCount);