From 2717a1712755f6b6e44c28562fe987b43448c522 Mon Sep 17 00:00:00 2001 From: Simon Robertshaw Date: Wed, 13 Jun 2012 20:49:41 +0200 Subject: [PATCH 01/13] Use SDL by default --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index e76899c3f..cf663f26b 100644 --- a/Makefile +++ b/Makefile @@ -35,7 +35,7 @@ build/powder-x: LFLAGS := -lm -lbz2 -lfftw3f -framework SDL -framework Lua -fram build/powder-x.jnilib: CFLAGS += -DMACOSX -DUSE_JNI -I/Library/Frameworks/Lua.framework/Headers -I/System/Library/Frameworks/JavaVM.framework/Headers -DOGLR -DPIX32OGL -DPIXALPHA build/powder-x.jnilib: LFLAGS := -lm -lbz2 -lfftw3f -framework Lua -framework JavaVM -framework Cocoa -framework OpenGL -CFLAGS += -DGRAVFFT -DLUACONSOLE +CFLAGS += -DGRAVFFT -DLUACONSOLE -DUSE_SDL build/powder-release.exe: $(SOURCES) generate build/powder-res.o $(CPPC_WIN) $(CFLAGS) $(OFLAGS) $(LDFLAGS) $(SOURCES) $(LFLAGS) build/powder-res.o -o $@ From 1a13c3edec3b2683e0204e4e65acab62b0130b0a Mon Sep 17 00:00:00 2001 From: Simon Robertshaw Date: Mon, 18 Jun 2012 14:46:18 +0100 Subject: [PATCH 02/13] Use C++ allocation and deletion for Brush memory --- src/game/Brush.h | 12 ++++++------ src/game/EllipseBrush.h | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/game/Brush.h b/src/game/Brush.h index 34354c06f..0adcd9582 100644 --- a/src/game/Brush.h +++ b/src/game/Brush.h @@ -25,8 +25,8 @@ protected: if(!bitmap) return; if(outline) - free(outline); - outline = (unsigned char *)calloc(size.X*size.Y, sizeof(unsigned char)); + delete[] outline; + outline = new unsigned char[size.X*size.Y]; for(int x = 0; x < size.X; x++) { for(int y = 0; y < size.Y; y++) @@ -69,9 +69,9 @@ public: } virtual ~Brush() { if(bitmap) - delete bitmap; + delete[] bitmap; if(outline) - delete outline; + delete[] outline; } virtual void RenderRect(Graphics * g, ui::Point position1, ui::Point position2) { @@ -109,8 +109,8 @@ public: virtual void GenerateBitmap() { if(bitmap) - free(bitmap); - bitmap = (unsigned char *)calloc((size.X*size.Y), sizeof(unsigned char)); + delete[] bitmap; + bitmap = new unsigned char[size.X*size.Y]; for(int x = 0; x < size.X; x++) { for(int y = 0; y < size.Y; y++) diff --git a/src/game/EllipseBrush.h b/src/game/EllipseBrush.h index 8a1dc9aaa..ac05ef7e3 100644 --- a/src/game/EllipseBrush.h +++ b/src/game/EllipseBrush.h @@ -22,8 +22,8 @@ public: virtual void GenerateBitmap() { if(bitmap) - free(bitmap); - bitmap = (unsigned char*)calloc((size.X*size.Y), sizeof(unsigned char)); + delete[] bitmap; + bitmap = new unsigned char[size.X*size.Y]; int rx = radius.X; int ry = radius.Y; for(int x = 0; x <= radius.X*2; x++) From 741392f2c1c2de8134e4b76a288d1e8b711526cd Mon Sep 17 00:00:00 2001 From: Simon Robertshaw Date: Mon, 18 Jun 2012 15:25:24 +0100 Subject: [PATCH 03/13] Free platent and elements --- src/simulation/Simulation.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/simulation/Simulation.cpp b/src/simulation/Simulation.cpp index f92affb1a..1b9a85928 100644 --- a/src/simulation/Simulation.cpp +++ b/src/simulation/Simulation.cpp @@ -4228,6 +4228,8 @@ void Simulation::update_particles()//doesn't update the particles themselves, bu Simulation::~Simulation() { + delete[] elements; + delete[] platent; delete grav; delete air; } From 9d7a4e55f2a651ea8e420aab2cc5fa78998c1ddc Mon Sep 17 00:00:00 2001 From: Simon Robertshaw Date: Mon, 18 Jun 2012 15:27:57 +0100 Subject: [PATCH 04/13] Menu frees any added items --- src/game/GameModel.cpp | 4 ---- src/game/Menu.h | 9 +++++++++ 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/game/GameModel.cpp b/src/game/GameModel.cpp index 5c9344d8d..cf9324b37 100644 --- a/src/game/GameModel.cpp +++ b/src/game/GameModel.cpp @@ -170,10 +170,6 @@ GameModel::~GameModel() for(int i = 0; i < menuList.size(); i++) { - for(int j = 0; i < menuList[i]->GetToolList().size(); i++) - { - delete menuList[i]->GetToolList()[j]; - } delete menuList[i]; } for(int i = 0; i < brushList.size(); i++) diff --git a/src/game/Menu.h b/src/game/Menu.h index 1824190fc..261193e92 100644 --- a/src/game/Menu.h +++ b/src/game/Menu.h @@ -24,6 +24,15 @@ public: } + virtual ~Menu() + { + for(int i = 0; i < tools.size(); i++) + { + delete tools[i]; + } + tools.clear(); + } + vector GetToolList() { return tools; From edac8b54812a99708ef507db6018fa828dcad084 Mon Sep 17 00:00:00 2001 From: Simon Robertshaw Date: Mon, 18 Jun 2012 15:32:15 +0100 Subject: [PATCH 05/13] Free tools --- src/simulation/Simulation.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/simulation/Simulation.cpp b/src/simulation/Simulation.cpp index 1b9a85928..7c8241944 100644 --- a/src/simulation/Simulation.cpp +++ b/src/simulation/Simulation.cpp @@ -4232,6 +4232,8 @@ Simulation::~Simulation() delete[] platent; delete grav; delete air; + for(int i = 0; i < tools.size(); i++) + delete tools[i]; } Simulation::Simulation(): From 81423ba568544e3318d1d2eceba994198af2b198 Mon Sep 17 00:00:00 2001 From: Simon Robertshaw Date: Mon, 18 Jun 2012 15:45:31 +0100 Subject: [PATCH 06/13] RenderOptions controller should delete its callback --- src/render/RenderController.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/render/RenderController.cpp b/src/render/RenderController.cpp index c77f3818a..25e698f0c 100644 --- a/src/render/RenderController.cpp +++ b/src/render/RenderController.cpp @@ -61,6 +61,8 @@ RenderController::~RenderController() { { ui::Engine::Ref().CloseWindow(); } + if(callback) + delete callback; delete renderModel; } From fc86c240271c2a339f373eadfd507be9f5f31507 Mon Sep 17 00:00:00 2001 From: Simon Robertshaw Date: Mon, 18 Jun 2012 15:54:55 +0100 Subject: [PATCH 07/13] Better freeing for memory in GameSave --- src/client/GameSave.cpp | 39 +++++++++++++++++---------------------- 1 file changed, 17 insertions(+), 22 deletions(-) diff --git a/src/client/GameSave.cpp b/src/client/GameSave.cpp index 46a600f01..6cc80e75f 100644 --- a/src/client/GameSave.cpp +++ b/src/client/GameSave.cpp @@ -22,6 +22,8 @@ gravityMode(save.gravityMode), airMode(save.airMode), signs(save.signs) { + blockMap, blockMapPtr, fanVelX, fanVelXPtr, fanVelY, fanVelYPtr, particles = NULL; + setSize(save.blockWidth, save.blockHeight); particlesCount = save.particlesCount; @@ -33,6 +35,7 @@ signs(save.signs) GameSave::GameSave(int width, int height) { + blockMap, blockMapPtr, fanVelX, fanVelXPtr, fanVelY, fanVelYPtr, particles = NULL; setSize(width, height); } @@ -1672,26 +1675,18 @@ fin: GameSave::~GameSave() { - if(blockWidth && blockHeight) - { - if(particles) - { - delete[] particles; - } - if(blockMap) - { - delete[] blockMapPtr; - delete[] blockMap; - } - if(fanVelX) - { - delete[] fanVelXPtr; - delete[] fanVelX; - } - if(fanVelY) - { - delete[] fanVelYPtr; - delete[] fanVelY; - } - } + if(particles) + delete[] particles; + if(blockMap) + delete[] blockMap; + if(blockMapPtr) + delete[] blockMapPtr; + if(fanVelX) + delete[] fanVelX; + if(fanVelXPtr) + delete[] fanVelXPtr; + if(fanVelY) + delete[] fanVelY; + if(fanVelYPtr) + delete[] fanVelYPtr; } From 1fceab6e4af12964143a08089a5cb3d95775cbf6 Mon Sep 17 00:00:00 2001 From: Simon Robertshaw Date: Mon, 18 Jun 2012 15:57:41 +0100 Subject: [PATCH 08/13] Ensure partsSimIndex is freed upon success state of OPS parsing --- src/client/GameSave.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/client/GameSave.cpp b/src/client/GameSave.cpp index 6cc80e75f..a7b9fbf98 100644 --- a/src/client/GameSave.cpp +++ b/src/client/GameSave.cpp @@ -705,6 +705,8 @@ fin: bson_destroy(&b); if(freeIndices) free(freeIndices); + if(partsSimIndex) + free(partsSimIndex); } void GameSave::readPSv(char * data, int dataLength) From 83ccd65b1460230f02639d1feefacb47d9ad2ad3 Mon Sep 17 00:00:00 2001 From: Simon Robertshaw Date: Mon, 18 Jun 2012 16:00:34 +0100 Subject: [PATCH 09/13] Don't rely on Window class freeing for components that may not be added --- src/search/SearchView.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/search/SearchView.cpp b/src/search/SearchView.cpp index 47392faa5..2c56ae088 100644 --- a/src/search/SearchView.cpp +++ b/src/search/SearchView.cpp @@ -210,6 +210,13 @@ void SearchView::doSearch() SearchView::~SearchView() { + RemoveComponent(nextButton); + RemoveComponent(previousButton); + RemoveComponent(infoLabel); + + delete nextButton; + delete previousButton; + delete infoLabel; } void SearchView::NotifySortChanged(SearchModel * sender) From 5e301ba17c0b73c52189bac329b20143213817bd Mon Sep 17 00:00:00 2001 From: Simon Robertshaw Date: Mon, 18 Jun 2012 16:21:13 +0100 Subject: [PATCH 10/13] Controllers should free their callbacks and views --- src/console/ConsoleController.cpp | 7 ++++++- src/game/GameController.cpp | 1 + src/localbrowser/LocalBrowserController.cpp | 7 ++++++- src/login/LoginController.cpp | 1 + src/options/OptionsController.cpp | 3 +++ src/preview/PreviewController.cpp | 3 +++ src/render/RenderController.cpp | 1 + src/search/SearchController.cpp | 1 + src/ssave/SSaveController.cpp | 4 ++++ src/tags/TagsController.cpp | 7 ++++++- 10 files changed, 32 insertions(+), 3 deletions(-) diff --git a/src/console/ConsoleController.cpp b/src/console/ConsoleController.cpp index 7f1975d14..618137db3 100644 --- a/src/console/ConsoleController.cpp +++ b/src/console/ConsoleController.cpp @@ -70,6 +70,11 @@ ConsoleView * ConsoleController::GetView() } ConsoleController::~ConsoleController() { - // TODO Auto-generated destructor stub + if(ui::Engine::Ref().GetWindow() == consoleView) + ui::Engine::Ref().CloseWindow(); + if(callback) + delete callback; + delete consoleModel; + delete consoleView; } diff --git a/src/game/GameController.cpp b/src/game/GameController.cpp index 3031fb622..df5bf6880 100644 --- a/src/game/GameController.cpp +++ b/src/game/GameController.cpp @@ -161,6 +161,7 @@ GameController::~GameController() ui::Engine::Ref().CloseWindow(); } delete gameModel; + delete gameView; } GameView * GameController::GetView() diff --git a/src/localbrowser/LocalBrowserController.cpp b/src/localbrowser/LocalBrowserController.cpp index a66715a63..7eca5d31c 100644 --- a/src/localbrowser/LocalBrowserController.cpp +++ b/src/localbrowser/LocalBrowserController.cpp @@ -130,6 +130,11 @@ void LocalBrowserController::Exit() } LocalBrowserController::~LocalBrowserController() { - // TODO Auto-generated destructor stub + if(ui::Engine::Ref().GetWindow() == browserView) + ui::Engine::Ref().CloseWindow(); + if(callback) + delete callback; + delete localBrowserModel; + delete localBrowserView; } diff --git a/src/login/LoginController.cpp b/src/login/LoginController.cpp index af1a66a8e..a44e9ea13 100644 --- a/src/login/LoginController.cpp +++ b/src/login/LoginController.cpp @@ -49,5 +49,6 @@ LoginController::~LoginController() { ui::Engine::Ref().CloseWindow(); } delete loginModel; + delete loginView; } diff --git a/src/options/OptionsController.cpp b/src/options/OptionsController.cpp index 85f2a2ffc..f00731637 100644 --- a/src/options/OptionsController.cpp +++ b/src/options/OptionsController.cpp @@ -70,5 +70,8 @@ OptionsController::~OptionsController() { ui::Engine::Ref().CloseWindow(); } delete model; + delete view; + if(callback) + delete callback; } diff --git a/src/preview/PreviewController.cpp b/src/preview/PreviewController.cpp index 6490b502f..22913d7bc 100644 --- a/src/preview/PreviewController.cpp +++ b/src/preview/PreviewController.cpp @@ -103,5 +103,8 @@ PreviewController::~PreviewController() { ui::Engine::Ref().CloseWindow(); } delete previewModel; + delete previewView; + if(callback) + delete callback; } diff --git a/src/render/RenderController.cpp b/src/render/RenderController.cpp index 25e698f0c..75227cd0c 100644 --- a/src/render/RenderController.cpp +++ b/src/render/RenderController.cpp @@ -64,5 +64,6 @@ RenderController::~RenderController() { if(callback) delete callback; delete renderModel; + delete renderView; } diff --git a/src/search/SearchController.cpp b/src/search/SearchController.cpp index aff9636f2..68fe978a5 100644 --- a/src/search/SearchController.cpp +++ b/src/search/SearchController.cpp @@ -89,6 +89,7 @@ SearchController::~SearchController() ui::Engine::Ref().CloseWindow(); } delete searchModel; + delete searchView; } void SearchController::DoSearch(std::string query) diff --git a/src/ssave/SSaveController.cpp b/src/ssave/SSaveController.cpp index 3a6c3d4ef..5f3793391 100644 --- a/src/ssave/SSaveController.cpp +++ b/src/ssave/SSaveController.cpp @@ -51,5 +51,9 @@ void SSaveController::Exit() SSaveController::~SSaveController() { if(ui::Engine::Ref().GetWindow() == ssaveView) ui::Engine::Ref().CloseWindow(); + delete ssaveModel; + delete ssaveView; + if(callback) + delete callback; } diff --git a/src/tags/TagsController.cpp b/src/tags/TagsController.cpp index 26596fb67..845c50f19 100644 --- a/src/tags/TagsController.cpp +++ b/src/tags/TagsController.cpp @@ -50,6 +50,11 @@ void TagsController::Exit() } TagsController::~TagsController() { - // TODO Auto-generated destructor stub + if(ui::Engine::Ref().GetWindow() == tagsView) + ui::Engine::Ref().CloseWindow(); + delete tagsModel; + delete tagsView; + if(callback) + delete callback; } From 7ffaa421d184ef63c9e34fa80b2438d1ec670161 Mon Sep 17 00:00:00 2001 From: Simon Robertshaw Date: Mon, 18 Jun 2012 16:43:40 +0100 Subject: [PATCH 11/13] GameModel manages currentSave instance --- src/game/GameController.cpp | 2 +- src/game/GameModel.cpp | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/game/GameController.cpp b/src/game/GameController.cpp index df5bf6880..e681331d9 100644 --- a/src/game/GameController.cpp +++ b/src/game/GameController.cpp @@ -38,7 +38,7 @@ public: { try { - cc->gameModel->SetSave(new SaveInfo(*(cc->search->GetLoadedSave()))); + cc->gameModel->SetSave(cc->search->GetLoadedSave()); } catch(GameModelException & ex) { diff --git a/src/game/GameModel.cpp b/src/game/GameModel.cpp index cf9324b37..2a18d6b6e 100644 --- a/src/game/GameModel.cpp +++ b/src/game/GameModel.cpp @@ -182,6 +182,8 @@ GameModel::~GameModel() delete clipboard; if(stamp) delete stamp; + if(currentSave) + delete currentSave; //if(activeTools) // delete[] activeTools; } @@ -279,7 +281,11 @@ void GameModel::SetSave(SaveInfo * newSave) { if(currentSave != newSave) delete currentSave; - currentSave = newSave; + if(newSave == NULL) + currentSave = NULL; + else if(currentSave != newSave) + currentSave = new SaveInfo(*newSave); + if(currentSave && currentSave->GetGameSave()) { GameSave * saveData = currentSave->GetGameSave(); From 8c608ee8b9d5d4913eb3a851cfd9c6f0a87e105d Mon Sep 17 00:00:00 2001 From: Simon Robertshaw Date: Mon, 18 Jun 2012 17:07:27 +0100 Subject: [PATCH 12/13] Use C++ allocation/freeing for text masking and multiline processing --- src/interface/Textblock.cpp | 7 ++++--- src/interface/Textbox.cpp | 4 ++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/interface/Textblock.cpp b/src/interface/Textblock.cpp index c37892599..f003a6aee 100644 --- a/src/interface/Textblock.cpp +++ b/src/interface/Textblock.cpp @@ -28,8 +28,8 @@ void Textblock::SetText(std::string text) void Textblock::updateMultiline() { - char * rawText = (char*)malloc(text.length()+1); - memcpy(rawText, text.c_str(), text.length()); + char * rawText = new char[text.length()+1]; + std::copy(text.begin(), text.end(), rawText); rawText[text.length()] = 0; int lines = 1; @@ -60,7 +60,8 @@ void Textblock::updateMultiline() { Size.Y = lines*12; } - textLines = rawText; + textLines = std::string(rawText); + delete[] rawText; } void Textblock::Draw(const Point &screenPos) diff --git a/src/interface/Textbox.cpp b/src/interface/Textbox.cpp index 4c0e267bf..4ea5bd013 100644 --- a/src/interface/Textbox.cpp +++ b/src/interface/Textbox.cpp @@ -129,10 +129,10 @@ void Textbox::OnKeyPress(int key, Uint16 character, bool shift, bool ctrl, bool { if(masked) { - char * tempText = new char[text.length()]; + char * tempText = new char[text.length()+1]; std::fill(tempText, tempText+text.length(), 0x8d); tempText[text.length()] = 0; - displayText = tempText; + displayText = std::string(tempText); delete tempText; } else From f6403958de1f67d3bce47f56b40de254c30f5ba4 Mon Sep 17 00:00:00 2001 From: Simon Robertshaw Date: Mon, 18 Jun 2012 18:06:40 +0100 Subject: [PATCH 13/13] Fix stamp and save assignment --- src/game/GameModel.cpp | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/src/game/GameModel.cpp b/src/game/GameModel.cpp index 2a18d6b6e..80d7d8911 100644 --- a/src/game/GameModel.cpp +++ b/src/game/GameModel.cpp @@ -280,11 +280,14 @@ SaveInfo * GameModel::GetSave() void GameModel::SetSave(SaveInfo * newSave) { if(currentSave != newSave) - delete currentSave; - if(newSave == NULL) - currentSave = NULL; - else if(currentSave != newSave) - currentSave = new SaveInfo(*newSave); + { + if(currentSave) + delete currentSave; + if(newSave == NULL) + currentSave = NULL; + else + currentSave = new SaveInfo(*newSave); + } if(currentSave && currentSave->GetGameSave()) { @@ -453,12 +456,15 @@ void GameModel::ClearSimulation() void GameModel::SetStamp(GameSave * save) { - if(stamp) - delete stamp; - if(save) - stamp = new GameSave(*save); - else - stamp = NULL; + if(stamp != save) + { + if(stamp) + delete stamp; + if(save) + stamp = new GameSave(*save); + else + stamp = NULL; + } } void GameModel::SetPlaceSave(GameSave * save)