X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c04c7a3d0ae9f09bd7219b97799d9b185f1c2bab..eea4d01c65f9b29baa1193db762b4c6b8144af24:/src/univ/winuniv.cpp diff --git a/src/univ/winuniv.cpp b/src/univ/winuniv.cpp index 75f8f3bc74..1e6ab4bb99 100644 --- a/src/univ/winuniv.cpp +++ b/src/univ/winuniv.cpp @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Name: src/univ/window.cpp +// Name: src/univ/winuniv.cpp // Purpose: implementation of extra wxWindow methods for wxUniv port // Author: Vadim Zeitlin // Modified by: @@ -35,21 +35,21 @@ #include "wx/menu.h" #include "wx/frame.h" #include "wx/log.h" + #include "wx/button.h" #endif // WX_PRECOMP #include "wx/univ/colschem.h" #include "wx/univ/renderer.h" #include "wx/univ/theme.h" + #if wxUSE_CARET #include "wx/caret.h" #endif // wxUSE_CARET -// turn Refresh() debugging on/off -#define WXDEBUG_REFRESH - -#ifndef __WXDEBUG__ - #undef WXDEBUG_REFRESH +#if wxDEBUG_LEVEL >= 2 + // turn Refresh() debugging on/off + #define WXDEBUG_REFRESH #endif #if defined(WXDEBUG_REFRESH) && defined(__WXMSW__) && !defined(__WXMICROWIN__) @@ -92,6 +92,8 @@ public: IMPLEMENT_DYNAMIC_CLASS(wxWindow, wxWindowMSW) #elif defined(__WXGTK__) IMPLEMENT_DYNAMIC_CLASS(wxWindow, wxWindowGTK) +#elif defined(__WXOSX_OR_COCOA__) + IMPLEMENT_DYNAMIC_CLASS(wxWindow, wxWindowMac) #elif defined(__WXMGL__) IMPLEMENT_DYNAMIC_CLASS(wxWindow, wxWindowMGL) #elif defined(__WXDFB__) @@ -127,7 +129,7 @@ void wxWindow::Init() { #if wxUSE_SCROLLBAR m_scrollbarVert = - m_scrollbarHorz = (wxScrollBar *)NULL; + m_scrollbarHorz = NULL; #endif // wxUSE_SCROLLBAR m_isCurrent = false; @@ -145,6 +147,11 @@ bool wxWindow::Create(wxWindow *parent, long style, const wxString& name) { + // Get default border + wxBorder border = GetBorder(style); + style &= ~wxBORDER_MASK; + style |= border; + long actualStyle = style; // we add wxCLIP_CHILDREN to get the same ("natural") behaviour under MSW @@ -217,7 +224,7 @@ bool wxWindow::Create(wxWindow *parent, wxWindow::~wxWindow() { - m_isBeingDeleted = true; + SendDestroyEvent(); #if wxUSE_SCROLLBAR // clear pointers to scrollbar before deleting the children: they are @@ -251,7 +258,7 @@ void wxWindow::SetBackground(const wxBitmap& bitmap, const wxBitmap& wxWindow::GetBackgroundBitmap(int *alignment, wxStretch *stretch) const { - if ( m_bitmapBg.Ok() ) + if ( m_bitmapBg.IsOk() ) { if ( alignment ) *alignment = m_alignBgBitmap; @@ -359,8 +366,13 @@ bool wxWindow::DoDrawBackground(wxDC& dc) rect.height = size.y; wxWindow * const parent = GetParent(); - if ( HasTransparentBackground() && parent ) + if ( HasTransparentBackground() && !UseBgCol() && parent ) { + // DirectFB paints the parent first, then its child windows, so by + // the time this code is called, parent's background was already + // drawn and there's no point in (imperfectly!) duplicating the work + // here: +#ifndef __WXDFB__ wxASSERT( !IsTopLevel() ); wxPoint pos = GetPosition(); @@ -383,6 +395,7 @@ bool wxWindow::DoDrawBackground(wxDC& dc) // Restore DC logical origin dc.SetLogicalOrigin( org_x, org_y ); +#endif // !__WXDFB__ } else { @@ -395,7 +408,7 @@ bool wxWindow::DoDrawBackground(wxDC& dc) void wxWindow::EraseBackground(wxDC& dc, const wxRect& rect) { - if ( GetBackgroundBitmap().Ok() ) + if ( GetBackgroundBitmap().IsOk() ) { // Get the bitmap and the flags int alignment; @@ -659,7 +672,7 @@ void wxWindow::OnSize(wxSizeEvent& event) } } else - if (HasFlag( wxSUNKEN_BORDER ) || HasFlag( wxRAISED_BORDER )) + if (HasFlag( wxSUNKEN_BORDER ) || HasFlag( wxRAISED_BORDER ) || HasFlag( wxBORDER_THEME )) { if (newSize.y > m_oldSize.y) { @@ -715,6 +728,11 @@ wxSize wxWindow::DoGetBestClientSize() const return wxWindowNative::DoGetBestSize(); } +wxSize wxWindow::DoGetBorderSize() const +{ + return AdjustSize(wxSize(0, 0)); +} + wxSize wxWindow::AdjustSize(const wxSize& size) const { wxSize sz = size; @@ -914,7 +932,7 @@ void wxWindow::SetScrollbar(int orient, { #if wxUSE_SCROLLBAR wxASSERT_MSG( pageSize <= range, - _T("page size can't be greater than range") ); + wxT("page size can't be greater than range") ); bool hasClientSizeChanged = false; wxScrollBar *scrollbar = GetScrollbar(orient); @@ -1132,7 +1150,7 @@ void wxWindow::ScrollWindow(int dx, int dy, const wxRect *rect) wxRect wxWindow::ScrollNoRefresh(int dx, int dy, const wxRect *rectTotal) { - wxASSERT_MSG( !dx || !dy, _T("can't be used for diag scrolling") ); + wxASSERT_MSG( !dx || !dy, wxT("can't be used for diag scrolling") ); // the rect to refresh (which we will calculate) wxRect rect; @@ -1147,7 +1165,7 @@ wxRect wxWindow::ScrollNoRefresh(int dx, int dy, const wxRect *rectTotal) // location wxSize sizeTotal = rectTotal ? rectTotal->GetSize() : GetClientSize(); - wxLogTrace(_T("scroll"), _T("rect is %dx%d, scroll by %d, %d"), + wxLogTrace(wxT("scroll"), wxT("rect is %dx%d, scroll by %d, %d"), sizeTotal.x, sizeTotal.y, dx, dy); // the initial and end point of the region we move in client coords @@ -1165,7 +1183,7 @@ wxRect wxWindow::ScrollNoRefresh(int dx, int dy, const wxRect *rectTotal) if ( size.x <= 0 || size.y <= 0 ) { // just redraw everything as nothing of the displayed image will stay - wxLogTrace(_T("scroll"), _T("refreshing everything")); + wxLogTrace(wxT("scroll"), wxT("refreshing everything")); rect = rectTotal ? *rectTotal : wxRect(0, 0, sizeTotal.x, sizeTotal.y); } @@ -1217,8 +1235,8 @@ wxRect wxWindow::ScrollNoRefresh(int dx, int dy, const wxRect *rectTotal) ); dc.Blit(ptDest, size, &dcMem, wxPoint(0,0)); - wxLogTrace(_T("scroll"), - _T("Blit: (%d, %d) of size %dx%d -> (%d, %d)"), + wxLogTrace(wxT("scroll"), + wxT("Blit: (%d, %d) of size %dx%d -> (%d, %d)"), ptSource.x, ptSource.y, size.x, size.y, ptDest.x, ptDest.y); @@ -1249,7 +1267,7 @@ wxRect wxWindow::ScrollNoRefresh(int dx, int dy, const wxRect *rectTotal) rect.height = sizeTotal.y; - wxLogTrace(_T("scroll"), _T("refreshing (%d, %d)-(%d, %d)"), + wxLogTrace(wxT("scroll"), wxT("refreshing (%d, %d)-(%d, %d)"), rect.x, rect.y, rect.GetRight() + 1, rect.GetBottom() + 1); } @@ -1270,7 +1288,7 @@ wxRect wxWindow::ScrollNoRefresh(int dx, int dy, const wxRect *rectTotal) rect.width = sizeTotal.x; - wxLogTrace(_T("scroll"), _T("refreshing (%d, %d)-(%d, %d)"), + wxLogTrace(wxT("scroll"), wxT("refreshing (%d, %d)-(%d, %d)"), rect.x, rect.y, rect.GetRight() + 1, rect.GetBottom() + 1); } @@ -1412,6 +1430,25 @@ void wxWindow::OnChar(wxKeyEvent& event) } } + // if Return was pressed, see if there's a default button to activate + if ( !event.HasModifiers() && event.GetKeyCode() == WXK_RETURN ) + { + wxTopLevelWindow * + tlw = wxDynamicCast(wxGetTopLevelParent(this), wxTopLevelWindow); + if ( tlw ) + { + wxButton *btn = wxDynamicCast(tlw->GetDefaultItem(), wxButton); + if ( btn ) + { + wxCommandEvent evt(wxEVT_COMMAND_BUTTON_CLICKED, btn->GetId()); + evt.SetEventObject(btn); + btn->Command(evt); + return; + } + } + } + + event.Skip(); }