+ if ( info.GetState().GetSelectionState() == wxHTML_SEL_CHANGING )
+ {
+ // Selection changing, we must draw the word piecewise:
+ wxHtmlSelection *s = info.GetSelection();
+ wxString txt;
+ int w, h;
+ int ofs = 0;
+
+ wxPoint priv = (this == s->GetFromCell()) ?
+ s->GetFromPrivPos() : s->GetToPrivPos();
+
+ // NB: this is quite a hack: in order to compute selection boundaries
+ // (in word's characters) we must know current font, which is only
+ // possible inside rendering code. Therefore we update the
+ // information here and store it in wxHtmlSelection so that
+ // ConvertToText can use it later:
+ if ( priv == wxDefaultPosition )
+ {
+ SetSelectionPrivPos(dc, s);
+ priv = (this == s->GetFromCell()) ?
+ s->GetFromPrivPos() : s->GetToPrivPos();
+ }
+
+ int part1 = priv.x;
+ int part2 = priv.y;
+
+ if ( part1 > 0 )
+ {
+ txt = m_Word.Mid(0, part1);
+ dc.DrawText(txt, x + m_PosX, y + m_PosY);
+ dc.GetTextExtent(txt, &w, &h);
+ ofs += w;
+ }
+
+ SwitchSelState(dc, info, true);
+
+ txt = m_Word.Mid(part1, part2-part1);
+ dc.DrawText(txt, ofs + x + m_PosX, y + m_PosY);
+
+ if ( (size_t)part2 < m_Word.length() )
+ {
+ dc.GetTextExtent(txt, &w, &h);
+ ofs += w;
+ SwitchSelState(dc, info, false);
+ txt = m_Word.Mid(part2);
+ dc.DrawText(txt, ofs + x + m_PosX, y + m_PosY);
+ }
+ else
+ drawSelectionAfterCell = true;
+ }
+ else
+ {
+ wxHtmlSelectionState selstate = info.GetState().GetSelectionState();
+ // Not changing selection state, draw the word in single mode:
+ if ( selstate != wxHTML_SEL_OUT &&
+ dc.GetBackgroundMode() != wxSOLID )
+ {
+ SwitchSelState(dc, info, true);
+ }
+ else if ( selstate == wxHTML_SEL_OUT &&
+ dc.GetBackgroundMode() == wxSOLID )
+ {
+ SwitchSelState(dc, info, false);
+ }
+ dc.DrawText(m_Word, x + m_PosX, y + m_PosY);
+ drawSelectionAfterCell = (selstate != wxHTML_SEL_OUT);
+ }