monodll_settings.o \
        monodll_slider.o \
        monodll_spinbutt.o \
+       monodll_spinctrl.o \
        monodll_statbmp.o \
        monodll_statbox.o \
        monodll_statbrma.o \
        monolib_settings.o \
        monolib_slider.o \
        monolib_spinbutt.o \
+       monolib_spinctrl.o \
        monolib_statbmp.o \
        monolib_statbox.o \
        monolib_statbrma.o \
        coredll_settings.o \
        coredll_slider.o \
        coredll_spinbutt.o \
+       coredll_spinctrl.o \
        coredll_statbmp.o \
        coredll_statbox.o \
        coredll_statbrma.o \
        corelib_settings.o \
        corelib_slider.o \
        corelib_spinbutt.o \
+       corelib_spinctrl.o \
        corelib_statbmp.o \
        corelib_statbox.o \
        corelib_statbrma.o \
 @COND_TOOLKIT_WINCE_USE_GUI_1_WXUNIV_0@monodll_spinctrl.o: $(srcdir)/src/msw/spinctrl.cpp $(MONODLL_ODEP)
 @COND_TOOLKIT_WINCE_USE_GUI_1_WXUNIV_0@        $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $<
 
+@COND_TOOLKIT_MAC_USE_GUI_1_WXUNIV_0@monodll_spinctrl.o: $(srcdir)/src/mac/carbon/spinctrl.cpp $(MONODLL_ODEP)
+@COND_TOOLKIT_MAC_USE_GUI_1_WXUNIV_0@  $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $<
+
 @COND_TOOLKIT_PM_USE_GUI_1_WXUNIV_0@monodll_spinctrl.o: $(srcdir)/src/os2/spinctrl.cpp $(MONODLL_ODEP)
 @COND_TOOLKIT_PM_USE_GUI_1_WXUNIV_0@   $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $<
 
 @COND_TOOLKIT_WINCE_USE_GUI_1_WXUNIV_0@monolib_spinctrl.o: $(srcdir)/src/msw/spinctrl.cpp $(MONOLIB_ODEP)
 @COND_TOOLKIT_WINCE_USE_GUI_1_WXUNIV_0@        $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $<
 
+@COND_TOOLKIT_MAC_USE_GUI_1_WXUNIV_0@monolib_spinctrl.o: $(srcdir)/src/mac/carbon/spinctrl.cpp $(MONOLIB_ODEP)
+@COND_TOOLKIT_MAC_USE_GUI_1_WXUNIV_0@  $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $<
+
 @COND_TOOLKIT_PM_USE_GUI_1_WXUNIV_0@monolib_spinctrl.o: $(srcdir)/src/os2/spinctrl.cpp $(MONOLIB_ODEP)
 @COND_TOOLKIT_PM_USE_GUI_1_WXUNIV_0@   $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $<
 
 @COND_TOOLKIT_WINCE_USE_GUI_1_WXUNIV_0@coredll_spinctrl.o: $(srcdir)/src/msw/spinctrl.cpp $(COREDLL_ODEP)
 @COND_TOOLKIT_WINCE_USE_GUI_1_WXUNIV_0@        $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $<
 
+@COND_TOOLKIT_MAC_USE_GUI_1_WXUNIV_0@coredll_spinctrl.o: $(srcdir)/src/mac/carbon/spinctrl.cpp $(COREDLL_ODEP)
+@COND_TOOLKIT_MAC_USE_GUI_1_WXUNIV_0@  $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $<
+
 @COND_TOOLKIT_PM_USE_GUI_1_WXUNIV_0@coredll_spinctrl.o: $(srcdir)/src/os2/spinctrl.cpp $(COREDLL_ODEP)
 @COND_TOOLKIT_PM_USE_GUI_1_WXUNIV_0@   $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $<
 
 @COND_TOOLKIT_WINCE_USE_GUI_1_WXUNIV_0@corelib_spinctrl.o: $(srcdir)/src/msw/spinctrl.cpp $(CORELIB_ODEP)
 @COND_TOOLKIT_WINCE_USE_GUI_1_WXUNIV_0@        $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $<
 
+@COND_TOOLKIT_MAC_USE_GUI_1_WXUNIV_0@corelib_spinctrl.o: $(srcdir)/src/mac/carbon/spinctrl.cpp $(CORELIB_ODEP)
+@COND_TOOLKIT_MAC_USE_GUI_1_WXUNIV_0@  $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $<
+
 @COND_TOOLKIT_PM_USE_GUI_1_WXUNIV_0@corelib_spinctrl.o: $(srcdir)/src/os2/spinctrl.cpp $(CORELIB_ODEP)
 @COND_TOOLKIT_PM_USE_GUI_1_WXUNIV_0@   $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $<
 
 
     src/mac/carbon/settings.cpp
     src/mac/carbon/slider.cpp
     src/mac/carbon/spinbutt.cpp
+    src/mac/carbon/spinctrl.cpp
     src/mac/carbon/statbmp.cpp
     src/mac/carbon/statbox.cpp
     src/mac/carbon/statbrma.cpp
 
 #elif defined(__WXMOTIF__)
     #include "wx/generic/spinctlg.h"
 #elif defined(__WXMAC__)
-    #include "wx/generic/spinctlg.h"
+    #include "wx/mac/spinctrl.h"
 #elif defined(__WXCOCOA__)
     #include "wx/generic/spinctlg.h"
 #endif // platform
 
     #pragma hdrstop
 #endif
 
-#if !(defined(__WXMSW__) || defined(__WXGTK__) || defined(__WXPM__)) || \
-    defined(__WXMAC__) || defined(__WXUNIVERSAL__)
+// There are port-specific versions for MSW, GTK, OS/2 and Mac, so exclude the
+// contents of this file in those cases
+#if !(defined(__WXMSW__) || defined(__WXGTK__) || defined(__WXPM__) || \
+    defined(__WXMAC__)) || defined(__WXUNIVERSAL__)
 
 #ifndef WX_PRECOMP
     #include "wx/textctrl.h"
 // ----------------------------------------------------------------------------
 
 // the margin between the text control and the spin
-#ifdef __WXMAC__
-static const wxCoord MARGIN = 4;
-#else
 static const wxCoord MARGIN = 2;
-#endif
 
 // ----------------------------------------------------------------------------
 // wxSpinCtrlText: text control used by spin control
         
     m_btn->SetRange(min, max);
     m_btn->SetValue(initial);
-#ifdef __WXMAC__
-    wxSize csize = size ;
-    if ( size.y == -1 ) {
-      csize.y = m_text->GetSize().y;
-    }
-    SetBestSize(csize);
-#else
     SetBestSize(size);
-#endif
     
     // have to disable this window to avoid interfering it with message
     // processing to the text and the button... but pretend it is enabled to
     // we don't even need to show this window itself - and not doing it avoids
     // that it overwrites the text control
     wxControl::Show(FALSE);
-#ifndef __WXMAC__
     m_isShown = TRUE;
-#endif
     return TRUE;
 }
 
 
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
-#ifdef __GNUG__
-#pragma implementation "spinctlg.h"
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
+#pragma implementation "spinctrl.h"
 #endif
 
 #include "wx/defs.h"
 
-#ifndef WX_PRECOMP
-    #include "wx/textctrl.h"
-#endif //WX_PRECOMP
-
 #if wxUSE_SPINCTRL
 
 #include "wx/spinbutt.h"
 #include "wx/spinctrl.h"
+#include "wx/textctrl.h"
 
 
-#include "wx/spinctrl.h"
-
 // ----------------------------------------------------------------------------
 // constants
 // ----------------------------------------------------------------------------
         : wxTextCtrl(spin , -1, value)
     {
         m_spin = spin;
+        
+        // remove the default minsize, the spinctrl will have one instead
+        SetSizeHints(-1,-1);
     }
 
 protected:
         : wxSpinButton(spin )
     {
         m_spin = spin;
-
         SetWindowStyle(style | wxSP_VERTICAL);
+
+        // TODO: The spin button gets truncated a little bit due to size
+        // differences so change it's default size a bit.  SMALL still gets a
+        // bit truncated, but MINI seems to be too small...  Readdress this
+        // when the textctrl issues are all sorted out.
+        SetWindowVariant(wxWINDOW_VARIANT_SMALL);
+
+        // remove the default minsize, the spinctrl will have one instead
+        SetSizeHints(-1,-1);
     }
 
 protected:
     void OnSpinButton(wxSpinEvent& eventSpin)
     {
-#if defined(__WXMAC__) || defined(__WXMOTIF__)
       m_spin->SetTextValue(eventSpin.GetPosition());
 
       wxCommandEvent event(wxEVT_COMMAND_SPINCTRL_UPDATED, m_spin->GetId());
       event.SetInt(eventSpin.GetPosition());
 
       m_spin->GetEventHandler()->ProcessEvent(event);
-#else
-        m_spin->SetTextValue(eventSpin.GetPosition());
-        eventSpin.Skip();
-#endif
     }
 
 private:
     if ( size.y == -1 ) {
       csize.y = m_text->GetSize().y ;
     }
-    DoSetSize(pos.x , pos.y , csize.x, csize.y);
+    SetBestSize(csize);
 
     return TRUE;
 }
 
     wxCoord wText = width - sizeBtn.x;
     m_text->SetSize(0, 0, wText, height);
-    m_btn->SetSize(0 + wText + MARGIN, 0, -1, -1);
+    m_btn->SetSize(0 + wText + MARGIN, 0, -1, height);
 }
 
 // ----------------------------------------------------------------------------