X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6dbc7fb4e5865133659c194d73f34e91bbe7e8d0..0728199b911be9095406cf05059a5a180e707778:/src/mac/carbon/statbrma.cpp diff --git a/src/mac/carbon/statbrma.cpp b/src/mac/carbon/statbrma.cpp index c06702058d..b302d82ab6 100644 --- a/src/mac/carbon/statbrma.cpp +++ b/src/mac/carbon/statbrma.cpp @@ -1,45 +1,50 @@ /////////////////////////////////////////////////////////////////////////////// -// Name: statbar.cpp +// Name: src/mac/carbon/statbarma.cpp // Purpose: native implementation of wxStatusBar (optional) -// Author: AUTHOR -// Modified by: -// Created: ??/??/98 +// Author: Stefan Csomor +// Modified by: +// Created: 1998-01-01 // RCS-ID: $Id$ -// Copyright: (c) 1998 AUTHOR +// Copyright: (c) 1998 Stefan Csomor // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ -#pragma implementation "statbrma.h" -#endif +#include "wx/wxprec.h" -// ---------------------------------------------------------------------------- -// headers -// ---------------------------------------------------------------------------- +#if wxUSE_STATUSBAR #include "wx/statusbr.h" -#include "wx/dc.h" -#include "wx/dcclient.h" -BEGIN_EVENT_TABLE(wxStatusBarMac, wxStatusBarGeneric) - EVT_PAINT(wxStatusBarMac::OnPaint) -END_EVENT_TABLE() +#ifndef WX_PRECOMP + #include "wx/dc.h" + #include "wx/dcclient.h" + #include "wx/toplevel.h" +#endif -#ifdef __WXMAC__ #include "wx/mac/private.h" -#endif -// ============================================================================ -// implementation -// ============================================================================ -// ---------------------------------------------------------------------------- -// wxStatusBarMac class -// ---------------------------------------------------------------------------- +BEGIN_EVENT_TABLE(wxStatusBarMac, wxStatusBarGeneric) + EVT_PAINT(wxStatusBarMac::OnPaint) +END_EVENT_TABLE() + + +wxStatusBarMac::wxStatusBarMac(wxWindow *parent, + wxWindowID id, + long style, + const wxString& name) + : + wxStatusBarGeneric() +{ + SetParent( NULL ); + Create( parent, id, style, name ); +} wxStatusBarMac::wxStatusBarMac() + : + wxStatusBarGeneric() { - SetParent(NULL); + SetParent( NULL ); } wxStatusBarMac::~wxStatusBarMac() @@ -47,38 +52,48 @@ wxStatusBarMac::~wxStatusBarMac() } bool wxStatusBarMac::Create(wxWindow *parent, wxWindowID id, - long style , - const wxString& name) + long style , + const wxString& name) { - return wxStatusBarGeneric::Create( parent , id , style , name ) ; + if ( !wxStatusBarGeneric::Create( parent, id, style, name ) ) + return false; + + if ( parent->MacGetTopLevelWindow()->MacGetMetalAppearance() ) + MacSetBackgroundBrush( wxNullBrush ); + + // normal system font is too tall for fitting into the standard height + SetWindowVariant( wxWINDOW_VARIANT_SMALL ); + + return true; } void wxStatusBarMac::DrawFieldText(wxDC& dc, int i) { - int leftMargin = 2; + int w, h; + GetSize( &w , &h ); + wxRect rect; + GetFieldRect( i, rect ); - wxRect rect; - GetFieldRect(i, rect); - - if ( !IsWindowHilited( MAC_WXHWND( MacGetRootWindow() ) ) ) - { - dc.SetTextForeground( wxColour( 0x80 , 0x80 , 0x80 ) ) ; - } + if ( !MacIsReallyHilited() ) + dc.SetTextForeground( wxColour( 0x80, 0x80, 0x80 ) ); - wxString text(GetStatusText(i)); + wxString text(GetStatusText( i )); - long x, y; + wxCoord x, y; + dc.GetTextExtent(text, &x, &y); - dc.GetTextExtent(text, &x, &y); + int leftMargin = 2; + int xpos = rect.x + leftMargin + 1; + int ypos = 1; - int xpos = rect.x + leftMargin + 1 ; - int ypos = 2 ; - - dc.SetClippingRegion(rect.x, 0, rect.width, m_height); + if ( MacGetTopLevelWindow()->MacGetMetalAppearance() ) + ypos++; - dc.DrawText(text, xpos, ypos); + dc.SetClippingRegion(rect.x, 0, rect.width, h); - dc.DestroyClippingRegion(); + dc.DrawText(text, xpos, ypos); + + dc.DestroyClippingRegion(); } void wxStatusBarMac::DrawField(wxDC& dc, int i) @@ -89,51 +104,78 @@ void wxStatusBarMac::DrawField(wxDC& dc, int i) void wxStatusBarMac::SetStatusText(const wxString& text, int number) { wxCHECK_RET( (number >= 0) && (number < m_nFields), - _T("invalid status bar field index") ); + wxT("invalid status bar field index") ); + + if ( m_statusStrings[number] == text ) + return ; m_statusStrings[number] = text; wxRect rect; GetFieldRect(number, rect); - rect.y=0; - rect.height = m_height ; - Refresh( TRUE , &rect ) ; + int w, h; + GetSize( &w, &h ); + rect.y = 0; + rect.height = h ; + Refresh( true, &rect ); + Update(); } -void wxStatusBarMac::OnPaint(wxPaintEvent& WXUNUSED(event) ) +void wxStatusBarMac::OnPaint(wxPaintEvent& WXUNUSED(event)) { - wxPaintDC dc(this); - dc.Clear() ; - - if ( IsWindowHilited( MAC_WXHWND( MacGetRootWindow() ) ) ) - { - wxPen black( wxBLACK , 1 , wxSOLID ) ; - wxPen white( wxWHITE , 1 , wxSOLID ) ; - - dc.SetPen(black); - dc.DrawLine(0, 0 , - m_width , 0); - dc.SetPen(white); - dc.DrawLine(0, 1 , - m_width , 1); - } - else - { - dc.SetPen(wxPen(wxColour(0x80,0x80,0x80),1,wxSOLID)); - dc.DrawLine(0, 0 , - m_width , 0); - } - - int i; - if ( GetFont().Ok() ) - dc.SetFont(GetFont()); - dc.SetBackgroundMode(wxTRANSPARENT); - - for ( i = 0; i < m_nFields; i ++ ) - DrawField(dc, i); + wxPaintDC dc(this); + dc.Clear(); + + int major, minor; + wxGetOsVersion( &major, &minor ); + int w, h; + GetSize( &w, &h ); + + if ( MacIsReallyHilited() ) + { + wxPen white( *wxWHITE , 1 , wxSOLID ); + if (major >= 10) + { + // Finder statusbar border color: (Project Builder similar is 9B9B9B) + if ( MacGetTopLevelWindow()->MacGetMetalAppearance() ) + dc.SetPen(wxPen(wxColour(0x40, 0x40, 0x40), 1, wxSOLID)); + else + dc.SetPen(wxPen(wxColour(0xB1, 0xB1, 0xB1), 1, wxSOLID)); + } + else + { + wxPen black( *wxBLACK , 1 , wxSOLID ); + dc.SetPen(black); + } + + dc.DrawLine(0, 0, w, 0); + dc.SetPen(white); + dc.DrawLine(0, 1, w, 1); + } + else + { + if (major >= 10) + // Finder statusbar border color: (Project Builder similar is 9B9B9B) + dc.SetPen(wxPen(wxColour(0xB1, 0xB1, 0xB1), 1, wxSOLID)); + else + dc.SetPen(wxPen(wxColour(0x80, 0x80, 0x80), 1, wxSOLID)); + + dc.DrawLine(0, 0, w, 0); + } + + int i; + if ( GetFont().Ok() ) + dc.SetFont(GetFont()); + dc.SetBackgroundMode(wxTRANSPARENT); + + for ( i = 0; i < m_nFields; i ++ ) + DrawField(dc, i); } -void wxStatusBarMac::MacSuperEnabled( bool enabled ) +void wxStatusBarMac::MacHiliteChanged() { - Refresh(FALSE) ; - wxWindow::MacSuperEnabled( enabled ) ; + Refresh(); + Update(); } + +#endif // wxUSE_STATUSBAR +