# HG changeset patch # User Michael Goffioul # Date 1246226453 -3600 # Node ID c0c23dbbade7bb6b61c5f6c9e28031a1994b5cf7 # Parent 7cc35bc348ccf374a8d4d26632fe47733a01f447 Improve error handling in text rendering. diff -r 7cc35bc348cc -r c0c23dbbade7 src/ChangeLog --- a/src/ChangeLog Sun Jun 28 08:51:41 2009 +0100 +++ b/src/ChangeLog Sun Jun 28 23:00:53 2009 +0100 @@ -6,6 +6,13 @@ * txt-eng-ft.cc (ft_render::render): Compute bitmap pixels correctly for 90x rotated text. + * gl-render.cc (opengl_renderer::draw(text::properties)): Don't do + anything if the bitmap data is empty. Issue a warning instead of + an error if Freetype library is not available. + * txt-eng-ft.cc (ft_manager::do_get_font): Small change in error + string (add prefix). + (ft_render::render): Don't do anything if the bitmap data is empty. + 2009-06-28 Jaroslav Hajek * symtab.h (erase_scope (void *)): Remove overload. diff -r 7cc35bc348cc -r c0c23dbbade7 src/gl-render.cc --- a/src/gl-render.cc Sun Jun 28 08:51:41 2009 +0100 +++ b/src/gl-render.cc Sun Jun 28 23:00:53 2009 +0100 @@ -3018,6 +3018,12 @@ int x0 = 0, y0 = 0; int w = bbox(2), h = bbox(3); + if (pixels.numel () == 0) + { + // nothing to render + return bbox; + } + switch (halign) { default: break; @@ -3066,7 +3072,7 @@ return bbox; #else - ::error ("draw_text: cannot render text, Freetype library not available"); + ::warning ("draw_text: cannot render text, Freetype library not available"); return Matrix (1, 4, 0.0); #endif } diff -r 7cc35bc348cc -r c0c23dbbade7 src/txt-eng-ft.cc --- a/src/txt-eng-ft.cc Sun Jun 28 08:51:41 2009 +0100 +++ b/src/txt-eng-ft.cc Sun Jun 28 23:00:53 2009 +0100 @@ -169,7 +169,7 @@ if (FT_New_Face (library, file.c_str (), 0, &retval)) { - ::error ("unable to load font: %s", file.c_str ()); + ::error ("ft_manager: unable to load font: %s", file.c_str ()); } @@ -396,51 +396,54 @@ box = bbox; set_mode (MODE_RENDER); - elt->accept (*this); - - switch (rotation) + if (pixels.numel () > 0) { - case ROTATION_0: - break; - case ROTATION_90: - { - Array perm (3); - perm(0) = 0; - perm(1) = 2; - perm(2) = 1; - pixels = pixels.permute (perm); + elt->accept (*this); - Array idx (3); - idx(0) = idx_vector (':'); - idx(1) = idx_vector (pixels.dim2()-1, -1, -1); - idx(2) = idx_vector (':'); - pixels = uint8NDArray (pixels.index (idx)); - } - break; - case ROTATION_180: + switch (rotation) { - Array idx (3); - idx(0) = idx_vector (':'); - idx(1) = idx_vector (pixels.dim2()-1, -1, -1); - idx(2)= idx_vector (pixels.dim3()-1, -1, -1); - pixels = uint8NDArray (pixels.index (idx)); + case ROTATION_0: + break; + case ROTATION_90: + { + Array perm (3); + perm(0) = 0; + perm(1) = 2; + perm(2) = 1; + pixels = pixels.permute (perm); + + Array idx (3); + idx(0) = idx_vector (':'); + idx(1) = idx_vector (pixels.dim2()-1, -1, -1); + idx(2) = idx_vector (':'); + pixels = uint8NDArray (pixels.index (idx)); + } + break; + case ROTATION_180: + { + Array idx (3); + idx(0) = idx_vector (':'); + idx(1) = idx_vector (pixels.dim2()-1, -1, -1); + idx(2)= idx_vector (pixels.dim3()-1, -1, -1); + pixels = uint8NDArray (pixels.index (idx)); + } + break; + case ROTATION_270: + { + Array perm (3); + perm(0) = 0; + perm(1) = 2; + perm(2) = 1; + pixels = pixels.permute (perm); + + Array idx (3); + idx(0) = idx_vector (':'); + idx(1) = idx_vector (':'); + idx(2) = idx_vector (pixels.dim3()-1, -1, -1); + pixels = uint8NDArray (pixels.index (idx)); + } + break; } - break; - case ROTATION_270: - { - Array perm (3); - perm(0) = 0; - perm(1) = 2; - perm(2) = 1; - pixels = pixels.permute (perm); - - Array idx (3); - idx(0) = idx_vector (':'); - idx(1) = idx_vector (':'); - idx(2) = idx_vector (pixels.dim3()-1, -1, -1); - pixels = uint8NDArray (pixels.index (idx)); - } - break; } return pixels;