a hack to make copying double clicked words to clipboard work
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@21035 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -205,7 +205,7 @@ wxPoint wxHtmlCell::GetAbsPos() const
|
|||||||
}
|
}
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned wxHtmlCell::GetDepth() const
|
unsigned wxHtmlCell::GetDepth() const
|
||||||
{
|
{
|
||||||
unsigned d = 0;
|
unsigned d = 0;
|
||||||
@@ -213,7 +213,7 @@ unsigned wxHtmlCell::GetDepth() const
|
|||||||
d++;
|
d++;
|
||||||
return d;
|
return d;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxHtmlCell::IsBefore(wxHtmlCell *cell) const
|
bool wxHtmlCell::IsBefore(wxHtmlCell *cell) const
|
||||||
{
|
{
|
||||||
const wxHtmlCell *c1 = this;
|
const wxHtmlCell *c1 = this;
|
||||||
@@ -240,7 +240,7 @@ bool wxHtmlCell::IsBefore(wxHtmlCell *cell) const
|
|||||||
if ( c1 == c2 )
|
if ( c1 == c2 )
|
||||||
return true;
|
return true;
|
||||||
c1 = c1->GetNext();
|
c1 = c1->GetNext();
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -318,19 +318,19 @@ void wxHtmlWordCell::Split(wxDC& dc,
|
|||||||
void wxHtmlWordCell::SetSelectionPrivPos(wxDC& dc, wxHtmlSelection *s) const
|
void wxHtmlWordCell::SetSelectionPrivPos(wxDC& dc, wxHtmlSelection *s) const
|
||||||
{
|
{
|
||||||
unsigned p1, p2;
|
unsigned p1, p2;
|
||||||
|
|
||||||
Split(dc,
|
Split(dc,
|
||||||
this == s->GetFromCell() ? s->GetFromPos() : wxDefaultPosition,
|
this == s->GetFromCell() ? s->GetFromPos() : wxDefaultPosition,
|
||||||
this == s->GetToCell() ? s->GetToPos() : wxDefaultPosition,
|
this == s->GetToCell() ? s->GetToPos() : wxDefaultPosition,
|
||||||
p1, p2);
|
p1, p2);
|
||||||
|
|
||||||
wxPoint p(0, m_Word.length());
|
wxPoint p(0, m_Word.length());
|
||||||
|
|
||||||
if ( this == s->GetFromCell() )
|
if ( this == s->GetFromCell() )
|
||||||
p.x = p1; // selection starts here
|
p.x = p1; // selection starts here
|
||||||
if ( this == s->GetToCell() )
|
if ( this == s->GetToCell() )
|
||||||
p.y = p2; // selection ends here
|
p.y = p2; // selection ends here
|
||||||
|
|
||||||
if ( this == s->GetFromCell() )
|
if ( this == s->GetFromCell() )
|
||||||
s->SetFromPrivPos(p);
|
s->SetFromPrivPos(p);
|
||||||
if ( this == s->GetToCell() )
|
if ( this == s->GetToCell() )
|
||||||
@@ -343,7 +343,7 @@ static void SwitchSelState(wxDC& dc, wxHtmlRenderingInfo& info,
|
|||||||
{
|
{
|
||||||
wxColour fg = info.GetState().GetFgColour();
|
wxColour fg = info.GetState().GetFgColour();
|
||||||
wxColour bg = info.GetState().GetBgColour();
|
wxColour bg = info.GetState().GetBgColour();
|
||||||
|
|
||||||
if ( toSelection )
|
if ( toSelection )
|
||||||
{
|
{
|
||||||
dc.SetBackgroundMode(wxSOLID);
|
dc.SetBackgroundMode(wxSOLID);
|
||||||
@@ -374,8 +374,8 @@ void wxHtmlWordCell::Draw(wxDC& dc, int x, int y,
|
|||||||
wxString txt;
|
wxString txt;
|
||||||
int w, h;
|
int w, h;
|
||||||
int ofs = 0;
|
int ofs = 0;
|
||||||
|
|
||||||
wxPoint priv = (this == s->GetFromCell()) ?
|
wxPoint priv = (this == s->GetFromCell()) ?
|
||||||
s->GetFromPrivPos() : s->GetToPrivPos();
|
s->GetFromPrivPos() : s->GetToPrivPos();
|
||||||
|
|
||||||
// NB: this is quite a hack: in order to compute selection boundaries
|
// NB: this is quite a hack: in order to compute selection boundaries
|
||||||
@@ -386,10 +386,10 @@ void wxHtmlWordCell::Draw(wxDC& dc, int x, int y,
|
|||||||
if ( priv == wxDefaultPosition )
|
if ( priv == wxDefaultPosition )
|
||||||
{
|
{
|
||||||
SetSelectionPrivPos(dc, s);
|
SetSelectionPrivPos(dc, s);
|
||||||
priv = (this == s->GetFromCell()) ?
|
priv = (this == s->GetFromCell()) ?
|
||||||
s->GetFromPrivPos() : s->GetToPrivPos();
|
s->GetFromPrivPos() : s->GetToPrivPos();
|
||||||
}
|
}
|
||||||
|
|
||||||
int part1 = priv.x;
|
int part1 = priv.x;
|
||||||
int part2 = priv.y;
|
int part2 = priv.y;
|
||||||
|
|
||||||
@@ -400,9 +400,9 @@ void wxHtmlWordCell::Draw(wxDC& dc, int x, int y,
|
|||||||
dc.GetTextExtent(txt, &w, &h);
|
dc.GetTextExtent(txt, &w, &h);
|
||||||
ofs += w;
|
ofs += w;
|
||||||
}
|
}
|
||||||
|
|
||||||
SwitchSelState(dc, info, true);
|
SwitchSelState(dc, info, true);
|
||||||
|
|
||||||
txt = m_Word.Mid(part1, part2-part1);
|
txt = m_Word.Mid(part1, part2-part1);
|
||||||
dc.DrawText(txt, ofs + x + m_PosX, y + m_PosY);
|
dc.DrawText(txt, ofs + x + m_PosX, y + m_PosY);
|
||||||
|
|
||||||
@@ -432,20 +432,32 @@ void wxHtmlWordCell::Draw(wxDC& dc, int x, int y,
|
|||||||
dc.DrawText(m_Word, x + m_PosX, y + m_PosY);
|
dc.DrawText(m_Word, x + m_PosX, y + m_PosY);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
wxString wxHtmlWordCell::ConvertToText(wxHtmlSelection *s) const
|
wxString wxHtmlWordCell::ConvertToText(wxHtmlSelection *s) const
|
||||||
{
|
{
|
||||||
if ( s && (this == s->GetFromCell() || this == s->GetToCell()) )
|
if ( s && (this == s->GetFromCell() || this == s->GetToCell()) )
|
||||||
{
|
{
|
||||||
wxPoint priv = (this == s->GetFromCell()) ?
|
wxPoint priv = this == s->GetFromCell() ? s->GetFromPrivPos()
|
||||||
s->GetFromPrivPos() : s->GetToPrivPos();
|
: s->GetToPrivPos();
|
||||||
int part1 = priv.x;
|
|
||||||
int part2 = priv.y;
|
// VZ: we may be called before we had a chance to re-render ourselves
|
||||||
return m_Word.Mid(part1, part2-part1);
|
// and in this case GetFrom/ToPrivPos() is not set yet -- assume
|
||||||
|
// that this only happens in case of a double/triple click (which
|
||||||
|
// seems to be the case now) and so it makes sense to select the
|
||||||
|
// entire contents of the cell in this case
|
||||||
|
//
|
||||||
|
// TODO: but this really needs to be fixed in some better way later...
|
||||||
|
if ( priv != wxDefaultPosition )
|
||||||
|
{
|
||||||
|
int part1 = priv.x;
|
||||||
|
int part2 = priv.y;
|
||||||
|
return m_Word.Mid(part1, part2-part1);
|
||||||
|
}
|
||||||
|
//else: return the whole word below
|
||||||
}
|
}
|
||||||
else
|
|
||||||
return m_Word;
|
return m_Word;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxCursor wxHtmlWordCell::GetCursor() const
|
wxCursor wxHtmlWordCell::GetCursor() const
|
||||||
@@ -461,7 +473,6 @@ wxCursor wxHtmlWordCell::GetCursor() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// wxHtmlContainerCell
|
// wxHtmlContainerCell
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@@ -944,7 +955,7 @@ wxHtmlCell *wxHtmlContainerCell::FindCellByPos(wxCoord x, wxCoord y,
|
|||||||
wxHtmlCell *c2, *c = NULL;
|
wxHtmlCell *c2, *c = NULL;
|
||||||
for ( const wxHtmlCell *cell = m_Cells; cell; cell = cell->GetNext() )
|
for ( const wxHtmlCell *cell = m_Cells; cell; cell = cell->GetNext() )
|
||||||
{
|
{
|
||||||
if (cell->GetPosY() > y ||
|
if (cell->GetPosY() > y ||
|
||||||
(cell->GetPosY() == y && cell->GetPosX() > x))
|
(cell->GetPosY() == y && cell->GetPosX() > x))
|
||||||
break;
|
break;
|
||||||
c2 = cell->FindCellByPos(x - cell->GetPosX(), y - cell->GetPosY(),
|
c2 = cell->FindCellByPos(x - cell->GetPosX(), y - cell->GetPosY(),
|
||||||
@@ -991,7 +1002,7 @@ void wxHtmlContainerCell::GetHorizontalConstraints(int *left, int *right) const
|
|||||||
*right = cright;
|
*right = cright;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
wxHtmlCell *wxHtmlContainerCell::GetFirstTerminal() const
|
wxHtmlCell *wxHtmlContainerCell::GetFirstTerminal() const
|
||||||
{
|
{
|
||||||
if ( m_Cells )
|
if ( m_Cells )
|
||||||
@@ -1196,7 +1207,7 @@ const wxHtmlCell* wxHtmlTerminalCellsInterator::operator++()
|
|||||||
while ( m_pos->GetFirstChild() != NULL )
|
while ( m_pos->GetFirstChild() != NULL )
|
||||||
m_pos = m_pos->GetFirstChild();
|
m_pos = m_pos->GetFirstChild();
|
||||||
} while ( !m_pos->IsTerminalCell() );
|
} while ( !m_pos->IsTerminalCell() );
|
||||||
|
|
||||||
return m_pos;
|
return m_pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user