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>