diff --git a/src/modules/font/GlyphData.h b/src/modules/font/GlyphData.h index 59aa1200b..6144dcb9b 100644 --- a/src/modules/font/GlyphData.h +++ b/src/modules/font/GlyphData.h @@ -46,7 +46,6 @@ struct GlyphMetrics int advance; int bearingX; int bearingY; - int spacing; }; /** diff --git a/src/modules/graphics/opengl/Font.cpp b/src/modules/graphics/opengl/Font.cpp index 1e5aab95c..5cb062cb3 100644 --- a/src/modules/graphics/opengl/Font.cpp +++ b/src/modules/graphics/opengl/Font.cpp @@ -46,6 +46,7 @@ Font::Font(love::font::Rasterizer *r, const Texture::Filter &filter) , lineHeight(1) , mSpacing(1) , filter(filter) + , useSpacesAsTab(false) { this->filter.mipmap = Texture::FILTER_NONE; @@ -67,13 +68,16 @@ Font::Font(love::font::Rasterizer *r, const Texture::Filter &filter) textureWidth = TEXTURE_WIDTHS[textureSizeIndex]; textureHeight = TEXTURE_HEIGHTS[textureSizeIndex]; - love::font::GlyphData *gd = 0; + love::font::GlyphData *gd = nullptr; try { - gd = r->getGlyphData(32); + gd = r->getGlyphData(32); // Space character. type = (gd->getFormat() == love::font::GlyphData::FORMAT_LUMINANCE_ALPHA) ? FONT_TRUETYPE : FONT_IMAGE; + if (!r->hasGlyph(9)) // No tab character in the Rasterizer. + useSpacesAsTab = true; + loadVolatile(); } catch (love::Exception &) @@ -172,7 +176,26 @@ void Font::createTexture() Font::Glyph *Font::addGlyph(uint32 glyph) { - love::font::GlyphData *gd = rasterizer->getGlyphData(glyph); + love::font::GlyphData *gd = nullptr; + + // Use spaces for the tab 'glyph'. + if (glyph == 9 && useSpacesAsTab) + { + love::font::GlyphData *spacegd = rasterizer->getGlyphData(32); + + love::font::GlyphMetrics gm = {}; + gm.advance = spacegd->getAdvance() * SPACES_PER_TAB; + gm.bearingX = spacegd->getBearingX(); + gm.bearingY = spacegd->getBearingY(); + love::font::GlyphData::Format f = spacegd->getFormat(); + + spacegd->release(); + + gd = new love::font::GlyphData(glyph, gm, f); + } + else + gd = rasterizer->getGlyphData(glyph); + int w = gd->getWidth(); int h = gd->getHeight(); diff --git a/src/modules/graphics/opengl/Font.h b/src/modules/graphics/opengl/Font.h index 1d92bac63..791eee6f7 100644 --- a/src/modules/graphics/opengl/Font.h +++ b/src/modules/graphics/opengl/Font.h @@ -202,14 +202,19 @@ private: FontType type; Texture::Filter filter; + int textureX, textureY; + int rowHeight; + + bool useSpacesAsTab; + static const int NUM_TEXTURE_SIZES = 7; static const int TEXTURE_WIDTHS[NUM_TEXTURE_SIZES]; static const int TEXTURE_HEIGHTS[NUM_TEXTURE_SIZES]; static const int TEXTURE_PADDING = 1; - int textureX, textureY; - int rowHeight; + // This will be used if the Rasterizer doesn't have a tab character itself. + static const int SPACES_PER_TAB = 4; }; // Font