3DScene's char event handler moved to c++

This commit is contained in:
Enrico Turri 2018-05-15 16:09:04 +02:00
parent 2b4829a4b9
commit 41c51d7614
4 changed files with 70 additions and 30 deletions

View file

@ -244,36 +244,38 @@ sub new {
#============================================================================================================================== #==============================================================================================================================
EVT_MOUSEWHEEL($self, \&mouse_wheel_event); EVT_MOUSEWHEEL($self, \&mouse_wheel_event);
EVT_MOUSE_EVENTS($self, \&mouse_event); EVT_MOUSE_EVENTS($self, \&mouse_event);
# EVT_KEY_DOWN($self, sub { #==============================================================================================================================
EVT_CHAR($self, sub { ## EVT_KEY_DOWN($self, sub {
my ($s, $event) = @_; # EVT_CHAR($self, sub {
if ($event->HasModifiers) { # my ($s, $event) = @_;
$event->Skip; # if ($event->HasModifiers) {
} else { # $event->Skip;
my $key = $event->GetKeyCode; # } else {
if ($key == ord('0')) { # my $key = $event->GetKeyCode;
$self->select_view('iso'); # if ($key == ord('0')) {
} elsif ($key == ord('1')) { # $self->select_view('iso');
$self->select_view('top'); # } elsif ($key == ord('1')) {
} elsif ($key == ord('2')) { # $self->select_view('top');
$self->select_view('bottom'); # } elsif ($key == ord('2')) {
} elsif ($key == ord('3')) { # $self->select_view('bottom');
$self->select_view('front'); # } elsif ($key == ord('3')) {
} elsif ($key == ord('4')) { # $self->select_view('front');
$self->select_view('rear'); # } elsif ($key == ord('4')) {
} elsif ($key == ord('5')) { # $self->select_view('rear');
$self->select_view('left'); # } elsif ($key == ord('5')) {
} elsif ($key == ord('6')) { # $self->select_view('left');
$self->select_view('right'); # } elsif ($key == ord('6')) {
} elsif ($key == ord('z')) { # $self->select_view('right');
$self->zoom_to_volumes; # } elsif ($key == ord('z')) {
} elsif ($key == ord('b')) { # $self->zoom_to_volumes;
$self->zoom_to_bed; # } elsif ($key == ord('b')) {
} else { # $self->zoom_to_bed;
$event->Skip; # } else {
} # $event->Skip;
} # }
}); # }
# });
#==============================================================================================================================
$self->{layer_height_edit_timer_id} = &Wx::NewId(); $self->{layer_height_edit_timer_id} = &Wx::NewId();
$self->{layer_height_edit_timer} = Wx::Timer->new($self, $self->{layer_height_edit_timer_id}); $self->{layer_height_edit_timer} = Wx::Timer->new($self, $self->{layer_height_edit_timer_id});

View file

@ -609,6 +609,41 @@ void GLCanvas3D::on_idle(wxIdleEvent& evt)
} }
} }
void GLCanvas3D::on_char(wxKeyEvent& evt)
{
if (evt.HasModifiers())
evt.Skip();
else
{
int keyCode = evt.GetKeyCode();
switch (keyCode - 48)
{
// numerical input
case 0: { select_view("iso"); break; }
case 1: { select_view("top"); break; }
case 2: { select_view("bottom"); break; }
case 3: { select_view("front"); break; }
case 4: { select_view("rear"); break; }
case 5: { select_view("left"); break; }
case 6: { select_view("right"); break; }
default:
{
// text input
switch (keyCode)
{
// key B/b
case 66:
case 98: { zoom_to_bed(); break; }
// key Z/z
case 90:
case 122: { zoom_to_volumes(); break; }
default: { evt.Skip(); break; }
}
}
}
}
}
void GLCanvas3D::_zoom_to_bounding_box(const BoundingBoxf3& bbox) void GLCanvas3D::_zoom_to_bounding_box(const BoundingBoxf3& bbox)
{ {
// Calculate the zoom factor needed to adjust viewport to bounding box. // Calculate the zoom factor needed to adjust viewport to bounding box.

View file

@ -8,6 +8,7 @@ class wxGLCanvas;
class wxGLContext; class wxGLContext;
class wxSizeEvent; class wxSizeEvent;
class wxIdleEvent; class wxIdleEvent;
class wxKeyEvent;
namespace Slic3r { namespace Slic3r {
@ -172,6 +173,7 @@ public:
void on_size(wxSizeEvent& evt); void on_size(wxSizeEvent& evt);
void on_idle(wxIdleEvent& evt); void on_idle(wxIdleEvent& evt);
void on_char(wxKeyEvent& evt);
private: private:
void _zoom_to_bounding_box(const BoundingBoxf3& bbox); void _zoom_to_bounding_box(const BoundingBoxf3& bbox);

View file

@ -79,6 +79,7 @@ bool GLCanvas3DManager::add(wxGLCanvas* canvas, wxGLContext* context)
canvas->Bind(wxEVT_SIZE, [canvas3D](wxSizeEvent& evt) { canvas3D->on_size(evt); }); canvas->Bind(wxEVT_SIZE, [canvas3D](wxSizeEvent& evt) { canvas3D->on_size(evt); });
canvas->Bind(wxEVT_IDLE, [canvas3D](wxIdleEvent& evt) { canvas3D->on_idle(evt); }); canvas->Bind(wxEVT_IDLE, [canvas3D](wxIdleEvent& evt) { canvas3D->on_idle(evt); });
canvas->Bind(wxEVT_CHAR, [canvas3D](wxKeyEvent& evt) { canvas3D->on_char(evt); });
m_canvases.insert(CanvasesMap::value_type(canvas, canvas3D)); m_canvases.insert(CanvasesMap::value_type(canvas, canvas3D));