X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/daa85e93c4c532ea2da44480a50f89fb697e1848..d949570b6673dadd764686213afb89bddb6f19da:/src/generic/statusbr.cpp diff --git a/src/generic/statusbr.cpp b/src/generic/statusbr.cpp index 512db25f6d..d5330414b0 100644 --- a/src/generic/statusbr.cpp +++ b/src/generic/statusbr.cpp @@ -13,24 +13,22 @@ #include "wx/wxprec.h" #ifdef __BORLANDC__ -#pragma hdrstop + #pragma hdrstop #endif #if wxUSE_STATUSBAR +#include "wx/statusbr.h" + #ifndef WX_PRECOMP -#include "wx/frame.h" -#include "wx/settings.h" -#include "wx/dcclient.h" + #include "wx/settings.h" + #include "wx/dcclient.h" #endif #ifdef __WXGTK20__ -#include "wx/gtk/private.h" -#include "wx/gtk/win_gtk.h" + #include #endif -#include "wx/statusbr.h" - // we only have to do it here when we use wxStatusBarGeneric in addition to the // standard wxStatusBar class, if wxStatusBarGeneric is the same as // wxStatusBar, then the corresponding IMPLEMENT_DYNAMIC_CLASS is already in @@ -67,9 +65,10 @@ bool wxStatusBarGeneric::Create(wxWindow *parent, long style, const wxString& name) { + style |= wxTAB_TRAVERSAL | wxFULL_REPAINT_ON_RESIZE; if ( !wxWindow::Create(parent, id, wxDefaultPosition, wxDefaultSize, - style | wxTAB_TRAVERSAL, name) ) + style, name) ) return false; // The status bar should have a themed background @@ -81,13 +80,14 @@ bool wxStatusBarGeneric::Create(wxWindow *parent, SetFont(*wxSMALL_FONT); #endif - // Set the height according to the font and the border size - wxClientDC dc(this); - dc.SetFont(GetFont()); - - wxCoord y; - dc.GetTextExtent(_T("X"), NULL, &y ); + wxCoord y; + { + // Set the height according to the font and the border size + wxClientDC dc(this); + dc.SetFont(GetFont()); + dc.GetTextExtent(_T("X"), NULL, &y ); + } int height = (int)( (11*y)/10 + 2*GetBorderY()); SetSize(wxDefaultCoord, wxDefaultCoord, wxDefaultCoord, height); @@ -148,7 +148,12 @@ void wxStatusBarGeneric::SetStatusText(const wxString& text, int number) wxRect rect; GetFieldRect(number, rect); - Refresh( true, &rect ); + Refresh(true, &rect); + + // it's common to show some text in the status bar before starting a + // relatively lengthy operation, ensure that the text is shown to the + // user immediately and not after the lengthy operation end + Update(); } } @@ -194,16 +199,29 @@ void wxStatusBarGeneric::OnPaint(wxPaintEvent& WXUNUSED(event) ) { int width, height; GetClientSize(&width, &height); - - gtk_paint_resize_grip( m_widget->style, - GTK_PIZZA(m_wxwindow)->bin_window, + + if (GetLayoutDirection() == wxLayout_RightToLeft) + { + gtk_paint_resize_grip( m_widget->style, + GTKGetDrawingWindow(), + (GtkStateType) GTK_WIDGET_STATE (m_widget), + NULL, + m_widget, + "statusbar", + GDK_WINDOW_EDGE_SOUTH_WEST, + 2, 2, height-2, height-4 ); + } + else + { + gtk_paint_resize_grip( m_widget->style, + GTKGetDrawingWindow(), (GtkStateType) GTK_WIDGET_STATE (m_widget), NULL, m_widget, "statusbar", GDK_WINDOW_EDGE_SOUTH_EAST, - width-height-2, 1, height-2, height-3 ); - + width-height-2, 2, height-2, height-4 ); + } } #endif @@ -232,7 +250,7 @@ void wxStatusBarGeneric::DrawFieldText(wxDC& dc, int i) wxString text(GetStatusText(i)); - long x = 0, y = 0; + wxCoord x = 0, y = 0; dc.GetTextExtent(text, &x, &y); @@ -358,17 +376,13 @@ void wxStatusBarGeneric::InitColours() m_hilightPen = wxPen(hilightColour, 1, wxSOLID); #elif defined(__WXPM__) m_mediumShadowPen = wxPen(wxColour(127, 127, 127), 1, wxSOLID); - m_hilightPen = wxPen(_T("WHITE"), 1, wxSOLID); - - wxColour vColour; + m_hilightPen = *wxWHITE_PEN; - vColour.Set(wxString(_T("LIGHT GREY"))); - SetBackgroundColour(vColour); - vColour.Set(wxString(_T("BLACK"))); - SetForegroundColour(vColour); + SetBackgroundColour(*wxLIGHT_GREY); + SetForegroundColour(*wxBLACK); #else - m_mediumShadowPen = wxPen(_T("GREY"), 1, wxSOLID); - m_hilightPen = wxPen(_T("WHITE"), 1, wxSOLID); + m_mediumShadowPen = *wxGREY_PEN; + m_hilightPen = *wxWHITE_PEN; #endif } @@ -408,18 +422,30 @@ void wxStatusBarGeneric::OnLeftDown(wxMouseEvent& event) if (!GTK_IS_WINDOW (ancestor)) return; - GdkWindow *source = GTK_PIZZA(m_wxwindow)->bin_window; + GdkWindow *source = GTKGetDrawingWindow(); int org_x = 0; int org_y = 0; gdk_window_get_origin( source, &org_x, &org_y ); - gtk_window_begin_resize_drag (GTK_WINDOW (ancestor), + if (GetLayoutDirection() == wxLayout_RightToLeft) + { + gtk_window_begin_resize_drag (GTK_WINDOW (ancestor), + GDK_WINDOW_EDGE_SOUTH_WEST, + 1, + org_x - event.GetX() + GetSize().x , + org_y + event.GetY(), + 0); + } + else + { + gtk_window_begin_resize_drag (GTK_WINDOW (ancestor), GDK_WINDOW_EDGE_SOUTH_EAST, 1, org_x + event.GetX(), org_y + event.GetY(), 0); + } } else { @@ -443,7 +469,7 @@ void wxStatusBarGeneric::OnRightDown(wxMouseEvent& event) if (!GTK_IS_WINDOW (ancestor)) return; - GdkWindow *source = GTK_PIZZA(m_wxwindow)->bin_window; + GdkWindow *source = GTKGetDrawingWindow(); int org_x = 0; int org_y = 0;