X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4c51a665c649f7579fb39e62070cef4f66b3210d..e87d78bb36f371d593137761158118fb09b69fa2:/src/html/htmlwin.cpp diff --git a/src/html/htmlwin.cpp b/src/html/htmlwin.cpp index 1eefb4b3cb..0264befd05 100644 --- a/src/html/htmlwin.cpp +++ b/src/html/htmlwin.cpp @@ -43,9 +43,9 @@ IMPLEMENT_DYNAMIC_CLASS(wxHtmlLinkEvent, wxCommandEvent) IMPLEMENT_DYNAMIC_CLASS(wxHtmlCellEvent, wxCommandEvent) -wxDEFINE_EVENT( wxEVT_COMMAND_HTML_CELL_CLICKED, wxHtmlCellEvent ); -wxDEFINE_EVENT( wxEVT_COMMAND_HTML_CELL_HOVER, wxHtmlCellEvent ); -wxDEFINE_EVENT( wxEVT_COMMAND_HTML_LINK_CLICKED, wxHtmlLinkEvent ); +wxDEFINE_EVENT( wxEVT_HTML_CELL_CLICKED, wxHtmlCellEvent ); +wxDEFINE_EVENT( wxEVT_HTML_CELL_HOVER, wxHtmlCellEvent ); +wxDEFINE_EVENT( wxEVT_HTML_LINK_CLICKED, wxHtmlLinkEvent ); #if wxUSE_CLIPBOARD @@ -240,7 +240,7 @@ bool wxHtmlWindowMouseHelper::OnCellClicked(wxHtmlCell *cell, wxCoord x, wxCoord y, const wxMouseEvent& event) { - wxHtmlCellEvent ev(wxEVT_COMMAND_HTML_CELL_CLICKED, + wxHtmlCellEvent ev(wxEVT_HTML_CELL_CLICKED, m_interface->GetHTMLWindow()->GetId(), cell, wxPoint(x,y), event); @@ -261,7 +261,7 @@ void wxHtmlWindowMouseHelper::OnCellMouseHover(wxHtmlCell * cell, wxCoord x, wxCoord y) { - wxHtmlCellEvent ev(wxEVT_COMMAND_HTML_CELL_HOVER, + wxHtmlCellEvent ev(wxEVT_HTML_CELL_HOVER, m_interface->GetHTMLWindow()->GetId(), cell, wxPoint(x,y), wxMouseEvent()); m_interface->GetHTMLWindow()->GetEventHandler()->ProcessEvent(ev); @@ -1090,7 +1090,7 @@ void wxHtmlWindow::DoEraseBackground(wxDC& dc) if ( m_bmpBg.IsOk() ) { // draw the background bitmap tiling it over the entire window area - const wxSize sz = GetClientSize(); + const wxSize sz = GetVirtualSize(); const wxSize sizeBmp(m_bmpBg.GetWidth(), m_bmpBg.GetHeight()); for ( wxCoord x = 0; x < sz.x; x += sizeBmp.x ) { @@ -1102,6 +1102,19 @@ void wxHtmlWindow::DoEraseBackground(wxDC& dc) } } +void wxHtmlWindow::OnEraseBackground(wxEraseEvent& WXUNUSED(event)) +{ + // We never get real erase background events as we changed our background + // style to wxBG_STYLE_PAINT in our ctor so the only time when we get here + // is when an artificial wxEraseEvent is generated by our own OnPaint() + // below. This handler only exists to stop the event from propagating + // downwards to wxWindow which may erase the background itself when it gets + // it in some ports (currently this happens in wxUniv), so we simply stop + // processing here and set a special flag allowing OnPaint() to see that + // the event hadn't been really processed. + m_isBgReallyErased = false; +} + void wxHtmlWindow::OnPaint(wxPaintEvent& WXUNUSED(event)) { wxPaintDC dcPaint(this); @@ -1134,11 +1147,17 @@ void wxHtmlWindow::OnPaint(wxPaintEvent& WXUNUSED(event)) PrepareDC(*dc); - // erase the background: for compatibility, we must generate the event to - // allow the user-defined handlers to do it + // Erase the background: for compatibility, we must generate the event to + // allow the user-defined handlers to do it, hence this hack with sending + // an artificial wxEraseEvent to trigger the execution of such handlers. wxEraseEvent eraseEvent(GetId(), dc); eraseEvent.SetEventObject(this); - if ( !ProcessWindowEvent(eraseEvent) ) + + // Hack inside a hack: the background wasn't really erased if our own + // OnEraseBackground() was executed, so we need to check for the flag set + // by it whenever it's called. + m_isBgReallyErased = true; // Initially assume it wasn't. + if ( !ProcessWindowEvent(eraseEvent) || !m_isBgReallyErased ) { // erase background ourselves DoEraseBackground(*dc); @@ -1148,7 +1167,7 @@ void wxHtmlWindow::OnPaint(wxPaintEvent& WXUNUSED(event)) // draw the HTML window contents dc->SetMapMode(wxMM_TEXT); - dc->SetBackgroundMode(wxBRUSHSTYLE_TRANSPARENT); + dc->SetBackgroundMode(wxTRANSPARENT); dc->SetLayoutDirection(GetLayoutDirection()); wxHtmlRenderingInfo rinfo; @@ -1214,7 +1233,7 @@ void wxHtmlWindow::OnSize(wxSizeEvent& event) { m_selection->Set(m_selection->GetFromCell(), m_selection->GetToCell()); - m_selection->ClearPrivPos(); + m_selection->ClearFromToCharacterPos(); } Refresh(); @@ -1282,7 +1301,8 @@ void wxHtmlWindow::OnMouseUp(wxMouseEvent& event) #endif // wxUSE_CLIPBOARD wxPoint pos = CalcUnscrolledPosition(event.GetPosition()); - wxHtmlWindowMouseHelper::HandleMouseClick(m_Cell, pos, event); + if ( !wxHtmlWindowMouseHelper::HandleMouseClick(m_Cell, pos, event) ) + event.Skip(); } #if wxUSE_CLIPBOARD @@ -1415,7 +1435,7 @@ void wxHtmlWindow::OnInternalIdle() m_selection->Set(wxPoint(x,y), selcell, m_tmpSelFromPos, m_tmpSelFromCell); } - m_selection->ClearPrivPos(); + m_selection->ClearFromToCharacterPos(); Refresh(); } } @@ -1518,12 +1538,16 @@ void wxHtmlWindow::OnKeyUp(wxKeyEvent& event) if ( IsSelectionEnabled() && (event.GetKeyCode() == 'C' && event.CmdDown()) ) { - wxClipboardTextEvent evt(wxEVT_COMMAND_TEXT_COPY, GetId()); + wxClipboardTextEvent evt(wxEVT_TEXT_COPY, GetId()); evt.SetEventObject(this); GetEventHandler()->ProcessEvent(evt); } + else + { + event.Skip(); + } } void wxHtmlWindow::OnCopy(wxCommandEvent& WXUNUSED(event)) @@ -1664,6 +1688,7 @@ BEGIN_EVENT_TABLE(wxHtmlWindow, wxScrolledWindow) EVT_RIGHT_UP(wxHtmlWindow::OnMouseUp) EVT_MOTION(wxHtmlWindow::OnMouseMove) EVT_PAINT(wxHtmlWindow::OnPaint) + EVT_ERASE_BACKGROUND(wxHtmlWindow::OnEraseBackground) #if wxUSE_CLIPBOARD EVT_LEFT_DCLICK(wxHtmlWindow::OnDoubleClick) EVT_ENTER_WINDOW(wxHtmlWindow::OnMouseEnter)