From 0593663462bdf4af48830a7afbfbe9c9ca2c3b01 Mon Sep 17 00:00:00 2001 From: Wayne Stambaugh Date: Sun, 23 Oct 2022 07:53:51 -0400 Subject: [PATCH] Fix 3D viewer canvas timer event clash. Manual cherry-pick of commit f6297d328c7726adec9ccd107655a93bf421f39c. --- 3d-viewer/3d_canvas/eda_3d_canvas.cpp | 66 ++++++++++++++++----------- 1 file changed, 40 insertions(+), 26 deletions(-) diff --git a/3d-viewer/3d_canvas/eda_3d_canvas.cpp b/3d-viewer/3d_canvas/eda_3d_canvas.cpp index f7ac434d7e..41fda39896 100644 --- a/3d-viewer/3d_canvas/eda_3d_canvas.cpp +++ b/3d-viewer/3d_canvas/eda_3d_canvas.cpp @@ -2,7 +2,7 @@ * This program source code file is part of KiCad, a free EDA CAD application. * * Copyright (C) 2015-2016 Mario Luzeiro - * Copyright (C) 1992-2021 KiCad Developers, see AUTHORS.txt for contributors. + * Copyright (C) 1992-2022 KiCad Developers, see AUTHORS.txt for contributors. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -89,30 +89,32 @@ END_EVENT_TABLE() EDA_3D_CANVAS::EDA_3D_CANVAS( wxWindow* aParent, const int* aAttribList, BOARD_ADAPTER& aBoardAdapter, CAMERA& aCamera, - S3D_CACHE* a3DCachePointer ) - : HIDPI_GL_CANVAS( aParent, wxID_ANY, aAttribList, wxDefaultPosition, wxDefaultSize, + S3D_CACHE* a3DCachePointer ) : + HIDPI_GL_CANVAS( aParent, wxID_ANY, aAttribList, wxDefaultPosition, wxDefaultSize, wxFULL_REPAINT_ON_RESIZE ), - m_eventDispatcher( nullptr ), - m_parentStatusBar( nullptr ), - m_parentInfoBar( nullptr ), - m_glRC( nullptr ), - m_is_opengl_initialized( false ), - m_is_opengl_version_supported( true ), - m_mouse_is_moving( false ), - m_mouse_was_moved( false ), - m_camera_is_moving( false ), - m_render_pivot( false ), - m_camera_moving_speed( 1.0f ), - m_strtime_camera_movement( 0 ), - m_animation_enabled( true ), - m_moving_speed_multiplier( 3 ), - m_boardAdapter( aBoardAdapter ), - m_camera( aCamera ), - m_3d_render( nullptr ), - m_opengl_supports_raytracing( true ), - m_render_raytracing_was_requested( false ), - m_accelerator3DShapes( nullptr ), - m_currentRollOverItem( nullptr ) + m_eventDispatcher( nullptr ), + m_parentStatusBar( nullptr ), + m_parentInfoBar( nullptr ), + m_glRC( nullptr ), + m_is_opengl_initialized( false ), + m_is_opengl_version_supported( true ), + m_editing_timeout_timer( this, wxID_HIGHEST + 1 ), + m_redraw_trigger_timer( this, wxID_HIGHEST + 2 ), + m_mouse_is_moving( false ), + m_mouse_was_moved( false ), + m_camera_is_moving( false ), + m_render_pivot( false ), + m_camera_moving_speed( 1.0f ), + m_strtime_camera_movement( 0 ), + m_animation_enabled( true ), + m_moving_speed_multiplier( 3 ), + m_boardAdapter( aBoardAdapter ), + m_camera( aCamera ), + m_3d_render( nullptr ), + m_opengl_supports_raytracing( true ), + m_render_raytracing_was_requested( false ), + m_accelerator3DShapes( nullptr ), + m_currentRollOverItem( nullptr ) { wxLogTrace( m_logTrace, wxT( "EDA_3D_CANVAS::EDA_3D_CANVAS" ) ); @@ -845,8 +847,14 @@ void EDA_3D_CANVAS::OnMiddleUp( wxMouseEvent& event ) } -void EDA_3D_CANVAS::OnTimerTimeout_Editing( wxTimerEvent& /* event */ ) +void EDA_3D_CANVAS::OnTimerTimeout_Editing( wxTimerEvent& aEvent ) { + if( aEvent.GetId() != m_editing_timeout_timer.GetId() ) + { + aEvent.Skip(); + return; + } + m_mouse_is_moving = false; m_mouse_was_moved = false; @@ -867,8 +875,14 @@ void EDA_3D_CANVAS::restart_editingTimeOut_Timer() } -void EDA_3D_CANVAS::OnTimerTimeout_Redraw( wxTimerEvent& event ) +void EDA_3D_CANVAS::OnTimerTimeout_Redraw( wxTimerEvent& aEvent ) { + if( aEvent.GetId() != m_redraw_trigger_timer.GetId() ) + { + aEvent.Skip(); + return; + } + Request_refresh( true ); }