mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-16 21:33:46 +03:00
Upload
This commit is contained in:
940
lua/sui/cl_base.lua
Normal file
940
lua/sui/cl_base.lua
Normal file
@@ -0,0 +1,940 @@
|
||||
--[[
|
||||
| This file was obtained through the combined efforts
|
||||
| of Madbluntz & Plymouth Antiquarian Society.
|
||||
|
|
||||
| Credits: lifestorm, Gregory Wayne Rossel JR.,
|
||||
| Maloy, DrPepper10 @ RIP, Atle!
|
||||
|
|
||||
| Visit for more: https://plymouth.thetwilightzone.ru/
|
||||
--]]
|
||||
|
||||
local hook = hook
|
||||
local bit = bit
|
||||
local math = math
|
||||
|
||||
local Color = Color
|
||||
local ipairs = ipairs
|
||||
local RealFrameTime = RealFrameTime
|
||||
|
||||
local color_white = color_white
|
||||
local color_black = color_black
|
||||
|
||||
local sui = sui
|
||||
|
||||
local isfunction = sui.isfunction
|
||||
local isstring = sui.isstring
|
||||
|
||||
local floor = math.floor
|
||||
|
||||
function sui.scale(v)
|
||||
return ScrH() * (v / 900)
|
||||
end
|
||||
|
||||
function sui.hex_rgb(hex)
|
||||
hex = tonumber(hex:gsub("^([%w])([%w])([%w])$", "%1%1%2%2%3%3", 1), 16)
|
||||
|
||||
return Color(
|
||||
bit.band(bit.rshift(hex, 16), 0xFF),
|
||||
bit.band(bit.rshift(hex, 8), 0xFF),
|
||||
bit.band(hex, 0xFF)
|
||||
)
|
||||
end
|
||||
|
||||
function sui.rgb_hex(c)
|
||||
return bit.tohex((c.r * 0x10000) + (c.g * 0x100) + c.b, 6)
|
||||
end
|
||||
local rgb_hex = sui.rgb_hex
|
||||
|
||||
function sui.lerp_color(from, to)
|
||||
local frac = RealFrameTime() * 10
|
||||
from.r = Lerp(frac, from.r, to.r)
|
||||
from.g = Lerp(frac, from.g, to.g)
|
||||
from.b = Lerp(frac, from.b, to.b)
|
||||
from.a = Lerp(frac, from.a, to.a)
|
||||
end
|
||||
|
||||
do
|
||||
local colors = {
|
||||
["41b9ff"] = Color(44, 62, 80),
|
||||
["00c853"] = Color(44, 62, 80),
|
||||
["181818"] = Color(242, 241, 239),
|
||||
["212121"] = Color(242, 241, 239),
|
||||
}
|
||||
|
||||
function sui.contrast_color(color)
|
||||
local c = colors[rgb_hex(color)]
|
||||
if c then return c end
|
||||
|
||||
local luminance = (0.299 * color.r + 0.587 * color.g + 0.114 * color.b) / 255
|
||||
return luminance > 0.5 and color_black or color_white
|
||||
end
|
||||
end
|
||||
|
||||
do
|
||||
local SetDrawColor = surface.SetDrawColor
|
||||
local SetMaterial = surface.SetMaterial
|
||||
local DrawTexturedRectRotated = surface.DrawTexturedRectRotated
|
||||
function sui.draw_material(mat, x, y, size, col, rot)
|
||||
SetDrawColor(col)
|
||||
|
||||
if x == -1 then
|
||||
x = size / 2
|
||||
end
|
||||
|
||||
if y == -1 then
|
||||
y = size / 2
|
||||
end
|
||||
|
||||
if mat then
|
||||
SetMaterial(mat)
|
||||
end
|
||||
|
||||
DrawTexturedRectRotated(x, y, size, size, rot or 0)
|
||||
end
|
||||
end
|
||||
|
||||
do
|
||||
local hsv_t = {
|
||||
[0] = function(v, p, q, t)
|
||||
return v, t, p
|
||||
end,
|
||||
[1] = function(v, p, q, t)
|
||||
return q, v, p
|
||||
end,
|
||||
[2] = function(v, p, q, t)
|
||||
return p, v, t
|
||||
end,
|
||||
[3] = function(v, p, q, t)
|
||||
return p, q, v
|
||||
end,
|
||||
[4] = function(v, p, q, t)
|
||||
return t, p, v
|
||||
end,
|
||||
[5] = function(v, p, q, t)
|
||||
return v, p, q
|
||||
end
|
||||
}
|
||||
|
||||
function sui.hsv_to_rgb(h, s, v)
|
||||
local i = floor(h * 6)
|
||||
local f = h * 6 - i
|
||||
|
||||
return hsv_t[i % 6](
|
||||
v * 255, -- v
|
||||
(v * (1 - s)) * 255, -- p
|
||||
(v * (1 - f * s)) * 255, -- q
|
||||
(v * (1 - (1 - f) * s)) * 255 -- t
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
local Panel = FindMetaTable("Panel")
|
||||
local SetSize = Panel.SetSize
|
||||
local GetWide = Panel.GetWide
|
||||
local GetTall = Panel.GetTall
|
||||
function sui.scaling_functions(panel)
|
||||
local scale_changed
|
||||
local SUI = CURRENT_SUI
|
||||
|
||||
local dock_top = function(s, h)
|
||||
if not h then return end
|
||||
|
||||
if not scale_changed then
|
||||
s.real_h = h
|
||||
end
|
||||
|
||||
if not s.no_scale then
|
||||
h = SUI.Scale(h)
|
||||
end
|
||||
|
||||
if GetTall(s) == h then return end
|
||||
|
||||
SetSize(s, GetWide(s), h)
|
||||
end
|
||||
|
||||
local dock_right = function(s, w)
|
||||
if not w then return end
|
||||
|
||||
if not scale_changed then
|
||||
s.real_w = w
|
||||
end
|
||||
|
||||
if not s.no_scale then
|
||||
w = SUI.Scale(w)
|
||||
end
|
||||
|
||||
if GetWide(s) == w then return end
|
||||
|
||||
SetSize(s, w, GetTall(s))
|
||||
end
|
||||
|
||||
local size_changed = function(s, w, h)
|
||||
if s.using_scale then return end
|
||||
|
||||
s.using_scale = true
|
||||
|
||||
local dock = s:GetDock()
|
||||
|
||||
if dock ~= FILL then
|
||||
if dock == NODOCK then
|
||||
dock_top(s, h)
|
||||
dock_right(s, w)
|
||||
elseif dock == TOP or dock == BOTTOM then
|
||||
dock_top(s, h)
|
||||
else
|
||||
dock_right(s, w)
|
||||
end
|
||||
end
|
||||
|
||||
s.using_scale = nil
|
||||
end
|
||||
|
||||
local wide_changed = function(s, w)
|
||||
size_changed(s, w)
|
||||
end
|
||||
|
||||
local tall_changed = function(s, h)
|
||||
size_changed(s, nil, h)
|
||||
end
|
||||
|
||||
function panel:ScaleChanged()
|
||||
scale_changed = true
|
||||
size_changed(self, self.real_w, self.real_h)
|
||||
scale_changed = nil
|
||||
if self.OnScaleChange then
|
||||
self:OnScaleChange()
|
||||
end
|
||||
end
|
||||
|
||||
local on_remove = function(s)
|
||||
SUI.RemoveScaleHook(s)
|
||||
end
|
||||
|
||||
function panel:ScaleInit()
|
||||
self.SetSize = size_changed
|
||||
self.SetWide = wide_changed
|
||||
self.SetTall = tall_changed
|
||||
SUI.OnScaleChanged(self, self.ScaleChanged)
|
||||
self:On("OnRemove", on_remove)
|
||||
end
|
||||
end
|
||||
|
||||
do
|
||||
local utf8 = {}
|
||||
|
||||
local str_rel_to_abs = function(str, v, str_n)
|
||||
return v > 0 and v or math.max(str_n + v + 1, 1)
|
||||
end
|
||||
|
||||
local utf8_decode = function(str, start_pos, str_n)
|
||||
start_pos = str_rel_to_abs(str, start_pos or 1, str_n)
|
||||
|
||||
local b1 = str:byte(start_pos, start_pos)
|
||||
if not b1 then return nil end
|
||||
if b1 < 0x80 then return start_pos, start_pos, b1 end
|
||||
if b1 > 0xF4 or b1 < 0xC2 then return nil end
|
||||
|
||||
local cont_byte_count = b1 >= 0xF0 and 3 or b1 >= 0xE0 and 2 or b1 >= 0xC0 and 1
|
||||
local end_pos = start_pos + cont_byte_count
|
||||
local code_point = 0
|
||||
|
||||
if str_n < end_pos then return nil end
|
||||
|
||||
local bytes = {str:byte(start_pos + 1, end_pos)}
|
||||
for i = 1, #bytes do
|
||||
local b_x = bytes[i]
|
||||
if bit.band(b_x, 0xC0) ~= 0x80 then return nil end
|
||||
code_point = bit.bor(bit.lshift(code_point, 6), bit.band(b_x, 0x3F))
|
||||
b1 = bit.lshift(b1, 1)
|
||||
end
|
||||
|
||||
code_point = bit.bor(code_point, bit.lshift(bit.band(b1, 0x7F), cont_byte_count * 5))
|
||||
|
||||
return start_pos, end_pos, code_point
|
||||
end
|
||||
|
||||
local replacement = string.char(239, 191, 189)
|
||||
|
||||
function utf8.force(str)
|
||||
local end_pos = #str
|
||||
if end_pos == 0 then return str, end_pos end
|
||||
|
||||
local ret = ""
|
||||
local cur_pos = 1
|
||||
|
||||
repeat
|
||||
local seq_start_pos, seq_end_pos = utf8_decode(str, cur_pos, end_pos)
|
||||
|
||||
if not seq_start_pos then
|
||||
ret = ret .. replacement
|
||||
cur_pos = cur_pos + 1
|
||||
else
|
||||
ret = ret .. str:sub(seq_start_pos, seq_end_pos)
|
||||
cur_pos = seq_end_pos + 1
|
||||
end
|
||||
until cur_pos > end_pos
|
||||
|
||||
return ret, #ret
|
||||
end
|
||||
|
||||
-- https://gist.github.com/gdeglin/4128882
|
||||
|
||||
local utf8_char_bytes = function(c)
|
||||
if c > 0 and c <= 127 then
|
||||
return 1
|
||||
elseif c >= 194 and c <= 223 then
|
||||
return 2
|
||||
elseif c >= 224 and c <= 239 then
|
||||
return 3
|
||||
elseif c >= 240 and c <= 244 then
|
||||
return 4
|
||||
end
|
||||
end
|
||||
utf8.char_bytes = utf8_char_bytes
|
||||
|
||||
function utf8.len(str)
|
||||
local length = #str
|
||||
|
||||
local len = 0
|
||||
|
||||
local pos = 1
|
||||
while pos <= length do
|
||||
len = len + 1
|
||||
pos = pos + utf8_char_bytes(str:byte(pos))
|
||||
end
|
||||
|
||||
return len
|
||||
end
|
||||
|
||||
function utf8.sub(str, i, j)
|
||||
j = j or -1
|
||||
|
||||
if i == nil then return "" end
|
||||
|
||||
local l = (i >= 0 and j >= 0) or utf8.len(str)
|
||||
local start_char = (i >= 0) and i or l + i + 1
|
||||
local end_char = (j >= 0) and j or l + j + 1
|
||||
|
||||
if start_char > end_char then return "" end
|
||||
|
||||
local pos = 1
|
||||
local length = #str
|
||||
local len = 0
|
||||
|
||||
local start_byte, end_byte = 1, length
|
||||
|
||||
while pos <= length do
|
||||
len = len + 1
|
||||
|
||||
if len == start_char then
|
||||
start_byte = pos
|
||||
end
|
||||
|
||||
pos = pos + utf8_char_bytes(str:byte(pos))
|
||||
|
||||
if len == end_char then
|
||||
end_byte = pos - 1
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
return str:sub(start_byte, end_byte)
|
||||
end
|
||||
|
||||
sui.utf8 = utf8
|
||||
end
|
||||
|
||||
--
|
||||
-- thanks falco!
|
||||
-- https://github.com/FPtje/DarkRP/blob/4fd2c3c315427e79bb7624702cfaefe9ad26ac7e/gamemode/modules/base/cl_util.lua#L42
|
||||
--
|
||||
do
|
||||
local utf8 = utf8
|
||||
local surface = surface
|
||||
|
||||
local max_width, original_width, can_fix
|
||||
|
||||
local fix_width = function()
|
||||
if can_fix then
|
||||
can_fix = false
|
||||
max_width = original_width
|
||||
end
|
||||
end
|
||||
|
||||
local char_wrap = function(text, remaining_width)
|
||||
local total_width = 0
|
||||
|
||||
local new_text = ""
|
||||
for char in text:gmatch(utf8.charpattern) do
|
||||
total_width = total_width + surface.GetTextSize(char)
|
||||
if total_width >= remaining_width then
|
||||
total_width = surface.GetTextSize(char)
|
||||
fix_width()
|
||||
remaining_width = max_width
|
||||
|
||||
new_text = new_text .. ("\n" .. char)
|
||||
else
|
||||
new_text = new_text .. char
|
||||
end
|
||||
end
|
||||
|
||||
return new_text, total_width
|
||||
end
|
||||
|
||||
function sui.wrap_text(text, font, width, first_width)
|
||||
text = sui.utf8.force(text)
|
||||
|
||||
local total_width = 0
|
||||
can_fix = first_width and true or false
|
||||
max_width, original_width = first_width or width, width
|
||||
|
||||
surface.SetFont(font)
|
||||
|
||||
local space_width = surface.GetTextSize(" ")
|
||||
|
||||
text = text:gsub("(%s?[%S]*)", function(word)
|
||||
local char = word:sub(1, 1)
|
||||
if char == "\n" then
|
||||
total_width = 0
|
||||
fix_width()
|
||||
end
|
||||
|
||||
local wordlen = surface.GetTextSize(word)
|
||||
total_width = total_width + wordlen
|
||||
|
||||
if wordlen >= max_width then
|
||||
local split_word
|
||||
split_word, total_width = char_wrap(word, max_width - (total_width - wordlen))
|
||||
return split_word
|
||||
elseif total_width < max_width then
|
||||
return word
|
||||
end
|
||||
|
||||
fix_width()
|
||||
|
||||
total_width = wordlen
|
||||
|
||||
if char == " " then
|
||||
total_width = total_width - space_width
|
||||
return "\n" .. word:sub(2)
|
||||
end
|
||||
|
||||
return "\n" .. word
|
||||
end)
|
||||
|
||||
return text
|
||||
end
|
||||
end
|
||||
|
||||
function sui.register(classname, panel_table, parent_class)
|
||||
sui.TDLib.Install(panel_table)
|
||||
|
||||
if not panel_table.Add then
|
||||
function panel_table:Add(pnl)
|
||||
return vgui.Create(pnl, self)
|
||||
end
|
||||
end
|
||||
|
||||
if not panel_table.NoOverrideClear and not panel_table.Clear then
|
||||
function panel_table:Clear()
|
||||
local children = self:GetChildren()
|
||||
for i = 1, #children do
|
||||
children[i]:Remove()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local SUI = CURRENT_SUI
|
||||
|
||||
for k, v in pairs(SUI.panels_funcs) do
|
||||
panel_table[k] = v
|
||||
end
|
||||
|
||||
panel_table.SUI_GetColor = function(name)
|
||||
return SUI.GetColor(name)
|
||||
end
|
||||
|
||||
SUI.panels[classname] = panel_table
|
||||
|
||||
return vgui.Register(SUI.name .. "." .. classname, panel_table, parent_class)
|
||||
end
|
||||
|
||||
local Material; do
|
||||
local C_Material, material_str = select(2, debug.getupvalue(_G.Material, 1)), "0001010" -- [["mips smooth"]]
|
||||
Material = function(name)
|
||||
return C_Material(name, material_str)
|
||||
end
|
||||
end
|
||||
sui.Material = Material
|
||||
|
||||
local function prepare_theme(theme)
|
||||
for k, v in pairs(theme) do
|
||||
if IsColor(v) then continue end
|
||||
|
||||
if istable(v) then
|
||||
prepare_theme(v)
|
||||
elseif isstring(v) and v:sub(1, 1) == "#" then
|
||||
theme[k] = sui.hex_rgb(v:sub(2))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function sui.new(addon_name, default_scaling, panels_funcs)
|
||||
local SUI = {
|
||||
name = addon_name,
|
||||
panels = {},
|
||||
panels_funcs = panels_funcs or {}
|
||||
}
|
||||
|
||||
CURRENT_SUI = SUI
|
||||
|
||||
do
|
||||
local themes = table.Copy(sui.themes)
|
||||
local current_theme_table
|
||||
|
||||
function SUI.GetColor(color_name)
|
||||
return current_theme_table[color_name]
|
||||
end
|
||||
|
||||
function SUI.SetTheme(theme_name)
|
||||
SUI.current_theme = theme_name
|
||||
current_theme_table = themes[theme_name]
|
||||
hook.Call(addon_name .. ".ThemeChanged")
|
||||
end
|
||||
|
||||
function SUI.GetThemes()
|
||||
return themes
|
||||
end
|
||||
|
||||
function SUI.AddToTheme(theme_name, tbl)
|
||||
local theme = themes[theme_name]
|
||||
for k, v in pairs(tbl) do
|
||||
theme[k] = v
|
||||
end
|
||||
prepare_theme(theme)
|
||||
end
|
||||
|
||||
function SUI.RemoveTheme(theme_name)
|
||||
themes[theme_name] = nil
|
||||
if theme_name == SUI.current_theme then
|
||||
SUI.SetTheme(next(themes))
|
||||
end
|
||||
end
|
||||
|
||||
function SUI.AddTheme(theme_name, tbl)
|
||||
prepare_theme(tbl)
|
||||
themes[theme_name] = tbl
|
||||
end
|
||||
|
||||
SUI.themes = themes
|
||||
end
|
||||
|
||||
local Scale
|
||||
do
|
||||
local scale = 1
|
||||
|
||||
if default_scaling then
|
||||
SUI.Scale = sui.scale
|
||||
else
|
||||
function SUI.Scale(v)
|
||||
return floor((v * scale) + 0.5)
|
||||
end
|
||||
end
|
||||
Scale = SUI.Scale
|
||||
|
||||
function SUI.ScaleEven(v)
|
||||
v = Scale(v)
|
||||
if v % 2 ~= 0 then
|
||||
v = v + 1
|
||||
end
|
||||
return v
|
||||
end
|
||||
|
||||
function SUI.SetScale(_scale)
|
||||
if _scale == scale then return end
|
||||
|
||||
scale = _scale
|
||||
SUI.scale = _scale
|
||||
|
||||
for k, v in pairs(SUI.fonts) do
|
||||
SUI.CreateFont(k:sub(#addon_name + 1), v.font, v.size, v.weight)
|
||||
end
|
||||
|
||||
SUI.CallScaleChanged()
|
||||
end
|
||||
|
||||
local n = 0
|
||||
local keys = {}
|
||||
local hooks = {}
|
||||
_G[addon_name .. "_HOOKS"] = keys
|
||||
_G[addon_name .. "_KEYS"] = hooks
|
||||
_G[addon_name .. "_N"] = function()
|
||||
return n
|
||||
end
|
||||
function SUI.OnScaleChanged(name, func)
|
||||
if not isfunction(func) then
|
||||
error("Invalid function?")
|
||||
end
|
||||
|
||||
if not name then
|
||||
error("Invalid name?")
|
||||
end
|
||||
|
||||
if not isstring(name) then
|
||||
local _func = func
|
||||
func = function()
|
||||
local isvalid = name.IsValid
|
||||
if isvalid and isvalid(name) then
|
||||
_func(name)
|
||||
else
|
||||
SUI.RemoveScaleHook(name, true)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local pos = keys[name]
|
||||
if pos then
|
||||
hooks[pos + 1] = func
|
||||
else
|
||||
hooks[n + 1] = name
|
||||
hooks[n + 2] = func
|
||||
keys[name] = n + 1
|
||||
n = n + 2
|
||||
end
|
||||
end
|
||||
|
||||
function SUI.RemoveScaleHook(name, in_hook)
|
||||
local pos = keys[name]
|
||||
if not pos then return end
|
||||
|
||||
if in_hook then
|
||||
hooks[pos] = nil
|
||||
hooks[pos + 1] = nil
|
||||
else
|
||||
local new_name = hooks[n - 1]
|
||||
if new_name then
|
||||
hooks[pos], hooks[pos + 1] = new_name, hooks[n]
|
||||
hooks[n - 1], hooks[n] = nil, nil
|
||||
keys[new_name] = pos
|
||||
end
|
||||
n = n - 2
|
||||
end
|
||||
keys[name] = nil
|
||||
end
|
||||
|
||||
function SUI.CallScaleChanged()
|
||||
if n == 0 then return end
|
||||
|
||||
local i, c_n = 2, n
|
||||
::loop::
|
||||
local func = hooks[i]
|
||||
if func then
|
||||
func()
|
||||
i = i + 2
|
||||
else
|
||||
local _n, _i = c_n, i
|
||||
if n ~= c_n then
|
||||
_n = n
|
||||
i = i + 2
|
||||
else
|
||||
c_n = c_n - 2
|
||||
end
|
||||
|
||||
local new_name = hooks[_n - 1]
|
||||
if new_name then
|
||||
hooks[_i - 1], hooks[_i] = new_name, hooks[_n]
|
||||
hooks[_n - 1], hooks[_n] = nil, nil
|
||||
keys[new_name] = _i - 1
|
||||
end
|
||||
|
||||
n = n - 2
|
||||
end
|
||||
|
||||
if i <= c_n then
|
||||
goto loop
|
||||
end
|
||||
end
|
||||
|
||||
function SUI.GetScale()
|
||||
return scale
|
||||
end
|
||||
|
||||
SUI.scale = 1
|
||||
end
|
||||
|
||||
do
|
||||
local fonts = {}
|
||||
|
||||
function SUI.CreateFont(font_name, font, size, weight)
|
||||
font_name = addon_name .. font_name
|
||||
|
||||
fonts[font_name] = fonts[font_name] or {
|
||||
font = font,
|
||||
size = size,
|
||||
weight = weight
|
||||
}
|
||||
|
||||
surface.CreateFont(font_name, {
|
||||
font = font,
|
||||
size = Scale(size),
|
||||
weight = weight,
|
||||
extended = true
|
||||
})
|
||||
|
||||
return font_name
|
||||
end
|
||||
|
||||
function SUI.GetFont(font_name)
|
||||
return addon_name .. font_name
|
||||
end
|
||||
|
||||
function SUI.GetFontHeight(font_name)
|
||||
local font = fonts[addon_name .. font_name] or fonts[font_name]
|
||||
if not font then return 0 end
|
||||
|
||||
return floor(Scale(font.size or 0))
|
||||
end
|
||||
|
||||
SUI.fonts = fonts
|
||||
end
|
||||
|
||||
do
|
||||
local materials = {}
|
||||
|
||||
local delay = 0.008
|
||||
local next_run = UnPredictedCurTime()
|
||||
|
||||
function SUI.Material(mat, allow_delay)
|
||||
local _mat = materials[mat]
|
||||
if _mat then return _mat end
|
||||
|
||||
if allow_delay then
|
||||
if UnPredictedCurTime() < next_run then return end
|
||||
next_run = UnPredictedCurTime() + delay
|
||||
end
|
||||
|
||||
materials[mat] = Material(mat)
|
||||
|
||||
return materials[mat]
|
||||
end
|
||||
|
||||
SUI.materials = materials
|
||||
end
|
||||
|
||||
SUI.SetTheme("Dark")
|
||||
|
||||
for _, f in ipairs(file.Find("sui/vgui/sui_*.lua", "LUA")) do
|
||||
include("sui/vgui/" .. f)
|
||||
end
|
||||
|
||||
for _, f in ipairs(file.Find(string.format("sui/vgui/%s_*.lua", addon_name:lower()), "LUA")) do
|
||||
include("sui/vgui/" .. f)
|
||||
end
|
||||
|
||||
return SUI
|
||||
end
|
||||
|
||||
sui.themes = sui.themes or {}
|
||||
function sui.add_theme(name, tbl)
|
||||
prepare_theme(tbl)
|
||||
sui.themes[name] = tbl
|
||||
end
|
||||
|
||||
function sui.valid_options()
|
||||
local objs = {}
|
||||
objs.IsValid = function()
|
||||
local valid = true
|
||||
for i = 1, #objs do
|
||||
local obj = objs[i]
|
||||
if obj:IsValid() and obj.valid == false then
|
||||
valid = false
|
||||
break
|
||||
end
|
||||
end
|
||||
return valid
|
||||
end
|
||||
objs.Add = function(obj)
|
||||
table.insert(objs, obj)
|
||||
end
|
||||
return objs
|
||||
end
|
||||
|
||||
do
|
||||
local SURFACE = Color(31, 31, 31)
|
||||
local PRIMARY = Color(65, 185, 255)
|
||||
|
||||
local ON_SURFACE = Color(255, 255, 255)
|
||||
local ON_SURFACE_HIGH_EMPHASIS = ColorAlpha(ON_SURFACE, 221)
|
||||
local ON_SURFACE_MEDIUM_EMPHASIS = ColorAlpha(ON_SURFACE, 122)
|
||||
local ON_SURFACE_DISABLED = ColorAlpha(ON_SURFACE, 97)
|
||||
|
||||
local ON_PRIMARY = Color(60, 60, 60)
|
||||
|
||||
sui.add_theme("Dark", {
|
||||
frame = Color(18, 18, 18),
|
||||
frame_blur = false,
|
||||
|
||||
title = ON_SURFACE,
|
||||
header = SURFACE,
|
||||
|
||||
close = ON_SURFACE_MEDIUM_EMPHASIS,
|
||||
close_hover = Color(255, 60, 60),
|
||||
close_press = Color(255, 255, 255, 30),
|
||||
|
||||
button = PRIMARY,
|
||||
button_text = "#050709",
|
||||
button_hover = ColorAlpha(ON_PRIMARY, 100),
|
||||
button_click = ColorAlpha(ON_PRIMARY, 240),
|
||||
button_disabled = Color(100, 100, 100),
|
||||
button_disabled_text = "#bdbdbd",
|
||||
|
||||
button2_hover = ColorAlpha(PRIMARY, 5),
|
||||
button2_selected = ColorAlpha(PRIMARY, 15),
|
||||
|
||||
scroll = ColorAlpha(PRIMARY, 97),
|
||||
scroll_grip = PRIMARY,
|
||||
|
||||
scroll_panel = Color(29, 29, 29),
|
||||
scroll_panel_outline = false,
|
||||
|
||||
text_entry_bg = Color(34, 34, 34),
|
||||
text_entry_bar_color = Color(0, 0, 0, 0),
|
||||
text_entry = ON_SURFACE_HIGH_EMPHASIS,
|
||||
text_entry_2 = ON_SURFACE_MEDIUM_EMPHASIS,
|
||||
text_entry_3 = PRIMARY,
|
||||
|
||||
property_sheet_bg = Color(39, 39, 39),
|
||||
property_sheet_tab = Color(150, 150, 150),
|
||||
property_sheet_tab_click = Color(255, 255, 255, 30),
|
||||
property_sheet_tab_active = PRIMARY,
|
||||
|
||||
toggle_button = ON_SURFACE_DISABLED,
|
||||
toggle_button_switch = ON_SURFACE_HIGH_EMPHASIS,
|
||||
|
||||
toggle_button_active = ColorAlpha(PRIMARY, 65),
|
||||
toggle_button_switch_active = PRIMARY,
|
||||
|
||||
slider_knob = PRIMARY,
|
||||
slider_track = ColorAlpha(PRIMARY, 65),
|
||||
slider_hover = ColorAlpha(PRIMARY, 5),
|
||||
slider_pressed = ColorAlpha(PRIMARY, 30),
|
||||
|
||||
on_sheet = Color(43, 43, 43, 200),
|
||||
on_sheet_hover = Color(200, 200, 200, 20),
|
||||
|
||||
--=--
|
||||
query_box_bg = "#181818",
|
||||
query_box_cancel = Color(244, 67, 54, 30),
|
||||
query_box_cancel_text = "#f44336",
|
||||
--=--
|
||||
|
||||
--=--
|
||||
menu = "#212121",
|
||||
|
||||
menu_option = "#212121",
|
||||
menu_option_text = "#bdbdbd",
|
||||
menu_option_hover = "#3b3b3b",
|
||||
menu_option_hover_text = "#fefefe",
|
||||
|
||||
menu_spacer = "#303030",
|
||||
--=--
|
||||
|
||||
line = "#303030",
|
||||
|
||||
--=--
|
||||
column_sheet = "#263238",
|
||||
column_sheet_bar = "#202020",
|
||||
|
||||
column_sheet_tab = "#202020",
|
||||
column_sheet_tab_hover = "#2e2e2e",
|
||||
column_sheet_tab_active = "#383838",
|
||||
|
||||
column_sheet_tab_icon = "#909090",
|
||||
column_sheet_tab_icon_hover = "#f0f0f0",
|
||||
column_sheet_tab_icon_active = "#34a1e0",
|
||||
--=--
|
||||
|
||||
--=--
|
||||
collapse_category_header = "#272727",
|
||||
collapse_category_header_hover = "#2a2a2a",
|
||||
collapse_category_header_active = "#2e2e2e",
|
||||
|
||||
collapse_category_header_text = "#aaaaaa",
|
||||
collapse_category_header_text_hover = "#dcdcdc",
|
||||
collapse_category_header_text_active = "#34A1E0",
|
||||
|
||||
collapse_category_item = "#343434",
|
||||
collapse_category_item_hover = "#464646",
|
||||
collapse_category_item_active = "#535353",
|
||||
|
||||
collapse_category_item_text = "#aaaaaa",
|
||||
collapse_category_item_text_hover = "#dcdcdc",
|
||||
collapse_category_item_text_active = "#ffffff",
|
||||
--=--
|
||||
})
|
||||
end
|
||||
|
||||
do
|
||||
local PRIMARY = Color(65, 185, 255)
|
||||
|
||||
local ON_PRIMARY = Color(220, 220, 220)
|
||||
|
||||
sui.add_theme("Blur", {
|
||||
frame = Color(30, 30, 30, 220),
|
||||
frame_blur = true,
|
||||
|
||||
title = Color(255, 255, 255),
|
||||
header = Color(60, 60, 60, 200),
|
||||
|
||||
close = Color(200, 200, 200),
|
||||
close_hover = Color(255, 60, 60),
|
||||
close_press = Color(255, 255, 255, 30),
|
||||
|
||||
button = ColorAlpha(PRIMARY, 130),
|
||||
button_text = ON_PRIMARY,
|
||||
button_hover = Color(0, 0, 0, 30),
|
||||
button_click = PRIMARY,
|
||||
button_disabled = Color(100, 100, 100),
|
||||
button_disabled_text = "#bdbdbd",
|
||||
|
||||
button2_hover = ColorAlpha(PRIMARY, 5),
|
||||
button2_selected = ColorAlpha(PRIMARY, 15),
|
||||
|
||||
scroll = Color(0, 0, 0, 100),
|
||||
scroll_grip = PRIMARY,
|
||||
|
||||
scroll_panel = Color(255, 255, 255, 10),
|
||||
scroll_panel_outline = false,
|
||||
|
||||
text_entry_bg = Color(0, 0, 0, 0),
|
||||
text_entry_bar_color = Color(200, 200, 200, 153),
|
||||
text_entry = Color(240, 240, 240, 221),
|
||||
text_entry_2 = Color(200, 200, 200, 153),
|
||||
text_entry_3 = PRIMARY,
|
||||
|
||||
property_sheet_bg = Color(60, 60, 60, 200),
|
||||
property_sheet_tab = Color(150, 150, 150),
|
||||
property_sheet_tab_click = Color(255, 255, 255, 40),
|
||||
property_sheet_tab_active = PRIMARY,
|
||||
|
||||
toggle_button = Color(244, 67, 54),
|
||||
toggle_button_switch = Color(230, 230, 230),
|
||||
|
||||
toggle_button_active = PRIMARY,
|
||||
toggle_button_switch_active = Color(230, 230, 230),
|
||||
|
||||
slider_knob = PRIMARY,
|
||||
slider_track = ColorAlpha(PRIMARY, 100),
|
||||
slider_hover = ColorAlpha(PRIMARY, 40),
|
||||
slider_pressed = ColorAlpha(PRIMARY, 70),
|
||||
|
||||
on_sheet = Color(60, 60, 60, 180),
|
||||
on_sheet_hover = Color(30, 30, 30, 70),
|
||||
|
||||
--=--
|
||||
query_box_bg = Color(0, 0, 0, 100),
|
||||
query_box_cancel = Color(244, 67, 54, 30),
|
||||
query_box_cancel_text = "#f44336",
|
||||
--=--
|
||||
})
|
||||
end
|
||||
Reference in New Issue
Block a user