git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@46506
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
pt2.x = m_Width;
// before selection:
pt2.x = m_Width;
// before selection:
+ // (include character under caret only if in first half of width)
#ifdef __WXMAC__
// implementation using PartialExtents to support fractional widths
wxArrayInt widths ;
dc.GetPartialTextExtents(m_Word,widths) ;
while( i < len && pt1.x >= widths[i] )
i++ ;
#ifdef __WXMAC__
// implementation using PartialExtents to support fractional widths
wxArrayInt widths ;
dc.GetPartialTextExtents(m_Word,widths) ;
while( i < len && pt1.x >= widths[i] )
i++ ;
+ if ( i < len )
+ {
+ int charW = (i > 0) ? widths[i] - widths[i-1] : widths[i];
+ if ( widths[i] - pt1.x < charW/2 )
+ i++;
+ }
+#else // !__WXMAC__
wxCoord charW, charH;
while ( pt1.x > 0 && i < len )
{
dc.GetTextExtent(m_Word[i], &charW, &charH);
pt1.x -= charW;
wxCoord charW, charH;
while ( pt1.x > 0 && i < len )
{
dc.GetTextExtent(m_Word[i], &charW, &charH);
pt1.x -= charW;
+ if ( pt1.x >= -charW/2 )
#endif // __WXMAC__/!__WXMAC__
// in selection:
#endif // __WXMAC__/!__WXMAC__
// in selection:
+ // (include character under caret only if in first half of width)
unsigned j = i;
#ifdef __WXMAC__
while( j < len && pt2.x >= widths[j] )
j++ ;
unsigned j = i;
#ifdef __WXMAC__
while( j < len && pt2.x >= widths[j] )
j++ ;
+ if ( j < len )
+ {
+ int charW = (j > 0) ? widths[j] - widths[j-1] : widths[j];
+ if ( widths[j] - pt2.x < charW/2 )
+ j++;
+ }
+#else // !__WXMAC__
pos2 = pos1;
pt2.x -= pos2;
while ( pt2.x > 0 && j < len )
{
dc.GetTextExtent(m_Word[j], &charW, &charH);
pt2.x -= charW;
pos2 = pos1;
pt2.x -= pos2;
while ( pt2.x > 0 && j < len )
{
dc.GetTextExtent(m_Word[j], &charW, &charH);
pt2.x -= charW;
+ if ( pt2.x >= -charW/2 )