font.lua 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. -- love.font
  2. --------------------------------------------------------------------------------
  3. --------------------------------------------------------------------------------
  4. ------------------------------------OBJECTS-------------------------------------
  5. --------------------------------------------------------------------------------
  6. --------------------------------------------------------------------------------
  7. -- GlyphData (love.font.newGlyphData)
  8. love.test.font.GlyphData = function(test)
  9. -- create obj
  10. local rasterizer = love.font.newRasterizer('resources/font.ttf')
  11. local gdata = love.font.newGlyphData(rasterizer, 97) -- 'a'
  12. test:assertObject(gdata)
  13. -- check properties match expected
  14. test:assertNotNil(gdata:getString())
  15. test:assertEquals(128, gdata:getSize(), 'check data size')
  16. test:assertEquals(9, gdata:getAdvance(), 'check advance')
  17. test:assertEquals('la8', gdata:getFormat(), 'check format')
  18. -- @TODO
  19. --[[
  20. currently these will return 0 and '' respectively as not implemented
  21. https://github.com/love2d/love/blob/12.0-development/src/modules/font/freetype/TrueTypeRasterizer.cpp#L140-L141
  22. "basically I haven't decided what to do here yet, because of the more
  23. advanced text shaping that happens in love 12 having a unicode codepoint
  24. associated with a glyph probably doesn't make sense in the first place"
  25. ]]--
  26. --test:assertEquals(97, gdata:getGlyph(), 'check glyph number') - returns 0
  27. --test:assertEquals('a', gdata:getGlyphString(), 'check glyph string') - returns ''
  28. -- check height + width
  29. test:assertEquals(8, gdata:getHeight(), 'check height')
  30. test:assertEquals(8, gdata:getWidth(), 'check width')
  31. -- check boundary / dimensions
  32. local x, y, w, h = gdata:getBoundingBox()
  33. local dw, dh = gdata:getDimensions()
  34. test:assertEquals(0, x, 'check bbox x')
  35. test:assertEquals(-3, y, 'check bbox y')
  36. test:assertEquals(8, w, 'check bbox w')
  37. test:assertEquals(14, h, 'check bbox h')
  38. test:assertEquals(8, dw, 'check dim width')
  39. test:assertEquals(8, dh, 'check dim height')
  40. -- check bearing
  41. local bw, bh = gdata:getBearing()
  42. test:assertEquals(0, bw, 'check bearing w')
  43. test:assertEquals(11, bh, 'check bearing h')
  44. end
  45. -- Rasterizer (love.font.newRasterizer)
  46. love.test.font.Rasterizer = function(test)
  47. -- create obj
  48. local rasterizer = love.font.newRasterizer('resources/font.ttf')
  49. test:assertObject(rasterizer)
  50. -- check advance
  51. test:assertEquals(9, rasterizer:getAdvance(), 'check advance')
  52. -- check ascent/descent
  53. test:assertEquals(9, rasterizer:getAscent(), 'check ascent')
  54. test:assertEquals(-3, rasterizer:getDescent(), 'check descent')
  55. -- check glyphcount
  56. test:assertEquals(77, rasterizer:getGlyphCount(), 'check glyph count')
  57. -- check specific glyphs
  58. test:assertObject(rasterizer:getGlyphData('L'))
  59. test:assertTrue(rasterizer:hasGlyphs('L', 'O', 'V', 'E'), 'check LOVE')
  60. -- check height + lineheight
  61. test:assertEquals(12, rasterizer:getHeight(), 'check height')
  62. test:assertEquals(15, rasterizer:getLineHeight(), 'check line height')
  63. end
  64. --------------------------------------------------------------------------------
  65. --------------------------------------------------------------------------------
  66. ------------------------------------METHODS-------------------------------------
  67. --------------------------------------------------------------------------------
  68. --------------------------------------------------------------------------------
  69. -- love.font.newBMFontRasterizer
  70. love.test.font.newBMFontRasterizer = function(test)
  71. local rasterizer = love.font.newBMFontRasterizer('resources/love.png');
  72. test:assertObject(rasterizer)
  73. end
  74. -- love.font.newGlyphData
  75. -- @NOTE this is just basic nil checking, objs have their own test method
  76. love.test.font.newGlyphData = function(test)
  77. local img = love.image.newImageData('resources/love.png')
  78. local rasterizer = love.font.newImageRasterizer(img, 'ABC', 0, 1);
  79. local glyphdata = love.font.newGlyphData(rasterizer, 65)
  80. test:assertObject(glyphdata)
  81. end
  82. -- love.font.newImageRasterizer
  83. -- @NOTE this is just basic nil checking, objs have their own test method
  84. love.test.font.newImageRasterizer = function(test)
  85. local img = love.image.newImageData('resources/love.png')
  86. local rasterizer = love.font.newImageRasterizer(img, 'ABC', 0, 1);
  87. test:assertObject(rasterizer)
  88. end
  89. -- love.font.newRasterizer
  90. -- @NOTE this is just basic nil checking, objs have their own test method
  91. love.test.font.newRasterizer = function(test)
  92. test:assertObject(love.font.newRasterizer('resources/font.ttf'))
  93. end
  94. -- love.font.newTrueTypeRasterizer
  95. -- @NOTE this is just basic nil checking, objs have their own test method
  96. love.test.font.newTrueTypeRasterizer = function(test)
  97. test:assertObject(love.font.newTrueTypeRasterizer(12, "normal", 1))
  98. test:assertObject(love.font.newTrueTypeRasterizer('resources/font.ttf', 8, "normal", 1))
  99. end