summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJinghua Luo <sunmoon1997@gmail.com>2007-01-28 16:55:00 +0800
committerJinghua Luo <sunmoon1997@gmail.com>2007-01-28 16:55:00 +0800
commit991b188d81c781794ee6825389fce435fd3e3319 (patch)
tree718e1a1569d7f40bf6bd0b719faaaa65579d131d
parent19fb46dd2e2137955455f75703ba108fd94e1b10 (diff)
add some error codes and install under ${includedir}/sdl-freetype.
-rw-r--r--src/Makefile.am10
-rw-r--r--src/Makefile.in67
-rw-r--r--src/sdl-font.c124
-rw-r--r--src/sdl-freetype-error.c62
-rw-r--r--src/sdl-freetype-error.h57
-rw-r--r--src/sdl-freetype.h57
-rw-r--r--src/sdl-freetype.pc.in4
-rw-r--r--src/sdl-ft.pc.in4
-rw-r--r--src/sdl-glyph-render.c18
-rw-r--r--src/sdl-glyph-render.h1
10 files changed, 279 insertions, 125 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index c4a6ced..e281811 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -6,7 +6,13 @@ libsdl_ft_include_header = sdl-ft.h
libsdl_ft_pc = sdl-ft.pc
endif
-include_HEADERS = sdl-freetype.h $(libsdl_ft_include_header)
+sdl_freetype_includedir = $(includedir)/sdl-freetype
+sdl_freetype_include_HEADERS = \
+ sdl-freetype.h \
+ sdl-freetype-utils.h \
+ sdl-freetype-error.h \
+ sdl-glyph-render.h \
+ $(libsdl_ft_include_header)
lib_LTLIBRARIES = libsdl-freetype.la $(libsdl_ft)
@@ -23,6 +29,8 @@ libsdl_freetype_la_SOURCES = \
sdl-glyph-render.c \
sdl-freetype-utils.h \
sdl-freetype-utils.c \
+ sdl-freetype-error.h \
+ sdl-freetype-error.c \
sdl-freetype.h \
sdl-freetype.c
diff --git a/src/Makefile.in b/src/Makefile.in
index cb7322b..10c7368 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -41,9 +41,9 @@ build_triplet = @build@
host_triplet = @host@
noinst_PROGRAMS = test$(EXEEXT) sdl-test$(EXEEXT)
subdir = src
-DIST_COMMON = $(am__include_HEADERS_DIST) $(srcdir)/Makefile.am \
- $(srcdir)/Makefile.in $(srcdir)/sdl-freetype.pc.in \
- $(srcdir)/sdl-ft.pc.in
+DIST_COMMON = $(am__sdl_freetype_include_HEADERS_DIST) \
+ $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(srcdir)/sdl-freetype.pc.in $(srcdir)/sdl-ft.pc.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
$(top_srcdir)/configure.ac
@@ -59,7 +59,7 @@ am__vpath_adj = case $$p in \
esac;
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)" \
- "$(DESTDIR)$(includedir)"
+ "$(DESTDIR)$(sdl_freetype_includedir)"
libLTLIBRARIES_INSTALL = $(INSTALL)
LTLIBRARIES = $(lib_LTLIBRARIES)
am__DEPENDENCIES_1 =
@@ -67,7 +67,7 @@ libsdl_freetype_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
am_libsdl_freetype_la_OBJECTS = hash.lo cache.lo sdl-fontmap.lo \
sdl-font.lo sdl-glyph-render.lo sdl-freetype-utils.lo \
- sdl-freetype.lo
+ sdl-freetype-error.lo sdl-freetype.lo
libsdl_freetype_la_OBJECTS = $(am_libsdl_freetype_la_OBJECTS)
libsdl_ft_la_DEPENDENCIES = $(am__DEPENDENCIES_1) libsdl-freetype.la
am_libsdl_ft_la_OBJECTS = sdl-ft.lo
@@ -97,9 +97,11 @@ DIST_SOURCES = $(libsdl_freetype_la_SOURCES) $(libsdl_ft_la_SOURCES) \
$(sdl_test_SOURCES) $(test_SOURCES)
pkgconfigDATA_INSTALL = $(INSTALL_DATA)
DATA = $(pkgconfig_DATA)
-am__include_HEADERS_DIST = sdl-freetype.h sdl-ft.h
-includeHEADERS_INSTALL = $(INSTALL_HEADER)
-HEADERS = $(include_HEADERS)
+am__sdl_freetype_include_HEADERS_DIST = sdl-freetype.h \
+ sdl-freetype-utils.h sdl-freetype-error.h sdl-glyph-render.h \
+ sdl-ft.h
+sdl_freetype_includeHEADERS_INSTALL = $(INSTALL_HEADER)
+HEADERS = $(sdl_freetype_include_HEADERS)
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -233,7 +235,14 @@ AM_CFLAGS = -g $(FONTCONFIG_CFLAGS) $(FREETYPE_CFLAGS) $(SDL_CFLAGS)
@HAVE_FONTCONFIG_TRUE@libsdl_ft = libsdl-ft.la
@HAVE_FONTCONFIG_TRUE@libsdl_ft_include_header = sdl-ft.h
@HAVE_FONTCONFIG_TRUE@libsdl_ft_pc = sdl-ft.pc
-include_HEADERS = sdl-freetype.h $(libsdl_ft_include_header)
+sdl_freetype_includedir = $(includedir)/sdl-freetype
+sdl_freetype_include_HEADERS = \
+ sdl-freetype.h \
+ sdl-freetype-utils.h \
+ sdl-freetype-error.h \
+ sdl-glyph-render.h \
+ $(libsdl_ft_include_header)
+
lib_LTLIBRARIES = libsdl-freetype.la $(libsdl_ft)
libsdl_freetype_la_SOURCES = \
hash.h \
@@ -248,6 +257,8 @@ libsdl_freetype_la_SOURCES = \
sdl-glyph-render.c \
sdl-freetype-utils.h \
sdl-freetype-utils.c \
+ sdl-freetype-error.h \
+ sdl-freetype-error.c \
sdl-freetype.h \
sdl-freetype.c
@@ -357,6 +368,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hash.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sdl-font.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sdl-fontmap.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sdl-freetype-error.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sdl-freetype-utils.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sdl-freetype.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sdl-ft.Plo@am__quote@
@@ -411,22 +423,22 @@ uninstall-pkgconfigDATA:
echo " rm -f '$(DESTDIR)$(pkgconfigdir)/$$f'"; \
rm -f "$(DESTDIR)$(pkgconfigdir)/$$f"; \
done
-install-includeHEADERS: $(include_HEADERS)
+install-sdl_freetype_includeHEADERS: $(sdl_freetype_include_HEADERS)
@$(NORMAL_INSTALL)
- test -z "$(includedir)" || $(mkdir_p) "$(DESTDIR)$(includedir)"
- @list='$(include_HEADERS)'; for p in $$list; do \
+ test -z "$(sdl_freetype_includedir)" || $(mkdir_p) "$(DESTDIR)$(sdl_freetype_includedir)"
+ @list='$(sdl_freetype_include_HEADERS)'; for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
f=$(am__strip_dir) \
- echo " $(includeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includedir)/$$f'"; \
- $(includeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includedir)/$$f"; \
+ echo " $(sdl_freetype_includeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(sdl_freetype_includedir)/$$f'"; \
+ $(sdl_freetype_includeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(sdl_freetype_includedir)/$$f"; \
done
-uninstall-includeHEADERS:
+uninstall-sdl_freetype_includeHEADERS:
@$(NORMAL_UNINSTALL)
- @list='$(include_HEADERS)'; for p in $$list; do \
+ @list='$(sdl_freetype_include_HEADERS)'; for p in $$list; do \
f=$(am__strip_dir) \
- echo " rm -f '$(DESTDIR)$(includedir)/$$f'"; \
- rm -f "$(DESTDIR)$(includedir)/$$f"; \
+ echo " rm -f '$(DESTDIR)$(sdl_freetype_includedir)/$$f'"; \
+ rm -f "$(DESTDIR)$(sdl_freetype_includedir)/$$f"; \
done
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
@@ -508,7 +520,7 @@ check-am: all-am
check: check-am
all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(DATA) $(HEADERS)
installdirs:
- for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(includedir)"; do \
+ for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(sdl_freetype_includedir)"; do \
test -z "$$dir" || $(mkdir_p) "$$dir"; \
done
install: install-am
@@ -556,7 +568,8 @@ info: info-am
info-am:
-install-data-am: install-includeHEADERS install-pkgconfigDATA
+install-data-am: install-pkgconfigDATA \
+ install-sdl_freetype_includeHEADERS
install-exec-am: install-libLTLIBRARIES
@@ -584,23 +597,23 @@ ps: ps-am
ps-am:
-uninstall-am: uninstall-includeHEADERS uninstall-info-am \
- uninstall-libLTLIBRARIES uninstall-pkgconfigDATA
+uninstall-am: uninstall-info-am uninstall-libLTLIBRARIES \
+ uninstall-pkgconfigDATA uninstall-sdl_freetype_includeHEADERS
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
clean-libLTLIBRARIES clean-libtool clean-noinstPROGRAMS ctags \
distclean distclean-compile distclean-generic \
distclean-libtool distclean-tags distdir dvi dvi-am html \
html-am info info-am install install-am install-data \
- install-data-am install-exec install-exec-am \
- install-includeHEADERS install-info install-info-am \
- install-libLTLIBRARIES install-man install-pkgconfigDATA \
+ install-data-am install-exec install-exec-am install-info \
+ install-info-am install-libLTLIBRARIES install-man \
+ install-pkgconfigDATA install-sdl_freetype_includeHEADERS \
install-strip installcheck installcheck-am installdirs \
maintainer-clean maintainer-clean-generic mostlyclean \
mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
pdf pdf-am ps ps-am tags uninstall uninstall-am \
- uninstall-includeHEADERS uninstall-info-am \
- uninstall-libLTLIBRARIES uninstall-pkgconfigDATA
+ uninstall-info-am uninstall-libLTLIBRARIES \
+ uninstall-pkgconfigDATA uninstall-sdl_freetype_includeHEADERS
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/src/sdl-font.c b/src/sdl-font.c
index 4f8ca7c..578bfaa 100644
--- a/src/sdl-font.c
+++ b/src/sdl-font.c
@@ -989,7 +989,7 @@ sdl_freetype_font_glyph_metrics_and_bbox (sdl_freetype_font_t * font, FT_UInt in
sdl_freetype_glyph_cache_entry_t * cache;
cache = sdl_freetype_font_glyph_entry_lookup (font, index,
- SDL_FREETYPE_GLYPH_METRICS);
+ SDL_FREETYPE_GLYPH_METRICS);
if (!cache)
return -1;
*metrics = cache->info.metrics;
@@ -997,35 +997,35 @@ sdl_freetype_font_glyph_metrics_and_bbox (sdl_freetype_font_t * font, FT_UInt in
return 0;
}
-int
+sdl_freetype_error_t
sdl_freetype_font_glyph_fixed_metrics (sdl_freetype_font_t * font, FT_UInt index,
sdl_freetype_text_fixed_extents_t * metrics)
{
sdl_freetype_glyph_cache_entry_t * entry;
entry = sdl_freetype_font_glyph_entry_lookup (font, index,
- SDL_FREETYPE_GLYPH_METRICS);
+ SDL_FREETYPE_GLYPH_METRICS);
if (!entry)
- return -1;
+ return SDL_FREETYPE_ERR_NOT_FOUND;
*metrics = entry->info.metrics;
- return 0;
+ return SDL_FREETYPE_ERR_OK;
}
-int
+sdl_freetype_error_t
sdl_freetype_font_glyph_metrics (sdl_freetype_font_t * font, FT_UInt index,
sdl_freetype_text_extents_t * metrics)
{
sdl_freetype_glyph_cache_entry_t * entry;
entry = sdl_freetype_font_glyph_entry_lookup (font, index,
- SDL_FREETYPE_GLYPH_METRICS);
+ SDL_FREETYPE_GLYPH_METRICS);
if (!entry)
- return -1;
+ return SDL_FREETYPE_ERR_NOT_FOUND;
sdl_freetype_text_extents_from_fixed(metrics, &entry->info.metrics);
- return 0;
+ return SDL_FREETYPE_ERR_OK;
}
-int
+sdl_freetype_error_t
sdl_freetype_font_glyph_surface (sdl_freetype_font_t * font, FT_UInt index,
FT_Bitmap ** surface, int * x_offset,
int * y_offset, void ** data)
@@ -1033,10 +1033,12 @@ sdl_freetype_font_glyph_surface (sdl_freetype_font_t * font, FT_UInt index,
sdl_freetype_glyph_cache_entry_t * entry;
entry = sdl_freetype_font_glyph_entry_lookup (font, index,
- SDL_FREETYPE_GLYPH_SURFACE |
- SDL_FREETYPE_GLYPH_SURFACE_DATA);
- if (!entry || !(entry->info.flags & SDL_FREETYPE_GLYPH_SURFACE))
- return -1;
+ SDL_FREETYPE_GLYPH_SURFACE |
+ SDL_FREETYPE_GLYPH_SURFACE_DATA);
+ if (!entry)
+ return SDL_FREETYPE_ERR_NOT_FOUND;
+ if (!(entry->info.flags & SDL_FREETYPE_GLYPH_SURFACE))
+ return SDL_FREETYPE_ERR_OUT_OF_RESOURCES;
if (surface) {
if (entry->info.flags & SDL_FREETYPE_GLYPH_EMPTY)
@@ -1051,10 +1053,10 @@ sdl_freetype_font_glyph_surface (sdl_freetype_font_t * font, FT_UInt index,
if (data)
*data = entry->info.data;
- return 0;
+ return SDL_FREETYPE_ERR_OK;
}
-int
+sdl_freetype_error_t
sdl_freetype_font_glyph_free_surface_data (sdl_freetype_font_t * font, FT_UInt index,
sdl_freetype_glyph_info_t * info)
{
@@ -1072,10 +1074,11 @@ sdl_freetype_font_glyph_free_surface_data (sdl_freetype_font_t * font, FT_UInt i
free (info->bitmap.buffer);
info->bitmap.buffer = NULL;
}
- return 0;
+
+ return SDL_FREETYPE_ERR_OK;
}
-int
+sdl_freetype_error_t
sdl_freetype_font_glyph_get_user_data (sdl_freetype_font_t * font,
FT_UInt index, void ** data)
{
@@ -1084,33 +1087,33 @@ sdl_freetype_font_glyph_get_user_data (sdl_freetype_font_t * font,
entry = sdl_freetype_font_glyph_entry_lookup (font, index,
SDL_FREETYPE_GLYPH_USER_DATA);
if (!entry)
- return -1;
+ return SDL_FREETYPE_ERR_NOT_FOUND;
if (!(entry->info.flags & SDL_FREETYPE_GLYPH_USER_DATA))
- return -1;
+ return SDL_FREETYPE_ERR_UNKNOWN;
*data = entry->info.data;
- return 0;
+ return SDL_FREETYPE_ERR_OK;
}
-int
+sdl_freetype_error_t
sdl_freetype_font_glyph_clear_user_data (sdl_freetype_font_t * font,
FT_UInt index)
{
sdl_freetype_glyph_cache_entry_t * entry;
entry = sdl_freetype_font_glyph_entry_lookup (font, index,
- SDL_FREETYPE_GLYPH_NONE);
+ SDL_FREETYPE_GLYPH_NONE);
if (!entry)
- return -1;
+ return SDL_FREETYPE_ERR_NOT_FOUND;
if (!(entry->info.flags & SDL_FREETYPE_GLYPH_USER_DATA))
- return 0;
+ return SDL_FREETYPE_ERR_OK;
if (font->render->glyph_user_data_fini)
font->render->glyph_user_data_fini (font, font->render,
entry->info.data);
entry->info.flags &= ~SDL_FREETYPE_GLYPH_USER_DATA;
- return 0;
+ return SDL_FREETYPE_ERR_OK;
}
static void
@@ -1142,14 +1145,18 @@ sdl_freetype_font_glyph_clear_all_user_data (sdl_freetype_font_t * font)
return 0;
}
-int
+static sdl_freetype_glyph_render_t sdl_freetype_dummy_glyph_render = {
+ SDL_FT_RENDER_CAPS_NONE, NULL, NULL, NULL, NULL
+};
+
+sdl_freetype_error_t
sdl_freetype_font_set_render (sdl_freetype_font_t * font,
sdl_freetype_glyph_render_t * render)
{
if (font->render == render)
- return 0;
+ return SDL_FREETYPE_ERR_OK;
if (font->render == &sdl_freetype_dummy_glyph_render && !render)
- return 0;
+ return SDL_FREETYPE_ERR_OK;
sdl_freetype_font_glyph_clear_all_user_data (font);
if (font->render->destroy)
@@ -1157,7 +1164,7 @@ sdl_freetype_font_set_render (sdl_freetype_font_t * font,
font->render = render ? render : &sdl_freetype_dummy_glyph_render;
- return 0;
+ return SDL_FREETYPE_ERR_OK;
}
sdl_freetype_glyph_render_t *
@@ -1180,15 +1187,15 @@ sdl_freetype_font_glyph_thaw (sdl_freetype_font_t * font)
sdl_freetype_cache_thaw (font->glyphs);
}
-int
+sdl_freetype_error_t
sdl_freetype_font_fixed_extents (sdl_freetype_font_t * font,
sdl_freetype_font_fixed_extents_t * metrics)
{
*metrics = font->metrics;
- return 0;
+ return SDL_FREETYPE_ERR_OK;
}
-int
+sdl_freetype_error_t
sdl_freetype_font_extents (sdl_freetype_font_t * font,
sdl_freetype_font_extents_t * metrics)
{
@@ -1198,7 +1205,7 @@ sdl_freetype_font_extents (sdl_freetype_font_t * font,
metrics->max_x_advance = sdl_freetype_fixed_to_double(font->metrics.max_x_advance);
metrics->max_y_advance = sdl_freetype_fixed_to_double(font->metrics.max_y_advance);
- return 0;
+ return SDL_FREETYPE_ERR_OK;
}
void
@@ -1223,7 +1230,7 @@ sdl_freetype_font_destroy (sdl_freetype_font_t * font)
#define LOCAL_BUFSZ (64)
-static int
+static sdl_freetype_error_t
sdl_freetype_font_show_glyphs_intl (sdl_freetype_font_t * font,
void * dst,
unsigned char r,
@@ -1238,14 +1245,14 @@ sdl_freetype_font_show_glyphs_intl (sdl_freetype_font_t * font,
int i;
if (!font->render->glyph_render)
- return 0;
+ return SDL_FREETYPE_ERR_OK;
sdl_freetype_font_glyph_freeze (font);
for (i = 0; i < num; i++) {
entry = sdl_freetype_font_glyph_entry_lookup (font, glyphs[i].index,
- SDL_FREETYPE_GLYPH_METRICS |
- SDL_FREETYPE_GLYPH_SURFACE);
+ SDL_FREETYPE_GLYPH_METRICS |
+ SDL_FREETYPE_GLYPH_SURFACE);
if (!entry || !(entry->info.flags & SDL_FREETYPE_GLYPH_SURFACE))
continue;
@@ -1264,7 +1271,7 @@ sdl_freetype_font_show_glyphs_intl (sdl_freetype_font_t * font,
return 0;
}
-int
+sdl_freetype_error_t
sdl_freetype_font_show_glyphs (sdl_freetype_font_t * font,
void * dst,
unsigned char r,
@@ -1275,13 +1282,10 @@ sdl_freetype_font_show_glyphs (sdl_freetype_font_t * font,
const sdl_freetype_glyph_t * glyphs,
int num_glyphs)
{
- int ret;
-
- if (!dst)
- return -1;
+ sdl_freetype_error_t ret;
if (!a)
- return 0;
+ return SDL_FREETYPE_ERR_OK;
ret = 0;
if (font->render->glyphs_render) {
@@ -1299,7 +1303,7 @@ sdl_freetype_font_show_glyphs (sdl_freetype_font_t * font,
return ret;
}
-int
+sdl_freetype_error_t
sdl_freetype_font_glyphs_fixed_extents (sdl_freetype_font_t * font,
sdl_freetype_text_fixed_extents_t * extents,
const sdl_freetype_glyph_t * glyphs,
@@ -1363,10 +1367,10 @@ sdl_freetype_font_glyphs_fixed_extents (sdl_freetype_font_t * font,
sdl_freetype_font_glyph_thaw (font);
- return 0;
+ return SDL_FREETYPE_ERR_OK;
}
-int
+sdl_freetype_error_t
sdl_freetype_font_glyphs_extents (sdl_freetype_font_t * font,
sdl_freetype_text_extents_t * extents,
const sdl_freetype_glyph_t * glyphs,
@@ -1383,7 +1387,7 @@ sdl_freetype_font_glyphs_extents (sdl_freetype_font_t * font,
return 0;
}
-int
+sdl_freetype_error_t
sdl_freetype_font_text_fixed_extents (sdl_freetype_font_t * font,
sdl_freetype_text_fixed_extents_t * extents,
const FT_Int32 * ucs4, int num)
@@ -1441,7 +1445,7 @@ sdl_freetype_font_text_fixed_extents (sdl_freetype_font_t * font,
return -1;
}
-int
+sdl_freetype_error_t
sdl_freetype_font_text_extents (sdl_freetype_font_t * font,
sdl_freetype_text_extents_t * extents,
const FT_Int32 * ucs4, int num)
@@ -1453,17 +1457,17 @@ sdl_freetype_font_text_extents (sdl_freetype_font_t * font,
if (ret < 0)
return ret;
- extents->x_bearing = sdl_freetype_fixed_to_double(fextents.x_bearing);
- extents->y_bearing = sdl_freetype_fixed_to_double(fextents.y_bearing);
- extents->x_advance = sdl_freetype_fixed_to_double(fextents.x_advance);
- extents->y_advance = sdl_freetype_fixed_to_double(fextents.y_advance);
- extents->width = sdl_freetype_fixed_to_double(fextents.width);
- extents->height = sdl_freetype_fixed_to_double(fextents.height);
+ extents->x_bearing = sdl_freetype_fixed_to_double(fextents.x_bearing);
+ extents->y_bearing = sdl_freetype_fixed_to_double(fextents.y_bearing);
+ extents->x_advance = sdl_freetype_fixed_to_double(fextents.x_advance);
+ extents->y_advance = sdl_freetype_fixed_to_double(fextents.y_advance);
+ extents->width = sdl_freetype_fixed_to_double(fextents.width);
+ extents->height = sdl_freetype_fixed_to_double(fextents.height);
- return 0;
+ return 0;
}
-int
+sdl_freetype_error_t
sdl_freetype_font_show_text (sdl_freetype_font_t * font,
void * dst,
unsigned char r,
@@ -1531,7 +1535,7 @@ sdl_freetype_font_show_text (sdl_freetype_font_t * font,
return -1;
}
-int
+sdl_freetype_error_t
sdl_freetype_font_show_utf8 (sdl_freetype_font_t * font,
void * dst,
unsigned char r,
@@ -1557,7 +1561,7 @@ sdl_freetype_font_show_utf8 (sdl_freetype_font_t * font,
return ret;
}
-int
+sdl_freetype_error_t
sdl_freetype_font_utf8_extents (sdl_freetype_font_t * font,
sdl_freetype_text_extents_t * extents,
const char * utf8, int len)
@@ -1576,7 +1580,7 @@ sdl_freetype_font_utf8_extents (sdl_freetype_font_t * font,
return ret;
}
-int
+sdl_freetype_error_t
sdl_freetype_font_utf8_fixed_extents (sdl_freetype_font_t * font,
sdl_freetype_text_fixed_extents_t * extents,
const char * utf8, int len)
diff --git a/src/sdl-freetype-error.c b/src/sdl-freetype-error.c
new file mode 100644
index 0000000..7ce6a3c
--- /dev/null
+++ b/src/sdl-freetype-error.c
@@ -0,0 +1,62 @@
+/* sdl-freetype, a text rendering library for SDL.
+ * Copyright (C) 2007 luojinghua <sunmoon1997@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it either under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation
+ * (the "LGPL") or, at your option, under the terms of the Mozilla
+ * Public License Version 1.1 (the "MPL"). If you do not alter this
+ * notice, a recipient may use your version of this file under either
+ * the MPL or the LGPL.
+ *
+ * You should have received a copy of the LGPL along with this library
+ * in the file COPYING-LGPL-2.1; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * You should have received a copy of the MPL along with this library
+ * in the file COPYING-MPL-1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
+ * OF ANY KIND, either express or implied. See the LGPL or the MPL for
+ * the specific language governing rights and limitations.
+ *
+ * THANKS FOR ALL CAIRO AUTHORS, MOST OF IDEAS AND IMPLEMENT DTAILS ARE
+ * COME FROM CAIRO.
+ *
+ */
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "sdl-freetype-error.h"
+
+const char *
+sdl_freetype_strerror (sdl_freetype_error_t error)
+{
+ switch (error) {
+ case SDL_FREETYPE_ERR_OK:
+ return "ok";
+ case SDL_FREETYPE_ERR_UNKNOWN:
+ return "unknown error";
+ case SDL_FREETYPE_ERR_INVALID_VALUE:
+ return "invalid value";
+ case SDL_FREETYPE_ERR_OUT_OF_MEMORY:
+ return "out of memory";
+ case SDL_FREETYPE_ERR_OUT_OF_RESOURCES:
+ return "out of resources";
+ case SDL_FREETYPE_ERR_NOT_FOUND:
+ return "specified value is not found";
+ case SDL_FREETYPE_ERR_NOT_IMPLEMENTED:
+ return "request feature is not implemtented";
+ case SDL_FREETYPE_ERR_FT:
+ return "error in freetype";
+ default:
+ break;
+ }
+
+ return "unknown error code";
+}
diff --git a/src/sdl-freetype-error.h b/src/sdl-freetype-error.h
new file mode 100644
index 0000000..cf7b517
--- /dev/null
+++ b/src/sdl-freetype-error.h
@@ -0,0 +1,57 @@
+/* sdl-freetype, a text rendering library for SDL.
+ * Copyright (C) 2007 luojinghua <sunmoon1997@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it either under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation
+ * (the "LGPL") or, at your option, under the terms of the Mozilla
+ * Public License Version 1.1 (the "MPL"). If you do not alter this
+ * notice, a recipient may use your version of this file under either
+ * the MPL or the LGPL.
+ *
+ * You should have received a copy of the LGPL along with this library
+ * in the file COPYING-LGPL-2.1; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * You should have received a copy of the MPL along with this library
+ * in the file COPYING-MPL-1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
+ * OF ANY KIND, either express or implied. See the LGPL or the MPL for
+ * the specific language governing rights and limitations.
+ *
+ * THANKS FOR ALL CAIRO AUTHORS, MOST OF IDEAS AND IMPLEMENT DTAILS ARE
+ * COME FROM CAIRO.
+ *
+ */
+#ifndef SDL_FREETYPE_ERROR_H
+#define SDL_FREETYPE_ERROR_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum {
+ SDL_FREETYPE_ERR_OK = 0,
+ SDL_FREETYPE_ERR_UNKNOWN = -1,
+ SDL_FREETYPE_ERR_INVALID_VALUE = -2,
+ SDL_FREETYPE_ERR_OUT_OF_MEMORY = -3,
+ SDL_FREETYPE_ERR_OUT_OF_RESOURCES = -4,
+ SDL_FREETYPE_ERR_NOT_FOUND = -5,
+ SDL_FREETYPE_ERR_NOT_IMPLEMENTED = -6,
+ SDL_FREETYPE_ERR_FT = -7,
+ SDL_FREETYPE_ERR_LAST = -8
+} sdl_freetype_error_t;
+
+const char *
+sdl_freetype_strerror (sdl_freetype_error_t error);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/sdl-freetype.h b/src/sdl-freetype.h
index 957b9e2..f063b02 100644
--- a/src/sdl-freetype.h
+++ b/src/sdl-freetype.h
@@ -34,6 +34,8 @@
#include <ft2build.h>
#include FT_FREETYPE_H
+#include "sdl-freetype-error.h"
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -93,7 +95,8 @@ typedef enum {
SDL_FREETYPE_GLYPH_METRICS = 1L << 1,
SDL_FREETYPE_GLYPH_SURFACE = 1L << 2,
SDL_FREETYPE_GLYPH_SURFACE_DATA = 1L << 3,
- SDL_FREETYPE_GLYPH_USER_DATA = 1L << 4,
+ SDL_FREETYPE_GLYPH_OUTLINE = 1L << 4,
+ SDL_FREETYPE_GLYPH_USER_DATA = 1L << 5,
} sdl_freetype_glyph_flags_t;
typedef struct {
@@ -129,10 +132,18 @@ typedef enum {
SDL_FT_HINT_STYLE_FULL
} sdl_freetype_hint_style_t;
+typedef enum {
+ SDL_FT_RENDER_CAPS_NONE = 0,
+ SDL_FT_RENDER_CAPS_OUTLINE = 1L << 0,
+ SDL_FT_RENDER_CAPS_CLEARTYPE = 1L << 1,
+} sdl_freetype_render_caps_t;
+
typedef struct _sdl_freetype_glyph_render sdl_freetype_glyph_render_t;
struct _sdl_freetype_glyph_render {
- int
+ sdl_freetype_render_caps_t caps;
+
+ sdl_freetype_error_t
(* glyph_user_data_init) (sdl_freetype_font_t * font,
sdl_freetype_glyph_render_t * render,
sdl_freetype_glyph_info_t * info,
@@ -143,7 +154,7 @@ struct _sdl_freetype_glyph_render {
sdl_freetype_glyph_render_t * render,
void * data);
- int
+ sdl_freetype_error_t
(* glyph_render) (sdl_freetype_font_t * font,
void * dst,
unsigned int r,
@@ -156,7 +167,7 @@ struct _sdl_freetype_glyph_render {
int x_offset,
int y_offset);
- int
+ sdl_freetype_error_t
(* glyphs_render) (sdl_freetype_font_t * font,
void * dst,
unsigned int r,
@@ -203,7 +214,7 @@ typedef struct {
double stroke_scale;
} sdl_freetype_font_desc_t;
-int
+sdl_freetype_error_t
sdl_freetype_init (void);
void
@@ -236,7 +247,7 @@ sdl_freetype_font_lock_face (sdl_freetype_font_t * font);
void
sdl_freetype_font_unlock_face (sdl_freetype_font_t * font);
-int
+sdl_freetype_error_t
sdl_freetype_font_set_render (sdl_freetype_font_t * font,
sdl_freetype_glyph_render_t * render);
@@ -251,28 +262,28 @@ FT_UInt
sdl_freetype_font_glyph_index (sdl_freetype_font_t * font,
FT_Int32 ucs4);
-int
+sdl_freetype_error_t
sdl_freetype_font_glyph_metrics (sdl_freetype_font_t * font, FT_UInt index,
sdl_freetype_text_extents_t * metrics);
-int
+sdl_freetype_error_t
sdl_freetype_font_glyph_fixed_metrics (sdl_freetype_font_t * font, FT_UInt index,
sdl_freetype_text_fixed_extents_t * metrics);
-int
+sdl_freetype_error_t
sdl_freetype_font_glyph_surface (sdl_freetype_font_t * font, FT_UInt index,
FT_Bitmap ** surface, int * x_offset,
int * y_offset, void ** data);
-int
+sdl_freetype_error_t
sdl_freetype_font_glyph_free_surface_data (sdl_freetype_font_t * font, FT_UInt index,
sdl_freetype_glyph_info_t * info);
-int
+sdl_freetype_error_t
sdl_freetype_font_glyph_get_user_data (sdl_freetype_font_t * font, FT_UInt index,
void ** data);
-int
+sdl_freetype_error_t
sdl_freetype_font_glyph_clear_user_data (sdl_freetype_font_t * font, FT_UInt index);
void
@@ -281,49 +292,49 @@ sdl_freetype_font_glyph_freeze (sdl_freetype_font_t * font);
void
sdl_freetype_font_glyph_thaw (sdl_freetype_font_t * font);
-int
+sdl_freetype_error_t
sdl_freetype_font_extents (sdl_freetype_font_t * font,
sdl_freetype_font_extents_t * extents);
-int
+sdl_freetype_error_t
sdl_freetype_font_fixed_extents (sdl_freetype_font_t * font,
sdl_freetype_font_fixed_extents_t * extents);
-int
+sdl_freetype_error_t
sdl_freetype_font_show_text (sdl_freetype_font_t * font, void * dst,
unsigned char r, unsigned char g, unsigned char b,
unsigned char a, int x, int y, const FT_Int32 * ucs4,
int len);
-int
+sdl_freetype_error_t
sdl_freetype_font_glyphs_extents (sdl_freetype_font_t * font,
sdl_freetype_text_extents_t * extents,
const sdl_freetype_glyph_t * glyphs,
int num_glyphs);
-int
+sdl_freetype_error_t
sdl_freetype_font_glyphs_fixed_extents (sdl_freetype_font_t * font,
sdl_freetype_text_fixed_extents_t * extents,
const sdl_freetype_glyph_t * glyphs,
int num_glyphs);
-int
+sdl_freetype_error_t
sdl_freetype_font_text_extents (sdl_freetype_font_t * font,
sdl_freetype_text_extents_t * extents,
const FT_Int32 * ucs4, int len);
-int
+sdl_freetype_error_t
sdl_freetype_font_text_fixed_extents (sdl_freetype_font_t * font,
sdl_freetype_text_fixed_extents_t * extents,
const FT_Int32 * ucs4, int len);
-int
+sdl_freetype_error_t
sdl_freetype_font_show_glyphs (sdl_freetype_font_t * font, void * dst,
unsigned char r, unsigned char g, unsigned char b,
unsigned char a, int x, int y,
const sdl_freetype_glyph_t * glyphs, int num_glyphs);
-int
+sdl_freetype_error_t
sdl_freetype_font_show_utf8 (sdl_freetype_font_t * font,
void * dst,
unsigned char r,
@@ -333,12 +344,12 @@ sdl_freetype_font_show_utf8 (sdl_freetype_font_t * font,
int x, int y,
const char * utf8, int len);
-int
+sdl_freetype_error_t
sdl_freetype_font_utf8_extents (sdl_freetype_font_t * font,
sdl_freetype_text_extents_t * extents,
const char * utf8, int len);
-int
+sdl_freetype_error_t
sdl_freetype_font_utf8_fixed_extents (sdl_freetype_font_t * font,
sdl_freetype_text_fixed_extents_t * extents,
const char * utf8, int len);
diff --git a/src/sdl-freetype.pc.in b/src/sdl-freetype.pc.in
index 37e2e11..797466a 100644
--- a/src/sdl-freetype.pc.in
+++ b/src/sdl-freetype.pc.in
@@ -1,7 +1,7 @@
prefix=@prefix@
exec_prefix=@exec_prefix@
libdir=@libdir@
-includedir=@includedir@
+includedir=@includedir@/sdl-freetype
Name: sdl-freetype
Description: a text rendering library for SDL
@@ -9,4 +9,4 @@ Version: @VERSION@
@PKGCONFIG_REQUIRES@: @SDL_FREETYPE_REQUIRES@
Libs: -L${libdir} -lsdl-freetype @FREETYPE_LIBS@ @LIBM@
-Cflags: \ No newline at end of file
+Cflags: -I${includedir} \ No newline at end of file
diff --git a/src/sdl-ft.pc.in b/src/sdl-ft.pc.in
index 7f468f0..a905cb9 100644
--- a/src/sdl-ft.pc.in
+++ b/src/sdl-ft.pc.in
@@ -1,7 +1,7 @@
prefix=@prefix@
exec_prefix=@exec_prefix@
libdir=@libdir@
-includedir=@includedir@
+includedir=@includedir@/sdl-freetype
Name: sdl-ft
Description: a text rendering library for SDL
@@ -9,4 +9,4 @@ Version: @VERSION@
@PKGCONFIG_REQUIRES@: @SDL_FT_REQUIRES@
Libs: -L${libdir} -lsdl-ft @FONTCONFIG_LIBS@
-Cflags: \ No newline at end of file
+Cflags: -I${includedir} \ No newline at end of file
diff --git a/src/sdl-glyph-render.c b/src/sdl-glyph-render.c
index a3b3ab7..87e4e46 100644
--- a/src/sdl-glyph-render.c
+++ b/src/sdl-glyph-render.c
@@ -154,7 +154,7 @@ sdl_freetype_component_alpha_over (CARD32 sc, CARD32 sa,
return c0;
}
-static int
+static sdl_freetype_error_t
sdl_freetype_glyph_composite (sdl_freetype_font_t * font,
SDL_Surface * dst_surface,
unsigned int r,
@@ -174,6 +174,9 @@ sdl_freetype_glyph_composite (sdl_freetype_font_t * font,
int i, j;
unsigned int color;
+ if (!dst_surface)
+ return SDL_FREETYPE_ERR_INVALID_VALUE;
+
#if SDL_BYTEORDER == SDL_BIG_ENDIAN
rmask = 0x000000ff;
gmask = 0x0000ff00;
@@ -339,10 +342,10 @@ sdl_freetype_glyph_composite (sdl_freetype_font_t * font,
SDL_BlitSurface(surface, &srect, dst_surface, &drect);
SDL_FreeSurface (surface);
- return 0;
+ return SDL_FREETYPE_ERR_OK;
}
#else
-static int
+static sdl_freetype_error_t
sdl_freetype_glyph_composite (sdl_freetype_font_t * font,
void * dst_surface,
unsigned int r,
@@ -354,11 +357,11 @@ sdl_freetype_glyph_composite (sdl_freetype_font_t * font,
int x_offset,
int y_offset)
{
- return -1;
+ return SDL_FREETYPE_ERR_NOT_IMPLEMENTED;
}
#endif
-static int
+static sdl_freetype_error_t
sdl_glyph_render (sdl_freetype_font_t * font,
void * dst,
unsigned int r,
@@ -376,9 +379,6 @@ sdl_glyph_render (sdl_freetype_font_t * font,
}
sdl_freetype_glyph_render_t sdl_freetype_default_glyph_render = {
- NULL, NULL, sdl_glyph_render, NULL
+ SDL_FT_RENDER_CAPS_NONE, NULL, NULL, sdl_glyph_render, NULL
};
-sdl_freetype_glyph_render_t sdl_freetype_dummy_glyph_render = {
- NULL, NULL, NULL, NULL
-};
diff --git a/src/sdl-glyph-render.h b/src/sdl-glyph-render.h
index 41084f9..03a9100 100644
--- a/src/sdl-glyph-render.h
+++ b/src/sdl-glyph-render.h
@@ -34,6 +34,5 @@
#include "sdl-freetype.h"
extern sdl_freetype_glyph_render_t sdl_freetype_default_glyph_render;
-extern sdl_freetype_glyph_render_t sdl_freetype_dummy_glyph_render;
#endif