Experimenting with themes

This commit is contained in:
Ryan Ward 2023-01-12 00:29:42 -05:00
parent d1b3ffb39a
commit da62ef0af8
3 changed files with 100 additions and 20 deletions

View File

@ -1,17 +1,3 @@
local function HSL(h, s, l, a)
if s<=0 then return l,l,l,a end
h, s, l = h/256*6, s/255, l/255
local c = (1-math.abs(2*l-1))*s
local x = (1-math.abs(h%2-1))*c
local m,r,b,g = (l-.5*c), 0,0,0
if h < 1 then r,b,g = c,x,0
elseif h < 2 then r,b,g = x,c,0
elseif h < 3 then r,b,g = 0,c,x
elseif h < 4 then r,b,g = 0,x,c
elseif h < 5 then r,b,g = x,0,c
else r,b,g = c,0,x
end return (r+m)*255,(g+m)*255,(b+m)*255,a
end
local color={}
local mt = {
__add = function (c1,c2)
@ -49,7 +35,27 @@ local mt = {
end
}
function color.hsl(h, s, l)
if s<=0 then return l,l,l end
h, s, l = h/256*6, s/255, l/255
local c = (1-math.abs(2*l-1))*s
local x = (1-math.abs(h%2-1))*c
local m,r,b,g = (l-.5*c), 0,0,0
if h < 1 then r,b,g = c,x,0
elseif h < 2 then r,b,g = x,c,0
elseif h < 3 then r,b,g = 0,c,x
elseif h < 4 then r,b,g = 0,x,c
elseif h < 5 then r,b,g = x,0,c
else r,b,g = c,0,x
end return (r+m)*255,(g+m)*255,(b+m)*255
end
function color.new(r, b, g, fmt)
if type(r) == "string" then
r, b, g = tonumber(string.sub(r,1,2),16),tonumber(string.sub(r,3,4),16),tonumber(string.sub(r,5,6),16)
elseif type(r) == "table" then
return r
end
local temp
if fmt then
temp = {r,b,g}

View File

@ -124,7 +124,7 @@ updater:newThread("GUI Hotkey Manager",function()
end
thread.sleep(.001)
end
end).OnError(print)
end)
function gui:SetHotKey(keys, conn)
has_hotkey = true
@ -328,7 +328,7 @@ function gui:isBeingCovered(mx,my)
for i = #children, 1, -1 do
if children[i] == self then
return false
elseif children[i]:canPress(mx,my) and not(children[i] == self) then
elseif children[i]:canPress(mx,my) and not(children[i] == self) and not(children[i].ignore) then
return true
end
end
@ -348,9 +348,11 @@ function gui:setParent(parent)
break
end
end
if parent then
table.insert(parent.children, self)
self.parent = parent
end
end
local function processDo(ref)
ref.Do[1]()
@ -710,7 +712,8 @@ function gui:newTextBase(typ, txt, x, y, w, h, sx, sy, sw, sh)
return love.graphics.newFont(n)
end
end
local Font,width,height,text=self.Font,self.dualDim.offset.size.x,self.dualDim.offset.size.y,self.text
local x, y, width, height = self:getAbsolutes()
local Font, text = self.Font, self.text
local s = 3
Font = font(s)
while Font:getHeight()<height and Font:getWidth(text)<width do
@ -1005,7 +1008,7 @@ function gui:newImageBase(typ,x, y, w, h, sx, sy, sw, sh)
self.imageHeigth = img:getHeight()
self.imageWidth = img:getWidth()
self.quad = love.graphics.newQuad(0, 0, w, h, self.imageWidth, self.imageHeigth)
end).OnError(print)
end)
end
return c
end
@ -1251,6 +1254,7 @@ gui.virtual.children = {}
gui.virtual.dualDim = gui:newDualDim()
gui.virtual.x = 0
gui.virtual.y = 0
setmetatable(gui.virtual, gui)
local w, h = love.graphics.getDimensions()
gui.virtual.dualDim.offset.size.x = w

70
gui/theme.lua Normal file
View File

@ -0,0 +1,70 @@
local color = require("gui.color")
local theme = {}
local defaultFont = love.graphics.getFont()
theme.__index = theme
local function generate_harmonious_colors(num_colors)
local base_hue = math.random(0, 360) -- random starting hue
local colors = {}
for i = 1, num_colors do
local new_hue = (base_hue + (360 / num_colors) * i) % 360 -- offset hue by 1/n of the color wheel
table.insert(colors, color.new(color.hsl(new_hue, math.random(50, 100), math.random(20, 70))))
end
return colors
end
function theme:random()
local harmonious_colors = generate_harmonious_colors(5)
return theme:new(unpack(harmonious_colors))
end
function theme:new(colorPrimary, primaryText, buttonNormal, buttonHighlight,
buttonText, primaryTextFont, buttonTextFont)
local c = {}
setmetatable(c, theme)
c.colorPrimary = color.new(colorPrimary)
c.colorPrimaryDark = color.darken(c.colorPrimary,.4)
c.colorPrimaryText = color.new(primaryText)
c.colorButtonNormal = color.new(buttonNormal)
c.colorButtonHighlight = color.new(buttonHighlight)
c.colorButtonText = color.new(buttonText)
c.fontPrimary = primaryTextFont or defaultFont
c.fontButton = buttonTextFont or defaultFont
return c
end
function theme:setColorPrimary(c)
self.colorPrimary = color.new(c)
end
function theme:setColorPrimaryDark(c)
self.colorPrimaryDark = color.new(c)
end
function theme:setColorPrimaryText(c)
self.colorPrimaryText = color.new(c)
end
function theme:setColorButtonNormal(c)
self.colorButtonNormal = color.new(c)
end
function theme:setColorButtonHighlight(c)
self.colorButtonHighlight = color.new(c)
end
function theme:setColorButtonText(c)
self.colorButtonText = color.new(c)
end
function theme:setFontPrimary(c)
self.fontPrimary = color.new(c)
end
function theme:setFontButton(c)
self.fontButton = color.new(c)
end
return theme