stratagus-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Stratagus-CVS] stratagus/src/ui ui.c


From: address@hidden
Subject: [Stratagus-CVS] stratagus/src/ui ui.c
Date: 14 Jan 2004 17:19:24 +1100

CVSROOT:        /home/strat
Module name:    stratagus
Changes by:      <address@hidden>       04/01/14 17:19:24

Modified files:
        src/ui         : ui.c 

Log message:
        Fixed memory leak loading the UI more than once

Patches:
Index: stratagus/src/ui/ui.c
diff -u stratagus/src/ui/ui.c:1.94 stratagus/src/ui/ui.c:1.95
--- stratagus/src/ui/ui.c:1.94  Sat Jan 10 06:58:47 2004
+++ stratagus/src/ui/ui.c       Wed Jan 14 17:19:23 2004
@@ -27,7 +27,7 @@
 //      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //      02111-1307, USA.
 //
-//      $Id: ui.c,v 1.94 2004/01/09 19:58:47 jsalmon3 Exp $
+//      $Id: ui.c,v 1.95 2004/01/14 06:19:23 jsalmon3 Exp $
 
 //@{
 
@@ -78,6 +78,36 @@
 
 
 /**
+**  Clean the user interface graphics
+*/
+local void CleanUIGraphics(UI* ui)
+{
+       MenuPanel* menupanel;
+       int i;
+
+       for (i = 0; i < ui->NumFillers; ++i) {
+               VideoSaveFree(ui->Filler[i].Graphic);
+       }
+       VideoSaveFree(ui->Resource.Graphic);
+
+       for (i = 0; i < MaxCosts + 2; ++i) {
+               VideoSaveFree(ui->Resources[i].Icon.Graphic);
+       }
+
+       VideoSaveFree(ui->InfoPanel.Graphic);
+       VideoSaveFree(ui->ButtonPanel.Graphic);
+       VideoSaveFree(ui->MenuPanel.Graphic);
+       VideoSaveFree(ui->MinimapPanel.Graphic);
+       VideoSaveFree(ui->StatusLine.Graphic);
+
+       menupanel = ui->MenuPanels;
+       while (menupanel) {
+               VideoSaveFree(menupanel->Panel.Graphic);
+               menupanel = menupanel->Next;
+       }
+}
+
+/**
 **             Initialize the user interface.
 **
 **             The function looks through ::UI_Table, to find a matching user
@@ -124,8 +154,7 @@
                vps[i].MapY = TheUI.Viewports[i].MapY;
        }
 
-       // FIXME: overwrites already set slots?
-       // ARI: Yes, it does :(((
+       CleanUIGraphics(&TheUI);
        TheUI = *UI_Table[best];
 
        TheUI.Offset640X = (VideoWidth - 640) / 2;
@@ -658,7 +687,7 @@
        int i;
 
        CLprintf(file, "\n;;; -----------------------------------------\n");
-       CLprintf(file, ";;; MODULE: ui $Id: ui.c,v 1.94 2004/01/09 19:58:47 
jsalmon3 Exp $\n\n");
+       CLprintf(file, ";;; MODULE: ui $Id: ui.c,v 1.95 2004/01/14 06:19:23 
jsalmon3 Exp $\n\n");
 
        // Contrast, Brightness, Saturation
        CLprintf(file, "(set-contrast! %d)\n", TheUI.Contrast);
@@ -789,31 +818,8 @@
 {
        int i;
        int j;
-       MenuPanel* menupanel;
-
-       //
-       //              Free the graphics. FIXME: if they are shared this will 
crash.
-       //
-       for (i = 0; i < TheUI.NumFillers; ++i) {
-               VideoSaveFree(TheUI.Filler[i].Graphic);
-       }
-       VideoSaveFree(TheUI.Resource.Graphic);
-
-       for (i = 0; i < MaxCosts + 2; ++i) {
-               VideoSaveFree(TheUI.Resources[i].Icon.Graphic);
-       }
 
-       VideoSaveFree(TheUI.InfoPanel.Graphic);
-       VideoSaveFree(TheUI.ButtonPanel.Graphic);
-       VideoSaveFree(TheUI.MenuPanel.Graphic);
-       VideoSaveFree(TheUI.MinimapPanel.Graphic);
-       VideoSaveFree(TheUI.StatusLine.Graphic);
-
-       menupanel = TheUI.MenuPanels;
-       while (menupanel) {
-               VideoSaveFree(menupanel->Panel.Graphic);
-               menupanel = menupanel->Next;
-       }
+       CleanUIGraphics(&TheUI);
 
        //
        //              Free the available user interfaces.
@@ -843,9 +849,6 @@
                free(TitleScreens);
                TitleScreens = NULL;
        }
-
-       // FIXME: Johns: Implement this correctly or we will lose memory!
-       DebugLevel0Fn("FIXME: not completely written\n");
 
        memset(&TheUI, 0, sizeof(TheUI));
 }




reply via email to

[Prev in Thread] Current Thread [Next in Thread]