TradeSkillMaster/LibTSM/Util/FontObject.lua

95 lines
3.1 KiB
Lua

-- ------------------------------------------------------------------------------ --
-- TradeSkillMaster --
-- https://tradeskillmaster.com --
-- All Rights Reserved - Detailed license information included with addon. --
-- ------------------------------------------------------------------------------ --
--- FontObject Functions.
-- @module FontObject
local _, TSM = ...
local FontObject = TSM.Init("Util.FontObject")
local private = {
context = {},
}
-- ============================================================================
-- Metatable
-- ============================================================================
local FONT_OBJECT_MT = {
__index = {
SetPath = function(self, path)
assert(type(path) == "string")
local context = private.context[self]
context.path = path
return self
end,
SetSize = function(self, size)
assert(type(size) == "number")
local context = private.context[self]
context.size = size
return self
end,
SetLineHeight = function(self, lineHeight)
assert(type(lineHeight) == "number")
local context = private.context[self]
context.lineHeight = lineHeight
return self
end,
GetWowFont = function(self)
local context = private.context[self]
-- wow renders the font slightly bigger than the designs would indicate, so subtract one from the font height
if context.path == "Fonts\\ARKai_C.ttf" then
-- this font is a bit smaller than it should be, so increase it by 1
return context.path, context.size + 1
else
-- wow renders other fonts slightly bigger than the designs would indicate, so decrease the height by 1
return context.path, context.size - 1
end
end,
GetSpacing = function(self)
local context = private.context[self]
assert(context.lineHeight >= context.size)
return context.lineHeight - context.size
end,
},
__newindex = function(self, key, value) error("FontObject cannot be modified") end,
__metatable = false,
__tostring = function(self)
local context = private.context[self]
local shortPath = strmatch(context.path, "([^/\\]+)%.[A-Za-z]+$")
return "FontObject:"..tostring(shortPath)..":"..tostring(context.size)..":"..tostring(context.lineHeight)
end,
}
-- ============================================================================
-- Module Functions
-- ============================================================================
--- Create an font object from a path and height.
-- @tparam string path The path to the font file
-- @tparam number size The size of the font in pixels
-- @tparam number lineHeight The height of each line of text in pixels
-- @treturn FontObject The font object
function FontObject.New(path, size, lineHeight)
local obj = setmetatable({}, FONT_OBJECT_MT)
private.context[obj] = {
path = nil,
size = nil,
lineHeight = nil,
}
obj:SetPath(path)
obj:SetSize(size)
obj:SetLineHeight(lineHeight)
return obj
end
function FontObject.IsInstance(obj)
return type(obj) == "table" and private.context[obj] and true or false
end