61 lines
1.6 KiB
Lua
61 lines
1.6 KiB
Lua
local gc=love.graphics
|
|
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),("Font file $1($2) not exist!"):repD(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
|