60 lines
1.6 KiB
Lua
60 lines
1.6 KiB
Lua
local set=GC.setFont
|
|
local fontFiles,fontCache={},{}
|
|
local defaultFont,defaultFallBack
|
|
local curFont=false-- Current using font object
|
|
|
|
local FONT={}
|
|
function FONT.setDefault(name) defaultFont=name end
|
|
function FONT.setFallback(name) defaultFallBack=name end
|
|
function FONT.rawget(s)
|
|
if not fontCache[s] then
|
|
fontCache[s]=GC.setNewFont(s,'light',GC.getDPIScale()*SCR.k*2)
|
|
end
|
|
return fontCache[s]
|
|
end
|
|
function FONT.rawset(s)
|
|
set(fontCache[s] or FONT.rawget(s))
|
|
end
|
|
function FONT.load(fonts)
|
|
for name,path in next,fonts do
|
|
assert(love.filesystem.getInfo(path),STRING.repD("Font file $1($2) not exist!",name,path))
|
|
fontFiles[name]=love.filesystem.newFile(path)
|
|
fontCache[name]={}
|
|
end
|
|
FONT.reset()
|
|
end
|
|
function FONT.get(size,name)
|
|
if not name then name=defaultFont end
|
|
local f=fontCache[name][size]
|
|
if not f then
|
|
f=GC.setNewFont(fontFiles[name],size,'light',GC.getDPIScale()*SCR.k*2)
|
|
if defaultFallBack and name~=defaultFallBack then
|
|
f:setFallbacks(FONT.get(size,defaultFallBack))
|
|
end
|
|
fontCache[name][size]=f
|
|
end
|
|
return f
|
|
end
|
|
function FONT.set(size,name)
|
|
if not name then name=defaultFont end
|
|
|
|
local f=fontCache[name][size]
|
|
if f~=curFont then
|
|
curFont=f or FONT.get(size,name)
|
|
set(curFont)
|
|
end
|
|
end
|
|
function FONT.reset()
|
|
for name,cache in next,fontCache do
|
|
if type(cache)=='table' then
|
|
for size in next,cache do
|
|
cache[size]=FONT.get(size,name)
|
|
end
|
|
else
|
|
fontCache[name]=FONT.rawget(name)
|
|
end
|
|
end
|
|
end
|
|
|
|
return FONT
|