Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 20 Feb 2018 04:56:03 +0000 (UTC)
From:      Kyle Evans <kevans@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r329626 - head/stand/lua
Message-ID:  <201802200456.w1K4u3vA078665@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: kevans
Date: Tue Feb 20 04:56:03 2018
New Revision: 329626
URL: https://svnweb.freebsd.org/changeset/base/329626

Log:
  stand/lua: Refactor logos into drawer.logodefs table
  
  This refactor makes it straightforward to add new logos for drawing and
  organizes logo definitions in a logical manner.
  
  The graphic to be drawn for each logo may again be modified outside of
  drawer, but it must be done on a case-by-case basis as a modification to the
  loader_logo.

Modified:
  head/stand/lua/drawer.lua

Modified: head/stand/lua/drawer.lua
==============================================================================
--- head/stand/lua/drawer.lua	Tue Feb 20 04:36:51 2018	(r329625)
+++ head/stand/lua/drawer.lua	Tue Feb 20 04:56:03 2018	(r329626)
@@ -38,6 +38,7 @@ local beastie;
 local fbsd_logo_v;
 local orb;
 local none;
+local none_shifted = false;
 
 drawer.menu_name_handlers = {
 	-- Menu name handlers should take the menu being drawn and entry being
@@ -59,9 +60,6 @@ drawer.menu_name_handlers = {
 
 drawer.brand_position = {x = 2, y = 1};
 drawer.logo_position = {x = 46, y = 1};
-drawer.fbsd_logo_shift = {x = 5, y = 4};
-drawer.orb_shift = {x = 2, y = 4};
-drawer.none_shift = {x = 17, y = 0};
 drawer.menu_position = {x = 6, y = 11};
 drawer.box_pos_dim = {x = 3, y = 10, w = 41, h = 11};
 
@@ -173,6 +171,42 @@ orb = {
 
 none = {""};
 
+drawer.logodefs = {
+	-- Indexed by valid values for loader_logo in loader.conf(5). Valid keys
+	-- are: requires_color (boolean), logo (table depicting graphic), and
+	-- shift (table containing x and y).
+	["beastie"] = {
+		requires_color = true,
+		logo = beastie_color,
+	},
+	["beastiebw"] = {
+		logo = beastie,
+	},
+	["fbsdbw"] = {
+		logo = fbsd_logo_v,
+		shift = {x = 5, y = 4},
+	},
+	["orb"] = {
+		requires_color = true,
+		logo = orb_color,
+		shift = {x = 2, y = 4},
+	},
+	["orbbw"] = {
+		logo = orb,
+		shift = {x = 2, y = 4},
+	},
+	["tribute"] = {
+		logo = fbsd_logo,
+	},
+	["tributebw"] = {
+		logo = fbsd_logo,
+	},
+	["none"] = {
+		logo = none,
+		shift = {x = 17, y = 0},
+	},
+};
+
 function drawer.drawscreen(menu_opts)
 	-- drawlogo() must go first.
 	-- it determines the positions of other elements
@@ -286,6 +320,15 @@ function drawer.drawbrand()
 	drawer.draw(x, y, logo);
 end
 
+function shift_brand_text(shift)
+	drawer.brand_position.x = drawer.brand_position.x + shift.x;
+	drawer.brand_position.y = drawer.brand_position.y + shift.y;
+	drawer.menu_position.x = drawer.menu_position.x + shift.x;
+	drawer.menu_position.y = drawer.menu_position.y + shift.y;
+	drawer.box_pos_dim.x = drawer.box_pos_dim.x + shift.x;
+	drawer.box_pos_dim.y = drawer.box_pos_dim.y + shift.y;
+end
+
 function drawer.drawlogo()
 	local x = tonumber(loader.getenv("loader_logo_x")) or
 	    drawer.logo_position.x;
@@ -293,51 +336,32 @@ function drawer.drawlogo()
 	    drawer.logo_position.y;
 
 	local logo = loader.getenv("loader_logo");
-	local s = {x = 0, y = 0};
 	local colored = color.isEnabled();
 
-	if (logo == "beastie") then
-		if (colored) then
-			logo = beastie_color;
+	-- Lookup
+	local logodef = drawer.logodefs[logo];
+
+	if (logodef ~= nil) and (logodef.logo == none) then
+		-- centre brand and text if no logo
+		if (not none_shifted) then
+			shift_brand_text(logodef.shift);
+			none_shifted = true;
 		end
-	elseif (logo == "beastiebw") then
-		logo = beastie;
-	elseif (logo == "fbsdbw") then
-		logo = fbsd_logo_v;
-		s = drawer.fbsd_logo_shift;
-	elseif (logo == "orb") then
+	elseif (logodef == nil) or (logodef.logo == nil) or
+	    ((not colored) and logodef.requires_color) then
+		-- Choose a sensible default
 		if (colored) then
-			logo = orb_color;
-		end
-		s = drawer.orb_shift;
-	elseif (logo == "orbbw") then
-		logo = orb;
-		s = drawer.orb_shift;
-	elseif (logo == "tribute") then
-		logo = fbsd_logo;
-	elseif (logo == "tributebw") then
-		logo = fbsd_logo;
-	elseif (logo == "none") then
-		--centre brand and text if no logo
-		drawer.brand_position.x = drawer.brand_position.x + drawer.none_shift.x;
-		drawer.brand_position.y = drawer.brand_position.y + drawer.none_shift.y;
-		drawer.menu_position.x = drawer.menu_position.x + drawer.none_shift.x;
-		drawer.menu_position.y = drawer.menu_position.y + drawer.none_shift.y;
-		drawer.box_pos_dim.x = drawer.box_pos_dim.x + drawer.none_shift.x;
-		drawer.box_pos_dim.y = drawer.box_pos_dim.y + drawer.none_shift.y;
-		--prevent redraws from moving menu further
-		drawer.none_shift.x = 0;
-		drawer.none_shift.y = 0;
-		logo = none;
-	end
-	if (not logo) then
-		if (colored) then
-			logo = orb_color;
+			logodef = drawer.logodefs["orb"];
 		else
-			logo = orb;
+			logodef = drawer.logodefs["orbbw"];
 		end
 	end
-	drawer.draw(x + s.x, y + s.y, logo);
+	logo = logodef.logo;
+	if (logodef.shift ~= nil) then
+		x = x + logodef.shift.x;
+		y = y + logodef.shift.y;
+	end
+	drawer.draw(x, y, logo);
 end
 
 return drawer;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201802200456.w1K4u3vA078665>