X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/dafbe8c0af90db9f79931ef1bbec9ceab4c40503..5bac960d404f6fc82f6d7c4c697dd018657d24ab:/src/generic/tipwin.cpp diff --git a/src/generic/tipwin.cpp b/src/generic/tipwin.cpp index 30d3b8cda9..7ab7e77ee0 100644 --- a/src/generic/tipwin.cpp +++ b/src/generic/tipwin.cpp @@ -4,9 +4,8 @@ // Author: Vadim Zeitlin // Modified by: // Created: 10.09.00 -// RCS-ID: $Id$ // Copyright: (c) 2000 Vadim Zeitlin -// Licence: wxWindows license +// Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// // ============================================================================ @@ -17,27 +16,22 @@ // headers // ---------------------------------------------------------------------------- -#ifdef __GNUG__ - #pragma implementation "tipwin.h" -#endif - -// For compilers that support precompilatixon, includes "wx/wx.h". +// For compilers that support precompilation, includes "wx/wx.h". #include "wx/wxprec.h" #ifdef __BORLANDC__ #pragma hdrstop #endif -#ifndef WX_PRECOMP - #include "wx/dcclient.h" -#endif // WX_PRECOMP +#if wxUSE_TIPWINDOW #include "wx/tipwin.h" -#if wxUSE_TIPWINDOW - -#include "wx/timer.h" -#include "wx/settings.h" +#ifndef WX_PRECOMP + #include "wx/dcclient.h" + #include "wx/timer.h" + #include "wx/settings.h" +#endif // WX_PRECOMP // ---------------------------------------------------------------------------- // constants @@ -76,6 +70,7 @@ private: #endif // !wxUSE_POPUPWIN DECLARE_EVENT_TABLE() + wxDECLARE_NO_COPY_CLASS(wxTipWindowView); }; // ============================================================================ @@ -123,7 +118,7 @@ wxTipWindow::wxTipWindow(wxWindow *parent, #if wxUSE_POPUPWIN : wxPopupTransientWindow(parent) #else - : wxFrame(parent, -1, _T(""), + : wxFrame(parent, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxNO_BORDER | wxFRAME_NO_TASKBAR ) #endif @@ -135,15 +130,8 @@ wxTipWindow::wxTipWindow(wxWindow *parent, } // set colours - // - // VZ: why don't we use wxSystemSettings for !MSW? (FIXME) -#ifdef __WXMSW__ SetForegroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_INFOTEXT)); SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_INFOBK)); -#else - SetForegroundColour(*wxBLACK); - SetBackgroundColour(*wxWHITE); -#endif // set size, position and show it m_view = new wxTipWindowView(this); @@ -161,11 +149,14 @@ wxTipWindow::wxTipWindow(wxWindow *parent, y += wxSystemSettings::GetMetric(wxSYS_CURSOR_Y) / 2; #if wxUSE_POPUPWIN - Position(wxPoint(x, y), wxSize(0, 0)); + Position(wxPoint(x, y), wxSize(0,0)); Popup(m_view); + #ifdef __WXGTK__ + m_view->CaptureMouse(); + #endif #else Move(x, y); - Show(TRUE); + Show(true); #endif } @@ -175,6 +166,12 @@ wxTipWindow::~wxTipWindow() { *m_windowPtr = NULL; } + #if wxUSE_POPUPWIN + #ifdef __WXGTK__ + if ( m_view->HasCapture() ) + m_view->ReleaseMouse(); + #endif + #endif } void wxTipWindow::OnMouseClick(wxMouseEvent& WXUNUSED(event)) @@ -223,8 +220,16 @@ void wxTipWindow::Close() } #if wxUSE_POPUPWIN - Show(FALSE); - Destroy(); + Show(false); + #ifdef __WXGTK__ + if ( m_view->HasCapture() ) + m_view->ReleaseMouse(); + #endif + // Under OS X we get destroyed because of wxEVT_KILL_FOCUS generated by + // Show(false). + #ifndef __WXOSX__ + Destroy(); + #endif #else wxFrame::Close(); #endif @@ -235,20 +240,13 @@ void wxTipWindow::Close() // ---------------------------------------------------------------------------- wxTipWindowView::wxTipWindowView(wxWindow *parent) - : wxWindow(parent, -1, + : wxWindow(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxNO_BORDER) { // set colours - // - // VZ: why don't we use wxSystemSettings for !MSW? (FIXME) -#ifdef __WXMSW__ SetForegroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_INFOTEXT)); SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_INFOBK)); -#else - SetForegroundColour(*wxBLACK); - SetBackgroundColour(*wxWHITE); -#endif #if !wxUSE_POPUPWIN m_creationTime = wxGetLocalTime(); @@ -269,10 +267,10 @@ void wxTipWindowView::Adjust(const wxString& text, wxCoord maxLength) widthMax = 0; m_parent->m_heightLine = 0; - bool breakLine = FALSE; + bool breakLine = false; for ( const wxChar *p = text.c_str(); ; p++ ) { - if ( *p == _T('\n') || *p == _T('\0') ) + if ( *p == wxT('\n') || *p == wxT('\0') ) { dc.GetTextExtent(current, &width, &height); if ( width > widthMax ) @@ -290,21 +288,21 @@ void wxTipWindowView::Adjust(const wxString& text, wxCoord maxLength) } current.clear(); - breakLine = FALSE; + breakLine = false; } - else if ( breakLine && (*p == _T(' ') || *p == _T('\t')) ) + else if ( breakLine && (*p == wxT(' ') || *p == wxT('\t')) ) { // word boundary - break the line here m_parent->m_textLines.Add(current); current.clear(); - breakLine = FALSE; + breakLine = false; } else // line goes on { current += *p; dc.GetTextExtent(current, &width, &height); if ( width > maxLength ) - breakLine = TRUE; + breakLine = true; if ( width > widthMax ) widthMax = width; @@ -316,7 +314,7 @@ void wxTipWindowView::Adjust(const wxString& text, wxCoord maxLength) // take into account the border size and the margins width = 2*(TEXT_MARGIN_X + 1) + widthMax; - height = 2*(TEXT_MARGIN_Y + 1) + m_parent->m_textLines.GetCount()*m_parent->m_heightLine; + height = 2*(TEXT_MARGIN_Y + 1) + wx_truncate_cast(wxCoord, m_parent->m_textLines.GetCount())*m_parent->m_heightLine; m_parent->SetClientSize(width, height); SetSize(0, 0, width, height); } @@ -331,8 +329,8 @@ void wxTipWindowView::OnPaint(wxPaintEvent& WXUNUSED(event)) rect.height = size.y; // first filll the background - dc.SetBrush(wxBrush(GetBackgroundColour(), wxSOLID)); - dc.SetPen( wxPen(GetForegroundColour(), 1, wxSOLID) ); + dc.SetBrush(wxBrush(GetBackgroundColour(), wxBRUSHSTYLE_SOLID)); + dc.SetPen(wxPen(GetForegroundColour(), 1, wxPENSTYLE_SOLID)); dc.DrawRectangle(rect); // and then draw the text line by line @@ -362,7 +360,7 @@ void wxTipWindowView::OnMouseMove(wxMouseEvent& event) const wxRect& rectBound = m_parent->m_rectBound; if ( rectBound.width && - !rectBound.Inside(ClientToScreen(event.GetPosition())) ) + !rectBound.Contains(ClientToScreen(event.GetPosition())) ) { // mouse left the bounding rect, disappear m_parent->Close();