From 520a7cf62c025bb52c9855784cce221cdb4498b3 Mon Sep 17 00:00:00 2001
From: John Beard <john.j.beard@gmail.com>
Date: Thu, 2 Jan 2025 19:24:39 +0800
Subject: [PATCH] GAL: ViewGetLOD should not be able to change the VIEW

Make the VIEW* parameter const. Since PCB_TEXT does a null-check,
it's not very clear if this can ever be null (and if it is,
why don't the other VIEW_ITEMs check?), so don't make them
all references too at this time.

Also dereference a few pointers a bit earlier to make non-null
promises sooner rather than later.
---
 eeschema/sch_line.cpp          |  2 +-
 eeschema/sch_line.h            |  2 +-
 gerbview/gerber_draw_item.cpp  |  2 +-
 gerbview/gerber_draw_item.h    |  2 +-
 include/view/view_item.h       |  2 +-
 pcbnew/footprint.cpp           |  2 +-
 pcbnew/footprint.h             |  2 +-
 pcbnew/pad.cpp                 | 10 +++++-----
 pcbnew/pad.h                   |  2 +-
 pcbnew/pcb_field.cpp           |  2 +-
 pcbnew/pcb_field.h             |  2 +-
 pcbnew/pcb_group.cpp           |  2 +-
 pcbnew/pcb_group.h             |  2 +-
 pcbnew/pcb_reference_image.cpp |  2 +-
 pcbnew/pcb_reference_image.h   |  2 +-
 pcbnew/pcb_shape.cpp           | 10 +++++-----
 pcbnew/pcb_shape.h             |  2 +-
 pcbnew/pcb_text.cpp            | 10 +++++-----
 pcbnew/pcb_text.h              |  2 +-
 pcbnew/pcb_textbox.cpp         | 10 +++++-----
 pcbnew/pcb_textbox.h           |  2 +-
 pcbnew/pcb_track.cpp           |  4 ++--
 pcbnew/pcb_track.h             |  4 ++--
 pcbnew/zone.cpp                |  2 +-
 pcbnew/zone.h                  |  2 +-
 25 files changed, 43 insertions(+), 43 deletions(-)

diff --git a/eeschema/sch_line.cpp b/eeschema/sch_line.cpp
index 92968b5301..9be6c2af44 100644
--- a/eeschema/sch_line.cpp
+++ b/eeschema/sch_line.cpp
@@ -195,7 +195,7 @@ std::vector<int> SCH_LINE::ViewGetLayers() const
 }
 
 
-double SCH_LINE::ViewGetLOD( int aLayer, KIGFX::VIEW* aView ) const
+double SCH_LINE::ViewGetLOD( int aLayer, const KIGFX::VIEW* aView ) const
 {
     if( aLayer == LAYER_OP_VOLTAGES )
     {
diff --git a/eeschema/sch_line.h b/eeschema/sch_line.h
index 2646c54c6c..184fd1d6d8 100644
--- a/eeschema/sch_line.h
+++ b/eeschema/sch_line.h
@@ -202,7 +202,7 @@ public:
 
     std::vector<int> ViewGetLayers() const override;
 
-    double ViewGetLOD( int aLayer, KIGFX::VIEW* aView ) const override;
+    double ViewGetLOD( int aLayer, const KIGFX::VIEW* aView ) const override;
 
     const BOX2I GetBoundingBox() const override;
 
diff --git a/gerbview/gerber_draw_item.cpp b/gerbview/gerber_draw_item.cpp
index 7a90a9272d..454b75c903 100644
--- a/gerbview/gerber_draw_item.cpp
+++ b/gerbview/gerber_draw_item.cpp
@@ -979,7 +979,7 @@ const BOX2I GERBER_DRAW_ITEM::ViewBBox() const
 }
 
 
-double GERBER_DRAW_ITEM::ViewGetLOD( int aLayer, KIGFX::VIEW* aView ) const
+double GERBER_DRAW_ITEM::ViewGetLOD( int aLayer, const KIGFX::VIEW* aView ) const
 {
     // DCodes will be shown only if zoom is appropriate:
     // Returns the level of detail of the item.
diff --git a/gerbview/gerber_draw_item.h b/gerbview/gerber_draw_item.h
index 503c5c36b6..a5a8c5099a 100644
--- a/gerbview/gerber_draw_item.h
+++ b/gerbview/gerber_draw_item.h
@@ -214,7 +214,7 @@ public:
     virtual const BOX2I ViewBBox() const override;
 
     /// @copydoc VIEW_ITEM::ViewGetLOD()
-    double ViewGetLOD( int aLayer, KIGFX::VIEW* aView ) const override;
+    double ViewGetLOD( int aLayer, const KIGFX::VIEW* aView ) const override;
 
     ///< @copydoc EDA_ITEM::Visit()
     INSPECT_RESULT Visit( INSPECTOR inspector, void* testData,
diff --git a/include/view/view_item.h b/include/view/view_item.h
index 13777cb661..a5687ac27f 100644
--- a/include/view/view_item.h
+++ b/include/view/view_item.h
@@ -145,7 +145,7 @@ public:
      * @return the level of detail. 0 always shows the item, because the actual zoom level
      *         (or VIEW scale) is always > 0
      */
-    virtual double ViewGetLOD( int aLayer, VIEW* aView ) const
+    virtual double ViewGetLOD( int aLayer, const VIEW* aView ) const
     {
         // By default always show the item
         return LOD_SHOW;
diff --git a/pcbnew/footprint.cpp b/pcbnew/footprint.cpp
index cac94a3ef5..9508f11096 100644
--- a/pcbnew/footprint.cpp
+++ b/pcbnew/footprint.cpp
@@ -2257,7 +2257,7 @@ std::vector<int> FOOTPRINT::ViewGetLayers() const
 }
 
 
-double FOOTPRINT::ViewGetLOD( int aLayer, KIGFX::VIEW* aView ) const
+double FOOTPRINT::ViewGetLOD( int aLayer, const KIGFX::VIEW* aView ) const
 {
     if( aLayer == LAYER_LOCKED_ITEM_SHADOW )
     {
diff --git a/pcbnew/footprint.h b/pcbnew/footprint.h
index e697bb81eb..9baeaae0c2 100644
--- a/pcbnew/footprint.h
+++ b/pcbnew/footprint.h
@@ -909,7 +909,7 @@ public:
 
     virtual std::vector<int> ViewGetLayers() const override;
 
-    double ViewGetLOD( int aLayer, KIGFX::VIEW* aView ) const override;
+    double ViewGetLOD( int aLayer, const KIGFX::VIEW* aView ) const override;
 
     virtual const BOX2I ViewBBox() const override;
 
diff --git a/pcbnew/pad.cpp b/pcbnew/pad.cpp
index 0b8e616ee6..eecd0e1afa 100644
--- a/pcbnew/pad.cpp
+++ b/pcbnew/pad.cpp
@@ -1724,10 +1724,10 @@ std::vector<int> PAD::ViewGetLayers() const
 }
 
 
-double PAD::ViewGetLOD( int aLayer, KIGFX::VIEW* aView ) const
+double PAD::ViewGetLOD( int aLayer, const KIGFX::VIEW* aView ) const
 {
-    PCB_PAINTER*         painter = static_cast<PCB_PAINTER*>( aView->GetPainter() );
-    PCB_RENDER_SETTINGS* renderSettings = painter->GetSettings();
+    PCB_PAINTER&         painter = static_cast<PCB_PAINTER&>( *aView->GetPainter() );
+    PCB_RENDER_SETTINGS& renderSettings = *painter.GetSettings();
     const BOARD*         board = GetBoard();
 
     // Meta control for hiding all pads
@@ -1752,10 +1752,10 @@ double PAD::ViewGetLOD( int aLayer, KIGFX::VIEW* aView ) const
     }
     else if( IsNetnameLayer( aLayer ) )
     {
-        if( renderSettings->GetHighContrast() )
+        if( renderSettings.GetHighContrast() )
         {
             // Hide netnames unless pad is flashed to a high-contrast layer
-            if( !FlashLayer( renderSettings->GetPrimaryHighContrastLayer() ) )
+            if( !FlashLayer( renderSettings.GetPrimaryHighContrastLayer() ) )
                 return LOD_HIDE;
         }
         else
diff --git a/pcbnew/pad.h b/pcbnew/pad.h
index b03f497ec8..1bf528800b 100644
--- a/pcbnew/pad.h
+++ b/pcbnew/pad.h
@@ -872,7 +872,7 @@ public:
 
     virtual std::vector<int> ViewGetLayers() const override;
 
-    double ViewGetLOD( int aLayer, KIGFX::VIEW* aView ) const override;
+    double ViewGetLOD( int aLayer, const KIGFX::VIEW* aView ) const override;
 
     virtual const BOX2I ViewBBox() const override;
 
diff --git a/pcbnew/pcb_field.cpp b/pcbnew/pcb_field.cpp
index 91736b9647..0cbcadbf80 100644
--- a/pcbnew/pcb_field.cpp
+++ b/pcbnew/pcb_field.cpp
@@ -167,7 +167,7 @@ wxString PCB_FIELD::GetItemDescription( UNITS_PROVIDER* aUnitsProvider, bool aFu
 }
 
 
-double PCB_FIELD::ViewGetLOD( int aLayer, KIGFX::VIEW* aView ) const
+double PCB_FIELD::ViewGetLOD( int aLayer, const KIGFX::VIEW* aView ) const
 {
     if( !aView )
         return LOD_SHOW;
diff --git a/pcbnew/pcb_field.h b/pcbnew/pcb_field.h
index 85886dbc9c..e68def3ab9 100644
--- a/pcbnew/pcb_field.h
+++ b/pcbnew/pcb_field.h
@@ -76,7 +76,7 @@ public:
 
     wxString GetItemDescription( UNITS_PROVIDER* aUnitsProvider, bool aFull ) const override;
 
-    double ViewGetLOD( int aLayer, KIGFX::VIEW* aView ) const override;
+    double ViewGetLOD( int aLayer, const KIGFX::VIEW* aView ) const override;
 
     EDA_ITEM* Clone() const override;
 
diff --git a/pcbnew/pcb_group.cpp b/pcbnew/pcb_group.cpp
index 030261f8ce..67d83f5b8d 100644
--- a/pcbnew/pcb_group.cpp
+++ b/pcbnew/pcb_group.cpp
@@ -335,7 +335,7 @@ std::vector<int> PCB_GROUP::ViewGetLayers() const
 }
 
 
-double PCB_GROUP::ViewGetLOD( int aLayer, KIGFX::VIEW* aView ) const
+double PCB_GROUP::ViewGetLOD( int aLayer, const KIGFX::VIEW* aView ) const
 {
     if( aView->IsLayerVisible( LAYER_ANCHOR ) )
         return LOD_SHOW;
diff --git a/pcbnew/pcb_group.h b/pcbnew/pcb_group.h
index 17bc4f1861..1956613c52 100644
--- a/pcbnew/pcb_group.h
+++ b/pcbnew/pcb_group.h
@@ -175,7 +175,7 @@ public:
     std::vector<int> ViewGetLayers() const override;
 
     /// @copydoc VIEW_ITEM::ViewGetLOD
-    double ViewGetLOD( int aLayer, KIGFX::VIEW* aView ) const override;
+    double ViewGetLOD( int aLayer, const KIGFX::VIEW* aView ) const override;
 
     /// @copydoc BOARD_ITEM::Move
     void Move( const VECTOR2I& aMoveVector ) override;
diff --git a/pcbnew/pcb_reference_image.cpp b/pcbnew/pcb_reference_image.cpp
index 61cbd8f44c..4d7f2aaaaf 100644
--- a/pcbnew/pcb_reference_image.cpp
+++ b/pcbnew/pcb_reference_image.cpp
@@ -104,7 +104,7 @@ void PCB_REFERENCE_IMAGE::swapData( BOARD_ITEM* aItem )
 }
 
 
-double PCB_REFERENCE_IMAGE::ViewGetLOD( int aLayer, KIGFX::VIEW* aView ) const
+double PCB_REFERENCE_IMAGE::ViewGetLOD( int aLayer, const KIGFX::VIEW* aView ) const
 {
     PCB_PAINTER*         painter = static_cast<PCB_PAINTER*>( aView->GetPainter() );
     PCB_RENDER_SETTINGS* renderSettings = painter->GetSettings();
diff --git a/pcbnew/pcb_reference_image.h b/pcbnew/pcb_reference_image.h
index 88a8f5c44b..ffcecff6cd 100644
--- a/pcbnew/pcb_reference_image.h
+++ b/pcbnew/pcb_reference_image.h
@@ -58,7 +58,7 @@ public:
 
     wxString GetClass() const override { return wxT( "PCB_REFERENCE_IMAGE" ); }
 
-    double ViewGetLOD( int aLayer, KIGFX::VIEW* aView ) const override;
+    double ViewGetLOD( int aLayer, const KIGFX::VIEW* aView ) const override;
 
     const BOX2I GetBoundingBox() const override;
 
diff --git a/pcbnew/pcb_shape.cpp b/pcbnew/pcb_shape.cpp
index 27005b5fa2..e78aa8b798 100644
--- a/pcbnew/pcb_shape.cpp
+++ b/pcbnew/pcb_shape.cpp
@@ -569,10 +569,10 @@ void PCB_SHAPE::SetIsProxyItem( bool aIsProxy )
 }
 
 
-double PCB_SHAPE::ViewGetLOD( int aLayer, KIGFX::VIEW* aView ) const
+double PCB_SHAPE::ViewGetLOD( int aLayer, const KIGFX::VIEW* aView ) const
 {
-    KIGFX::PCB_PAINTER*  painter = static_cast<KIGFX::PCB_PAINTER*>( aView->GetPainter() );
-    KIGFX::PCB_RENDER_SETTINGS* renderSettings = painter->GetSettings();
+    KIGFX::PCB_PAINTER&         painter = static_cast<KIGFX::PCB_PAINTER&>( *aView->GetPainter() );
+    KIGFX::PCB_RENDER_SETTINGS& renderSettings = *painter.GetSettings();
 
     if( aLayer == LAYER_LOCKED_ITEM_SHADOW )
     {
@@ -581,9 +581,9 @@ double PCB_SHAPE::ViewGetLOD( int aLayer, KIGFX::VIEW* aView ) const
             return LOD_HIDE;
 
         // Hide shadow on dimmed tracks
-        if( renderSettings->GetHighContrast() )
+        if( renderSettings.GetHighContrast() )
         {
-            if( m_layer != renderSettings->GetPrimaryHighContrastLayer() )
+            if( m_layer != renderSettings.GetPrimaryHighContrastLayer() )
                 return LOD_HIDE;
         }
     }
diff --git a/pcbnew/pcb_shape.h b/pcbnew/pcb_shape.h
index 689a0e7a64..e21e6494bf 100644
--- a/pcbnew/pcb_shape.h
+++ b/pcbnew/pcb_shape.h
@@ -172,7 +172,7 @@ public:
     std::vector<int> ViewGetLayers() const override;
 
     ///< @copydoc VIEW_ITEM::ViewGetLOD
-    double ViewGetLOD( int aLayer, KIGFX::VIEW* aView ) const override;
+    double ViewGetLOD( int aLayer, const KIGFX::VIEW* aView ) const override;
 
     double Similarity( const BOARD_ITEM& aBoardItem ) const override;
 
diff --git a/pcbnew/pcb_text.cpp b/pcbnew/pcb_text.cpp
index 897b7e9c43..2b71b70439 100644
--- a/pcbnew/pcb_text.cpp
+++ b/pcbnew/pcb_text.cpp
@@ -209,13 +209,13 @@ std::vector<int> PCB_TEXT::ViewGetLayers() const
 }
 
 
-double PCB_TEXT::ViewGetLOD( int aLayer, KIGFX::VIEW* aView ) const
+double PCB_TEXT::ViewGetLOD( int aLayer, const KIGFX::VIEW* aView ) const
 {
     if( !aView )
         return LOD_SHOW;
 
-    KIGFX::PCB_PAINTER*  painter = static_cast<KIGFX::PCB_PAINTER*>( aView->GetPainter() );
-    KIGFX::PCB_RENDER_SETTINGS* renderSettings = painter->GetSettings();
+    KIGFX::PCB_PAINTER&         painter = static_cast<KIGFX::PCB_PAINTER&>( *aView->GetPainter() );
+    KIGFX::PCB_RENDER_SETTINGS& renderSettings = *painter.GetSettings();
 
     if( !aView->IsLayerVisible( GetLayer() ) )
         return LOD_HIDE;
@@ -223,9 +223,9 @@ double PCB_TEXT::ViewGetLOD( int aLayer, KIGFX::VIEW* aView ) const
     if( aLayer == LAYER_LOCKED_ITEM_SHADOW )
     {
         // Hide shadow on dimmed tracks
-        if( renderSettings->GetHighContrast() )
+        if( renderSettings.GetHighContrast() )
         {
-            if( m_layer != renderSettings->GetPrimaryHighContrastLayer() )
+            if( m_layer != renderSettings.GetPrimaryHighContrastLayer() )
                 return LOD_HIDE;
         }
     }
diff --git a/pcbnew/pcb_text.h b/pcbnew/pcb_text.h
index 73b74fdd28..905863014c 100644
--- a/pcbnew/pcb_text.h
+++ b/pcbnew/pcb_text.h
@@ -157,7 +157,7 @@ public:
     std::vector<int> ViewGetLayers() const override;
 
     ///< @copydoc VIEW_ITEM::ViewGetLOD
-    double ViewGetLOD( int aLayer, KIGFX::VIEW* aView ) const override;
+    double ViewGetLOD( int aLayer, const KIGFX::VIEW* aView ) const override;
 
     // Virtual function
     const BOX2I GetBoundingBox() const override;
diff --git a/pcbnew/pcb_textbox.cpp b/pcbnew/pcb_textbox.cpp
index 6aabbf9fe8..72e723ef8e 100644
--- a/pcbnew/pcb_textbox.cpp
+++ b/pcbnew/pcb_textbox.cpp
@@ -393,10 +393,10 @@ VECTOR2I PCB_TEXTBOX::GetDrawPos( bool aIsFlipped ) const
 }
 
 
-double PCB_TEXTBOX::ViewGetLOD( int aLayer, KIGFX::VIEW* aView ) const
+double PCB_TEXTBOX::ViewGetLOD( int aLayer, const KIGFX::VIEW* aView ) const
 {
-    KIGFX::PCB_PAINTER*  painter = static_cast<KIGFX::PCB_PAINTER*>( aView->GetPainter() );
-    KIGFX::PCB_RENDER_SETTINGS* renderSettings = painter->GetSettings();
+    KIGFX::PCB_PAINTER&         painter = static_cast<KIGFX::PCB_PAINTER&>( *aView->GetPainter() );
+    KIGFX::PCB_RENDER_SETTINGS& renderSettings = *painter.GetSettings();
 
     if( aLayer == LAYER_LOCKED_ITEM_SHADOW )
     {
@@ -405,9 +405,9 @@ double PCB_TEXTBOX::ViewGetLOD( int aLayer, KIGFX::VIEW* aView ) const
             return LOD_HIDE;
 
         // Hide shadow on dimmed tracks
-        if( renderSettings->GetHighContrast() )
+        if( renderSettings.GetHighContrast() )
         {
-            if( m_layer != renderSettings->GetPrimaryHighContrastLayer() )
+            if( m_layer != renderSettings.GetPrimaryHighContrastLayer() )
                 return LOD_HIDE;
         }
     }
diff --git a/pcbnew/pcb_textbox.h b/pcbnew/pcb_textbox.h
index 36f8219474..841aea80e1 100644
--- a/pcbnew/pcb_textbox.h
+++ b/pcbnew/pcb_textbox.h
@@ -147,7 +147,7 @@ public:
 
     BITMAPS GetMenuImage() const override;
 
-    double ViewGetLOD( int aLayer, KIGFX::VIEW* aView ) const override;
+    double ViewGetLOD( int aLayer, const KIGFX::VIEW* aView ) const override;
 
     std::vector<int> ViewGetLayers() const override;
 
diff --git a/pcbnew/pcb_track.cpp b/pcbnew/pcb_track.cpp
index 0526049de0..f055f78646 100644
--- a/pcbnew/pcb_track.cpp
+++ b/pcbnew/pcb_track.cpp
@@ -1350,7 +1350,7 @@ std::vector<int> PCB_TRACK::ViewGetLayers() const
 }
 
 
-double PCB_TRACK::ViewGetLOD( int aLayer, KIGFX::VIEW* aView ) const
+double PCB_TRACK::ViewGetLOD( int aLayer, const KIGFX::VIEW* aView ) const
 {
     PCB_PAINTER*         painter = static_cast<PCB_PAINTER*>( aView->GetPainter() );
     PCB_RENDER_SETTINGS* renderSettings = painter->GetSettings();
@@ -1467,7 +1467,7 @@ std::vector<int> PCB_VIA::ViewGetLayers() const
 }
 
 
-double PCB_VIA::ViewGetLOD( int aLayer, KIGFX::VIEW* aView ) const
+double PCB_VIA::ViewGetLOD( int aLayer, const KIGFX::VIEW* aView ) const
 {
     PCB_PAINTER*         painter = static_cast<PCB_PAINTER*>( aView->GetPainter() );
     PCB_RENDER_SETTINGS* renderSettings = painter->GetSettings();
diff --git a/pcbnew/pcb_track.h b/pcbnew/pcb_track.h
index feaa61f454..00673d701e 100644
--- a/pcbnew/pcb_track.h
+++ b/pcbnew/pcb_track.h
@@ -227,7 +227,7 @@ public:
 
     virtual std::vector<int> ViewGetLayers() const override;
 
-    double ViewGetLOD( int aLayer, KIGFX::VIEW* aView ) const override;
+    double ViewGetLOD( int aLayer, const KIGFX::VIEW* aView ) const override;
 
     const BOX2I ViewBBox() const override;
 
@@ -511,7 +511,7 @@ public:
 
     std::vector<int> ViewGetLayers() const override;
 
-    double ViewGetLOD( int aLayer, KIGFX::VIEW* aView ) const override;
+    double ViewGetLOD( int aLayer, const KIGFX::VIEW* aView ) const override;
 
     void Flip( const VECTOR2I& aCentre, FLIP_DIRECTION aFlipDirection ) override;
 
diff --git a/pcbnew/zone.cpp b/pcbnew/zone.cpp
index 2a5c8935c5..24ed7f59e8 100644
--- a/pcbnew/zone.cpp
+++ b/pcbnew/zone.cpp
@@ -536,7 +536,7 @@ std::vector<int> ZONE::ViewGetLayers() const
 }
 
 
-double ZONE::ViewGetLOD( int aLayer, KIGFX::VIEW* aView ) const
+double ZONE::ViewGetLOD( int aLayer, const KIGFX::VIEW* aView ) const
 {
     if( !aView )
         return LOD_SHOW;
diff --git a/pcbnew/zone.h b/pcbnew/zone.h
index 09010de0e7..424c9185b0 100644
--- a/pcbnew/zone.h
+++ b/pcbnew/zone.h
@@ -190,7 +190,7 @@ public:
 
     virtual std::vector<int> ViewGetLayers() const override;
 
-    double ViewGetLOD( int aLayer, KIGFX::VIEW* aView ) const override;
+    double ViewGetLOD( int aLayer, const KIGFX::VIEW* aView ) const override;
 
     void SetFillMode( ZONE_FILL_MODE aFillMode ) { m_fillMode = aFillMode; }
     ZONE_FILL_MODE GetFillMode() const { return m_fillMode; }