Compare commits

...

7 Commits

Author SHA1 Message Date
James Turk
3be471f750 Update README 2016-10-16 00:34:28 -04:00
James Turk
8be25bcebc add LICENSE for GitHub to pick up 2016-10-16 00:32:58 -04:00
James Turk
8f02ca1df2 fix clang warning on std::max 2016-10-06 23:50:01 -04:00
James Turk
4e8b9c2fa3 OSX build options 2016-10-06 23:46:48 -04:00
James Turk
189e89ae21 fix vsnprintf 2011-02-28 21:18:08 -05:00
PureW
a4248ddef7 Added library needed for compilation
Signed-off-by: James Turk <james.p.turk@gmail.com>
2009-06-19 10:26:56 +08:00
PureW
97a65f92d1 Wouldn't compile on linux due memset and strlen not members of std-namespace
Signed-off-by: James Turk <james.p.turk@gmail.com>
2009-06-19 10:26:55 +08:00
5 changed files with 73 additions and 60 deletions

View File

@ -2,40 +2,43 @@
// by James Turk (james.p.turk@gmail.com) // by James Turk (james.p.turk@gmail.com)
// Based on work by Marijn Haverbeke (http://marijn.haverbeke.nl) // Based on work by Marijn Haverbeke (http://marijn.haverbeke.nl)
// //
// Version 0.2.2 - Released 28 February 2011 - Fixed linux compilation.
// Version 0.2.1 - Released 2 March 2008 - Updated contact information. // Version 0.2.1 - Released 2 March 2008 - Updated contact information.
// Version 0.2.0 - Released 18 July 2005 - Added beginDraw/endDraw, // Version 0.2.0 - Released 18 July 2005 - Added beginDraw/endDraw,
// Changed vsprintf to vsnprintf // Changed vsprintf to vsnprintf
// Version 0.1.0 - Released 1 July 2005 - Initial Release // Version 0.1.0 - Released 1 July 2005 - Initial Release
// //
// Copyright (c) 2005-2008, James Turk // Copyright (c) 2005-2008, James Turk
// All rights reserved. // All rights reserved.
// //
// Redistribution and use in source and binary forms, with or without // Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met: // modification, are permitted provided that the following conditions are met:
// //
// * Redistributions of source code must retain the above copyright notice, // * Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer. // this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above copyright // * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the // notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution. // documentation and/or other materials provided with the distribution.
// * Neither the name of the GLFT_Font nor the names of its contributors // * Neither the name of the GLFT_Font nor the names of its contributors
// may be used to endorse or promote products derived from this software // may be used to endorse or promote products derived from this software
// without specific prior written permission. // without specific prior written permission.
// //
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE. // POSSIBILITY OF SUCH DAMAGE.
#include "GLFT_Font.hpp" #include "GLFT_Font.hpp"
#include <cstring>
// static members // static members
FT_Library FTLibraryContainer::library_; FT_Library FTLibraryContainer::library_;
@ -91,7 +94,7 @@ GLFT_Font::~GLFT_Font()
void GLFT_Font::open(const std::string& filename, unsigned int size) void GLFT_Font::open(const std::string& filename, unsigned int size)
{ {
const size_t MARGIN = 3; const size_t MARGIN = 3;
// release the font if it already exists // release the font if it already exists
if(isValid()) if(isValid())
{ {
@ -143,8 +146,8 @@ void GLFT_Font::open(const std::string& filename, unsigned int size)
lineSpace -= widths_[ch]; lineSpace -= widths_[ch];
maxAscent = std::max(face->glyph->bitmap_top, maxAscent); maxAscent = std::max(face->glyph->bitmap_top, maxAscent);
maxDescent = std::max(face->glyph->bitmap.rows - maxDescent = std::max((int)face->glyph->bitmap.rows -
face->glyph->bitmap_top, maxDescent); (int)face->glyph->bitmap_top, maxDescent);
} }
height_ = maxAscent + maxDescent; // calculate height_ for text height_ = maxAscent + maxDescent; // calculate height_ for text
@ -162,7 +165,7 @@ void GLFT_Font::open(const std::string& filename, unsigned int size)
// create and zero the memory // create and zero the memory
unsigned char* image = new unsigned char[imageHeight * imageWidth]; unsigned char* image = new unsigned char[imageHeight * imageWidth];
std::memset(image, 0, imageHeight * imageWidth); memset(image, 0, imageHeight * imageWidth);
// These are the position at which to draw the next glyph // These are the position at which to draw the next glyph
size_t x = MARGIN; size_t x = MARGIN;
@ -267,13 +270,13 @@ void GLFT_Font::drawText(float x, float y, const char *str, ...) const
char buf[1024]; char buf[1024];
va_start(args,str); va_start(args,str);
std::vsnprintf(buf, 1024, str, args); // avoid buffer overflow vsnprintf(buf, 1024, str, args); // avoid buffer overflow
va_end(args); va_end(args);
glBindTexture(GL_TEXTURE_2D, texID_); glBindTexture(GL_TEXTURE_2D, texID_);
glPushMatrix(); glPushMatrix();
glTranslated(x,y,0); glTranslated(x,y,0);
for(unsigned int i=0; i < std::strlen(buf); ++i) for(unsigned int i=0; i < strlen(buf); ++i)
{ {
unsigned char ch( buf[i] - SPACE ); // ch-SPACE = DisplayList offset unsigned char ch( buf[i] - SPACE ); // ch-SPACE = DisplayList offset
// replace characters outside the valid range with undrawable // replace characters outside the valid range with undrawable
@ -328,7 +331,7 @@ std::ostream& GLFT_Font::beginDraw(float x, float y)
return ss_; return ss_;
} }
StreamFlusher GLFT_Font::endDraw() StreamFlusher GLFT_Font::endDraw()
{ {
drawText(drawX_, drawY_, ss_.str()); // draw the string drawText(drawX_, drawY_, ss_.str()); // draw the string
ss_.str(""); // clear the buffer ss_.str(""); // clear the buffer

View File

@ -2,6 +2,7 @@
// by James Turk (james.p.turk@gmail.com) // by James Turk (james.p.turk@gmail.com)
// Based on work by Marijn Haverbeke (http://marijn.haverbeke.nl) // Based on work by Marijn Haverbeke (http://marijn.haverbeke.nl)
// //
// Version 0.2.2 - Released 28 February 2011 - Fixed linux compilation.
// Version 0.2.1 - Released 2 March 2008 - Updated contact information. // Version 0.2.1 - Released 2 March 2008 - Updated contact information.
// Version 0.2.0 - Released 18 July 2005 - Added beginDraw/endDraw, // Version 0.2.0 - Released 18 July 2005 - Added beginDraw/endDraw,
// Changed vsprintf to vsnprintf // Changed vsprintf to vsnprintf
@ -38,7 +39,11 @@
#ifndef GLFT_FONT_HPP #ifndef GLFT_FONT_HPP
#define GLFT_FONT_HPP #define GLFT_FONT_HPP
#ifdef __APPLE__
#include <OpenGL/gl.h>
#else
#include <GL/gl.h> #include <GL/gl.h>
#endif
#include <ft2build.h> #include <ft2build.h>
#include FT_FREETYPE_H #include FT_FREETYPE_H

23
LICENSE Normal file
View File

@ -0,0 +1,23 @@
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of the GLFT_Font nor the names of its contributors
may be used to endorse or promote products derived from this software
without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.

View File

@ -1,5 +1,13 @@
UNAME := $(shell uname)
ifeq ($(UNAME), Darwin)
GL := -framework OpenGL
else
GL := -lGL -lXrandr
endif
test: test.cpp GLFT_Font.cpp test: test.cpp GLFT_Font.cpp
g++ GLFT_Font.cpp test.cpp -o test -Wall -pedantic -lglfw -lGL -lfreetype -pthread `freetype-config --cflags` g++ GLFT_Font.cpp test.cpp -o test -Wall -pedantic -lglfw $(GL) -lfreetype -pthread `freetype-config --cflags`
glftfont.tar.gz: glftfont.tar.gz:
tar -czf glftfont.tar.gz GLFT_Font.cpp GLFT_Font.hpp index.html README test.cpp Makefile tar -czf glftfont.tar.gz GLFT_Font.cpp GLFT_Font.hpp index.html README test.cpp Makefile

44
README
View File

@ -1,35 +1,9 @@
// GLFT_Font (http://polimath.com/blog/code/glft_font/) GLFT_Font
// by James Turk (james.p.turk@gmail.com) by James Turk (james.p.turk@gmail.com)
// Based on work by Marijn Haverbeke (http://marijn.haverbeke.nl) Based on work by Marijn Haverbeke (http://marijn.haverbeke.nl)
//
// Version 0.2.1 - Released 2 March 2008 - Updated contact information. Version 0.2.2 - Released 28 February 2011 - Fixed linux compilation.
// Version 0.2.0 - Released 18 July 2005 - Added beginDraw/endDraw, Version 0.2.1 - Released 2 March 2008 - Updated contact information.
// Changed vsprintf to vsnprintf Version 0.2.0 - Released 18 July 2005 - Added beginDraw/endDraw,
// Version 0.1.0 - Released 1 July 2005 - Initial Release Changed vsprintf to vsnprintf
// Version 0.1.0 - Released 1 July 2005 - Initial Release
// Copyright (c) 2005-2008, James Turk
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// * Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
// * Neither the name of the GLFT_Font nor the names of its contributors
// may be used to endorse or promote products derived from this software
// without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.