From 8f8b775c8ff07edb815b764868e87145da690180 Mon Sep 17 00:00:00 2001
From: jsalmon3 <>
Date: Tue, 1 Apr 2003 17:06:29 +0000
Subject: [PATCH] Added text colors to menu items

---
 src/editor/editloop.cpp    |   2 +-
 src/game/intro.cpp         |   2 +-
 src/include/menus.h        |   6 +-
 src/stratagus/mainloop.cpp |   2 +-
 src/ui/menu_proc.cpp       | 110 +++++++++++++++++++++++++++++--------
 5 files changed, 94 insertions(+), 28 deletions(-)

diff --git a/src/editor/editloop.cpp b/src/editor/editloop.cpp
index f2d3b8d37..becd6a339 100644
--- a/src/editor/editloop.cpp
+++ b/src/editor/editloop.cpp
@@ -891,7 +891,7 @@ global void EditorUpdateDisplay(void)
 	    (GameMenuButtonClicked ? MenuButtonClicked : 0),
 	    128, 19,
 	    TheUI.MenuButtonX+24,TheUI.MenuButtonY+2,
-	    GameFont,"Menu (~<F10~>)");
+	    GameFont,"Menu (~<F10~>)",NULL,NULL);
 
     //
     //  Minimap border
diff --git a/src/game/intro.cpp b/src/game/intro.cpp
index bed8048b1..ff16d3f01 100644
--- a/src/game/intro.cpp
+++ b/src/game/intro.cpp
@@ -205,7 +205,7 @@ local void DrawContinueButton(void)
     DrawMenuButton(MBUTTON_GM_HALF,ContinueButtonFlags,
 	106,27,
 	ContinueButtonX,ContinueButtonY,
-	LargeFont,"~!Continue");
+	LargeFont,"~!Continue",NULL,NULL);
 }
 
 /**
diff --git a/src/include/menus.h b/src/include/menus.h
index d57a20d7a..2577b60cb 100644
--- a/src/include/menus.h
+++ b/src/include/menus.h
@@ -10,7 +10,7 @@
 //
 /**@name menus.h	-	The menu headerfile. */
 //
-//	(c) Copyright 1999-2002 by Andreas Arens
+//	(c) Copyright 1999-2003 by Andreas Arens
 //
 //	FreeCraft is free software; you can redistribute it and/or modify
 //	it under the terms of the GNU General Public License as published
@@ -338,7 +338,9 @@ extern void InitMenus(int race);
     /// Draw menu
 extern void DrawMenu(Menu *menu);
     /// Draw menu button
-extern void DrawMenuButton(MenuButtonId button,unsigned flags,int w,int h,int x,int y,const int font,const unsigned char *text);
+extern void DrawMenuButton(MenuButtonId button,unsigned flags,int w,int h,
+			   int x,int y,const int font,const unsigned char *text,
+			   char *normalcolor, char *reversecolor);
     /// Set menu backgound and draw it
 extern void MenusSetBackground(void);
     /// Draw and process a menu
diff --git a/src/stratagus/mainloop.cpp b/src/stratagus/mainloop.cpp
index d9f66bbbb..f9855cfcb 100644
--- a/src/stratagus/mainloop.cpp
+++ b/src/stratagus/mainloop.cpp
@@ -272,7 +272,7 @@ local void DrawMenuButtonArea(void)
 	    (GameMenuButtonClicked ? MenuButtonClicked : 0),
 	    128, 19,
 	    TheUI.MenuButtonX+24,TheUI.MenuButtonY+2,
-	    GameFont,"Menu (~<F10~>)");
+	    GameFont,"Menu (~<F10~>)",NULL,NULL);
 
 #ifdef DEBUG
     //
diff --git a/src/ui/menu_proc.cpp b/src/ui/menu_proc.cpp
index d3b53b19d..25679e194 100644
--- a/src/ui/menu_proc.cpp
+++ b/src/ui/menu_proc.cpp
@@ -169,14 +169,24 @@ global void MenusSetBackground(void)
 **	@param text	text to print on button
 */
 global void DrawMenuButton(MenuButtonId button,unsigned flags,int w,int h,int x,int y,
-	const int font,const unsigned char *text)
+	const int font,const unsigned char *text,char *normalcolor,char *reversecolor)
 {
     MenuButtonId rb;
     int s;
     char* nc;
     char* rc;
+    char* oldnc;
+    char* oldrc;
 
-    GetDefaultTextColors(&nc, &rc);
+    GetDefaultTextColors(&oldnc, &oldrc);
+    if (normalcolor || reversecolor) {
+	nc = normalcolor ? normalcolor : oldnc;
+	rc = reversecolor ? reversecolor : oldrc;
+	SetDefaultTextColors(nc,rc);
+    } else {
+	nc = oldnc;
+	rc = oldrc;
+    }
     if (button == MBUTTON_SC_BUTTON || button == MBUTTON_SC_BUTTON_LEFT
 	    || button == MBUTTON_SC_BUTTON_RIGHT) {
 	if (flags&MenuButtonDisabled) {
@@ -250,7 +260,7 @@ global void DrawMenuButton(MenuButtonId button,unsigned flags,int w,int h,int x,
 	    }
 	}
     }
-    SetDefaultTextColors(nc,rc);
+    SetDefaultTextColors(oldnc,oldrc);
 }
 
 /**
@@ -265,7 +275,9 @@ local void DrawPulldown(Menuitem *mi, int mx, int my)
     int i;
     char* nc;
     char* rc;
-    char *text;
+    char* oldnc;
+    char* oldrc;
+    char* text;
     unsigned flags;
     MenuButtonId rb;
     MenuButtonId db;
@@ -281,7 +293,15 @@ local void DrawPulldown(Menuitem *mi, int mx, int my)
     flags = mi->flags;
     rb = mi->d.pulldown.button;
 
-    GetDefaultTextColors(&nc, &rc);
+    GetDefaultTextColors(&oldnc,&oldrc);
+    if (mi->d.pulldown.normalcolor || mi->d.pulldown.reversecolor) {
+	nc = mi->d.pulldown.normalcolor ? mi->d.pulldown.normalcolor : oldnc;
+	rc = mi->d.pulldown.reversecolor ? mi->d.pulldown.reversecolor : oldrc;
+	SetDefaultTextColors(nc,rc);
+    } else {
+	nc = oldnc;
+	rc = oldrc;
+    }
     if (rb == MBUTTON_SC_PULLDOWN) {
 	h = mi->d.pulldown.ysize;
 	if (flags&MenuButtonClicked) {
@@ -478,7 +498,7 @@ local void DrawPulldown(Menuitem *mi, int mx, int my)
 	    }
 	}
     }
-    SetDefaultTextColors(nc,rc);
+    SetDefaultTextColors(oldnc,oldrc);
 }
 
 /**
@@ -494,7 +514,9 @@ local void DrawListbox(Menuitem *mi, int mx, int my)
     int s;
     char* nc;
     char* rc;
-    char *text;
+    char* oldnc;
+    char* oldrc;
+    char* text;
     MenuButtonId rb;
     unsigned flags;
     int w;
@@ -509,7 +531,15 @@ local void DrawListbox(Menuitem *mi, int mx, int my)
     x = mx+mi->xofs;
     y = my+mi->yofs;
 
-    GetDefaultTextColors(&nc, &rc);
+    GetDefaultTextColors(&oldnc,&oldrc);
+    if (mi->d.listbox.normalcolor || mi->d.listbox.reversecolor) {
+	nc = mi->d.listbox.normalcolor ? mi->d.listbox.normalcolor : oldnc;
+	rc = mi->d.listbox.reversecolor ? mi->d.listbox.reversecolor : oldrc;
+	SetDefaultTextColors(nc,rc);
+    } else {
+	nc = oldnc;
+	rc = oldrc;
+    }
 
     if (flags&MenuButtonDisabled) {
 	rb--;
@@ -526,10 +556,11 @@ local void DrawListbox(Menuitem *mi, int mx, int my)
 		SetDefaultTextColors(nc,rc);
 		text = (*mi->d.listbox.retrieveopt)(mi, i + s);
 		if (text) {
-		    if (i == mi->d.listbox.curopt)
+		    if (i == mi->d.listbox.curopt) {
 			SetDefaultTextColors(rc,rc);
-		    else
+		    } else {
 			SetDefaultTextColors(nc,rc);
+		    }
 		    VideoDrawText(x+2,y+2 + 18*i ,mi->font,text);
 		}
 	    }
@@ -543,7 +574,7 @@ local void DrawListbox(Menuitem *mi, int mx, int my)
 	    VideoDrawRectangleClip(ColorYellow,x-2,y-2,w+1,h+2);
 	}
     }
-    SetDefaultTextColors(nc,rc);
+    SetDefaultTextColors(oldnc,oldrc);
 }
 
 /**
@@ -747,6 +778,8 @@ local void DrawGem(Menuitem *mi, int mx, int my)
     int y;
     char* nc;
     char* rc;
+    char* oldnc;
+    char* oldrc;
 
     flags = mi->flags;
     rb = mi->d.gem.button;
@@ -768,15 +801,23 @@ local void DrawGem(Menuitem *mi, int mx, int my)
     }
     VideoDraw(MenuButtonGfx.Sprite, rb, x, y);
 
-    GetDefaultTextColors(&nc, &rc);
     if (mi->d.gem.text) {
+	GetDefaultTextColors(&oldnc,&oldrc);
+	if (mi->d.gem.normalcolor || mi->d.gem.reversecolor) {
+	    nc = mi->d.gem.normalcolor ? mi->d.gem.normalcolor : oldnc;
+	    rc = mi->d.gem.reversecolor ? mi->d.gem.reversecolor : oldrc;
+	    SetDefaultTextColors(nc,rc);
+	} else {
+	    nc = oldnc;
+	    rc = oldrc;
+	}
 	VideoDrawText(x+24, y+4, GameFont, mi->d.gem.text);
 	if (mi->flags&MenuButtonActive) {
 	    SetDefaultTextColors(rc,rc);
 	    VideoDrawRectangleClip(ColorGray,mx+mi->xofs-4,my+mi->yofs-4,
 		    VideoTextLength(GameFont, mi->d.gem.text)+30,VideoTextHeight(GameFont)+12);
-	    SetDefaultTextColors(nc,rc);
 	}
+	SetDefaultTextColors(oldnc,oldrc);
     }
 }
 
@@ -791,7 +832,9 @@ local void DrawInput(Menuitem *mi, int mx, int my)
 {
     char* nc;
     char* rc;
-    char *text;
+    char* oldnc;
+    char* oldrc;
+    char* text;
     unsigned flags;
     MenuButtonId rb;
     int w;
@@ -807,7 +850,15 @@ local void DrawInput(Menuitem *mi, int mx, int my)
     w = mi->d.input.xsize;
     h = mi->d.input.ysize;
 
-    GetDefaultTextColors(&nc, &rc);
+    GetDefaultTextColors(&oldnc,&oldrc);
+    if (mi->d.input.normalcolor || mi->d.input.reversecolor) {
+	nc = mi->d.input.normalcolor ? mi->d.input.normalcolor : oldnc;
+	rc = mi->d.input.reversecolor ? mi->d.input.reversecolor : oldrc;
+	SetDefaultTextColors(nc,rc);
+    } else {
+	nc = oldnc;
+	rc = oldrc;
+    }
     if (mi->d.input.button == MBUTTON_SC_PULLDOWN) {
 	rb = MBUTTON_SC_INPUT;
 	if (flags&MenuButtonDisabled) {
@@ -845,7 +896,7 @@ local void DrawInput(Menuitem *mi, int mx, int my)
 	    }
 	}
     }
-    SetDefaultTextColors(nc,rc);
+    SetDefaultTextColors(oldnc,oldrc);
 }
 
 
@@ -861,6 +912,8 @@ global void DrawMenu(Menu *menu)
     int l;
     char* nc;
     char* rc;
+    char* oldnc;
+    char* oldrc;
     Menuitem *mi;
     Menuitem *mip;
 
@@ -938,32 +991,43 @@ global void DrawMenu(Menu *menu)
     for (i = 0; i < n; i++) {
 	switch (mi->mitype) {
 	    case MI_TYPE_TEXT:
-		if (!mi->d.text.text)
+		if (!mi->d.text.text) {
 		    break;
-		GetDefaultTextColors(&nc, &rc);
+		}
+		GetDefaultTextColors(&oldnc,&oldrc);
+		if (mi->d.text.normalcolor || mi->d.text.reversecolor) {
+		    nc = mi->d.text.normalcolor ? mi->d.text.normalcolor : oldnc;
+		    rc = mi->d.text.reversecolor ? mi->d.text.reversecolor : oldrc;
+		    SetDefaultTextColors(nc,rc);
+		} else {
+		    nc = oldnc;
+		    rc = oldrc;
+		}
 		if (mi->flags&MenuButtonActive && mi->d.text.action) {
 		    VideoDrawRectangleClip(ColorGray,menu->x+mi->xofs-4,menu->y+mi->yofs-4,
 					    VideoTextLength(mi->font, mi->d.text.text)+5,
 					    VideoTextHeight(mi->font)+5);
 		    SetDefaultTextColors(rc,rc);
 		}
-		if (mi->d.text.align&MI_TFLAGS_CENTERED)
+		if (mi->d.text.align&MI_TFLAGS_CENTERED) {
 		    VideoDrawTextCentered(menu->x+mi->xofs,menu->y+mi->yofs,
 			    mi->font,mi->d.text.text);
-		else if (mi->d.text.align&MI_TFLAGS_RALIGN) {
+		} else if (mi->d.text.align&MI_TFLAGS_RALIGN) {
 		    l = VideoTextLength(mi->font,mi->d.text.text);
 		    VideoDrawText(menu->x+mi->xofs-l,menu->y+mi->yofs,
 			    mi->font,mi->d.text.text);
-		} else
+		} else {
 		    VideoDrawText(menu->x+mi->xofs,menu->y+mi->yofs,
 			    mi->font,mi->d.text.text);
-		SetDefaultTextColors(nc, rc);
+		}
+		SetDefaultTextColors(oldnc,oldrc);
 		break;
 	    case MI_TYPE_BUTTON:
 		DrawMenuButton(mi->d.button.button,mi->flags,
 			mi->d.button.xsize,mi->d.button.ysize,
 			menu->x+mi->xofs,menu->y+mi->yofs,
-			mi->font,mi->d.button.text);
+			mi->font,mi->d.button.text,
+			mi->d.button.normalcolor,mi->d.button.reversecolor);
 		break;
 	    case MI_TYPE_PULLDOWN:
 		if (mi->flags&MenuButtonClicked) {