(svn r6209) Move DrawFrameRect() out of gfx.[ch], because it uses data (_color_list) which the renderer shouldn't have know about
authortron
Tue, 29 Aug 2006 06:07:57 +0000
changeset 4437 d06bb548e48d
parent 4436 af7043215494
child 4438 bfa7b06c0afe
(svn r6209) Move DrawFrameRect() out of gfx.[ch], because it uses data (_color_list) which the renderer shouldn't have know about
gfx.c
gfx.h
settings_gui.c
widget.c
window.h
--- a/gfx.c	Tue Aug 29 06:03:26 2006 +0000
+++ b/gfx.c	Tue Aug 29 06:07:57 2006 +0000
@@ -557,39 +557,6 @@
 	return w;
 }
 
-void DrawFrameRect(int left, int top, int right, int bottom, int ctab, int flags)
-{
-	byte color_2 = _color_list[ctab].window_color_1a;
-	byte color_interior = _color_list[ctab].window_color_bga;
-	byte color_3 = _color_list[ctab].window_color_bgb;
-	byte color = _color_list[ctab].window_color_2;
-
-	if (!(flags & 0x8)) {
-		if (!(flags & 0x20)) {
-			GfxFillRect(left, top, left, bottom - 1, color);
-			GfxFillRect(left + 1, top, right - 1, top, color);
-			GfxFillRect(right, top, right, bottom - 1, color_2);
-			GfxFillRect(left, bottom, right, bottom, color_2);
-			if (!(flags & 0x10)) {
-				GfxFillRect(left + 1, top + 1, right - 1, bottom - 1, color_interior);
-			}
-		} else {
-			GfxFillRect(left, top, left, bottom, color_2);
-			GfxFillRect(left + 1, top, right, top, color_2);
-			GfxFillRect(right, top + 1, right, bottom - 1, color);
-			GfxFillRect(left + 1, bottom, right, bottom, color);
-			if (!(flags & 0x10)) {
-				GfxFillRect(left + 1, top + 1, right - 1, bottom - 1,
-					flags & 0x40 ? color_interior : color_3);
-			}
-		}
-	} else if (flags & 0x1) {
-		// transparency
-		GfxFillRect(left, top, right, bottom, 0x322 | USE_COLORTABLE);
-	} else {
-		GfxFillRect(left, top, right, bottom, color_interior);
-	}
-}
 
 int DoDrawString(const char *string, int x, int y, uint16 real_color)
 {
--- a/gfx.h	Tue Aug 29 06:03:26 2006 +0000
+++ b/gfx.h	Tue Aug 29 06:07:57 2006 +0000
@@ -73,7 +73,6 @@
 
 void GfxFillRect(int left, int top, int right, int bottom, int color);
 void GfxDrawLine(int left, int top, int right, int bottom, int color);
-void DrawFrameRect(int left, int top, int right, int bottom, int color, int flags);
 
 int GetStringWidth(const char *str);
 void LoadStringWidthTable(void);
--- a/settings_gui.c	Tue Aug 29 06:03:26 2006 +0000
+++ b/settings_gui.c	Tue Aug 29 06:07:57 2006 +0000
@@ -410,8 +410,8 @@
 
 		y = GAMEDIFF_WND_TOP_OFFSET;
 		for (i = 0; i != GAME_DIFFICULTY_NUM; i++) {
-			DrawFrameRect( 5, y,  5 + 8, y + 8, 3, GetBitAndShift(&click_a) ? (1 << 5) : 0);
-			DrawFrameRect(15, y, 15 + 8, y + 8, 3, GetBitAndShift(&click_b) ? (1 << 5) : 0);
+			DrawFrameRect( 5, y,  5 + 8, y + 8, 3, GetBitAndShift(&click_a) ? FR_LOWERED : 0);
+			DrawFrameRect(15, y, 15 + 8, y + 8, 3, GetBitAndShift(&click_b) ? FR_LOWERED : 0);
 			if (GetBitAndShift(&disabled) || (_networking && !_network_server)) {
 				int color = PALETTE_MODIFIER_GREYOUT | _color_list[3].unk2;
 				GfxFillRect( 6, y + 1,  6 + 8, y + 8, color);
--- a/widget.c	Tue Aug 29 06:03:26 2006 +0000
+++ b/widget.c	Tue Aug 29 06:07:57 2006 +0000
@@ -150,6 +150,42 @@
 }
 
 
+void DrawFrameRect(int left, int top, int right, int bottom, int ctab, FrameFlags flags)
+{
+	uint dark         = _color_list[ctab].window_color_1a;
+	uint medium_dark  = _color_list[ctab].window_color_bga;
+	uint medium_light = _color_list[ctab].window_color_bgb;
+	uint light        = _color_list[ctab].window_color_2;
+
+	if (flags & FR_NOBORDER) {
+		if (flags & FR_TRANSPARENT) {
+			GfxFillRect(left, top, right, bottom, 0x322 | USE_COLORTABLE);
+		} else {
+			GfxFillRect(left, top, right, bottom, medium_dark);
+		}
+	} else {
+		uint interior;
+
+		if (flags & FR_LOWERED) {
+			GfxFillRect(left,     top,     left,  bottom,     dark);
+			GfxFillRect(left + 1, top,     right, top,        dark);
+			GfxFillRect(right,    top + 1, right, bottom - 1, light);
+			GfxFillRect(left + 1, bottom,  right, bottom,     light);
+			interior = (flags & FR_DARKENED ? medium_dark : medium_light);
+		} else {
+			GfxFillRect(left,     top,    left,      bottom - 1, light);
+			GfxFillRect(left + 1, top,    right - 1, top,        light);
+			GfxFillRect(right,    top,    right,     bottom - 1, dark);
+			GfxFillRect(left,     bottom, right,     bottom,     dark);
+			interior = medium_dark;
+		}
+		if (!(flags & FR_BORDERONLY)) {
+			GfxFillRect(left + 1, top + 1, right - 1, bottom - 1, interior);
+		}
+	}
+}
+
+
 void DrawWindowWidgets(const Window *w)
 {
 	const Widget *wi;
--- a/window.h	Tue Aug 29 06:03:26 2006 +0000
+++ b/window.h	Tue Aug 29 06:07:57 2006 +0000
@@ -61,13 +61,15 @@
 	StringID tooltips;
 } Widget;
 
-enum FrameFlags {
+typedef enum FrameFlags {
 	FR_TRANSPARENT  = 0x01,  ///< Makes the background transparent if set
 	FR_NOBORDER     = 0x08,  ///< Hide border (draws just a solid box)
 	FR_BORDERONLY   = 0x10,  ///< Draw border only, no background
 	FR_LOWERED      = 0x20,  ///< If set the frame is lowered and the background color brighter (ie. buttons when pressed)
 	FR_DARKENED     = 0x40,  ///< If set the background is darker, allows for lowered frames with normal background color when used with FR_LOWERED (ie. dropdown boxes)
-};
+} FrameFlags;
+
+void DrawFrameRect(int left, int top, int right, int bottom, int color, FrameFlags flags);
 
 /* XXX - outside "byte event" so you can set event directly without going into
  * the union elements at first. Because of this every first element of the union