Rescale images automatically with informations about internal requirements (Jaakko Salli).
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@42111 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
e44d5a5892
commit
dc5a84857d
@ -46,18 +46,18 @@
|
||||
#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;
|
||||
|
Loading…
Reference in New Issue
Block a user