# HG changeset patch # User Sebastien Jodogne # Date 1764697393 -3600 # Node ID dee4cce1857a2c176ebe3e18a07c2f1a4f87b1e0 # Parent 66e2e0a35283938d57bc4435ccc1ad2176245cbb cppcheck diff -r 66e2e0a35283 -r dee4cce1857a Applications/Resources/RunCppCheck-2.17.1.sh --- a/Applications/Resources/RunCppCheck-2.17.1.sh Tue Dec 02 14:30:15 2025 +0100 +++ b/Applications/Resources/RunCppCheck-2.17.1.sh Tue Dec 02 18:43:13 2025 +0100 @@ -12,6 +12,10 @@ cat < /tmp/cppcheck-suppressions.txt assertWithSideEffect:../../OrthancStone/Sources/Loaders/OrthancMultiframeVolumeLoader.cpp:341 assertWithSideEffect:../../OrthancStone/Sources/Loaders/OrthancMultiframeVolumeLoader.cpp:342 +constParameterPointer:../../OrthancStone/Sources/Platforms/WebAssembly/WebAssemblyOracle.cpp:59 +constVariableReference:../../OrthancStone/Sources/Scene2D/GrayscaleWindowingSceneTracker.cpp:53 +knownConditionTrueFalse:../../OrthancStone/Sources/Toolbox/ImageGeometry.cpp:184 +unusedStructMember:../../OrthancStone/Sources/Platforms/WebAssembly/WebAssemblyOracle.cpp:293 EOF CPPCHECK_BUILD_DIR=/tmp/cppcheck-build-dir-stone-2.7.1/ diff -r 66e2e0a35283 -r dee4cce1857a OrthancStone/Sources/Scene2D/CairoCompositor.cpp --- a/OrthancStone/Sources/Scene2D/CairoCompositor.cpp Tue Dec 02 14:30:15 2025 +0100 +++ b/OrthancStone/Sources/Scene2D/CairoCompositor.cpp Tue Dec 02 18:43:13 2025 +0100 @@ -98,7 +98,7 @@ CairoCompositor::CairoCompositor(unsigned int canvasWidth, unsigned int canvasHeight) { - ResetScene(); + ResetSceneInternal(); canvas_.SetSize(canvasWidth, canvasHeight, false); } diff -r 66e2e0a35283 -r dee4cce1857a OrthancStone/Sources/Scene2D/CairoCompositor.h --- a/OrthancStone/Sources/Scene2D/CairoCompositor.h Tue Dec 02 14:30:15 2025 +0100 +++ b/OrthancStone/Sources/Scene2D/CairoCompositor.h Tue Dec 02 18:43:13 2025 +0100 @@ -50,6 +50,11 @@ virtual Internals::CompositorHelper::ILayerRenderer* Create(const ISceneLayer& layer) ORTHANC_OVERRIDE; + void ResetSceneInternal() + { + helper_.reset(new Internals::CompositorHelper(*this)); + } + public: CairoCompositor(unsigned int canvasWidth, unsigned int canvasHeight); @@ -88,7 +93,7 @@ virtual void ResetScene() ORTHANC_OVERRIDE { - helper_.reset(new Internals::CompositorHelper(*this)); + ResetSceneInternal(); } Orthanc::ImageAccessor* RenderText(size_t fontIndex, diff -r 66e2e0a35283 -r dee4cce1857a OrthancStone/Sources/Scene2D/Internals/CairoBaseRenderer.h --- a/OrthancStone/Sources/Scene2D/Internals/CairoBaseRenderer.h Tue Dec 02 14:30:15 2025 +0100 +++ b/OrthancStone/Sources/Scene2D/Internals/CairoBaseRenderer.h Tue Dec 02 18:43:13 2025 +0100 @@ -38,6 +38,11 @@ ICairoContextProvider& target_; std::unique_ptr layer_; + void UpdateInternal(const ISceneLayer& layer) + { + layer_.reset(layer.Clone()); + } + protected: template const T& GetLayer() const @@ -55,12 +60,12 @@ const ISceneLayer& layer) : target_(target) { - Update(layer); + UpdateInternal(layer); } virtual void Update(const ISceneLayer& layer) ORTHANC_OVERRIDE { - layer_.reset(layer.Clone()); + UpdateInternal(layer); } }; } diff -r 66e2e0a35283 -r dee4cce1857a OrthancStone/Sources/Scene2D/Internals/CairoColorTextureRenderer.cpp --- a/OrthancStone/Sources/Scene2D/Internals/CairoColorTextureRenderer.cpp Tue Dec 02 14:30:15 2025 +0100 +++ b/OrthancStone/Sources/Scene2D/Internals/CairoColorTextureRenderer.cpp Tue Dec 02 18:43:13 2025 +0100 @@ -33,11 +33,11 @@ const ISceneLayer& layer) : target_(target) { - Update(layer); + UpdateInternal(layer); } - void CairoColorTextureRenderer::Update(const ISceneLayer& layer) + void CairoColorTextureRenderer::UpdateInternal(const ISceneLayer& layer) { const ColorTextureSceneLayer& l = dynamic_cast(layer); diff -r 66e2e0a35283 -r dee4cce1857a OrthancStone/Sources/Scene2D/Internals/CairoColorTextureRenderer.h --- a/OrthancStone/Sources/Scene2D/Internals/CairoColorTextureRenderer.h Tue Dec 02 14:30:15 2025 +0100 +++ b/OrthancStone/Sources/Scene2D/Internals/CairoColorTextureRenderer.h Tue Dec 02 18:43:13 2025 +0100 @@ -39,12 +39,17 @@ AffineTransform2D textureTransform_; bool isLinearInterpolation_; + void UpdateInternal(const ISceneLayer& layer); + public: CairoColorTextureRenderer(ICairoContextProvider& target, const ISceneLayer& layer); - virtual void Update(const ISceneLayer& layer) ORTHANC_OVERRIDE; - + virtual void Update(const ISceneLayer& layer) ORTHANC_OVERRIDE + { + UpdateInternal(layer); + } + virtual void Render(const AffineTransform2D& transform, unsigned int canvasWidth, unsigned int canvasHeight) ORTHANC_OVERRIDE diff -r 66e2e0a35283 -r dee4cce1857a OrthancStone/Sources/Scene2D/Internals/CairoFloatTextureRenderer.cpp --- a/OrthancStone/Sources/Scene2D/Internals/CairoFloatTextureRenderer.cpp Tue Dec 02 14:30:15 2025 +0100 +++ b/OrthancStone/Sources/Scene2D/Internals/CairoFloatTextureRenderer.cpp Tue Dec 02 18:43:13 2025 +0100 @@ -30,7 +30,7 @@ { namespace Internals { - void CairoFloatTextureRenderer::Update(const ISceneLayer& layer) + void CairoFloatTextureRenderer::UpdateInternal(const ISceneLayer& layer) { const FloatTextureSceneLayer& l = dynamic_cast(layer); diff -r 66e2e0a35283 -r dee4cce1857a OrthancStone/Sources/Scene2D/Internals/CairoFloatTextureRenderer.h --- a/OrthancStone/Sources/Scene2D/Internals/CairoFloatTextureRenderer.h Tue Dec 02 14:30:15 2025 +0100 +++ b/OrthancStone/Sources/Scene2D/Internals/CairoFloatTextureRenderer.h Tue Dec 02 18:43:13 2025 +0100 @@ -39,15 +39,20 @@ AffineTransform2D textureTransform_; bool isLinearInterpolation_; + void UpdateInternal(const ISceneLayer& layer); + public: CairoFloatTextureRenderer(ICairoContextProvider& target, const ISceneLayer& layer) : target_(target) { - Update(layer); + UpdateInternal(layer); } - virtual void Update(const ISceneLayer& layer) ORTHANC_OVERRIDE; + virtual void Update(const ISceneLayer& layer) ORTHANC_OVERRIDE + { + UpdateInternal(layer); + } virtual void Render(const AffineTransform2D& transform, unsigned int canvasWidth, diff -r 66e2e0a35283 -r dee4cce1857a OrthancStone/Sources/Scene2D/Internals/CairoInfoPanelRenderer.cpp --- a/OrthancStone/Sources/Scene2D/Internals/CairoInfoPanelRenderer.cpp Tue Dec 02 14:30:15 2025 +0100 +++ b/OrthancStone/Sources/Scene2D/Internals/CairoInfoPanelRenderer.cpp Tue Dec 02 18:43:13 2025 +0100 @@ -29,7 +29,7 @@ { namespace Internals { - void CairoInfoPanelRenderer::Update(const ISceneLayer& layer) + void CairoInfoPanelRenderer::UpdateInternal(const ISceneLayer& layer) { const InfoPanelSceneLayer& l = dynamic_cast(layer); diff -r 66e2e0a35283 -r dee4cce1857a OrthancStone/Sources/Scene2D/Internals/CairoInfoPanelRenderer.h --- a/OrthancStone/Sources/Scene2D/Internals/CairoInfoPanelRenderer.h Tue Dec 02 14:30:15 2025 +0100 +++ b/OrthancStone/Sources/Scene2D/Internals/CairoInfoPanelRenderer.h Tue Dec 02 18:43:13 2025 +0100 @@ -40,6 +40,8 @@ bool isLinearInterpolation_; bool applySceneRotation_; + void UpdateInternal(const ISceneLayer& layer); + public: CairoInfoPanelRenderer(ICairoContextProvider& target, const ISceneLayer& layer) : @@ -48,10 +50,13 @@ applySceneRotation_(false) { - Update(layer); + UpdateInternal(layer); } - virtual void Update(const ISceneLayer& layer) ORTHANC_OVERRIDE; + virtual void Update(const ISceneLayer& layer) ORTHANC_OVERRIDE + { + UpdateInternal(layer); + } virtual void Render(const AffineTransform2D& transform, unsigned int canvasWidth, diff -r 66e2e0a35283 -r dee4cce1857a OrthancStone/Sources/Scene2D/Internals/CairoLookupTableTextureRenderer.cpp --- a/OrthancStone/Sources/Scene2D/Internals/CairoLookupTableTextureRenderer.cpp Tue Dec 02 14:30:15 2025 +0100 +++ b/OrthancStone/Sources/Scene2D/Internals/CairoLookupTableTextureRenderer.cpp Tue Dec 02 18:43:13 2025 +0100 @@ -32,7 +32,7 @@ { namespace Internals { - void CairoLookupTableTextureRenderer::Update(const ISceneLayer& layer) + void CairoLookupTableTextureRenderer::UpdateInternal(const ISceneLayer& layer) { const LookupTableTextureSceneLayer& l = dynamic_cast(layer); diff -r 66e2e0a35283 -r dee4cce1857a OrthancStone/Sources/Scene2D/Internals/CairoLookupTableTextureRenderer.h --- a/OrthancStone/Sources/Scene2D/Internals/CairoLookupTableTextureRenderer.h Tue Dec 02 14:30:15 2025 +0100 +++ b/OrthancStone/Sources/Scene2D/Internals/CairoLookupTableTextureRenderer.h Tue Dec 02 18:43:13 2025 +0100 @@ -39,15 +39,20 @@ AffineTransform2D textureTransform_; bool isLinearInterpolation_; + void UpdateInternal(const ISceneLayer& layer); + public: CairoLookupTableTextureRenderer(ICairoContextProvider& target, const ISceneLayer& layer) : target_(target) { - Update(layer); + UpdateInternal(layer); } - virtual void Update(const ISceneLayer& layer) ORTHANC_OVERRIDE; + virtual void Update(const ISceneLayer& layer) ORTHANC_OVERRIDE + { + UpdateInternal(layer); + } virtual void Render(const AffineTransform2D& transform, unsigned int canvasWidth, diff -r 66e2e0a35283 -r dee4cce1857a OrthancStone/Sources/Scene2D/Internals/MacroLayerRenderer.cpp --- a/OrthancStone/Sources/Scene2D/Internals/MacroLayerRenderer.cpp Tue Dec 02 14:30:15 2025 +0100 +++ b/OrthancStone/Sources/Scene2D/Internals/MacroLayerRenderer.cpp Tue Dec 02 18:43:13 2025 +0100 @@ -52,7 +52,7 @@ } - void MacroLayerRenderer::Update(const ISceneLayer& layer) + void MacroLayerRenderer::UpdateInternal(const ISceneLayer& layer) { const MacroSceneLayer& macro = dynamic_cast(layer); diff -r 66e2e0a35283 -r dee4cce1857a OrthancStone/Sources/Scene2D/Internals/MacroLayerRenderer.h --- a/OrthancStone/Sources/Scene2D/Internals/MacroLayerRenderer.h Tue Dec 02 14:30:15 2025 +0100 +++ b/OrthancStone/Sources/Scene2D/Internals/MacroLayerRenderer.h Tue Dec 02 18:43:13 2025 +0100 @@ -39,12 +39,14 @@ void Clear(); + void UpdateInternal(const ISceneLayer& layer); + public: MacroLayerRenderer(Internals::CompositorHelper::IRendererFactory& factory, const ISceneLayer& layer) : factory_(factory) { - Update(layer); + UpdateInternal(layer); } virtual ~MacroLayerRenderer() @@ -56,7 +58,10 @@ unsigned int canvasWidth, unsigned int canvasHeight) ORTHANC_OVERRIDE; - virtual void Update(const ISceneLayer& layer) ORTHANC_OVERRIDE; + virtual void Update(const ISceneLayer& layer) ORTHANC_OVERRIDE + { + UpdateInternal(layer); + } }; } } diff -r 66e2e0a35283 -r dee4cce1857a OrthancStone/Sources/Scene2D/OpenGLCompositor.cpp --- a/OrthancStone/Sources/Scene2D/OpenGLCompositor.cpp Tue Dec 02 14:30:15 2025 +0100 +++ b/OrthancStone/Sources/Scene2D/OpenGLCompositor.cpp Tue Dec 02 18:43:13 2025 +0100 @@ -150,7 +150,7 @@ canvasWidth_(0), canvasHeight_(0) { - ResetScene(); + ResetSceneInternal(); } OpenGLCompositor::~OpenGLCompositor() diff -r 66e2e0a35283 -r dee4cce1857a OrthancStone/Sources/Scene2D/OpenGLCompositor.h --- a/OrthancStone/Sources/Scene2D/OpenGLCompositor.h Tue Dec 02 14:30:15 2025 +0100 +++ b/OrthancStone/Sources/Scene2D/OpenGLCompositor.h Tue Dec 02 18:43:13 2025 +0100 @@ -53,6 +53,11 @@ virtual Internals::CompositorHelper::ILayerRenderer* Create(const ISceneLayer& layer) ORTHANC_OVERRIDE; + void ResetSceneInternal() + { + helper_.reset(new Internals::CompositorHelper(*this)); + } + public: explicit OpenGLCompositor(OpenGL::IOpenGLContext& context); @@ -62,7 +67,7 @@ virtual void ResetScene() ORTHANC_OVERRIDE { - helper_.reset(new Internals::CompositorHelper(*this)); + ResetSceneInternal(); } void SetFont(size_t index, const GlyphBitmapAlphabet& dict); diff -r 66e2e0a35283 -r dee4cce1857a OrthancStone/Sources/Scene2D/ZoomSceneTracker.cpp --- a/OrthancStone/Sources/Scene2D/ZoomSceneTracker.cpp Tue Dec 02 14:30:15 2025 +0100 +++ b/OrthancStone/Sources/Scene2D/ZoomSceneTracker.cpp Tue Dec 02 18:43:13 2025 +0100 @@ -77,12 +77,12 @@ z = MIN_ZOOM + (MAX_ZOOM - MIN_ZOOM) * (dy + 1.0) / 2.0; } - double zoom = pow(2.0, z); - ViewportLocker locker(viewport_); if (locker.IsValid()) { + const double zoom = pow(2.0, z); + locker.GetController().SetSceneToCanvasTransform( AffineTransform2D::Combine( AffineTransform2D::CreateScaling(zoom, zoom), diff -r 66e2e0a35283 -r dee4cce1857a OrthancStone/Sources/Scene2DViewport/CreateAngleMeasureTracker.cpp --- a/OrthancStone/Sources/Scene2DViewport/CreateAngleMeasureTracker.cpp Tue Dec 02 14:30:15 2025 +0100 +++ b/OrthancStone/Sources/Scene2DViewport/CreateAngleMeasureTracker.cpp Tue Dec 02 18:43:13 2025 +0100 @@ -36,7 +36,7 @@ { std::unique_ptr lock(GetViewportLock()); - Scene2D& scene = lock->GetController().GetScene(); + const Scene2D& scene = lock->GetController().GetScene(); point = e.GetMainPosition().Apply(scene.GetCanvasToSceneTransform()); } diff -r 66e2e0a35283 -r dee4cce1857a OrthancStone/Sources/Scene2DViewport/EditLineMeasureTracker.cpp --- a/OrthancStone/Sources/Scene2DViewport/EditLineMeasureTracker.cpp Tue Dec 02 14:30:15 2025 +0100 +++ b/OrthancStone/Sources/Scene2DViewport/EditLineMeasureTracker.cpp Tue Dec 02 18:43:13 2025 +0100 @@ -38,7 +38,7 @@ { std::unique_ptr lock(GetViewportLock()); - Scene2D& scene = lock->GetController().GetScene(); + const Scene2D& scene = lock->GetController().GetScene(); scenePos = e.GetMainPosition().Apply(scene.GetCanvasToSceneTransform()); } diff -r 66e2e0a35283 -r dee4cce1857a OrthancStone/Sources/Scene2DViewport/MeasureToolsToolbox.cpp --- a/OrthancStone/Sources/Scene2DViewport/MeasureToolsToolbox.cpp Tue Dec 02 14:30:15 2025 +0100 +++ b/OrthancStone/Sources/Scene2DViewport/MeasureToolsToolbox.cpp Tue Dec 02 18:43:13 2025 +0100 @@ -297,7 +297,7 @@ for the actual text */ void SetTextLayerOutlineProperties( - Scene2D& scene + const Scene2D& scene , boost::shared_ptr layerHolder , const char* text , ScenePoint2D p @@ -330,7 +330,6 @@ TEXT_OUTLINE_COLOR_BLUE); } - ScenePoint2D textAnchor; int offIndex = i - startingLayerIndex; ORTHANC_ASSERT(offIndex >= 0 && offIndex < 5); textLayer->SetPosition( @@ -341,7 +340,7 @@ } #else void SetTextLayerProperties( - Scene2D& scene + const Scene2D& scene , boost::shared_ptr layerHolder , const char* text , ScenePoint2D p @@ -352,8 +351,6 @@ { textLayer->SetText(text); textLayer->SetColor(TEXT_COLOR_RED, TEXT_COLOR_GREEN, TEXT_COLOR_BLUE); - - ScenePoint2D textAnchor; textLayer->SetPosition(p.GetX(), p.GetY()); } } diff -r 66e2e0a35283 -r dee4cce1857a OrthancStone/Sources/Scene2DViewport/MeasureToolsToolbox.h --- a/OrthancStone/Sources/Scene2DViewport/MeasureToolsToolbox.h Tue Dec 02 14:30:15 2025 +0100 +++ b/OrthancStone/Sources/Scene2DViewport/MeasureToolsToolbox.h Tue Dec 02 18:43:13 2025 +0100 @@ -183,14 +183,14 @@ from startingLayerIndex, up to (and not including) startingLayerIndex+5. */ void SetTextLayerOutlineProperties( - Scene2D& scene + const Scene2D& scene , boost::shared_ptr layerHolder , const char* text , ScenePoint2D p , int startingLayerIndex); #else void SetTextLayerProperties( - Scene2D& scene + const Scene2D& scene , boost::shared_ptr layerHolder , const char* text , ScenePoint2D p diff -r 66e2e0a35283 -r dee4cce1857a OrthancStone/Sources/Toolbox/DebugDrawing2D.cpp --- a/OrthancStone/Sources/Toolbox/DebugDrawing2D.cpp Tue Dec 02 14:30:15 2025 +0100 +++ b/OrthancStone/Sources/Toolbox/DebugDrawing2D.cpp Tue Dec 02 18:43:13 2025 +0100 @@ -23,6 +23,8 @@ #include "DebugDrawing2D.h" +#include + #include @@ -125,6 +127,11 @@ } FILE* fp = fopen(path.c_str(), "w"); + if (fp == NULL) + { + throw Orthanc::OrthancException(Orthanc::ErrorCode_CannotWriteFile); + } + fprintf(fp, "\n"); fprintf(fp, "\n"); fprintf(fp, "\n", ww, hh, extent_.GetWidth(), extent_.GetHeight()); diff -r 66e2e0a35283 -r dee4cce1857a OrthancStone/Sources/Toolbox/DicomStructuredReport.cpp --- a/OrthancStone/Sources/Toolbox/DicomStructuredReport.cpp Tue Dec 02 14:30:15 2025 +0100 +++ b/OrthancStone/Sources/Toolbox/DicomStructuredReport.cpp Tue Dec 02 18:43:13 2025 +0100 @@ -989,7 +989,7 @@ size_t pos = s.find('.'); if (pos != std::string::npos) { - s = s.substr(0, pos); + s.resize(pos); } s = "\021Series Date Time:\022 " + GetMainDicomTags().GetStringValue(Orthanc::DICOM_TAG_SERIES_DATE, "", false) + " at " + s; diff -r 66e2e0a35283 -r dee4cce1857a OrthancStone/Sources/Toolbox/ImageGeometry.cpp --- a/OrthancStone/Sources/Toolbox/ImageGeometry.cpp Tue Dec 02 14:30:15 2025 +0100 +++ b/OrthancStone/Sources/Toolbox/ImageGeometry.cpp Tue Dec 02 18:43:13 2025 +0100 @@ -136,7 +136,7 @@ bool HasOffsetX, bool HasOffsetY> static void ApplyAffineTransformToRow(typename Reader::PixelType* p, - Reader& reader, + const Reader& reader, unsigned int x1, unsigned int x2, float positionX, diff -r 66e2e0a35283 -r dee4cce1857a OrthancStone/Sources/Volumes/ImageBuffer3D.cpp --- a/OrthancStone/Sources/Volumes/ImageBuffer3D.cpp Tue Dec 02 14:30:15 2025 +0100 +++ b/OrthancStone/Sources/Volumes/ImageBuffer3D.cpp Tue Dec 02 18:43:13 2025 +0100 @@ -163,7 +163,7 @@ uint64_t ImageBuffer3D::GetEstimatedMemorySize() const { - return image_.GetPitch() * image_.GetHeight() * Orthanc::GetBytesPerPixel(format_); + return static_cast(image_.GetPitch()) * image_.GetHeight() * Orthanc::GetBytesPerPixel(format_); } @@ -309,6 +309,19 @@ } + ImageBuffer3D::SliceWriter::~SliceWriter() + { + try + { + Flush(); + } + catch (Orthanc::OrthancException& e) + { + LOG(ERROR) << "Exception in destructor: " << e.What(); + } + } + + uint8_t ImageBuffer3D::GetVoxelGrayscale8(unsigned int x, unsigned int y, unsigned int z) const diff -r 66e2e0a35283 -r dee4cce1857a OrthancStone/Sources/Volumes/ImageBuffer3D.h --- a/OrthancStone/Sources/Volumes/ImageBuffer3D.h Tue Dec 02 14:30:15 2025 +0100 +++ b/OrthancStone/Sources/Volumes/ImageBuffer3D.h Tue Dec 02 18:43:13 2025 +0100 @@ -240,10 +240,7 @@ VolumeProjection projection, unsigned int slice); - ~SliceWriter() - { - Flush(); - } + ~SliceWriter(); const Orthanc::ImageAccessor& GetAccessor() const {