X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/5276b0a53cef4815230e39b54d2ecda14f72cbd1..64ea838d8f4d1853b7d850db93ee565e901d099a:/src/html/htmlwin.cpp?ds=inline diff --git a/src/html/htmlwin.cpp b/src/html/htmlwin.cpp index a19f7c4206..52ba2a51c4 100644 --- a/src/html/htmlwin.cpp +++ b/src/html/htmlwin.cpp @@ -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,8 @@ 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; wxDefaultHtmlRenderingStyle rstyle; @@ -1213,7 +1233,7 @@ void wxHtmlWindow::OnSize(wxSizeEvent& event) { m_selection->Set(m_selection->GetFromCell(), m_selection->GetToCell()); - m_selection->ClearPrivPos(); + m_selection->ClearFromToCharacterPos(); } Refresh(); @@ -1281,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 @@ -1414,7 +1435,7 @@ void wxHtmlWindow::OnInternalIdle() m_selection->Set(wxPoint(x,y), selcell, m_tmpSelFromPos, m_tmpSelFromCell); } - m_selection->ClearPrivPos(); + m_selection->ClearFromToCharacterPos(); Refresh(); } } @@ -1523,6 +1544,10 @@ void wxHtmlWindow::OnKeyUp(wxKeyEvent& event) GetEventHandler()->ProcessEvent(evt); } + else + { + event.Skip(); + } } void wxHtmlWindow::OnCopy(wxCommandEvent& WXUNUSED(event)) @@ -1575,7 +1600,7 @@ void wxHtmlWindow::SelectLine(const wxPoint& pos) { // We use following heuristic to find a "line": let the line be all // cells in same container as the cell under mouse cursor that are - // neither completely above nor completely bellow the clicked cell + // neither completely above nor completely below the clicked cell // (i.e. are likely to be words positioned on same line of text). int y1 = cell->GetAbsPos().y; @@ -1639,9 +1664,6 @@ void wxHtmlWindow::SelectAll() IMPLEMENT_ABSTRACT_CLASS(wxHtmlProcessor,wxObject) -#if wxUSE_EXTENDED_RTTI -IMPLEMENT_DYNAMIC_CLASS_XTI(wxHtmlWindow, wxScrolledWindow,"wx/html/htmlwin.h") - wxBEGIN_PROPERTIES_TABLE(wxHtmlWindow) /* TODO PROPERTIES @@ -1656,9 +1678,8 @@ wxBEGIN_HANDLERS_TABLE(wxHtmlWindow) wxEND_HANDLERS_TABLE() wxCONSTRUCTOR_5( wxHtmlWindow , wxWindow* , Parent , wxWindowID , Id , wxPoint , Position , wxSize , Size , long , WindowStyle ) -#else -IMPLEMENT_DYNAMIC_CLASS(wxHtmlWindow,wxScrolledWindow) -#endif + +wxIMPLEMENT_DYNAMIC_CLASS_XTI(wxHtmlWindow, wxScrolledWindow,"wx/html/htmlwin.h") BEGIN_EVENT_TABLE(wxHtmlWindow, wxScrolledWindow) EVT_SIZE(wxHtmlWindow::OnSize) @@ -1667,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)