Pārlūkot izejas kodu

Hopefully fixed buttons without making leak.

Michał W. Urbańczyk 18 gadi atpakaļ
vecāks
revīzija
449e7b6773
3 mainītis faili ar 10 papildinājumiem un 2 dzēšanām
  1. 3 1
      AdventureMapButton.h
  2. 6 0
      CPlayerInterface.cpp
  3. 1 1
      CPlayerInterface.h

+ 3 - 1
AdventureMapButton.h

@@ -25,7 +25,8 @@ AdventureMapButton<T>::AdventureMapButton
 	name=Name;
 	helpBox=HelpBox;
 	int est = LOCPLINT->playerID;
-	CDefHandler * temp = CGI->spriteh->giveDef(defName); //todo: moze cieknac
+	CDefHandler * temp = CGI->spriteh->giveDef(defName); 
+	temp->notFreeImgs = true;
 	for (int i=0;i<temp->ourImages.size();i++)
 	{
 		imgs.resize(1);
@@ -39,6 +40,7 @@ AdventureMapButton<T>::AdventureMapButton
 		for (int i=0; i<add->size();i++)
 		{
 			temp = CGI->spriteh->giveDef((*add)[i]);
+			temp->notFreeImgs = true;
 			for (int j=0;j<temp->ourImages.size();j++)
 			{
 				imgs[i+1].push_back(temp->ourImages[j].bitmap);

+ 6 - 0
CPlayerInterface.cpp

@@ -316,6 +316,12 @@ CButtonBase::CButtonBase()
 	ourObj=NULL;
 	state=0;
 }
+CButtonBase::~CButtonBase()
+{
+	for(int i =0; i<imgs.size();i++)
+		for(int j=0;j<imgs[i].size();j++)
+			SDL_FreeSurface(imgs[i][j]);
+}
 void CButtonBase::show(SDL_Surface * to)
 {
 	if(!to)

+ 1 - 1
CPlayerInterface.h

@@ -55,7 +55,7 @@ public:
 	virtual void activate()=0;
 	virtual void deactivate()=0;
 	CButtonBase();
-	virtual ~CButtonBase(){};
+	virtual ~CButtonBase();
 };
 class ClickableL : public virtual CIntObject  //for left-clicks
 {