]> git.saurik.com Git - wxWidgets.git/commitdiff
Rescale images automatically with informations about internal requirements (Jaakko...
authorWłodzimierz Skiba <abx@abx.art.pl>
Thu, 19 Oct 2006 12:06:00 +0000 (12:06 +0000)
committerWłodzimierz Skiba <abx@abx.art.pl>
Thu, 19 Oct 2006 12:06:00 +0000 (12:06 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@42111 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

samples/widgets/bmpcombobox.cpp

index b7873132e691106e454b6edebb29fd775321cf9b..ca8ffd6cd4963db9ad5cafb912163c63e641eac2 100644 (file)
 #include "wx/sizer.h"
 #include "wx/icon.h"
 #include "wx/dir.h"
+#include "wx/msgdlg.h"
 #include "wx/filename.h"
 #include "wx/image.h"
 #include "wx/imaglist.h"
 #include "wx/bmpcbox.h"
 
-
 #include "widgets.h"
 
 #include "icons/bmpcombobox.xpm"
 
 // Images loaded from file are reduced this width and height, if larger
-#define IMG_SIZE_TRUNC  150
+#define IMG_SIZE_TRUNC  256
 
 
 // ----------------------------------------------------------------------------
@@ -152,13 +152,16 @@ protected:
                                               wxWindowID id,
                                               wxTextCtrl **ppText);
 
+#if wxUSE_IMAGE
+    void RescaleImage(wxImage& image, int w, int h);
+#endif
+
     // the controls
     // ------------
 
     // the checkboxes for styles
     wxCheckBox *m_chkSort,
-               *m_chkReadonly,
-               *m_chkScaleimages;
+               *m_chkReadonly;
 
     // the combobox itself and the sizer it is in
     wxBitmapComboBox *m_combobox;
@@ -234,8 +237,7 @@ BitmapComboBoxWidgetsPage::BitmapComboBoxWidgetsPage(WidgetsBookCtrl *book,
 {
     // init everything
     m_chkSort =
-    m_chkReadonly =
-    m_chkScaleimages = (wxCheckBox *)NULL;
+    m_chkReadonly = (wxCheckBox *)NULL;
 
     m_combobox = (wxBitmapComboBox *)NULL;
     m_sizerCombo = (wxSizer *)NULL;
@@ -293,8 +295,6 @@ void BitmapComboBoxWidgetsPage::CreateContent()
 
     wxSizer *sizerOptions = new wxStaticBoxSizer(box, wxVERTICAL);
 
-    m_chkScaleimages = CreateCheckBoxAndAddToSizer(sizerOptions, _T("&Scale loaded images to fit"));
-
     sizerRow = CreateSizerWithSmallTextAndLabel(_T("Control &height:"),
                                                 BitmapComboBoxPage_ChangeHeight,
                                                 &m_textChangeHeight);
@@ -382,7 +382,6 @@ void BitmapComboBoxWidgetsPage::Reset()
 {
     m_chkSort->SetValue(false);
     m_chkReadonly->SetValue(true);
-    m_chkScaleimages->SetValue(true);
 }
 
 void BitmapComboBoxWidgetsPage::CreateCombo()
@@ -559,6 +558,33 @@ void BitmapComboBoxWidgetsPage::OnButtonAddSeveralWithImages(wxCommandEvent& WXU
     }
 }
 
+#if wxUSE_IMAGE
+void BitmapComboBoxWidgetsPage::RescaleImage(wxImage& image, int w, int h)
+{
+    if ( image.GetWidth() == w && image.GetHeight() == h )
+        return;
+
+    if ( w <= 0 || h <= 0 )
+        return;
+
+    static bool isFirstScale = true;
+
+    if ( isFirstScale && m_combobox->GetCount() > 0 )
+    {
+        wxMessageBox( wxT("wxBitmapComboBox normally only supports images of one size. ")
+                      wxT("However, for demonstration purposes, loaded bitmaps are scaled to fit ")
+                      wxT("using wxImage::Rescale."),
+                      wxT("Notice"),
+                      wxOK,
+                      this );
+
+        isFirstScale = false;
+    }
+
+    image.Rescale(w, h);
+}
+#endif
+
 void BitmapComboBoxWidgetsPage::LoadWidgetImages( wxArrayString* strings, wxImageList* images )
 {
     wxFileName fn;
@@ -616,8 +642,7 @@ void BitmapComboBoxWidgetsPage::LoadWidgetImages( wxArrayString* strings, wxImag
             wxASSERT(fn.FileExists());
             wxImage image(fn.GetFullPath());
             wxASSERT(image.Ok());
-            if ( m_chkScaleimages->GetValue() && foundSize.x > 0 )
-                image.Rescale(foundSize.x, foundSize.y);
+            RescaleImage(image, foundSize.x, foundSize.y);
             wxBitmap bmp(image);
             wxASSERT( bmp.Ok() );
 #else
@@ -744,8 +769,8 @@ wxBitmap BitmapComboBoxWidgetsPage::LoadBitmap(const wxString& filepath)
     // Have some reasonable maximum size
     if ( foundSize.x <= 0 )
     {
-        foundSize.x = 256;
-        foundSize.y = 256;
+        foundSize.x = IMG_SIZE_TRUNC;
+        foundSize.y = IMG_SIZE_TRUNC;
     }
 
     wxImage image(filepath);
@@ -765,7 +790,7 @@ wxBitmap BitmapComboBoxWidgetsPage::LoadBitmap(const wxString& filepath)
             if ( h > foundSize.y )
                 h = foundSize.y;
 
-            image.Rescale(w, h);
+            RescaleImage(image, w, h);
         }
 
         return wxBitmap(image);
@@ -804,6 +829,8 @@ wxBitmap BitmapComboBoxWidgetsPage::QueryBitmap(wxString* pStr)
         bitmap = LoadBitmap(filepath);
     }
 
+    wxLogDebug(wxT("%i, %i"),bitmap.GetWidth(), bitmap.GetHeight());
+
     ::wxSetCursor( *wxSTANDARD_CURSOR );
 
     return bitmap;