#include "wx/osx/private.h"
+// Margin between the field text and the field rect
+#define wxFIELD_TEXT_MARGIN 2
+
BEGIN_EVENT_TABLE(wxStatusBarMac, wxStatusBarGeneric)
EVT_PAINT(wxStatusBarMac::OnPaint)
return true;
}
-void wxStatusBarMac::DrawFieldText(wxDC& dc, int i)
+void wxStatusBarMac::DrawFieldText(wxDC& dc, const wxRect& rect, int i, int WXUNUSED(textHeight))
{
int w, h;
GetSize( &w , &h );
- wxRect rect;
- GetFieldRect( i, rect );
if ( !MacIsReallyHilited() )
dc.SetTextForeground( wxColour( 0x80, 0x80, 0x80 ) );
wxString text(GetStatusText( i ));
- wxCoord x, y;
- dc.GetTextExtent(text, &x, &y);
+ /*wxCoord x, y;
+ dc.GetTextExtent(text, &x, &y); -- seems unused (FM)*/
- int leftMargin = 2;
- int xpos = rect.x + leftMargin + 1;
+ int xpos = rect.x + wxFIELD_TEXT_MARGIN + 1;
int ypos = 1;
if ( MacGetTopLevelWindow()->GetExtraStyle() & wxFRAME_EX_METAL )
ypos++;
dc.SetClippingRegion(rect.x, 0, rect.width, h);
-
dc.DrawText(text, xpos, ypos);
-
dc.DestroyClippingRegion();
}
-void wxStatusBarMac::DrawField(wxDC& dc, int i)
+void wxStatusBarMac::DrawField(wxDC& dc, int i, int textHeight)
{
- DrawFieldText(dc, i);
+ wxRect rect;
+ GetFieldRect(i, rect);
+
+ DrawFieldText(dc, rect, i, textHeight);
}
-void wxStatusBarMac::SetStatusText(const wxString& text, int number)
+void wxStatusBarMac::DoUpdateStatusText(int number)
{
- wxCHECK_RET( (number >= 0) && (number < m_nFields),
- wxT("invalid status bar field index") );
-
- if ( m_statusStrings[number] == text )
- return ;
-
- m_statusStrings[number] = text;
wxRect rect;
GetFieldRect(number, rect);
+
int w, h;
GetSize( &w, &h );
+
rect.y = 0;
rect.height = h ;
+
Refresh( true, &rect );
+ // we should have to force the update here
+ // TODO Remove if no regressions occur
+#if 0
Update();
+#endif
}
void wxStatusBarMac::OnPaint(wxPaintEvent& WXUNUSED(event))
dc.DrawLine(0, 0, w, 0);
}
- int i;
- if ( GetFont().Ok() )
+ if ( GetFont().IsOk() )
dc.SetFont(GetFont());
dc.SetBackgroundMode(wxTRANSPARENT);
- for ( i = 0; i < m_nFields; i ++ )
- DrawField(dc, i);
+ // compute char height only once for all panes:
+ int textHeight = dc.GetCharHeight();
+
+ for ( size_t i = 0; i < m_panes.GetCount(); i ++ )
+ DrawField(dc, i, textHeight);
}
void wxStatusBarMac::MacHiliteChanged()