diff --git a/src/editor/editloop.cpp b/src/editor/editloop.cpp index becd6a339..61731aacf 100644 --- a/src/editor/editloop.cpp +++ b/src/editor/editloop.cpp @@ -868,6 +868,8 @@ local void ShowUnitInfo(const Unit* unit) */ global void EditorUpdateDisplay(void) { + int i; + VideoLockScreen(); // { prepare video write HideAnyCursor(); // remove cursor (when available) @@ -940,11 +942,15 @@ global void EditorUpdateDisplay(void) } // - // Filler + // Fillers // - if (TheUI.Filler1.Graphic) { - VideoDrawSub(TheUI.Filler1.Graphic, 0, 0, TheUI.Filler1.Graphic->Width, - TheUI.Filler1.Graphic->Height, TheUI.Filler1X, TheUI.Filler1Y); + for (i = 0; i < TheUI.NumFillers; ++i) { + if (TheUI.Filler[i].Graphic) { + VideoDrawSub(TheUI.Filler[i].Graphic, 0, 0, + TheUI.Filler[i].Graphic->Width, + TheUI.Filler[i].Graphic->Height, + TheUI.FillerX[i], TheUI.FillerY[i]); + } } // // Status line diff --git a/src/include/freecraft.h b/src/include/freecraft.h index 43d0bbb30..518fe96c1 100644 --- a/src/include/freecraft.h +++ b/src/include/freecraft.h @@ -397,7 +397,7 @@ enum _must_redraw_flags_ { RedrawStatusLine = 1<<14, /// Statusline RedrawInfoPanel = 1<<15, /// Unit description RedrawButtonPanel = 1<<16, /// Unit buttons - RedrawFiller1 = 1<<17, /// Filler1: Border on right side + RedrawFillers = 1<<17, /// Fillers RedrawMinimapBorder = 1<<18, /// Area around minimap RedrawCosts = 1<<19, /// Costs in status line RedrawMenuButton = 1<<20, /// Area above minimap diff --git a/src/include/ui.h b/src/include/ui.h index b7850d5f4..f292e8ad2 100644 --- a/src/include/ui.h +++ b/src/include/ui.h @@ -10,7 +10,7 @@ // /**@name ui.h - The user interface header file. */ // -// (c) Copyright 1999-2003 by Lutz Sammer +// (c) Copyright 1999-2003 by Lutz Sammer and Jimmy Salmon // // FreeCraft is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published @@ -169,16 +169,17 @@ typedef struct _ui_ { char* ReverseFontColor; /// Color for reverse text displayed // Fillers - GraphicConfig Filler1; /// filler 1 graphic - int Filler1X; /// filler 1 X position - int Filler1Y; /// filler 1 Y position + GraphicConfig* Filler; /// Filler graphics + int* FillerX; /// Filler X positions + int* FillerY; /// Filler Y positions + int NumFillers; /// Number of fillers // Resource line GraphicConfig Resource; /// Resource background int ResourceX; /// Resource X position int ResourceY; /// Resource Y position - int OriginalResources; /// original resource mode + int OriginalResources; /// Original resource mode struct { #if 0 diff --git a/src/stratagus/mainloop.cpp b/src/stratagus/mainloop.cpp index f9855cfcb..ae2187103 100644 --- a/src/stratagus/mainloop.cpp +++ b/src/stratagus/mainloop.cpp @@ -456,10 +456,15 @@ global void UpdateDisplay(void) DrawMessages(); } - if( (MustRedraw&RedrawFiller1) && TheUI.Filler1.Graphic ) { - VideoDrawSub(TheUI.Filler1.Graphic,0,0 - ,TheUI.Filler1.Graphic->Width,TheUI.Filler1.Graphic->Height - ,TheUI.Filler1X,TheUI.Filler1Y); + if( MustRedraw&RedrawFillers ) { + int i; + + for( i=0; i<TheUI.NumFillers; ++i ) { + VideoDrawSub(TheUI.Filler[i].Graphic,0,0 + ,TheUI.Filler[i].Graphic->Width + ,TheUI.Filler[i].Graphic->Height + ,TheUI.FillerX[i],TheUI.FillerY[i]); + } } if( MustRedraw&RedrawMenuButton ) { @@ -529,11 +534,15 @@ global void UpdateDisplay(void) ,TheUI.MapArea.EndX-TheUI.MapArea.X+1 ,TheUI.MapArea.EndY-TheUI.MapArea.Y+1); } - if( (MustRedraw&RedrawFiller1) && TheUI.Filler1.Graphic ) { - InvalidateAreaAndCheckCursor( - TheUI.Filler1X,TheUI.Filler1Y - ,TheUI.Filler1.Graphic->Width - ,TheUI.Filler1.Graphic->Height); + if( MustRedraw&RedrawFillers ) { + int i; + + for( i=0; i<TheUI.NumFillers; ++i ) { + InvalidateAreaAndCheckCursor( + TheUI.FillerX[i],TheUI.FillerY[i] + ,TheUI.Filler[i].Graphic->Width + ,TheUI.Filler[i].Graphic->Height); + } } if(MustRedraw&RedrawMenuButton ) { InvalidateAreaAndCheckCursor( diff --git a/src/ui/script_ui.cpp b/src/ui/script_ui.cpp index b4c7b0be3..8a92f1f26 100644 --- a/src/ui/script_ui.cpp +++ b/src/ui/script_ui.cpp @@ -629,10 +629,21 @@ local SCM CclDefineUI(SCM list) temp=gh_cdr(temp); y=gh_scm2int(value); - free(ui->Filler1.File); - ui->Filler1.File=str; - ui->Filler1X=x; - ui->Filler1Y=y; + for( i=0; i<ui->NumFillers; ++i ) { + free(ui->Filler[i].File); + } + free(ui->Filler); + free(ui->FillerX); + free(ui->FillerY); + + ui->NumFillers=1; + ui->Filler=malloc(ui->NumFillers*sizeof(*ui->Filler)); + ui->FillerX=malloc(ui->NumFillers*sizeof(*ui->FillerX)); + ui->FillerY=malloc(ui->NumFillers*sizeof(*ui->FillerY)); + + ui->Filler[0].File=str; + ui->FillerX[0]=x; + ui->FillerY[0]=y; // Resource temp=gh_car(list); @@ -1338,7 +1349,7 @@ local SCM CclDefineNewUI(SCM list) value=gh_car(list); list=gh_cdr(list); ui->ReverseFontColor=gh_scm2newstr(value,NULL); - } else if( gh_eq_p(value,gh_symbol2scm("filler-1")) ) { + } else if( gh_eq_p(value,gh_symbol2scm("filler")) ) { value=gh_car(list); list=gh_cdr(list); } else if( gh_eq_p(value,gh_symbol2scm("resources")) ) { diff --git a/src/ui/ui.cpp b/src/ui/ui.cpp index df3de40e6..862d3b1bf 100644 --- a/src/ui/ui.cpp +++ b/src/ui/ui.cpp @@ -172,11 +172,13 @@ global void LoadUserInterface(void) // // Load graphics // - if( TheUI.Filler1.File ) { - TheUI.Filler1.Graphic=LoadGraphic(TheUI.Filler1.File); + for( i=0; i<TheUI.NumFillers; ++i ) { + if( TheUI.Filler[i].File ) { + TheUI.Filler[i].Graphic=LoadGraphic(TheUI.Filler[i].File); #ifdef USE_OPENGL - MakeTexture(TheUI.Filler1.Graphic,TheUI.Filler1.Graphic->Width,TheUI.Filler1.Graphic->Height); + MakeTexture(TheUI.Filler[i].Graphic,TheUI.Filler[i].Graphic->Width,TheUI.Filler[i].Graphic->Height); #endif + } } if( TheUI.Resource.File ) { TheUI.Resource.Graphic=LoadGraphic(TheUI.Resource.File); @@ -308,7 +310,7 @@ local void OldSaveUi(FILE* file,const UI* ui) ui->Name,ui->Width,ui->Height); fprintf(file," ; Filler 1\n"); fprintf(file," (list \"%s\" %d %d)\n", - ui->Filler1.File,ui->Filler1X,ui->Filler1Y); + ui->Filler[0].File,ui->FillerX[0],ui->FillerY[0]); fprintf(file," ; Resource line\n"); fprintf(file," (list \"%s\" %d %d)\n", ui->Resource.File,ui->ResourceX,ui->ResourceY); @@ -428,8 +430,10 @@ local void NewSaveUi(FILE * file, const UI * ui) fprintf(file, " 'normal-font-color %s 'reverse-font-color %s\n", ui->NormalFontColor, ui->ReverseFontColor); - fprintf(file, " 'filler-1 '(pos (%d %d) image \"%s\")\n", - ui->Filler1X, ui->Filler1Y, ui->Filler1.File); + for( i=0; i<TheUI.NumFillers; ++i ) { + fprintf(file, " 'filler '(pos (%d %d) image \"%s\")\n", + ui->FillerX[i], ui->FillerY[i], ui->Filler[i].File); + } fprintf(file, " 'resources '(pos (%d %d) image \"%s\"", ui->ResourceX, ui->ResourceY, ui->Resource.File); @@ -589,7 +593,9 @@ global void CleanUserInterface(void) // // Free the graphics. FIXME: if they are shared this will crash. // - VideoSaveFree(TheUI.Filler1.Graphic); + for( i=0; i<TheUI.NumFillers; ++i ) { + VideoSaveFree(TheUI.Filler[i].Graphic); + } VideoSaveFree(TheUI.Resource.Graphic); for( i=0; i<MaxCosts; ++i ) {