95 lines
3.1 KiB
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
|