diff --git a/lib/Slic3r/GUI/Plater.pm b/lib/Slic3r/GUI/Plater.pm index 352fe25ea3..46e2d3e090 100644 --- a/lib/Slic3r/GUI/Plater.pm +++ b/lib/Slic3r/GUI/Plater.pm @@ -26,6 +26,7 @@ my $MESSAGE_DIALOG_EVENT : shared = Wx::NewEventType; my $EXPORT_COMPLETED_EVENT : shared = Wx::NewEventType; my $EXPORT_FAILED_EVENT : shared = Wx::NewEventType; +use constant CANVAS_SIZE => [300,300]; use constant CANVAS_TEXT => join('-', +(localtime)[3,4]) eq '13-8' ? 'What do you want to print today? ™' # Sept. 13, 2006. The first part ever printed by a RepRap to make another RepRap. : 'Drag your objects here'; @@ -38,7 +39,7 @@ sub new { bed_size print_center complete_objects extruder_clearance_radius skirts skirt_distance )); - $self->{canvas} = Wx::Panel->new($self, -1, wxDefaultPosition, [300, 300], wxTAB_TRAVERSAL); + $self->{canvas} = Wx::Panel->new($self, -1, wxDefaultPosition, CANVAS_SIZE, wxTAB_TRAVERSAL); $self->{canvas}->SetBackgroundColour(Wx::wxWHITE); EVT_PAINT($self->{canvas}, \&repaint); EVT_MOUSE_EVENTS($self->{canvas}, \&mouse_event); @@ -679,8 +680,10 @@ sub recenter { sub on_config_change { my $self = shift; my ($opt_key, $value) = @_; - $self->{config}->set($opt_key, $value) if exists $self->{config}{$opt_key}; - $self->_update_bed_size; + if (exists $self->{config}{$opt_key}) { + $self->{config}->set($opt_key, $value); + $self->_update_bed_size if $opt_key eq 'bed_size'; + } } sub _update_bed_size { @@ -689,7 +692,7 @@ sub _update_bed_size { # supposing the preview canvas is square, calculate the scaling factor # to constrain print bed area inside preview my $bed_size = $self->{config}->bed_size; - my $canvas_side = $self->{canvas}->GetSize->GetWidth; + my $canvas_side = CANVAS_SIZE->[X]; # when the canvas is not rendered yet, its GetSize() method returns 0,0 my $bed_largest_side = $bed_size->[X] > $bed_size->[Y] ? $bed_size->[X] : $bed_size->[Y]; my $old_scaling_factor = $self->{scaling_factor}; $self->{scaling_factor} = $canvas_side / $bed_largest_side; diff --git a/lib/Slic3r/GUI/SkeinPanel.pm b/lib/Slic3r/GUI/SkeinPanel.pm index f0446f8fe6..be81a0a455 100644 --- a/lib/Slic3r/GUI/SkeinPanel.pm +++ b/lib/Slic3r/GUI/SkeinPanel.pm @@ -20,18 +20,16 @@ sub new { $self->{tabpanel} = Wx::Notebook->new($self, -1, wxDefaultPosition, wxDefaultSize, wxNB_TOP | wxTAB_TRAVERSAL); $self->{tabpanel}->AddPage($self->{plater} = Slic3r::GUI::Plater->new($self->{tabpanel}), "Plater"); - $self->{options_tabs} = { - print => Slic3r::GUI::Tab::Print->new ($self->{tabpanel}, sync_presets_with => $self->{plater}{preset_choosers}{print}), - filament => Slic3r::GUI::Tab::Filament->new ($self->{tabpanel}, sync_presets_with => $self->{plater}{preset_choosers}{filament}), - printer => Slic3r::GUI::Tab::Printer->new ($self->{tabpanel}, sync_presets_with => $self->{plater}{preset_choosers}{printer}), - }; + $self->{options_tabs} = {}; - # propagate config change events to the plater - $_->{on_value_change} = sub { $self->{plater}->on_config_change(@_) } for values %{$self->{options_tabs}}; - - $self->{tabpanel}->AddPage($self->{options_tabs}{print}, $self->{options_tabs}{print}->title); - $self->{tabpanel}->AddPage($self->{options_tabs}{filament}, $self->{options_tabs}{filament}->title); - $self->{tabpanel}->AddPage($self->{options_tabs}{printer}, $self->{options_tabs}{printer}->title); + for my $tab_name (qw(print filament printer)) { + $self->{options_tabs}{$tab_name} = ("Slic3r::GUI::Tab::" . ucfirst $tab_name)->new( + $self->{tabpanel}, + sync_presets_with => $self->{plater}{preset_choosers}{$tab_name}, + on_value_change => sub { $self->{plater}->on_config_change(@_) }, # propagate config change events to the plater + ); + $self->{tabpanel}->AddPage($self->{options_tabs}{$tab_name}, $self->{options_tabs}{$tab_name}->title); + } my $sizer = Wx::BoxSizer->new(wxVERTICAL); $sizer->Add($self->{tabpanel}, 1, wxEXPAND); diff --git a/lib/Slic3r/GUI/Tab.pm b/lib/Slic3r/GUI/Tab.pm index 4fb07a5b44..284dea1752 100644 --- a/lib/Slic3r/GUI/Tab.pm +++ b/lib/Slic3r/GUI/Tab.pm @@ -15,7 +15,7 @@ sub new { my $self = $class->SUPER::new($parent, -1, wxDefaultPosition, wxDefaultSize, wxBK_LEFT | wxTAB_TRAVERSAL); $self->{options} = []; # array of option names handled by this tab - $self->{sync_presets_with} = $params{sync_presets_with}; + $self->{$_} = $params{$_} for qw(sync_presets_with on_value_change); EVT_CHOICE($parent, $self->{sync_presets_with}, sub { $self->{presets_choice}->SetSelection($self->{sync_presets_with}->GetSelection); $self->on_select_preset;