From: Enlightenment C. <no...@cv...> - 2007-07-10 00:14:08
|
Enlightenment CVS committal Author : raster Project : e17 Module : libs/imlib2 Dir : e17/libs/imlib2 Modified Files: configure.in Log Message: 1. fix a lot of things so they pass make distcheck - so many things have broken. guys - need to be more careful! 2. asparagus 3. some extra docs/comments for evas =================================================================== RCS file: /cvs/e/e17/libs/imlib2/configure.in,v retrieving revision 1.140 retrieving revision 1.141 diff -u -3 -r1.140 -r1.141 --- configure.in 17 Jun 2007 15:25:51 -0000 1.140 +++ configure.in 10 Jul 2007 00:13:26 -0000 1.141 @@ -5,7 +5,7 @@ AC_CANONICAL_BUILD AC_CANONICAL_HOST AC_ISC_POSIX -AM_INIT_AUTOMAKE(imlib2, 1.4.0.001) +AM_INIT_AUTOMAKE(imlib2, 1.4.0.002) AM_CONFIG_HEADER(config.h) AC_C_BIGENDIAN |
From: Enlightenment C. <no...@cv...> - 2007-07-15 08:28:21
|
Enlightenment CVS committal Author : raster Project : e17 Module : libs/imlib2 Dir : e17/libs/imlib2/src/modules/loaders Modified Files: loader_bmp.c Log Message: various patches from the devel mailing list in - and fixed where needed. =================================================================== RCS file: /cvs/e/e17/libs/imlib2/src/modules/loaders/loader_bmp.c,v retrieving revision 1.9 retrieving revision 1.10 diff -u -3 -r1.9 -r1.10 --- loader_bmp.c 30 May 2007 14:35:26 -0000 1.9 +++ loader_bmp.c 15 Jul 2007 08:28:11 -0000 1.10 @@ -55,9 +55,9 @@ return 0; #ifdef WORDS_BIGENDIAN - *ret = (b[3] << 24) | (b[2] << 16) | (b[1] << 8) | b[0]; -#else *ret = (b[0] << 24) | (b[1] << 16) | (b[2] << 8) | b[3]; +#else + *ret = (b[3] << 24) | (b[2] << 16) | (b[1] << 8) | b[0]; #endif return 1; } @@ -80,17 +80,17 @@ int rc; #ifdef WORDS_BIGENDIAN - rc = fputc ((int) (val & 0xff), file); + rc = fputc ((int) ((val >> 8) & 0xff), file); if (rc == EOF) return 0; - rc = fputc ((int) ((val >> 8) & 0xff), file); + rc = fputc ((int) (val & 0xff), file); if (rc == EOF) return 0; #else - rc = fputc ((int) ((val >> 8) & 0xff), file); + rc = fputc ((int) (val & 0xff), file); if (rc == EOF) return 0; - rc = fputc ((int) (val & 0xff), file); + rc = fputc ((int) ((val >> 8) & 0xff), file); if (rc == EOF) return 0; #endif @@ -104,29 +104,29 @@ int rc; #ifdef WORDS_BIGENDIAN - rc = fputc ((int) (val & 0xff), file); + rc = fputc ((int) ((val >> 24) & 0xff), file); if (rc == EOF) return 0; - rc = fputc ((int) ((val >> 8) & 0xff), file); + rc = fputc ((int) ((val >> 16) & 0xff), file); if (rc == EOF) return 0; - rc = fputc ((int) ((val >> 16) & 0xff), file); + rc = fputc ((int) ((val >> 8) & 0xff), file); if (rc == EOF) return 0; - rc = fputc ((int) ((val >> 24) & 0xff), file); + rc = fputc ((int) (val & 0xff), file); if (rc == EOF) return 0; #else - rc = fputc ((int) ((val >> 24) & 0xff), file); + rc = fputc ((int) (val & 0xff), file); if (rc == EOF) return 0; - rc = fputc ((int) ((val >> 16) & 0xff), file); + rc = fputc ((int) ((val >> 8) & 0xff), file); if (rc == EOF) return 0; - rc = fputc ((int) ((val >> 8) & 0xff), file); + rc = fputc ((int) ((val >> 16) & 0xff), file); if (rc == EOF) return 0; - rc = fputc ((int) (val & 0xff), file); + rc = fputc ((int) ((val >> 24) & 0xff), file); if (rc == EOF) return 0; #endif |
From: Enlightenment C. <no...@cv...> - 2007-07-23 14:27:46
|
Enlightenment CVS committal Author : raster Project : e17 Module : libs/imlib2 Dir : e17/libs/imlib2/src/lib Modified Files: Imlib2.h api.c font.h font_draw.c font_load.c font_query.c Log Message: font chaining patch =================================================================== RCS file: /cvs/e/e17/libs/imlib2/src/lib/Imlib2.h,v retrieving revision 1.5 retrieving revision 1.6 diff -u -3 -r1.5 -r1.6 --- Imlib2.h 6 Sep 2006 07:40:33 -0000 1.5 +++ Imlib2.h 23 Jul 2007 14:27:44 -0000 1.6 @@ -327,6 +327,10 @@ /* fonts and text */ EAPI Imlib_Font imlib_load_font(const char *font_name); EAPI void imlib_free_font(void); + EAPI int imlib_insert_font_into_fallback_chain(Imlib_Font font, Imlib_Font fallback_font); + EAPI void imlib_remove_font_from_fallback_chain(Imlib_Font fallback_font); + EAPI Imlib_Font imlib_get_prev_font_in_fallback_chain(Imlib_Font fn); + EAPI Imlib_Font imlib_get_next_font_in_fallback_chain(Imlib_Font fn); EAPI void imlib_text_draw(int x, int y, const char *text); EAPI void imlib_text_draw_with_return_metrics(int x, int y, const char *text, int *width_return, =================================================================== RCS file: /cvs/e/e17/libs/imlib2/src/lib/api.c,v retrieving revision 1.15 retrieving revision 1.16 diff -u -3 -r1.15 -r1.16 --- api.c 20 May 2007 13:26:25 -0000 1.15 +++ api.c 23 Jul 2007 14:27:44 -0000 1.16 @@ -3092,7 +3092,7 @@ } /** - * Frees the current font. + * Removes the current font from any fallback chain it's in and frees it. **/ EAPI void imlib_free_font(void) @@ -3100,8 +3100,56 @@ if (!ctx) ctx = imlib_context_new(); CHECK_PARAM_POINTER("imlib_free_font", "font", ctx->font); + imlib_remove_font_from_fallback_chain(ctx->font); imlib_font_free(ctx->font); ctx->font = NULL; +} + + +/** + * @param font A previously loaded font. + * @param fallback_font A previously loaded font to be chained to the given font. + * @return 0 on success. + * + * This arranges for the given fallback font to be used if a glyph does not exist in the given font when text is being rendered. + * Fonts can be arranged in an aribitrarily long chain and attempts will be made in order on the chain. + * Cycles in the chain are not possible since the given fallback font is removed from any chain it's already in. + * A fallback font may be a member of only one chain. Adding it as the fallback font to another font will remove it from it's first fallback chain. + **/ +EAPI int +imlib_insert_font_into_fallback_chain(Imlib_Font font, Imlib_Font fallback_font) +{ + CHECK_PARAM_POINTER_RETURN("imlib_insert_font_into_fallback_chain", "font", font, 1); + CHECK_PARAM_POINTER_RETURN("imlib_insert_font_into_fallback_chain", "fallback_font", fallback_font, 1); + return imlib_insert_font_into_fallback_chain_imp(font,fallback_font); +} + +/** + * @param fallback_font A font previously added to a fallback chain + * @return 0 on success. + * + * This removes the given font from any fallback chain it may be in. + * Removing this font joins its previous and next font together in the fallback chain. + **/ +EAPI void +imlib_remove_font_from_fallback_chain(Imlib_Font fallback_font) +{ + CHECK_PARAM_POINTER("imlib_remove_font_from_fallback_chain", "fallback_font", fallback_font); + imlib_remove_font_from_fallback_chain_imp(fallback_font); +} + +EAPI Imlib_Font +imlib_get_prev_font_in_fallback_chain(Imlib_Font fn) +{ + CHECK_PARAM_POINTER_RETURN("imlib_get_prev_font_in_fallback_chain", "fn", fn, 0); + return ((ImlibFont*)fn)->fallback_prev; +} + +EAPI Imlib_Font +imlib_get_next_font_in_fallback_chain(Imlib_Font fn) +{ + CHECK_PARAM_POINTER_RETURN("imlib_get_next_font_in_fallback_chain", "fn", fn, 0); + return ((ImlibFont*)fn)->fallback_next; } /** =================================================================== RCS file: /cvs/e/e17/libs/imlib2/src/lib/font.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- font.h 19 May 2007 18:32:34 -0000 1.3 +++ font.h 23 Jul 2007 14:27:44 -0000 1.4 @@ -50,6 +50,9 @@ int references; + /* using a double-linked list for the fallback chain */ + struct _Imlib_Font *fallback_prev; + struct _Imlib_Font *fallback_next; }; struct _Imlib_Font_Glyph @@ -76,6 +79,8 @@ ImlibFont *imlib_font_load_joined(const char *name); ImlibFont *imlib_font_load(const char *name, int size); void imlib_font_free(ImlibFont * fn); +int imlib_insert_font_into_fallback_chain_imp(ImlibFont * fn, ImlibFont *fallback); +void imlib_remove_font_from_fallback_chain_imp(ImlibFont * fn); int imlib_font_cache_get(void); void imlib_font_cache_set(int size); void imlib_font_flush(void); =================================================================== RCS file: /cvs/e/e17/libs/imlib2/src/lib/font_draw.c,v retrieving revision 1.9 retrieving revision 1.10 diff -u -3 -r1.9 -r1.10 --- font_draw.c 20 May 2007 13:26:25 -0000 1.9 +++ font_draw.c 23 Jul 2007 14:27:44 -0000 1.10 @@ -245,6 +245,31 @@ /* TODO this function is purely my art -- check once more */ } +/* + * This function returns the first font in the fallback chain to contain the requested glyph. + * The glyph index is returned in ret_index + * If the glyph is not found, then the given font pointer is returned and ret_index will be set to 0 + */ +ImlibFont * +imlib_find_glyph_in_font_chain(ImlibFont * first_fn, int gl, int *ret_index) +{ + ImlibFont *fn = first_fn; + do + { + int index = FT_Get_Char_Index(fn->ft.face, gl); + if(index<=0) + fn = fn->fallback_next; + else + { + (*ret_index) = index; + return fn; + } + } while(fn); + + (*ret_index) = 0; + return first_fn; +} + void imlib_font_draw(ImlibImage * dst, DATA32 col, ImlibFont * fn, int x, int y, const char *text, int *nextx, int *nexty, int clx, int cly, @@ -310,22 +335,23 @@ { FT_UInt index; Imlib_Font_Glyph *fg; + ImlibFont *fn_in_chain; int chr_x, chr_y; int gl; gl = imlib_font_utf8_get_next((unsigned char *)text, &chr); if (gl == 0) break; - index = FT_Get_Char_Index(fn->ft.face, gl); + fn_in_chain = imlib_find_glyph_in_font_chain(fn, gl, &index); if ((use_kerning) && (prev_index) && (index)) { FT_Vector delta; - FT_Get_Kerning(fn->ft.face, prev_index, index, ft_kerning_default, + FT_Get_Kerning(fn_in_chain->ft.face, prev_index, index, ft_kerning_default, &delta); pen_x += delta.x << 2; } - fg = imlib_font_cache_glyph_get(fn, index); + fg = imlib_font_cache_glyph_get(fn_in_chain, index); if (!fg) continue; =================================================================== RCS file: /cvs/e/e17/libs/imlib2/src/lib/font_load.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- font_load.c 19 May 2007 18:32:34 -0000 1.3 +++ font_load.c 23 Jul 2007 14:27:44 -0000 1.4 @@ -185,6 +185,9 @@ fn->references = 1; + fn->fallback_prev = NULL; + fn->fallback_next = NULL; + fonts = imlib_object_list_prepend(fonts, fn); return fn; } @@ -198,6 +201,36 @@ imlib_font_modify_cache_by(fn, 1); imlib_font_flush(); } +} + +int +imlib_insert_font_into_fallback_chain_imp(ImlibFont * fn, ImlibFont *fallback) +{ + /* avoid infinite recursion */ + if(fn == fallback) + return 1; + + /* now remove the given fallback font from any chain it's already in */ + imlib_remove_font_from_fallback_chain_imp(fallback); + + /* insert fallback into fn's font chain */ + ImlibFont *tmp=fn->fallback_next; + fn->fallback_next = fallback; + fallback->fallback_prev = fn; + fallback->fallback_next = tmp; + if (tmp) + tmp->fallback_prev = fallback; + return 0; +} + +void +imlib_remove_font_from_fallback_chain_imp(ImlibFont *fn) +{ + /* if fn has a previous font in its font chain, then make its fallback_next fn's fallback_next since fn is going away */ + if(fn->fallback_prev) + fn->fallback_prev->fallback_next=fn->fallback_next; + fn->fallback_prev = NULL; + fn->fallback_next = NULL; } static int =================================================================== RCS file: /cvs/e/e17/libs/imlib2/src/lib/font_query.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- font_query.c 19 May 2007 18:32:34 -0000 1.3 +++ font_query.c 23 Jul 2007 14:27:44 -0000 1.4 @@ -15,6 +15,9 @@ #include "rgbadraw.h" #include "rotate.h" +extern ImlibFont * +imlib_find_glyph_in_font_chain(ImlibFont * first_fn, int gl, int *ret_index); /* defined in font_draw.c */ + extern FT_Library ft_lib; /* string extents */ @@ -37,22 +40,23 @@ { FT_UInt index; Imlib_Font_Glyph *fg; + ImlibFont *fn_in_chain; int chr_x, chr_y, chr_w; int gl; gl = imlib_font_utf8_get_next((unsigned char *)text, &chr); if (gl == 0) break; - index = FT_Get_Char_Index(fn->ft.face, gl); + fn_in_chain = imlib_find_glyph_in_font_chain(fn, gl, &index); if ((use_kerning) && (prev_index) && (index)) { FT_Vector delta; - FT_Get_Kerning(fn->ft.face, prev_index, index, ft_kerning_default, + FT_Get_Kerning(fn_in_chain->ft.face, prev_index, index, ft_kerning_default, &delta); pen_x += delta.x << 2; } - fg = imlib_font_cache_glyph_get(fn, index); + fg = imlib_font_cache_glyph_get(fn_in_chain, index); if (!fg) continue; @@ -71,7 +75,7 @@ if (w) *w = (pen_x >> 8) - start_x; if (h) - *h = imlib_font_max_ascent_get(fn) - imlib_font_max_descent_get(fn); + *h = imlib_font_max_ascent_get(fn) - imlib_font_max_descent_get(fn); /* TODO: compute this inside the loop since we now may be dealing with multiple fonts */ } /* text x inset */ @@ -80,6 +84,7 @@ { FT_UInt index; Imlib_Font_Glyph *fg; + ImlibFont *fn_in_chain; int chr; int gl; @@ -89,8 +94,8 @@ gl = imlib_font_utf8_get_next((unsigned char *)text, &chr); if (gl == 0) return 0; - index = FT_Get_Char_Index(fn->ft.face, gl); - fg = imlib_font_cache_glyph_get(fn, index); + fn_in_chain = imlib_find_glyph_in_font_chain(fn, gl, &index); + fg = imlib_font_cache_glyph_get(fn_in_chain, index); if (!fg) return 0; return -fg->glyph_out->left; @@ -116,22 +121,23 @@ { FT_UInt index; Imlib_Font_Glyph *fg; + ImlibFont *fn_in_chain; int chr_x, chr_y, chr_w; int gl; gl = imlib_font_utf8_get_next((unsigned char *)text, &chr); if (gl == 0) break; - index = FT_Get_Char_Index(fn->ft.face, gl); + fn_in_chain = imlib_find_glyph_in_font_chain(fn, gl, &index); if ((use_kerning) && (prev_index) && (index)) { FT_Vector delta; - FT_Get_Kerning(fn->ft.face, prev_index, index, ft_kerning_default, + FT_Get_Kerning(fn_in_chain->ft.face, prev_index, index, ft_kerning_default, &delta); pen_x += delta.x << 2; } - fg = imlib_font_cache_glyph_get(fn, index); + fg = imlib_font_cache_glyph_get(fn_in_chain, index); if (!fg) continue; @@ -143,7 +149,7 @@ prev_index = index; } if (v_adv) - *v_adv = imlib_font_get_line_advance(fn); + *v_adv = imlib_font_get_line_advance(fn); /* TODO: compute this in the loop since we may be dealing with multiple fonts */ if (h_adv) *h_adv = (pen_x >> 8) - start_x; } @@ -172,6 +178,7 @@ int pchr; FT_UInt index; Imlib_Font_Glyph *fg; + ImlibFont *fn_in_chain; int chr_x, chr_y, chr_w; int gl, kern; FT_Vector delta; @@ -180,16 +187,16 @@ gl = imlib_font_utf8_get_next((unsigned char *)text, &chr); if (gl == 0) break; - index = FT_Get_Char_Index(fn->ft.face, gl); + fn_in_chain = imlib_find_glyph_in_font_chain(fn, gl, &index); kern = 0; if ((use_kerning) && (prev_index) && (index)) { - FT_Get_Kerning(fn->ft.face, prev_index, index, ft_kerning_default, + FT_Get_Kerning(fn_in_chain->ft.face, prev_index, index, ft_kerning_default, &delta); kern = delta.x << 2; pen_x += kern; } - fg = imlib_font_cache_glyph_get(fn, index); + fg = imlib_font_cache_glyph_get(fn_in_chain, index); if (!fg) continue; @@ -254,6 +261,7 @@ int pchr; FT_UInt index; Imlib_Font_Glyph *fg; + ImlibFont *fn_in_chain; int chr_x, chr_y, chr_w; int gl, kern; FT_Vector delta; @@ -262,16 +270,16 @@ gl = imlib_font_utf8_get_next((unsigned char *)text, &chr); if (gl == 0) break; - index = FT_Get_Char_Index(fn->ft.face, gl); + fn_in_chain = imlib_find_glyph_in_font_chain(fn, gl, &index); kern = 0; if ((use_kerning) && (prev_index) && (index)) { - FT_Get_Kerning(fn->ft.face, prev_index, index, ft_kerning_default, + FT_Get_Kerning(fn_in_chain->ft.face, prev_index, index, ft_kerning_default, &delta); kern = delta.x << 2; pen_x += kern; } - fg = imlib_font_cache_glyph_get(fn, index); + fg = imlib_font_cache_glyph_get(fn_in_chain, index); if (!fg) continue; |
From: Enlightenment C. <no...@cv...> - 2007-08-25 02:07:14
|
Enlightenment CVS committal Author : raster Project : e17 Module : libs/imlib2 Dir : e17/libs/imlib2/src/modules/loaders Modified Files: loader_xpm.c Log Message: round as a #define - and xpm loader has extra rgb.txt sourc =================================================================== RCS file: /cvs/e/e17/libs/imlib2/src/modules/loaders/loader_xpm.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -3 -r1.7 -r1.8 --- loader_xpm.c 9 Apr 2007 12:55:29 -0000 1.7 +++ loader_xpm.c 25 Aug 2007 02:07:08 -0000 1.8 @@ -52,12 +52,14 @@ /* look in rgb txt database */ if (!rgb_txt) #ifndef __EMX__ - rgb_txt = fopen("/usr/X11R6/lib/X11/rgb.txt", "r"); + rgb_txt = fopen("/usr/X11R6/lib/X11/rgb.txt", "r"); + if (!rgb_txt) + rgb_txt = fopen("/usr/openwin/lib/X11/rgb.txt", "r"); #else - rgb_txt = fopen(__XOS2RedirRoot("/XFree86/lib/X11/rgb.txt"), "rt"); + rgb_txt = fopen(__XOS2RedirRoot("/XFree86/lib/X11/rgb.txt"), "rt"); #endif if (!rgb_txt) - return; + return; fseek(rgb_txt, 0, SEEK_SET); while (fgets(buf, 4000, rgb_txt)) { |
From: Enlightenment C. <no...@cv...> - 2007-08-25 02:07:40
|
Enlightenment CVS committal Author : raster Project : e17 Module : libs/imlib2 Dir : e17/libs/imlib2/src/lib Modified Files: common.h Log Message: round as a #define - and xpm loader has extra rgb.txt sourc =================================================================== RCS file: /cvs/e/e17/libs/imlib2/src/lib/common.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- common.h 9 Apr 2007 12:55:29 -0000 1.3 +++ common.h 25 Aug 2007 02:07:08 -0000 1.4 @@ -8,6 +8,7 @@ #include <unistd.h> #include <config.h> #include <string.h> +#include <math.h> #ifdef WITH_DMALLOC # include <dmalloc.h> #endif @@ -40,6 +41,8 @@ if ((y + h) > ((yy) + (hh))) {h = (hh) - (y - yy);} #define MIN(a, b) (((a) < (b)) ? (a) : (b)) #define MAX(a, b) (((a) > (b)) ? (a) : (b)) + +#define round(x) ((x)>=0?(int)((x)+0.5):(int)((x)-0.5)) #ifdef __EMX__ extern char *__XOS2RedirRoot(const char *); |
From: Enlightenment C. <no...@cv...> - 2007-08-25 02:33:56
|
Enlightenment CVS committal Author : raster Project : e17 Module : libs/imlib2 Dir : e17/libs/imlib2/src/modules/loaders Modified Files: loader_png.c Log Message: different png loading to fix png greyscale loads =================================================================== RCS file: /cvs/e/e17/libs/imlib2/src/modules/loaders/loader_png.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- loader_png.c 9 Apr 2007 12:55:29 -0000 1.4 +++ loader_png.c 25 Aug 2007 02:33:51 -0000 1.5 @@ -1,7 +1,7 @@ #include "loader_common.h" #include <png.h> -/* this is a quick sample png loader module... nice and small isnt it? */ +/* this is a quick sample png loader module... nice and small isn't it? */ /* PNG stuff */ #define PNG_BYTES_TO_CHECK 4 @@ -18,14 +18,14 @@ { png_uint_32 w32, h32; int w, h; - char hasa = 0, hasg = 0; + char hasa = 0; FILE *f; png_structp png_ptr = NULL; png_infop info_ptr = NULL; int bit_depth, color_type, interlace_type; - /* if immediate_load is 1, then dont delay image laoding as below, or */ - /* already data in this image - dont load it again */ + /* if immediate_load is 1, then don't delay image loading as below, or */ + /* already data in this image - don't load it again */ if (im->data) return 0; f = fopen(im->real_file, "rb"); @@ -36,7 +36,7 @@ { unsigned char buf[PNG_BYTES_TO_CHECK]; - /* if we havent read the header before, set the header data */ + /* if we haven't read the header before, set the header data */ fread(buf, 1, PNG_BYTES_TO_CHECK, f); if (!png_check_sig(buf, PNG_BYTES_TO_CHECK)) { @@ -71,28 +71,19 @@ &interlace_type, NULL, NULL); im->w = (int)w32; im->h = (int)h32; - if ((w32 < 1) || (h32 < 1) || (w32 > 8192) || (h32 > 8192)) - { + if ((w32 < 1) || (h32 < 1) || (w32 > 8192) || (h32 > 8192)) + { png_read_end(png_ptr, info_ptr); png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp) NULL); fclose(f); return 0; - } - if (color_type == PNG_COLOR_TYPE_PALETTE) - { - png_set_expand(png_ptr); - if (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)) - hasa = 1; - } - if (info_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA) - hasa = 1; - if (info_ptr->color_type == PNG_COLOR_TYPE_GRAY_ALPHA) - { - hasa = 1; - hasg = 1; } - if (info_ptr->color_type == PNG_COLOR_TYPE_GRAY) - hasg = 1; + if (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)) + hasa = 1; + if (color_type == PNG_COLOR_TYPE_RGB_ALPHA) + hasa = 1; + if (color_type == PNG_COLOR_TYPE_GRAY_ALPHA) + hasa = 1; if (hasa) SET_FLAG(im->flags, F_HAS_ALPHA); else @@ -112,27 +103,43 @@ w = im->w; h = im->h; - if (hasa) - png_set_expand(png_ptr); - /* we want ARGB */ -/* note form raster: */ + + /* Prep for transformations... ultimately we want ARGB */ + /* expand palette -> RGB if necessary */ + if (color_type == PNG_COLOR_TYPE_PALETTE) + png_set_palette_to_rgb(png_ptr); + /* expand gray (w/reduced bits) -> 8-bit RGB if necessary */ + if ((color_type == PNG_COLOR_TYPE_GRAY) || + (color_type == PNG_COLOR_TYPE_GRAY_ALPHA)) + { + png_set_gray_to_rgb(png_ptr); + if (bit_depth < 8) + png_set_expand_gray_1_2_4_to_8(png_ptr); + } + /* expand transparency entry -> alpha channel if present */ + if (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)) + png_set_tRNS_to_alpha(png_ptr); + /* reduce 16bit color -> 8bit color if necessary */ + if (bit_depth > 8) + png_set_strip_16(png_ptr); + /* pack all pixels to byte boundaries */ + png_set_packing(png_ptr); + +/* note from raster: */ /* thanks to mustapha for helping debug this on PPC Linux remotely by */ -/* sending across screenshots all the tiem and me figuring out form them */ +/* sending across screenshots all the time and me figuring out from them */ /* what the hell was up with the colors */ -/* now png loading shoudl work on big endian machines nicely */ +/* now png loading should work on big-endian machines nicely */ #ifdef WORDS_BIGENDIAN png_set_swap_alpha(png_ptr); - png_set_filler(png_ptr, 0xff, PNG_FILLER_BEFORE); + if (!hasa) + png_set_filler(png_ptr, 0xff, PNG_FILLER_BEFORE); #else png_set_bgr(png_ptr); - png_set_filler(png_ptr, 0xff, PNG_FILLER_AFTER); + if (!hasa) + png_set_filler(png_ptr, 0xff, PNG_FILLER_AFTER); #endif - /* 16bit color -> 8bit color */ - png_set_strip_16(png_ptr); - /* pack all pixels to byte boundaires */ - png_set_packing(png_ptr); - if (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)) - png_set_expand(png_ptr); + if (im->data) free(im->data); im->data = malloc(w * h * sizeof(DATA32)); @@ -154,12 +161,6 @@ fclose(f); return 0; } - if (hasg) - { - png_set_gray_to_rgb(png_ptr); - if (png_get_bit_depth(png_ptr, info_ptr) < 8) - png_set_gray_1_2_4_to_8(png_ptr); - } for (i = 0; i < h; i++) lines[i] = ((unsigned char *)(im->data)) + (i * w * sizeof(DATA32)); if (progress) @@ -276,11 +277,11 @@ if ((tag = __imlib_GetTag(im, "interlacing")) && tag->val) { #ifdef PNG_WRITE_INTERLACING_SUPPORTED - png_ptr->interlaced = PNG_INTERLACE_ADAM7; - num_passes = png_set_interlace_handling(png_ptr); + png_ptr->interlaced = PNG_INTERLACE_ADAM7; + num_passes = png_set_interlace_handling(png_ptr); #endif } - + png_init_io(png_ptr, f); if (im->flags & F_HAS_ALPHA) { @@ -400,7 +401,7 @@ return 1; } -/* fills the ImlibLoader struct with a strign array of format file */ +/* fills the ImlibLoader struct with a string array of format file */ /* extensions this loader can load. eg: */ /* loader->formats = { "jpeg", "jpg"}; */ /* giving permutations is a good idea. case sensitivity is irrelevant */ |
From: Enlightenment C. <no...@cv...> - 2007-08-26 14:34:13
|
Enlightenment CVS committal Author : raster Project : e17 Module : libs/imlib2 Dir : e17/libs/imlib2 Modified Files: configure.in Log Message: asparagus! =================================================================== RCS file: /cvs/e/e17/libs/imlib2/configure.in,v retrieving revision 1.141 retrieving revision 1.142 diff -u -3 -r1.141 -r1.142 --- configure.in 10 Jul 2007 00:13:26 -0000 1.141 +++ configure.in 26 Aug 2007 14:33:41 -0000 1.142 @@ -5,7 +5,7 @@ AC_CANONICAL_BUILD AC_CANONICAL_HOST AC_ISC_POSIX -AM_INIT_AUTOMAKE(imlib2, 1.4.0.002) +AM_INIT_AUTOMAKE(imlib2, 1.4.0.003) AM_CONFIG_HEADER(config.h) AC_C_BIGENDIAN |
From: Enlightenment C. <no...@cv...> - 2007-11-13 03:47:27
|
Enlightenment CVS committal Author : raster Project : e17 Module : libs/imlib2 Dir : e17/libs/imlib2/src/lib Modified Files: api.c Log Message: push initial ctxt too =================================================================== RCS file: /cvs/e/e17/libs/imlib2/src/lib/api.c,v retrieving revision 1.18 retrieving revision 1.19 diff -u -3 -r1.18 -r1.19 --- api.c 27 Jul 2007 18:46:11 -0000 1.18 +++ api.c 13 Nov 2007 03:47:22 -0000 1.19 @@ -283,7 +283,10 @@ imlib_context_set_cliprect(int x, int y, int w, int h) { if (!ctx) - ctx = imlib_context_new(); + { + ctx = imlib_context_new(); + imlib_context_push(ctx); + } ctx->cliprect.x = x; ctx->cliprect.y = y; ctx->cliprect.w = w; @@ -294,7 +297,10 @@ imlib_context_get_cliprect(int *x, int *y, int *w, int *h) { if (!ctx) - ctx = imlib_context_new(); + { + ctx = imlib_context_new(); + imlib_context_push(ctx); + } *x = ctx->cliprect.x; *y = ctx->cliprect.y; *w = ctx->cliprect.w; @@ -318,7 +324,10 @@ imlib_context_set_display(Display * display) { if (!ctx) - ctx = imlib_context_new(); + { + ctx = imlib_context_new(); + imlib_context_push(ctx); + } ctx->display = display; } @@ -331,7 +340,10 @@ imlib_context_get_display(void) { if (!ctx) - ctx = imlib_context_new(); + { + ctx = imlib_context_new(); + imlib_context_push(ctx); + } return ctx->display; } @@ -347,7 +359,10 @@ imlib_context_set_visual(Visual * visual) { if (!ctx) - ctx = imlib_context_new(); + { + ctx = imlib_context_new(); + imlib_context_push(ctx); + } ctx->visual = visual; ctx->depth = imlib_get_visual_depth(ctx->display, ctx->visual); } @@ -361,7 +376,10 @@ imlib_context_get_visual(void) { if (!ctx) - ctx = imlib_context_new(); + { + ctx = imlib_context_new(); + imlib_context_push(ctx); + } return ctx->visual; } @@ -376,7 +394,10 @@ imlib_context_set_colormap(Colormap colormap) { if (!ctx) - ctx = imlib_context_new(); + { + ctx = imlib_context_new(); + imlib_context_push(ctx); + } ctx->colormap = colormap; } @@ -389,7 +410,10 @@ imlib_context_get_colormap(void) { if (!ctx) - ctx = imlib_context_new(); + { + ctx = imlib_context_new(); + imlib_context_push(ctx); + } return ctx->colormap; } @@ -404,7 +428,10 @@ imlib_context_set_drawable(Drawable drawable) { if (!ctx) - ctx = imlib_context_new(); + { + ctx = imlib_context_new(); + imlib_context_push(ctx); + } ctx->drawable = drawable; } @@ -417,7 +444,10 @@ imlib_context_get_drawable(void) { if (!ctx) - ctx = imlib_context_new(); + { + ctx = imlib_context_new(); + imlib_context_push(ctx); + } return ctx->drawable; } @@ -432,7 +462,10 @@ imlib_context_set_mask(Pixmap mask) { if (!ctx) - ctx = imlib_context_new(); + { + ctx = imlib_context_new(); + imlib_context_push(ctx); + } ctx->mask = mask; } @@ -445,7 +478,10 @@ imlib_context_get_mask(void) { if (!ctx) - ctx = imlib_context_new(); + { + ctx = imlib_context_new(); + imlib_context_push(ctx); + } return ctx->mask; } #endif @@ -462,7 +498,10 @@ imlib_context_set_dither_mask(char dither_mask) { if (!ctx) - ctx = imlib_context_new(); + { + ctx = imlib_context_new(); + imlib_context_push(ctx); + } ctx->dither_mask = dither_mask; } @@ -476,7 +515,10 @@ imlib_context_get_dither_mask(void) { if (!ctx) - ctx = imlib_context_new(); + { + ctx = imlib_context_new(); + imlib_context_push(ctx); + } return ctx->dither_mask; } @@ -491,7 +533,10 @@ imlib_context_set_mask_alpha_threshold(int mask_alpha_threshold) { if (!ctx) - ctx = imlib_context_new(); + { + ctx = imlib_context_new(); + imlib_context_push(ctx); + } ctx->mask_alpha_threshold = mask_alpha_threshold; } @@ -504,7 +549,10 @@ imlib_context_get_mask_alpha_threshold(void) { if (!ctx) - ctx = imlib_context_new(); + { + ctx = imlib_context_new(); + imlib_context_push(ctx); + } return ctx->mask_alpha_threshold; } @@ -522,7 +570,10 @@ imlib_context_set_anti_alias(char anti_alias) { if (!ctx) - ctx = imlib_context_new(); + { + ctx = imlib_context_new(); + imlib_context_push(ctx); + } ctx->anti_alias = anti_alias; } @@ -536,7 +587,10 @@ imlib_context_get_anti_alias(void) { if (!ctx) - ctx = imlib_context_new(); + { + ctx = imlib_context_new(); + imlib_context_push(ctx); + } return ctx->anti_alias; } @@ -555,7 +609,10 @@ imlib_context_set_dither(char dither) { if (!ctx) - ctx = imlib_context_new(); + { + ctx = imlib_context_new(); + imlib_context_push(ctx); + } ctx->dither = dither; } @@ -569,7 +626,10 @@ imlib_context_get_dither(void) { if (!ctx) - ctx = imlib_context_new(); + { + ctx = imlib_context_new(); + imlib_context_push(ctx); + } return ctx->dither; } @@ -585,7 +645,10 @@ imlib_context_set_blend(char blend) { if (!ctx) - ctx = imlib_context_new(); + { + ctx = imlib_context_new(); + imlib_context_push(ctx); + } ctx->blend = blend; } @@ -599,7 +662,10 @@ imlib_context_get_blend(void) { if (!ctx) - ctx = imlib_context_new(); + { + ctx = imlib_context_new(); + imlib_context_push(ctx); + } return ctx->blend; } @@ -618,7 +684,10 @@ imlib_context_set_color_modifier(Imlib_Color_Modifier color_modifier) { if (!ctx) - ctx = imlib_context_new(); + { + ctx = imlib_context_new(); + imlib_context_push(ctx); + } ctx->color_modifier = color_modifier; } @@ -631,7 +700,10 @@ imlib_context_get_color_modifier(void) { if (!ctx) - ctx = imlib_context_new(); + { + ctx = imlib_context_new(); + imlib_context_push(ctx); + } return ctx->color_modifier; } @@ -654,7 +726,10 @@ imlib_context_set_operation(Imlib_Operation operation) { if (!ctx) - ctx = imlib_context_new(); + { + ctx = imlib_context_new(); + imlib_context_push(ctx); + } ctx->operation = operation; } @@ -667,7 +742,10 @@ imlib_context_get_operation(void) { if (!ctx) - ctx = imlib_context_new(); + { + ctx = imlib_context_new(); + imlib_context_push(ctx); + } return ctx->operation; } @@ -681,7 +759,10 @@ imlib_context_set_font(Imlib_Font font) { if (!ctx) - ctx = imlib_context_new(); + { + ctx = imlib_context_new(); + imlib_context_push(ctx); + } ctx->font = font; } @@ -694,7 +775,10 @@ imlib_context_get_font(void) { if (!ctx) - ctx = imlib_context_new(); + { + ctx = imlib_context_new(); + imlib_context_push(ctx); + } return ctx->font; } @@ -712,7 +796,10 @@ imlib_context_set_direction(Imlib_Text_Direction direction) { if (!ctx) - ctx = imlib_context_new(); + { + ctx = imlib_context_new(); + imlib_context_push(ctx); + } ctx->direction = direction; } @@ -727,7 +814,10 @@ imlib_context_set_angle(double angle) { if (!ctx) - ctx = imlib_context_new(); + { + ctx = imlib_context_new(); + imlib_context_push(ctx); + } ctx->angle = angle; } @@ -741,7 +831,10 @@ imlib_context_get_angle(void) { if (!ctx) - ctx = imlib_context_new(); + { + ctx = imlib_context_new(); + imlib_context_push(ctx); + } return ctx->angle; } @@ -754,7 +847,10 @@ imlib_context_get_direction(void) { if (!ctx) - ctx = imlib_context_new(); + { + ctx = imlib_context_new(); + imlib_context_push(ctx); + } return ctx->direction; } @@ -773,7 +869,10 @@ imlib_context_set_color(int red, int green, int blue, int alpha) { if (!ctx) - ctx = imlib_context_new(); + { + ctx = imlib_context_new(); + imlib_context_push(ctx); + } ctx->color.red = red; ctx->color.green = green; ctx->color.blue = blue; @@ -792,7 +891,10 @@ imlib_context_get_color(int *red, int *green, int *blue, int *alpha) { if (!ctx) - ctx = imlib_context_new(); + { + ctx = imlib_context_new(); + imlib_context_push(ctx); + } *red = ctx->color.red; *green = ctx->color.green; *blue = ctx->color.blue; @@ -809,7 +911,10 @@ imlib_context_get_imlib_color(void) { if (!ctx) - ctx = imlib_context_new(); + { + ctx = imlib_context_new(); + imlib_context_push(ctx); + } return &ctx->color; } |
From: Enlightenment C. <no...@cv...> - 2008-01-25 03:36:21
|
Enlightenment CVS committal Author : raster Project : e17 Module : libs/imlib2 Dir : e17/libs/imlib2 Modified Files: configure.in Log Message: asparagus! also pass distcheck and have common autofoo init that is consistent for package, version etc. =================================================================== RCS file: /cvs/e/e17/libs/imlib2/configure.in,v retrieving revision 1.143 retrieving revision 1.144 diff -u -3 -r1.143 -r1.144 --- configure.in 7 Nov 2007 20:23:20 -0000 1.143 +++ configure.in 25 Jan 2008 03:35:49 -0000 1.144 @@ -1,11 +1,14 @@ # get rid of that stupid cache mechanism rm -f config.cache -AC_INIT(configure.in) +AC_INIT(imlib2, 1.4.1.000, enl...@li...) +AC_PREREQ(2.52) +AC_CONFIG_SRCDIR(configure.in) AC_CANONICAL_BUILD AC_CANONICAL_HOST AC_ISC_POSIX -AM_INIT_AUTOMAKE(imlib2, 1.4.0.003) + +AM_INIT_AUTOMAKE(1.6 dist-bzip2) AM_CONFIG_HEADER(config.h) AC_C_BIGENDIAN |
From: Enlightenment C. <no...@cv...> - 2008-05-27 14:35:20
|
Enlightenment CVS committal Author : raster Project : e17 Module : libs/imlib2 Dir : e17/libs/imlib2/src/modules/loaders Modified Files: loader_pnm.c loader_xpm.c Log Message: 2 possible security vulns fixed. should probably release new version with these. =================================================================== RCS file: /cvs/e/e17/libs/imlib2/src/modules/loaders/loader_pnm.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- loader_pnm.c 9 Apr 2007 12:55:29 -0000 1.4 +++ loader_pnm.c 27 May 2008 14:35:17 -0000 1.5 @@ -68,7 +68,7 @@ int i = 0; /* read numbers */ - while (c != EOF && !isspace(c)) + while (c != EOF && !isspace(c) && (i < 255)) { buf[i++] = c; c = fgetc(f); =================================================================== RCS file: /cvs/e/e17/libs/imlib2/src/modules/loaders/loader_xpm.c,v retrieving revision 1.8 retrieving revision 1.9 diff -u -3 -r1.8 -r1.9 --- loader_xpm.c 25 Aug 2007 02:07:08 -0000 1.8 +++ loader_xpm.c 27 May 2008 14:35:17 -0000 1.9 @@ -286,7 +286,7 @@ if (line[k] != ' ') { s[0] = 0; - sscanf(&line[k], "%65535s", s); + sscanf(&line[k], "%255s", s); slen = strlen(s); k += slen; if (!strcmp(s, "c")) |