diff options
author | Jinghua Luo <sunmoon1997@gmail.com> | 2007-01-28 16:55:00 +0800 |
---|---|---|
committer | Jinghua Luo <sunmoon1997@gmail.com> | 2007-01-28 16:55:00 +0800 |
commit | 991b188d81c781794ee6825389fce435fd3e3319 (patch) | |
tree | 718e1a1569d7f40bf6bd0b719faaaa65579d131d | |
parent | 19fb46dd2e2137955455f75703ba108fd94e1b10 (diff) |
add some error codes and install under ${includedir}/sdl-freetype.
-rw-r--r-- | src/Makefile.am | 10 | ||||
-rw-r--r-- | src/Makefile.in | 67 | ||||
-rw-r--r-- | src/sdl-font.c | 124 | ||||
-rw-r--r-- | src/sdl-freetype-error.c | 62 | ||||
-rw-r--r-- | src/sdl-freetype-error.h | 57 | ||||
-rw-r--r-- | src/sdl-freetype.h | 57 | ||||
-rw-r--r-- | src/sdl-freetype.pc.in | 4 | ||||
-rw-r--r-- | src/sdl-ft.pc.in | 4 | ||||
-rw-r--r-- | src/sdl-glyph-render.c | 18 | ||||
-rw-r--r-- | src/sdl-glyph-render.h | 1 |
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 |