]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/combocmn.cpp
remove redundant GdkBitmap representation from wxBitmap
[wxWidgets.git] / src / common / combocmn.cpp
index 356689bf702ef0120c66fdbfca0fa301aaf746bc..503005d9f65377ae0f7c84c658999358b1347e5e 100644 (file)
 
 #if wxUSE_COMBOCTRL
 
+#include "wx/combobox.h"
+
 #ifndef WX_PRECOMP
     #include "wx/log.h"
-    #include "wx/combobox.h"
     #include "wx/dcclient.h"
     #include "wx/settings.h"
     #include "wx/dialog.h"
@@ -716,6 +717,16 @@ bool wxComboCtrlBase::Create(wxWindow *parent,
     OnThemeChange();
     m_absIndent = GetNativeTextIndent();
 
+    m_iFlags |= wxCC_IFLAG_CREATED;
+
+    // If x and y indicate valid size, wxSizeEvent won't be
+    // emitted automatically, so we need to add artifical one.
+    if ( size.x > 0 && size.y > 0 )
+    {
+        wxSizeEvent evt(size,GetId());
+        GetEventHandler()->AddPendingEvent(evt);
+    }
+
     return true;
 }
 
@@ -795,7 +806,6 @@ void wxComboCtrlBase::CalculateAreas( int btnWidth )
 {
     wxSize sz = GetClientSize();
     int customBorder = m_widthCustomBorder;
-    bool buttonOutside;
     int btnBorder; // border for button only
 
     // check if button should really be outside the border: we'll do it it if
@@ -806,13 +816,11 @@ void wxComboCtrlBase::CalculateAreas( int btnWidth )
          m_btnSpacingX == 0 &&
          m_btnHei == 0 )
     {
-        buttonOutside = true;
         m_iFlags |= wxCC_IFLAG_BUTTON_OUTSIDE;
         btnBorder = 0;
     }
     else
     {
-        buttonOutside = false;
         m_iFlags &= ~(wxCC_IFLAG_BUTTON_OUTSIDE);
         btnBorder = customBorder;
     }
@@ -831,15 +839,31 @@ void wxComboCtrlBase::CalculateAreas( int btnWidth )
     if ( butWidth <= 0 )
         return;
 
+    int butHeight = sz.y - btnBorder*2;
+
     // Adjust button width
     if ( m_btnWid < 0 )
         butWidth += m_btnWid;
     else if ( m_btnWid > 0 )
         butWidth = m_btnWid;
+    else
+    {
+        // Adjust button width to match aspect ratio
+        // (but only if control is smaller than best size).
+        int bestHeight = GetBestSize().y;
+        int height = GetSize().y;
 
-    int butHeight = sz.y;
-
-    butHeight -= btnBorder*2;
+        if ( height < bestHeight )
+        {
+            // Make very small buttons square, as it makes
+            // them accommodate arrow image better and still
+            // looks decent.
+            if ( height > 18 )
+                butWidth = (height*butWidth)/bestHeight;
+            else
+                butWidth = butHeight;
+        }
+    }
 
     // Adjust button height
     if ( m_btnHei < 0 )
@@ -872,7 +896,7 @@ void wxComboCtrlBase::CalculateAreas( int btnWidth )
         if ( (sz.y-(customBorder*2)) < butHeight && btnWidth == 0 )
         {
             int newY = butHeight+(customBorder*2);
-            SetClientSize(-1,newY);
+            SetClientSize(wxDefaultCoord,newY);
             sz.y = newY;
         }
     }
@@ -990,14 +1014,6 @@ wxSize wxComboCtrlBase::DoGetBestSize() const
     return ret;
 }
 
-void wxComboCtrlBase::DoMoveWindow(int x, int y, int width, int height)
-{
-    // SetSize is called last in create, so it marks the end of creation
-    m_iFlags |= wxCC_IFLAG_CREATED;
-
-    wxControl::DoMoveWindow(x, y, width, height);
-}
-
 void wxComboCtrlBase::OnSizeEvent( wxSizeEvent& event )
 {
     if ( !IsCreated() )
@@ -1076,7 +1092,7 @@ void wxComboCtrlBase::DoSetToolTip(wxToolTip *tooltip)
 // ----------------------------------------------------------------------------
 
 // draw focus background on area in a way typical on platform
-void wxComboCtrlBase::DrawFocusBackground( wxDC& dc, const wxRect& rect, int flags )
+void wxComboCtrlBase::DrawFocusBackground( wxDC& dc, const wxRect& rect, int flags ) const
 {
     wxSize sz = GetClientSize();
     bool isEnabled;
@@ -1543,7 +1559,7 @@ void wxComboCtrlBase::DestroyPopup()
     m_popup = (wxWindow*) NULL;
 }
 
-void wxComboCtrlBase::SetPopupControl( wxComboPopup* iface )
+void wxComboCtrlBase::DoSetPopupControl(wxComboPopup* iface)
 {
     wxCHECK_RET( iface, wxT("no popup interface set for wxComboCtrl") );