From ac58a3f9f0593d838fffbb681ae5cc6daac7055c Mon Sep 17 00:00:00 2001 From: Jeff Young Date: Tue, 11 May 2021 20:52:28 +0100 Subject: [PATCH] Add preference for 3d-model-highlight-on-rollover. Fixes https://gitlab.com/kicad/code/kicad/issues/8349 --- 3d-viewer/3d_cache/dialogs/panel_prev_3d.cpp | 1 + 3d-viewer/3d_canvas/board_adapter.cpp | 1 + 3d-viewer/3d_canvas/eda_3d_canvas.cpp | 28 ++++---- 3d-viewer/3d_canvas/eda_3d_canvas.h | 2 +- 3d-viewer/3d_enums.h | 1 + .../3d_rendering/legacy/render_3d_legacy.cpp | 39 ++++++----- .../3d_rendering/legacy/render_3d_legacy.h | 19 +++--- 3d-viewer/3d_viewer/3d_viewer_settings.cpp | 2 + 3d-viewer/3d_viewer/3d_viewer_settings.h | 1 + .../dialogs/dialog_3D_view_option.cpp | 2 + .../dialogs/dialog_3D_view_option_base.cpp | 5 +- .../dialogs/dialog_3D_view_option_base.fbp | 66 ++++++++++++++++++- .../dialogs/dialog_3D_view_option_base.h | 1 + 3d-viewer/3d_viewer/eda_3d_viewer.cpp | 5 +- 14 files changed, 130 insertions(+), 43 deletions(-) diff --git a/3d-viewer/3d_cache/dialogs/panel_prev_3d.cpp b/3d-viewer/3d_cache/dialogs/panel_prev_3d.cpp index 584afa0e7c..a5d36d92d5 100644 --- a/3d-viewer/3d_cache/dialogs/panel_prev_3d.cpp +++ b/3d-viewer/3d_cache/dialogs/panel_prev_3d.cpp @@ -98,6 +98,7 @@ PANEL_PREV_3D::PANEL_PREV_3D( wxWindow* aParent, PCB_BASE_FRAME* aFrame, FOOTPRI loadCommonSettings(); m_boardAdapter.SetFlag( FL_USE_SELECTION, false ); + m_boardAdapter.SetFlag( FL_HIGHLIGHT_ROLLOVER_ITEM, false ); // Create the manager m_toolManager = new TOOL_MANAGER; diff --git a/3d-viewer/3d_canvas/board_adapter.cpp b/3d-viewer/3d_canvas/board_adapter.cpp index d87c722d0a..56b32c0691 100644 --- a/3d-viewer/3d_canvas/board_adapter.cpp +++ b/3d-viewer/3d_canvas/board_adapter.cpp @@ -111,6 +111,7 @@ BOARD_ADAPTER::BOARD_ADAPTER() : SetFlag( FL_RENDER_OPENGL_HOLES_DISABLE_ON_MOVE, false ); SetFlag( FL_USE_SELECTION, true ); + SetFlag( FL_HIGHLIGHT_ROLLOVER_ITEM, true ); m_BgColorBot = SFVEC4F( 0.4, 0.4, 0.5, 1.0 ); m_BgColorTop = SFVEC4F( 0.8, 0.8, 0.9, 1.0 ); diff --git a/3d-viewer/3d_canvas/eda_3d_canvas.cpp b/3d-viewer/3d_canvas/eda_3d_canvas.cpp index eec1bd0d67..2bb0b14112 100644 --- a/3d-viewer/3d_canvas/eda_3d_canvas.cpp +++ b/3d-viewer/3d_canvas/eda_3d_canvas.cpp @@ -112,7 +112,7 @@ EDA_3D_CANVAS::EDA_3D_CANVAS( wxWindow* aParent, const int* aAttribList, BOARD* m_opengl_supports_raytracing( true ), m_render_raytracing_was_requested( false ), m_accelerator3DShapes( nullptr ), - m_currentIntersectedBoardItem( nullptr ) + m_currentRollOverItem( nullptr ) { wxLogTrace( m_logTrace, "EDA_3D_CANVAS::EDA_3D_CANVAS" ); @@ -701,23 +701,23 @@ void EDA_3D_CANVAS::OnMouseMove( wxMouseEvent& event ) RAY mouseRay = getRayAtCurrrentMousePosition(); - BOARD_ITEM *intersectedBoardItem = m_3d_render_raytracing->IntersectBoardItem( mouseRay ); + BOARD_ITEM *rollOverItem = m_3d_render_raytracing->IntersectBoardItem( mouseRay ); - if( intersectedBoardItem ) + if( rollOverItem ) { - if( intersectedBoardItem != m_currentIntersectedBoardItem ) + if( rollOverItem != m_currentRollOverItem ) { - m_3d_render_ogl_legacy->SetCurrentIntersectedBoardItem( intersectedBoardItem ); - m_currentIntersectedBoardItem = intersectedBoardItem; + m_3d_render_ogl_legacy->SetCurrentRollOverItem( rollOverItem ); + m_currentRollOverItem = rollOverItem; Request_refresh(); } - switch( intersectedBoardItem->Type() ) + switch( rollOverItem->Type() ) { case PCB_PAD_T: { - PAD* pad = dynamic_cast( intersectedBoardItem ); + PAD* pad = dynamic_cast( rollOverItem ); if( pad && pad->IsOnCopperLayer() ) { @@ -731,7 +731,7 @@ void EDA_3D_CANVAS::OnMouseMove( wxMouseEvent& event ) case PCB_FOOTPRINT_T: { - FOOTPRINT* footprint = dynamic_cast( intersectedBoardItem ); + FOOTPRINT* footprint = dynamic_cast( rollOverItem ); if( footprint ) reporter.Report( footprint->GetReference() ); @@ -742,7 +742,7 @@ void EDA_3D_CANVAS::OnMouseMove( wxMouseEvent& event ) case PCB_VIA_T: case PCB_ARC_T: { - TRACK* track = dynamic_cast( intersectedBoardItem ); + TRACK* track = dynamic_cast( rollOverItem ); if( track ) { @@ -755,7 +755,7 @@ void EDA_3D_CANVAS::OnMouseMove( wxMouseEvent& event ) case PCB_ZONE_T: { - ZONE* zone = dynamic_cast( intersectedBoardItem ); + ZONE* zone = dynamic_cast( rollOverItem ); if( zone && zone->IsOnCopperLayer() ) { @@ -772,16 +772,16 @@ void EDA_3D_CANVAS::OnMouseMove( wxMouseEvent& event ) } else { - if( ( m_currentIntersectedBoardItem != nullptr ) && + if( ( m_currentRollOverItem != nullptr ) && ( m_boardAdapter.GetRenderEngine() == RENDER_ENGINE::OPENGL_LEGACY ) ) { - m_3d_render_ogl_legacy->SetCurrentIntersectedBoardItem( nullptr ); + m_3d_render_ogl_legacy->SetCurrentRollOverItem( nullptr ); Request_refresh(); reporter.Report( "" ); } - m_currentIntersectedBoardItem = nullptr; + m_currentRollOverItem = nullptr; } } } diff --git a/3d-viewer/3d_canvas/eda_3d_canvas.h b/3d-viewer/3d_canvas/eda_3d_canvas.h index b3a1397834..278b93d67c 100644 --- a/3d-viewer/3d_canvas/eda_3d_canvas.h +++ b/3d-viewer/3d_canvas/eda_3d_canvas.h @@ -287,7 +287,7 @@ private: CONTAINER_3D m_3DShapes_container; // Holds 3D shapes from footprints ACCELERATOR_3D* m_accelerator3DShapes; // used for mouse over searching - BOARD_ITEM* m_currentIntersectedBoardItem; + BOARD_ITEM* m_currentRollOverItem; /** * Trace mask used to enable or disable the trace output of this class. diff --git a/3d-viewer/3d_enums.h b/3d-viewer/3d_enums.h index 86acb3607a..aaf9fe6a59 100644 --- a/3d-viewer/3d_enums.h +++ b/3d-viewer/3d_enums.h @@ -47,6 +47,7 @@ enum DISPLAY3D_FLG FL_FP_ATTRIBUTES_VIRTUAL, FL_USE_SELECTION, + FL_HIGHLIGHT_ROLLOVER_ITEM, FL_SHOW_BOARD_BODY, FL_MOUSEWHEEL_PANNING, diff --git a/3d-viewer/3d_rendering/legacy/render_3d_legacy.cpp b/3d-viewer/3d_rendering/legacy/render_3d_legacy.cpp index 235e2b4635..d4d28a97ff 100644 --- a/3d-viewer/3d_rendering/legacy/render_3d_legacy.cpp +++ b/3d-viewer/3d_rendering/legacy/render_3d_legacy.cpp @@ -62,7 +62,7 @@ RENDER_3D_LEGACY::RENDER_3D_LEGACY( BOARD_ADAPTER& aAdapter, CAMERA& aCamera ) : m_circleTexture = 0; m_grid = 0; m_lastGridType = GRID3D_TYPE::NONE; - m_currentIntersectedBoardItem = nullptr; + m_currentRollOverItem = nullptr; m_boardWithHoles = nullptr; m_3dModelMap.clear(); @@ -1179,16 +1179,25 @@ void RENDER_3D_LEGACY::render3dModelsSelected( bool aRenderTopOrBot, bool aRende // Go for all footprints for( FOOTPRINT* fp : m_boardAdapter.GetBoard()->Footprints() ) { - const bool isIntersected = ( fp == m_currentIntersectedBoardItem ); + bool highlight = false; - if( m_boardAdapter.GetFlag( FL_USE_SELECTION ) && !isIntersected - && ( ( aRenderSelectedOnly && !fp->IsSelected() ) - || ( !aRenderSelectedOnly && fp->IsSelected() ) ) ) + if( m_boardAdapter.GetFlag( FL_USE_SELECTION ) ) { - continue; + if( fp == m_currentRollOverItem ) + { + if( aRenderSelectedOnly ) + highlight = m_boardAdapter.GetFlag( FL_HIGHLIGHT_ROLLOVER_ITEM ); + else if( !fp->IsSelected() ) + continue; + } + else if( ( aRenderSelectedOnly && !fp->IsSelected() ) + || ( !aRenderSelectedOnly && fp->IsSelected() ) ) + { + continue; + } } - if( isIntersected && aRenderSelectedOnly ) + if( highlight ) { glEnable( GL_POLYGON_OFFSET_LINE ); glPolygonOffset( 8.0, 1.0 ); @@ -1203,12 +1212,12 @@ void RENDER_3D_LEGACY::render3dModelsSelected( bool aRenderTopOrBot, bool aRende if( ( aRenderTopOrBot && !fp->IsFlipped() ) || ( !aRenderTopOrBot && fp->IsFlipped() ) ) { - renderFootprint( fp, aRenderTransparentOnly, isIntersected ); + renderFootprint( fp, aRenderTransparentOnly, highlight ); } } } - if( isIntersected && aRenderSelectedOnly ) + if( highlight ) { // Restore glDisable( GL_POLYGON_OFFSET_LINE ); @@ -1282,12 +1291,12 @@ void RENDER_3D_LEGACY::renderFootprint( const FOOTPRINT* aFootprint, bool aRende // values have changed. cache the matrix somewhere. glm::mat4 mtx( 1 ); mtx = glm::translate( mtx, { sM.m_Offset.x, sM.m_Offset.y, sM.m_Offset.z } ); - mtx = glm::rotate( - mtx, glm::radians( (float) -sM.m_Rotation.z ), { 0.0f, 0.0f, 1.0f } ); - mtx = glm::rotate( - mtx, glm::radians( (float) -sM.m_Rotation.y ), { 0.0f, 1.0f, 0.0f } ); - mtx = glm::rotate( - mtx, glm::radians( (float) -sM.m_Rotation.x ), { 1.0f, 0.0f, 0.0f } ); + mtx = glm::rotate( mtx, glm::radians( (float) -sM.m_Rotation.z ), + { 0.0f, 0.0f, 1.0f } ); + mtx = glm::rotate( mtx, glm::radians( (float) -sM.m_Rotation.y ), + { 0.0f, 1.0f, 0.0f } ); + mtx = glm::rotate( mtx, glm::radians( (float) -sM.m_Rotation.x ), + { 1.0f, 0.0f, 0.0f } ); mtx = glm::scale( mtx, { sM.m_Scale.x, sM.m_Scale.y, sM.m_Scale.z } ); glMultMatrixf( glm::value_ptr( mtx ) ); diff --git a/3d-viewer/3d_rendering/legacy/render_3d_legacy.h b/3d-viewer/3d_rendering/legacy/render_3d_legacy.h index fa686fced9..339d442dae 100644 --- a/3d-viewer/3d_rendering/legacy/render_3d_legacy.h +++ b/3d-viewer/3d_rendering/legacy/render_3d_legacy.h @@ -67,9 +67,9 @@ public: int GetWaitForEditingTimeOut() override; - void SetCurrentIntersectedBoardItem( BOARD_ITEM* aCurrentIntersectedBoardItem ) + void SetCurrentRollOverItem( BOARD_ITEM* aRollOverItem ) { - m_currentIntersectedBoardItem = aCurrentIntersectedBoardItem; + m_currentRollOverItem = aRollOverItem; } private: @@ -198,20 +198,21 @@ private: OPENGL_RENDER_LIST* m_outerViaThroughHoles; OPENGL_RENDER_LIST* m_outerThroughHoleRings; - LIST_TRIANGLES m_triangles; ///< store pointers so can be deleted latter - GLuint m_circleTexture; + LIST_TRIANGLES m_triangles; ///< store pointers so can be deleted latter + GLuint m_circleTexture; - GLuint m_grid; ///< oGL list that stores current grid - GRID3D_TYPE m_lastGridType; ///< Stores the last grid type. + GLuint m_grid; ///< oGL list that stores current grid + GRID3D_TYPE m_lastGridType; ///< Stores the last grid type. OPENGL_RENDER_LIST* m_vias; OPENGL_RENDER_LIST* m_padHoles; - MAP_3DMODEL m_3dModelMap; + MAP_3DMODEL m_3dModelMap; - BOARD_ITEM* m_currentIntersectedBoardItem; + BOARD_ITEM* m_currentRollOverItem; - SHAPE_POLY_SET m_antiBoardPolys; ///< The negative polygon representation of the board outline. + SHAPE_POLY_SET m_antiBoardPolys; ///< The negative polygon representation of the board + ///< outline. }; #endif // RENDER_3D_LEGACY_H_ diff --git a/3d-viewer/3d_viewer/3d_viewer_settings.cpp b/3d-viewer/3d_viewer/3d_viewer_settings.cpp index 13d086c050..4fb8b2de97 100644 --- a/3d-viewer/3d_viewer/3d_viewer_settings.cpp +++ b/3d-viewer/3d_viewer/3d_viewer_settings.cpp @@ -65,6 +65,8 @@ EDA_3D_VIEWER_SETTINGS::EDA_3D_VIEWER_SETTINGS() "render.opengl_copper_thickness", &m_Render.opengl_copper_thickness, true ) ); m_params.emplace_back( new PARAM( "render.opengl_show_model_bbox", &m_Render.opengl_show_model_bbox, false ) ); + m_params.emplace_back( new PARAM( + "render.epengl_highlight_on_rollover", &m_Render.opengl_highlight_on_rollover, true ) ); m_params.emplace_back( new PARAM( "render.opengl_AA_disableOnMove", &m_Render.opengl_AA_disableOnMove, false ) ); m_params.emplace_back( new PARAM( diff --git a/3d-viewer/3d_viewer/3d_viewer_settings.h b/3d-viewer/3d_viewer/3d_viewer_settings.h index 129c6487c4..507f9aaaed 100644 --- a/3d-viewer/3d_viewer/3d_viewer_settings.h +++ b/3d-viewer/3d_viewer/3d_viewer_settings.h @@ -41,6 +41,7 @@ public: bool opengl_render_bbox_only_OnMove; bool opengl_copper_thickness; bool opengl_show_model_bbox; + bool opengl_highlight_on_rollover; KIGFX::COLOR4D opengl_selection_color; bool raytrace_anti_aliasing; diff --git a/3d-viewer/3d_viewer/dialogs/dialog_3D_view_option.cpp b/3d-viewer/3d_viewer/dialogs/dialog_3D_view_option.cpp index 1aebdba608..d42932d7b4 100644 --- a/3d-viewer/3d_viewer/dialogs/dialog_3D_view_option.cpp +++ b/3d-viewer/3d_viewer/dialogs/dialog_3D_view_option.cpp @@ -200,6 +200,7 @@ bool DIALOG_3D_VIEW_OPTIONS::TransferDataToWindow() // OpenGL options m_checkBoxCuThickness->SetValue( m_settings.GetFlag( FL_RENDER_OPENGL_COPPER_THICKNESS ) ); m_checkBoxBoundingBoxes->SetValue( m_settings.GetFlag( FL_RENDER_OPENGL_SHOW_MODEL_BBOX ) ); + m_checkBoxHighlightOnRollOver->SetValue( m_settings.GetFlag( FL_HIGHLIGHT_ROLLOVER_ITEM ) ); m_checkBoxDisableAAMove->SetValue( m_settings.GetFlag( FL_RENDER_OPENGL_AA_DISABLE_ON_MOVE ) ); m_checkBoxDisableMoveThickness->SetValue( m_settings.GetFlag( FL_RENDER_OPENGL_THICKNESS_DISABLE_ON_MOVE ) ); @@ -281,6 +282,7 @@ bool DIALOG_3D_VIEW_OPTIONS::TransferDataFromWindow() // OpenGL options m_settings.SetFlag( FL_RENDER_OPENGL_COPPER_THICKNESS, m_checkBoxCuThickness->GetValue() ); m_settings.SetFlag( FL_RENDER_OPENGL_SHOW_MODEL_BBOX, m_checkBoxBoundingBoxes->GetValue() ); + m_settings.SetFlag( FL_HIGHLIGHT_ROLLOVER_ITEM, m_checkBoxHighlightOnRollOver->GetValue() ); m_settings.SetFlag( FL_RENDER_OPENGL_AA_DISABLE_ON_MOVE, m_checkBoxDisableAAMove->GetValue() ); m_settings.SetFlag( FL_RENDER_OPENGL_THICKNESS_DISABLE_ON_MOVE, m_checkBoxDisableMoveThickness->GetValue() ); diff --git a/3d-viewer/3d_viewer/dialogs/dialog_3D_view_option_base.cpp b/3d-viewer/3d_viewer/dialogs/dialog_3D_view_option_base.cpp index 5ea8820592..9f4bf6dbbf 100644 --- a/3d-viewer/3d_viewer/dialogs/dialog_3D_view_option_base.cpp +++ b/3d-viewer/3d_viewer/dialogs/dialog_3D_view_option_base.cpp @@ -168,6 +168,9 @@ DIALOG_3D_VIEW_OPTIONS_BASE::DIALOG_3D_VIEW_OPTIONS_BASE( wxWindow* parent, wxWi m_checkBoxCuThickness = new wxCheckBox( sbSizerOpenGLRenderoptions->GetStaticBox(), wxID_ANY, _("Show copper thickness"), wxDefaultPosition, wxDefaultSize, 0 ); sbSizerOpenGLRenderoptions->Add( m_checkBoxCuThickness, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + m_checkBoxHighlightOnRollOver = new wxCheckBox( sbSizerOpenGLRenderoptions->GetStaticBox(), wxID_ANY, _("Highlight items on rollover"), wxDefaultPosition, wxDefaultSize, 0 ); + sbSizerOpenGLRenderoptions->Add( m_checkBoxHighlightOnRollOver, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + bSizerOpenGL->Add( sbSizerOpenGLRenderoptions, 0, wxALL|wxEXPAND, 5 ); @@ -175,7 +178,7 @@ DIALOG_3D_VIEW_OPTIONS_BASE::DIALOG_3D_VIEW_OPTIONS_BASE( wxWindow* parent, wxWi sbSizerOtherOptions = new wxStaticBoxSizer( new wxStaticBox( m_panelOpenGL, wxID_ANY, _("Other Options") ), wxVERTICAL ); wxFlexGridSizer* fgSizer7; - fgSizer7 = new wxFlexGridSizer( 2, 2, 2, 0 ); + fgSizer7 = new wxFlexGridSizer( 2, 2, 0, 0 ); fgSizer7->SetFlexibleDirection( wxBOTH ); fgSizer7->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); diff --git a/3d-viewer/3d_viewer/dialogs/dialog_3D_view_option_base.fbp b/3d-viewer/3d_viewer/dialogs/dialog_3D_view_option_base.fbp index 1b264b40cc..2a0e642bee 100644 --- a/3d-viewer/3d_viewer/dialogs/dialog_3D_view_option_base.fbp +++ b/3d-viewer/3d_viewer/dialogs/dialog_3D_view_option_base.fbp @@ -1888,6 +1888,70 @@ + + 5 + wxBOTTOM|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Highlight items on rollover + + 0 + + + 0 + + 1 + m_checkBoxHighlightOnRollOver + 1 + + + protected + 1 + + Resizable + 1 + + + ; ; forward_declare + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + @@ -1917,7 +1981,7 @@ wxFLEX_GROWMODE_SPECIFIED none 2 - 2 + 0 5 wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL diff --git a/3d-viewer/3d_viewer/dialogs/dialog_3D_view_option_base.h b/3d-viewer/3d_viewer/dialogs/dialog_3D_view_option_base.h index d78e191ae5..7183d8eca5 100644 --- a/3d-viewer/3d_viewer/dialogs/dialog_3D_view_option_base.h +++ b/3d-viewer/3d_viewer/dialogs/dialog_3D_view_option_base.h @@ -71,6 +71,7 @@ class DIALOG_3D_VIEW_OPTIONS_BASE : public DIALOG_SHIM wxPanel* m_panelOpenGL; wxCheckBox* m_checkBoxBoundingBoxes; wxCheckBox* m_checkBoxCuThickness; + wxCheckBox* m_checkBoxHighlightOnRollOver; wxStaticText* m_staticText221; wxChoice* m_choiceAntiAliasing; wxStaticText* m_staticText231; diff --git a/3d-viewer/3d_viewer/eda_3d_viewer.cpp b/3d-viewer/3d_viewer/eda_3d_viewer.cpp index b750af6f0b..b7e8b8f652 100644 --- a/3d-viewer/3d_viewer/eda_3d_viewer.cpp +++ b/3d-viewer/3d_viewer/eda_3d_viewer.cpp @@ -509,6 +509,7 @@ void EDA_3D_VIEWER::LoadSettings( APP_SETTINGS_BASE *aCfg ) // OpenGL options TRANSFER_SETTING( FL_RENDER_OPENGL_COPPER_THICKNESS, opengl_copper_thickness ); TRANSFER_SETTING( FL_RENDER_OPENGL_SHOW_MODEL_BBOX, opengl_show_model_bbox ); + TRANSFER_SETTING( FL_HIGHLIGHT_ROLLOVER_ITEM, opengl_highlight_on_rollover ); TRANSFER_SETTING( FL_RENDER_OPENGL_AA_DISABLE_ON_MOVE, opengl_AA_disableOnMove ); TRANSFER_SETTING( FL_RENDER_OPENGL_THICKNESS_DISABLE_ON_MOVE, opengl_thickness_disableOnMove ); @@ -681,8 +682,8 @@ void EDA_3D_VIEWER::SaveSettings( APP_SETTINGS_BASE *aCfg ) TRANSFER_SETTING( opengl_AA_disableOnMove, FL_RENDER_OPENGL_AA_DISABLE_ON_MOVE ); TRANSFER_SETTING( opengl_copper_thickness, FL_RENDER_OPENGL_COPPER_THICKNESS ); TRANSFER_SETTING( opengl_show_model_bbox, FL_RENDER_OPENGL_SHOW_MODEL_BBOX ); - TRANSFER_SETTING( opengl_thickness_disableOnMove, - FL_RENDER_OPENGL_THICKNESS_DISABLE_ON_MOVE ); + TRANSFER_SETTING( opengl_highlight_on_rollover, FL_HIGHLIGHT_ROLLOVER_ITEM ); + TRANSFER_SETTING( opengl_thickness_disableOnMove, FL_RENDER_OPENGL_THICKNESS_DISABLE_ON_MOVE ); TRANSFER_SETTING( opengl_vias_disableOnMove, FL_RENDER_OPENGL_VIAS_DISABLE_ON_MOVE ); TRANSFER_SETTING( opengl_holes_disableOnMove, FL_RENDER_OPENGL_HOLES_DISABLE_ON_MOVE );