From 50d78f98e540f0f440b270e3b51829605aee2fb0 Mon Sep 17 00:00:00 2001 From: Michael Pfeiffer Date: Thu, 13 Nov 2003 20:38:19 +0000 Subject: [PATCH] Bug fixed: virtual function must not be called in destructor. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@5352 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/apps/showimage/Filter.cpp | 1 - src/apps/showimage/ShowImageView.cpp | 15 +++++++++++---- src/apps/showimage/ShowImageView.h | 1 + 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/apps/showimage/Filter.cpp b/src/apps/showimage/Filter.cpp index 290bb9c9a9..62f04e65f9 100644 --- a/src/apps/showimage/Filter.cpp +++ b/src/apps/showimage/Filter.cpp @@ -42,7 +42,6 @@ Filter::Filter(BBitmap* image, BMessenger listener, uint32 what) Filter::~Filter() { - Stop(); delete fDestImage; } diff --git a/src/apps/showimage/ShowImageView.cpp b/src/apps/showimage/ShowImageView.cpp index 2bd195cbb5..0f2ab6455b 100644 --- a/src/apps/showimage/ShowImageView.cpp +++ b/src/apps/showimage/ShowImageView.cpp @@ -226,12 +226,19 @@ ShowImageView::AddToRecentDocuments() } void -ShowImageView::DeleteBitmap() +ShowImageView::DeleteScaler() { if (fScaler) { - delete fScaler; + fScaler->Stop(); + delete fScaler; fScaler = NULL; } +} + +void +ShowImageView::DeleteBitmap() +{ + DeleteScaler(); delete fpBitmap; fpBitmap = NULL; } @@ -535,7 +542,7 @@ Scaler* ShowImageView::GetScaler() { if (fScaler == NULL || fScaler->Scale() != fZoom) { - delete fScaler; + DeleteScaler(); BMessenger msgr(this, Window()); fScaler = new Scaler(fpBitmap, fZoom, msgr, MSG_INVALIDATE); fScaler->Start(); @@ -1334,7 +1341,7 @@ void ShowImageView::SetZoom(float zoom) { if (fScaleBilinear && fZoom != zoom) { - delete fScaler; fScaler = NULL; + DeleteScaler(); } fZoom = zoom; FixupScrollBars(); diff --git a/src/apps/showimage/ShowImageView.h b/src/apps/showimage/ShowImageView.h index b9054ad841..c3f2fec58b 100644 --- a/src/apps/showimage/ShowImageView.h +++ b/src/apps/showimage/ShowImageView.h @@ -110,6 +110,7 @@ private: void AnimateSelection(bool a); void Notify(const char* status); void AddToRecentDocuments(); + void DeleteScaler(); void DeleteBitmap(); int32 BytesPerPixel(color_space cs) const; inline void CopyPixel(uchar* dest, int32 destX, int32 destY, int32 destBPR, uchar* src, int32 x, int32 y, int32 bpr, int32 bpp);