From 3cb3537db0dd3a334172183585197abaadd1ae46 Mon Sep 17 00:00:00 2001 From: Bill Meltsner Date: Tue, 9 Nov 2010 18:56:34 -0500 Subject: [PATCH] Added vrld's text-rotation-fixing patch (finally fixes #56) --- .../macosx/love.xcodeproj/project.pbxproj | 7 ++ src/modules/graphics/opengl/Font.cpp | 7 ++ src/modules/graphics/opengl/Graphics.cpp | 110 ++---------------- 3 files changed, 21 insertions(+), 103 deletions(-) diff --git a/platform/macosx/love.xcodeproj/project.pbxproj b/platform/macosx/love.xcodeproj/project.pbxproj index f2f08617e..99d848faf 100644 --- a/platform/macosx/love.xcodeproj/project.pbxproj +++ b/platform/macosx/love.xcodeproj/project.pbxproj @@ -1451,7 +1451,14 @@ isa = PBXProject; buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "love" */; compatibilityVersion = "Xcode 3.1"; + developmentRegion = English; hasScannedForEncodings = 1; + knownRegions = ( + English, + Japanese, + French, + German, + ); mainGroup = 29B97314FDCFA39411CA2CEA /* love */; projectDirPath = ""; projectRoot = ""; diff --git a/src/modules/graphics/opengl/Font.cpp b/src/modules/graphics/opengl/Font.cpp index e47b0f1f1..d1dc388d8 100644 --- a/src/modules/graphics/opengl/Font.cpp +++ b/src/modules/graphics/opengl/Font.cpp @@ -67,6 +67,7 @@ namespace opengl void Font::print(std::string text, float x, float y, float angle, float sx, float sy) const { + float dx = 0.0f; // spacing counter for newline handling glPushMatrix(); glTranslatef(ceil(x), ceil(y), 0.0f); @@ -74,12 +75,18 @@ namespace opengl glScalef(sx, sy, 1.0f); for (unsigned int i = 0; i < text.size(); i++) { unsigned char g = (unsigned char)text[i]; + if (g == '\n') { // wrap newline, but do not print it + glTranslatef(-dx, round(getHeight()), 0); + dx = 0.0f; + continue; + } if (!glyphs[g]) g = 32; // space glPushMatrix(); glTranslatef(0, round(getHeight()), 0); glyphs[g]->draw(0, 0, 0, 1, 1, 0, 0); glPopMatrix(); glTranslatef(spacing[g], 0, 0); + dx += spacing[g]; } glPopMatrix(); } diff --git a/src/modules/graphics/opengl/Graphics.cpp b/src/modules/graphics/opengl/Graphics.cpp index a6988a26f..de09bd48c 100644 --- a/src/modules/graphics/opengl/Graphics.cpp +++ b/src/modules/graphics/opengl/Graphics.cpp @@ -700,97 +700,23 @@ namespace opengl return (int)max; } - void Graphics::print( const char * str, float x, float y ) + void Graphics::print( const char * str, float x, float y) { if(currentFont != 0) { std::string text(str); - - if(text.find("\n") == std::string::npos) - currentFont->print(text, x, y); - else - { - int lines = 0; - text = ""; - - for(unsigned int i = 0; i < strlen(str); i++) - { - if(str[i] == '\n') - { - currentFont->print(text, x, y + (lines * currentFont->getHeight() * currentFont->getLineHeight())); - text = ""; - lines++; - } - else - text += str[i]; - } - - if(text != "") // Print the last text (if applicable). - currentFont->print(text, x, y + (lines * currentFont->getHeight() * currentFont->getLineHeight())); - } + currentFont->print(text, x, y); } } - void Graphics::print( const char * str, float x, float y , float angle) + void Graphics::print( const char * str, float x, float y, float angle) { - if(currentFont != 0) - { - std::string text(str); - - if(text.find("\n") == std::string::npos) - currentFont->print(text, x, y, angle, 1, 1); - else - { - int lines = 0; - text = ""; - - for(unsigned int i = 0; i < strlen(str); i++) - { - if(str[i] == '\n') - { - currentFont->print(text, x, y + (lines * currentFont->getHeight() * currentFont->getLineHeight()), angle, 1, 1); - text = ""; - lines++; - } - else - text += str[i]; - } - - if(text != "") // Print the last text (if applicable). - currentFont->print(text, x, y + (lines * currentFont->getHeight() * currentFont->getLineHeight()), angle, 1, 1); - } - } + print(str, x, y, angle, 1, 1); } - void Graphics::print( const char * str, float x, float y , float angle, float s) + void Graphics::print( const char * str, float x, float y, float angle, float s) { - if(currentFont != 0) - { - std::string text(str); - - if(text.find("\n") == std::string::npos) - currentFont->print(text, x, y, angle, s, s); - else - { - int lines = 0; - text = ""; - - for(unsigned int i = 0; i < strlen(str); i++) - { - if(str[i] == '\n') - { - currentFont->print(text, x, y + (lines * currentFont->getHeight() * currentFont->getLineHeight() * s), angle, s, s); - text = ""; - lines++; - } - else - text += str[i]; - } - - if(text != "") // Print the last text (if applicable). - currentFont->print(text, x, y + (lines * currentFont->getHeight() * currentFont->getLineHeight() * s), angle, s, s); - } - } + print(str, x, y, angle, s, s); } void Graphics::print( const char * str, float x, float y , float angle, float sx, float sy) @@ -798,29 +724,7 @@ namespace opengl if(currentFont != 0) { std::string text(str); - - if(text.find("\n") == std::string::npos) - currentFont->print(text, x, y, angle, sx, sy); - else - { - int lines = 0; - text = ""; - - for(unsigned int i = 0; i < strlen(str); i++) - { - if(str[i] == '\n') - { - currentFont->print(text, x, y + (lines * currentFont->getHeight() * currentFont->getLineHeight() * sy), angle, sx, sy); - text = ""; - lines++; - } - else - text += str[i]; - } - - if(text != "") // Print the last text (if applicable). - currentFont->print(text, x, y + (lines * currentFont->getHeight() * currentFont->getLineHeight() * sy), angle, sx, sy); - } + currentFont->print(text, x, y, angle, sx, sy); } }