diff options
Diffstat (limited to 'style-default.lua')
-rw-r--r-- | style-default.lua | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/style-default.lua b/style-default.lua new file mode 100644 index 0000000..7c85e46 --- /dev/null +++ b/style-default.lua @@ -0,0 +1,134 @@ +-- default style +local color = { + normal = {bg = {128,128,128,200}, fg = {59,59,59,200}}, + hot = {bg = {145,153,153,200}, fg = {60,61,54,200}}, + active = {bg = {145,153,153,255}, fg = {60,61,54,255}} +} + +-- load default font +if not love.graphics.getFont() then + love.graphics.setFont(love.graphics.newFont(12)) +end + +local function Button(state, title, x,y,w,h) + local c = color[state] + if state ~= 'normal' then + love.graphics.setColor(c.fg) + love.graphics.rectangle('fill', x+3,y+3,w,h) + end + love.graphics.setColor(c.bg) + love.graphics.rectangle('fill', x,y,w,h) + love.graphics.setColor(c.fg) + local f = love.graphics.getFont() + love.graphics.print(title, x + (w-f:getWidth(title))/2, y + (h-f:getHeight(title))/2) +end + +local function Label(state, text, x,y,w,h,align) + local c = color[state] + love.graphics.setColor(c.fg) + local f = assert(love.graphics.getFont()) + if align == 'center' then + x = x + (w - f:getWidth(text))/2 + y = y + (h - f:getHeight(text))/2 + elseif align == 'right' then + x = x + w - f:getWidth(text) + y = y + h - f:getHeight(text) + end + love.graphics.print(text, x,y) +end + +local function Slider(state, fraction, x,y,w,h, vertical) + local c = color[state] + if state ~= 'normal' then + love.graphics.setColor(c.fg) + love.graphics.rectangle('fill', x+3,y+3,w,h) + end + love.graphics.setColor(c.bg) + love.graphics.rectangle('fill', x,y,w,h) + + love.graphics.setColor(c.fg) + local hw,hh = w,h + if vertical then + hh = h * fraction + y = y + (h - hh) + else + hw = w * fraction + end + love.graphics.rectangle('fill', x,y,hw,hh) +end + +local function Slider2D(state, fraction, x,y,w,h, vertical) + local c = color[state] + if state ~= 'normal' then + love.graphics.setColor(c.fg) + love.graphics.rectangle('fill', x+3,y+3,w,h) + end + love.graphics.setColor(c.bg) + love.graphics.rectangle('fill', x,y,w,h) + + -- draw quadrants + local lw = love.graphics.getLineWidth() + love.graphics.setLineWidth(1) + love.graphics.setColor(c.fg[1], c.fg[2], c.fg[3], math.min(c.fg[4], 127)) + love.graphics.line(x+w/2,y, x+w/2,y+h) + love.graphics.line(x,y+h/2, x+w,y+h/2) + love.graphics.setLineWidth(lw) + + -- draw cursor + local xx = x + fraction.x * w + local yy = y + fraction.y * h + love.graphics.setColor(c.fg) + love.graphics.circle('fill', xx,yy,4,4) +end + +local function Input(state, text, cursor, x,y,w,h) + local c = color[state] + if state ~= 'normal' then + love.graphics.setColor(c.fg) + love.graphics.rectangle('fill', x+3,y+3,w,h) + end + love.graphics.setColor(c.bg) + love.graphics.rectangle('fill', x,y,w,h) + love.graphics.setColor(c.fg) + + local lw = love.graphics.getLineWidth() + love.graphics.setLineWidth(1) + love.graphics.rectangle('line', x,y,w,h) + + local f = love.graphics.getFont() + local th = f:getHeight(text) + local cursorPos = x + 2 + f:getWidth(text:sub(1,cursor)) + + love.graphics.print(text, x+2,y+(h-th)/2) + love.graphics.line(cursorPos, y+4, cursorPos, y+h-4) + + love.graphics.setLineWidth(lw) +end + +local function Checkbox(state, checked, x,y,w,h) + local c = color[state] + if state ~= 'normal' then + love.graphics.setColor(c.fg) + love.graphics.rectangle('fill', x+3,y+3,w,h) + end + love.graphics.setColor(c.bg) + love.graphics.rectangle('fill', x,y,w,h) + love.graphics.setColor(c.fg) + love.graphics.rectangle('line', x,y,w,h) + if checked then + local r = math.max(math.min(w/2,h/2) - 3, 2) + love.graphics.circle('fill', x+w/2,y+h/2,r) + end +end + + +-- the style +return { + color = color, + Button = Button, + Label = Label, + Slider = Slider, + Slider2D = Slider2D, + Input = Input, + Checkbox = Checkbox, +} |