From 9b7802354fa49caeff6dcc3b4eb630b5bde692e6 Mon Sep 17 00:00:00 2001 From: Stefano Ceccherini Date: Tue, 28 Jul 2015 21:40:21 +0200 Subject: [PATCH] BChannelSlider: Fixed memory leak. At least, I think so. Check allocations in BChannelSlider::ThumbFor()- Also updated copyright and e-mail address. --- src/kits/interface/ChannelSlider.cpp | 34 ++++++++++++++++------------ 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/src/kits/interface/ChannelSlider.cpp b/src/kits/interface/ChannelSlider.cpp index 607ce55931..04d8ae54eb 100644 --- a/src/kits/interface/ChannelSlider.cpp +++ b/src/kits/interface/ChannelSlider.cpp @@ -1,9 +1,9 @@ /* - * Copyright 2005-2009, Haiku Inc. All Rights Reserved. + * Copyright 2005-2015, Haiku Inc. All Rights Reserved. * Distributed under the terms of the MIT License. * * Authors: - * Stefano Ceccherini (burton666@libero.it) + * Stefano Ceccherini (stefano.ceccherini@gmail.com) * Stephan Aßmus */ @@ -640,18 +640,22 @@ BChannelSlider::DrawThumb(BView* into, int32 channel, BPoint where, const BBitmap* BChannelSlider::ThumbFor(int32 channel, bool pressed) { - // TODO: Finish me (check allocations... etc) - if (fLeftKnob == NULL) { - if (fIsVertical) { - fLeftKnob = new (std::nothrow) BBitmap(BRect(0, 0, 11, 14), - B_CMAP8); - fLeftKnob->SetBits(kVerticalKnobData, sizeof(kVerticalKnobData), 0, - B_CMAP8); - } else { - fLeftKnob = new (std::nothrow) BBitmap(BRect(0, 0, 14, 11), - B_CMAP8); + if (fLeftKnob != NULL) + return fLeftKnob; + + if (fIsVertical) { + fLeftKnob = new (std::nothrow) BBitmap(BRect(0, 0, 11, 14), + B_CMAP8); + if (fLeftKnob != NULL) { + fLeftKnob->SetBits(kVerticalKnobData, + sizeof(kVerticalKnobData), 0, B_CMAP8); + } + } else { + fLeftKnob = new (std::nothrow) BBitmap(BRect(0, 0, 14, 11), + B_CMAP8); + if (fLeftKnob != NULL) { fLeftKnob->SetBits(kHorizontalKnobData, - sizeof(kHorizontalKnobData), 0, B_CMAP8); + sizeof(kHorizontalKnobData), 0, B_CMAP8); } } @@ -753,13 +757,15 @@ BChannelSlider::_FinishChange(bool update) if (!fAllChannels) { inMask = new (std::nothrow) bool[CountChannels()]; if (inMask) { - for (int i=0; i