--- Text and font handling.
-- @module Noble.Text
Noble.Text = {}
--- Fonts
--
-- You can use these fonts in your project, or override them with your own if you wish.
-- @section fonts
-- @usage
-- Noble.Text.FONT_SMALL = Graphics.font.new("assets/fonts/MySmallFont")
-- Noble.Text.setFont(Noble.Text.FONT_SMALL)
--- The Playdate system font.
Noble.Text.FONT_SYSTEM = Graphics.getSystemFont()
--- Noble Sans: A sans-serif 8×9 font, with English and Japanese-Kana character sets.
Noble.Text.FONT_SMALL = Graphics.font.new("libraries/noble/assets/fonts/NobleSans")
--- Noble Slab: (This font is not ready yet!)
Noble.Text.FONT_MEDIUM = Graphics.font.new("libraries/noble/assets/fonts/NobleSlab")
--- Satchel Roughed: A sans-serif 17×14 rounded font, with an English character set.
Noble.Text.FONT_LARGE = Graphics.font.new("libraries/noble/assets/fonts/SatchelRoughed")
--- Constants
--@section constants
--- An alternate way to call Playdate SDK's `kTextAlignment.left`
Noble.Text.ALIGN_LEFT = kTextAlignment.left
--- An alternate way to call Playdate SDK's `kTextAlignment.right`
Noble.Text.ALIGN_RIGHT = kTextAlignment.right
--- An alternate way to call Playdate SDK's `kTextAlignment.center`
Noble.Text.ALIGN_CENTER = kTextAlignment.center
local currentFont = Noble.Text.FONT_SYSTEM
--- Functions
--@section functions
---
-- @return The currently set font.
function Noble.Text.getCurrentFont()
return currentFont
end
--- Set the current font
-- @param __font any
-- @param __variant any
function Noble.Text.setFont(__font, __variant)
currentFont = __font
local variant = __variant or Graphics.font.kVariantNormal
Graphics.setFont(__font, variant)
end
--- Abstracts multiple `playdate.text` drawing functions into one.
-- @string __string Display text or localization key.
-- @number __x
-- @number __y
-- @param[opt=Noble.Text.ALIGN_LEFT] __alignment Left, right, or center!
-- @bool[opt=false] __localized If true, `__string` is a localization key rather than display text.
-- @param[opt=Noble.Text.getCurrentFont()] __font A font to use. If not set, the `currentFont` is used. If set, the `currentFont` is not updated.
function Noble.Text.draw(__string, __x, __y, __alignment, __localized, __font)
local alignment = __alignment or Noble.Text.ALIGN_LEFT
local localized = Utilities.handleOptionalBoolean(__localized, false)
local string = __string or ""
if (__font ~= nil) then Graphics.setFont(__font) end -- Temporary font
if (localized) then
Graphics.drawLocalizedTextAligned(string, __x, __y, alignment)
else
Graphics.drawTextAligned(string, __x, __y, alignment)
end
if (__font ~= nil) then Graphics.setFont(currentFont) end -- Reset
end