Commit bf1f65f8 authored by twanvl's avatar twanvl

bufgix: with newer version of wxWidgets (2.8), image slice dialog was crashing...

bufgix: with newer version of wxWidgets (2.8), image slice dialog was crashing because events were being sent before the initialization was complete.
parent dbaee9f9
...@@ -78,6 +78,7 @@ DEFINE_EVENT_TYPE(EVENT_SLICE_CHANGED); ...@@ -78,6 +78,7 @@ DEFINE_EVENT_TYPE(EVENT_SLICE_CHANGED);
ImageSliceWindow::ImageSliceWindow(Window* parent, const Image& source, const wxSize& target_size, const AlphaMask& mask) ImageSliceWindow::ImageSliceWindow(Window* parent, const Image& source, const wxSize& target_size, const AlphaMask& mask)
: wxDialog(parent,wxID_ANY,_TITLE_("slice image"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER | wxFULL_REPAINT_ON_RESIZE) : wxDialog(parent,wxID_ANY,_TITLE_("slice image"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER | wxFULL_REPAINT_ON_RESIZE)
, slice(source, target_size) , slice(source, target_size)
, initialized(false)
{ {
// init controls // init controls
const wxPoint defPos = wxDefaultPosition; const wxPoint defPos = wxDefaultPosition;
...@@ -170,6 +171,8 @@ ImageSliceWindow::ImageSliceWindow(Window* parent, const Image& source, const wx ...@@ -170,6 +171,8 @@ ImageSliceWindow::ImageSliceWindow(Window* parent, const Image& source, const wx
s->Add(CreateButtonSizer(wxOK | wxCANCEL), 0, wxEXPAND | wxALL, 8); s->Add(CreateButtonSizer(wxOK | wxCANCEL), 0, wxEXPAND | wxALL, 8);
s->SetSizeHints(this); s->SetSizeHints(this);
SetSizer(s); SetSizer(s);
// Only now do we allow events to be processed.
initialized = true;
updateControls(); updateControls();
} }
...@@ -184,6 +187,7 @@ Image ImageSliceWindow::getImage() const { ...@@ -184,6 +187,7 @@ Image ImageSliceWindow::getImage() const {
// ----------------------------------------------------------------------------- : ImageSliceWindow : Controls // ----------------------------------------------------------------------------- : ImageSliceWindow : Controls
void ImageSliceWindow::onChangeSize(wxCommandEvent&) { void ImageSliceWindow::onChangeSize(wxCommandEvent&) {
if (!initialized) return;
int sel = size->GetSelection(); int sel = size->GetSelection();
if (sel == 0) { if (sel == 0) {
// original size // original size
...@@ -209,46 +213,56 @@ void ImageSliceWindow::onChangeSize(wxCommandEvent&) { ...@@ -209,46 +213,56 @@ void ImageSliceWindow::onChangeSize(wxCommandEvent&) {
} }
void ImageSliceWindow::onChangeLeft(wxCommandEvent&) { void ImageSliceWindow::onChangeLeft(wxCommandEvent&) {
if (!initialized) return;
slice.selection.x = left->GetValue(); slice.selection.x = left->GetValue();
onUpdateFromControl(); onUpdateFromControl();
} }
void ImageSliceWindow::onChangeTop(wxCommandEvent&) { void ImageSliceWindow::onChangeTop(wxCommandEvent&) {
if (!initialized) return;
slice.selection.y = top->GetValue(); slice.selection.y = top->GetValue();
onUpdateFromControl(); onUpdateFromControl();
} }
void ImageSliceWindow::onChangeWidth(wxCommandEvent&) { void ImageSliceWindow::onChangeWidth(wxCommandEvent&) {
if (!initialized) return;
slice.selection.width = width->GetValue(); slice.selection.width = width->GetValue();
onUpdateFromControl(PREFER_WIDTH); onUpdateFromControl(PREFER_WIDTH);
} }
void ImageSliceWindow::onChangeHeight(wxCommandEvent&) { void ImageSliceWindow::onChangeHeight(wxCommandEvent&) {
if (!initialized) return;
slice.selection.height = height->GetValue(); slice.selection.height = height->GetValue();
onUpdateFromControl(PREFER_HEIGHT); onUpdateFromControl(PREFER_HEIGHT);
} }
void ImageSliceWindow::onChangeFixAspect(wxCommandEvent&) { void ImageSliceWindow::onChangeFixAspect(wxCommandEvent&) {
if (!initialized) return;
slice.aspect_fixed = fix_aspect->GetValue(); slice.aspect_fixed = fix_aspect->GetValue();
onUpdateFromControl(); onUpdateFromControl();
} }
void ImageSliceWindow::onChangeZoom(wxSpinEvent&) { void ImageSliceWindow::onChangeZoom(wxSpinEvent&) {
if (!initialized) return;
slice.zoomX(zoom->GetValue() / 100.0); slice.zoomX(zoom->GetValue() / 100.0);
slice.zoomY(zoom->GetValue() / 100.0); slice.zoomY(zoom->GetValue() / 100.0);
onUpdateFromControl(); onUpdateFromControl();
} }
void ImageSliceWindow::onChangeZoomX(wxSpinEvent&) { void ImageSliceWindow::onChangeZoomX(wxSpinEvent&) {
if (!initialized) return;
slice.zoomX(zoom_x->GetValue() / 100.0); slice.zoomX(zoom_x->GetValue() / 100.0);
onUpdateFromControl(); onUpdateFromControl();
} }
void ImageSliceWindow::onChangeZoomY(wxSpinEvent&) { void ImageSliceWindow::onChangeZoomY(wxSpinEvent&) {
if (!initialized) return;
slice.zoomY(zoom_y->GetValue() / 100.0); slice.zoomY(zoom_y->GetValue() / 100.0);
onUpdateFromControl(); onUpdateFromControl();
} }
void ImageSliceWindow::onChangeSharpen(wxCommandEvent&) { void ImageSliceWindow::onChangeSharpen(wxCommandEvent&) {
if (!initialized) return;
slice.sharpen = sharpen->GetValue(); slice.sharpen = sharpen->GetValue();
onUpdateFromControl(); onUpdateFromControl();
} }
void ImageSliceWindow::onChangeSharpenAmount(wxScrollEvent&) { void ImageSliceWindow::onChangeSharpenAmount(wxScrollEvent&) {
if (!initialized) return;
slice.sharpen_amount = sharpen_amount->GetValue(); slice.sharpen_amount = sharpen_amount->GetValue();
onUpdateFromControl(); onUpdateFromControl();
} }
......
...@@ -78,6 +78,7 @@ class ImageSliceWindow : public wxDialog { ...@@ -78,6 +78,7 @@ class ImageSliceWindow : public wxDialog {
wxSizer* zoom_sizer, *zoom_fixed, *zoom_free; wxSizer* zoom_sizer, *zoom_fixed, *zoom_free;
wxCheckBox* sharpen; wxCheckBox* sharpen;
wxSlider* sharpen_amount; wxSlider* sharpen_amount;
bool initialized; // is the gui initialized?
// --------------------------------------------------- : Events // --------------------------------------------------- : Events
DECLARE_EVENT_TABLE(); DECLARE_EVENT_TABLE();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment