libdrawtext

changeset 20:c091833c2354

merged
author John Tsiombikas <nuclear@member.fsf.org>
date Mon, 18 Mar 2013 06:06:26 +0200
parents ce5d8ad2cbe6 080e5b45297c
children c750059a1258
files
diffstat 7 files changed, 275 insertions(+), 26 deletions(-) [+]
line diff
     1.1 --- a/examples/Makefile	Mon Aug 27 05:04:19 2012 +0300
     1.2 +++ b/examples/Makefile	Mon Mar 18 06:06:26 2013 +0200
     1.3 @@ -12,6 +12,7 @@
     1.4  	cd linlibertine; tar xzvf ../LinLibertineTTF_5.1.3_2011_06_21.tgz
     1.5  	rm -f LinLibertineTTF_5.1.3_2011_06_21.tgz
     1.6  	cp linlibertine/LinLibertine_R.ttf $@
     1.7 +	rm -rf linlibertine
     1.8  
     1.9  fonts/sazanami-mincho.ttf:
    1.10  	mkdir -p fonts
    1.11 @@ -19,6 +20,7 @@
    1.12  	tar xjvf sazanami-20040629.tar.bz2
    1.13  	rm -f sazanami-20040629.tar.bz2
    1.14  	cp sazanami-20040629/sazanami-mincho.ttf $@
    1.15 +	rm -rf sazanami-20040629
    1.16  
    1.17  fonts/klingon.ttf:
    1.18  	mkdir -p fonts
    1.19 @@ -26,3 +28,4 @@
    1.20  	unzip -o tlh_2D00_pIqaD_2D00_US.zip
    1.21  	rm -f tlh_2D00_pIqaD_2D00_US.zip
    1.22  	cp tlh-pIqaD-US/pIqaD.ttf $@
    1.23 +	rm -rf tlh-pIqaD-US
     2.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.2 +++ b/libdrawtext.sln	Mon Mar 18 06:06:26 2013 +0200
     2.3 @@ -0,0 +1,20 @@
     2.4 +
     2.5 +Microsoft Visual Studio Solution File, Format Version 10.00
     2.6 +# Visual C++ Express 2008
     2.7 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libdrawtext", "libdrawtext.vcproj", "{F6241CAB-984D-457D-A7EA-E66A57889490}"
     2.8 +EndProject
     2.9 +Global
    2.10 +	GlobalSection(SolutionConfigurationPlatforms) = preSolution
    2.11 +		Debug|Win32 = Debug|Win32
    2.12 +		Release|Win32 = Release|Win32
    2.13 +	EndGlobalSection
    2.14 +	GlobalSection(ProjectConfigurationPlatforms) = postSolution
    2.15 +		{F6241CAB-984D-457D-A7EA-E66A57889490}.Debug|Win32.ActiveCfg = Debug|Win32
    2.16 +		{F6241CAB-984D-457D-A7EA-E66A57889490}.Debug|Win32.Build.0 = Debug|Win32
    2.17 +		{F6241CAB-984D-457D-A7EA-E66A57889490}.Release|Win32.ActiveCfg = Release|Win32
    2.18 +		{F6241CAB-984D-457D-A7EA-E66A57889490}.Release|Win32.Build.0 = Release|Win32
    2.19 +	EndGlobalSection
    2.20 +	GlobalSection(SolutionProperties) = preSolution
    2.21 +		HideSolutionNode = FALSE
    2.22 +	EndGlobalSection
    2.23 +EndGlobal
     3.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.2 +++ b/libdrawtext.vcproj	Mon Mar 18 06:06:26 2013 +0200
     3.3 @@ -0,0 +1,185 @@
     3.4 +<?xml version="1.0" encoding="Windows-1252"?>
     3.5 +<VisualStudioProject
     3.6 +	ProjectType="Visual C++"
     3.7 +	Version="9.00"
     3.8 +	Name="libdrawtext"
     3.9 +	ProjectGUID="{F6241CAB-984D-457D-A7EA-E66A57889490}"
    3.10 +	RootNamespace="libdrawtext"
    3.11 +	Keyword="Win32Proj"
    3.12 +	TargetFrameworkVersion="196613"
    3.13 +	>
    3.14 +	<Platforms>
    3.15 +		<Platform
    3.16 +			Name="Win32"
    3.17 +		/>
    3.18 +	</Platforms>
    3.19 +	<ToolFiles>
    3.20 +	</ToolFiles>
    3.21 +	<Configurations>
    3.22 +		<Configuration
    3.23 +			Name="Debug|Win32"
    3.24 +			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
    3.25 +			IntermediateDirectory="$(ConfigurationName)"
    3.26 +			ConfigurationType="4"
    3.27 +			CharacterSet="1"
    3.28 +			>
    3.29 +			<Tool
    3.30 +				Name="VCPreBuildEventTool"
    3.31 +			/>
    3.32 +			<Tool
    3.33 +				Name="VCCustomBuildTool"
    3.34 +			/>
    3.35 +			<Tool
    3.36 +				Name="VCXMLDataGeneratorTool"
    3.37 +			/>
    3.38 +			<Tool
    3.39 +				Name="VCWebServiceProxyGeneratorTool"
    3.40 +			/>
    3.41 +			<Tool
    3.42 +				Name="VCMIDLTool"
    3.43 +			/>
    3.44 +			<Tool
    3.45 +				Name="VCCLCompilerTool"
    3.46 +				Optimization="0"
    3.47 +				PreprocessorDefinitions="WIN32;_DEBUG;_LIB"
    3.48 +				MinimalRebuild="true"
    3.49 +				BasicRuntimeChecks="3"
    3.50 +				RuntimeLibrary="3"
    3.51 +				UsePrecompiledHeader="0"
    3.52 +				WarningLevel="3"
    3.53 +				DebugInformationFormat="4"
    3.54 +				DisableSpecificWarnings="4996"
    3.55 +			/>
    3.56 +			<Tool
    3.57 +				Name="VCManagedResourceCompilerTool"
    3.58 +			/>
    3.59 +			<Tool
    3.60 +				Name="VCResourceCompilerTool"
    3.61 +			/>
    3.62 +			<Tool
    3.63 +				Name="VCPreLinkEventTool"
    3.64 +			/>
    3.65 +			<Tool
    3.66 +				Name="VCLibrarianTool"
    3.67 +				AdditionalDependencies="freetype.lib opengl32.lib"
    3.68 +			/>
    3.69 +			<Tool
    3.70 +				Name="VCALinkTool"
    3.71 +			/>
    3.72 +			<Tool
    3.73 +				Name="VCXDCMakeTool"
    3.74 +			/>
    3.75 +			<Tool
    3.76 +				Name="VCBscMakeTool"
    3.77 +			/>
    3.78 +			<Tool
    3.79 +				Name="VCFxCopTool"
    3.80 +			/>
    3.81 +			<Tool
    3.82 +				Name="VCPostBuildEventTool"
    3.83 +			/>
    3.84 +		</Configuration>
    3.85 +		<Configuration
    3.86 +			Name="Release|Win32"
    3.87 +			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
    3.88 +			IntermediateDirectory="$(ConfigurationName)"
    3.89 +			ConfigurationType="4"
    3.90 +			CharacterSet="1"
    3.91 +			WholeProgramOptimization="1"
    3.92 +			>
    3.93 +			<Tool
    3.94 +				Name="VCPreBuildEventTool"
    3.95 +			/>
    3.96 +			<Tool
    3.97 +				Name="VCCustomBuildTool"
    3.98 +			/>
    3.99 +			<Tool
   3.100 +				Name="VCXMLDataGeneratorTool"
   3.101 +			/>
   3.102 +			<Tool
   3.103 +				Name="VCWebServiceProxyGeneratorTool"
   3.104 +			/>
   3.105 +			<Tool
   3.106 +				Name="VCMIDLTool"
   3.107 +			/>
   3.108 +			<Tool
   3.109 +				Name="VCCLCompilerTool"
   3.110 +				Optimization="2"
   3.111 +				EnableIntrinsicFunctions="true"
   3.112 +				PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
   3.113 +				RuntimeLibrary="2"
   3.114 +				EnableFunctionLevelLinking="true"
   3.115 +				UsePrecompiledHeader="0"
   3.116 +				WarningLevel="3"
   3.117 +				DebugInformationFormat="3"
   3.118 +				DisableSpecificWarnings="4996"
   3.119 +			/>
   3.120 +			<Tool
   3.121 +				Name="VCManagedResourceCompilerTool"
   3.122 +			/>
   3.123 +			<Tool
   3.124 +				Name="VCResourceCompilerTool"
   3.125 +			/>
   3.126 +			<Tool
   3.127 +				Name="VCPreLinkEventTool"
   3.128 +			/>
   3.129 +			<Tool
   3.130 +				Name="VCLibrarianTool"
   3.131 +				AdditionalDependencies="freetype.lib opengl32.lib"
   3.132 +			/>
   3.133 +			<Tool
   3.134 +				Name="VCALinkTool"
   3.135 +			/>
   3.136 +			<Tool
   3.137 +				Name="VCXDCMakeTool"
   3.138 +			/>
   3.139 +			<Tool
   3.140 +				Name="VCBscMakeTool"
   3.141 +			/>
   3.142 +			<Tool
   3.143 +				Name="VCFxCopTool"
   3.144 +			/>
   3.145 +			<Tool
   3.146 +				Name="VCPostBuildEventTool"
   3.147 +			/>
   3.148 +		</Configuration>
   3.149 +	</Configurations>
   3.150 +	<References>
   3.151 +	</References>
   3.152 +	<Files>
   3.153 +		<Filter
   3.154 +			Name="Source Files"
   3.155 +			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
   3.156 +			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
   3.157 +			>
   3.158 +			<File
   3.159 +				RelativePath=".\src\drawgl.c"
   3.160 +				>
   3.161 +			</File>
   3.162 +			<File
   3.163 +				RelativePath=".\src\font.c"
   3.164 +				>
   3.165 +			</File>
   3.166 +			<File
   3.167 +				RelativePath=".\src\utf8.c"
   3.168 +				>
   3.169 +			</File>
   3.170 +		</Filter>
   3.171 +		<Filter
   3.172 +			Name="Header Files"
   3.173 +			Filter="h;hpp;hxx;hm;inl;inc;xsd"
   3.174 +			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
   3.175 +			>
   3.176 +			<File
   3.177 +				RelativePath=".\src\drawtext.h"
   3.178 +				>
   3.179 +			</File>
   3.180 +			<File
   3.181 +				RelativePath=".\src\drawtext_impl.h"
   3.182 +				>
   3.183 +			</File>
   3.184 +		</Filter>
   3.185 +	</Files>
   3.186 +	<Globals>
   3.187 +	</Globals>
   3.188 +</VisualStudioProject>
     4.1 --- a/src/drawgl.c	Mon Aug 27 05:04:19 2012 +0300
     4.2 +++ b/src/drawgl.c	Mon Mar 18 06:06:26 2013 +0200
     4.3 @@ -16,11 +16,18 @@
     4.4  along with this program.  If not, see <http://www.gnu.org/licenses/>.
     4.5  */
     4.6  #ifndef NO_OPENGL
     4.7 +#include <stdarg.h>
     4.8  #include <math.h>
     4.9  #include <ctype.h>
    4.10  
    4.11  #include <stdlib.h>
    4.12  
    4.13 +#ifndef _MSC_VER
    4.14 +#include <alloca.h>
    4.15 +#else
    4.16 +#include <malloc.h>
    4.17 +#endif
    4.18 +
    4.19  #ifdef TARGET_IPHONE
    4.20  #include <OpenGLES/ES2/gl.h>
    4.21  #else
    4.22 @@ -117,9 +124,31 @@
    4.23  	dtx_flush();
    4.24  }
    4.25  
    4.26 +static const char *put_char(const char *str, float *pos_x, float *pos_y, int *should_flush)
    4.27 +{
    4.28 +	struct dtx_glyphmap *gmap;
    4.29 +	float px, py;
    4.30 +	int code = dtx_utf8_char_code(str);
    4.31 +	str = dtx_utf8_next_char((char*)str);
    4.32 +
    4.33 +	if(buf_mode == DTX_LBF && code == '\n') {
    4.34 +		*should_flush = 1;
    4.35 +	}
    4.36 +
    4.37 +	px = *pos_x;
    4.38 +	py = *pos_y;
    4.39 +
    4.40 +	if((gmap = dtx_proc_char(code, pos_x, pos_y))) {
    4.41 +		int idx = code - gmap->cstart;
    4.42 +
    4.43 +		set_glyphmap_texture(gmap);
    4.44 +		add_glyph(gmap->glyphs + idx, px, py);
    4.45 +	}
    4.46 +	return str;
    4.47 +}
    4.48 +
    4.49  void dtx_string(const char *str)
    4.50  {
    4.51 -	struct dtx_glyphmap *gmap;
    4.52  	int should_flush = buf_mode == DTX_NBF;
    4.53  	float pos_x = 0.0f;
    4.54  	float pos_y = 0.0f;
    4.55 @@ -129,23 +158,7 @@
    4.56  	}
    4.57  
    4.58  	while(*str) {
    4.59 -		float px, py;
    4.60 -		int code = dtx_utf8_char_code(str);
    4.61 -		str = dtx_utf8_next_char((char*)str);
    4.62 -
    4.63 -		if(buf_mode == DTX_LBF && code == '\n') {
    4.64 -			should_flush = 1;
    4.65 -		}
    4.66 -
    4.67 -		px = pos_x;
    4.68 -		py = pos_y;
    4.69 -
    4.70 -		if((gmap = dtx_proc_char(code, &pos_x, &pos_y))) {
    4.71 -			int idx = code - gmap->cstart;
    4.72 -
    4.73 -			set_glyphmap_texture(gmap);
    4.74 -			add_glyph(gmap->glyphs + idx, px, py);
    4.75 -		}
    4.76 +		str = put_char(str, &pos_x, &pos_y, &should_flush);
    4.77  	}
    4.78  
    4.79  	if(should_flush) {
    4.80 @@ -153,6 +166,32 @@
    4.81  	}
    4.82  }
    4.83  
    4.84 +void dtx_printf(const char *fmt, ...)
    4.85 +{
    4.86 +	va_list ap;
    4.87 +	int buf_size;
    4.88 +	char *buf, tmp;
    4.89 +
    4.90 +	if(!dtx_font) {
    4.91 +		return;
    4.92 +	}
    4.93 +
    4.94 +	va_start(ap, fmt);
    4.95 +	buf_size = vsnprintf(&tmp, 0, fmt, ap);
    4.96 +	va_end(ap);
    4.97 +
    4.98 +	if(buf_size == -1) {
    4.99 +		buf_size = 512;
   4.100 +	}
   4.101 +
   4.102 +	buf = alloca(buf_size + 1);
   4.103 +	va_start(ap, fmt);
   4.104 +	vsnprintf(buf, buf_size + 1, fmt, ap);
   4.105 +	va_end(ap);
   4.106 +
   4.107 +	dtx_string(buf);
   4.108 +}
   4.109 +
   4.110  static void qvertex(struct vertex *v, float x, float y, float s, float t)
   4.111  {
   4.112  	v->x = x;
     5.1 --- a/src/drawtext.h	Mon Aug 27 05:04:19 2012 +0300
     5.2 +++ b/src/drawtext.h	Mon Mar 18 06:06:26 2013 +0200
     5.3 @@ -116,6 +116,8 @@
     5.4  /* draws a utf-8 string starting at the origin. \n \r and \t are handled appropriately. */
     5.5  void dtx_string(const char *str);
     5.6  
     5.7 +void dtx_printf(const char *fmt, ...);
     5.8 +
     5.9  /* render any pending glyphs (see dtx_draw_buffering) */
    5.10  void dtx_flush(void);
    5.11  
     6.1 --- a/src/drawtext_impl.h	Mon Aug 27 05:04:19 2012 +0300
     6.2 +++ b/src/drawtext_impl.h	Mon Mar 18 06:06:26 2013 +0200
     6.3 @@ -61,7 +61,7 @@
     6.4  
     6.5  
     6.6  #define fperror(str) \
     6.7 -	fprintf(stderr, "%s: %s: %s\n", __func__, (str), strerror(errno))
     6.8 +	fprintf(stderr, "%s: %s: %s\n", __FUNCTION__, (str), strerror(errno))
     6.9  
    6.10  int dtx_gl_init(void);
    6.11  
     7.1 --- a/src/font.c	Mon Aug 27 05:04:19 2012 +0300
     7.2 +++ b/src/font.c	Mon Mar 18 06:06:26 2013 +0200
     7.3 @@ -331,12 +331,12 @@
     7.4  
     7.5  		if(line[0] == '#') {
     7.6  			struct glyph *g;
     7.7 -			int c;
     7.8 -			float x, y, xsz, ysz, res;
     7.9 +			int c, res;
    7.10 +			float x, y, xsz, ysz;
    7.11  
    7.12  			res = sscanf(line + 1, "%d: %fx%f+%f+%f\n", &c, &xsz, &ysz, &x, &y);
    7.13  			if(res != 5) {
    7.14 -				fprintf(stderr, "%s: invalid glyph info line\n", __func__);
    7.15 +				fprintf(stderr, "%s: invalid glyph info line\n", __FUNCTION__);
    7.16  				goto err;
    7.17  			}
    7.18  
    7.19 @@ -362,14 +362,14 @@
    7.20  			switch(hdr_lines) {
    7.21  			case 0:
    7.22  				if(0[line] != 'P' || 1[line] != '6') {
    7.23 -					fprintf(stderr, "%s: invalid file format (magic)\n", __func__);
    7.24 +					fprintf(stderr, "%s: invalid file format (magic)\n", __FUNCTION__);
    7.25  					goto err;
    7.26  				}
    7.27  				break;
    7.28  
    7.29  			case 1:
    7.30  				if(sscanf(line, "%d %d", &gmap->xsz, &gmap->ysz) != 2) {
    7.31 -					fprintf(stderr, "%s: invalid file format (dim)\n", __func__);
    7.32 +					fprintf(stderr, "%s: invalid file format (dim)\n", __FUNCTION__);
    7.33  					goto err;
    7.34  				}
    7.35  				break;
    7.36 @@ -379,7 +379,7 @@
    7.37  					char *endp;
    7.38  					max_pixval = strtol(line, &endp, 10);
    7.39  					if(endp == line) {
    7.40 -						fprintf(stderr, "%s: invalid file format (maxval)\n", __func__);
    7.41 +						fprintf(stderr, "%s: invalid file format (maxval)\n", __FUNCTION__);
    7.42  						goto err;
    7.43  					}
    7.44  				}
    7.45 @@ -442,7 +442,7 @@
    7.46  	int res;
    7.47  
    7.48  	if(!(fp = fopen(fname, "wb"))) {
    7.49 -		fprintf(stderr, "%s: failed to open file: %s: %s\n", __func__, fname, strerror(errno));
    7.50 +		fprintf(stderr, "%s: failed to open file: %s: %s\n", __FUNCTION__, fname, strerror(errno));
    7.51  		return -1;
    7.52  	}
    7.53  	res = dtx_save_glyphmap_stream(fp, gmap);