Skip to content

Commit

Permalink
Merge pull request #7047 from nulano/freetype-import
Browse files Browse the repository at this point in the history
Do not discard error message if _imagingft fails to import
  • Loading branch information
hugovk authored Apr 1, 2023
2 parents ac78780 + 3d4e9b1 commit 3cfdef3
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 29 deletions.
13 changes: 4 additions & 9 deletions src/PIL/ImageFont.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,17 +54,12 @@ def __getattr__(name):
raise AttributeError(msg)


class _ImagingFtNotInstalled:
# module placeholder
def __getattr__(self, id):
msg = "The _imagingft C module is not installed"
raise ImportError(msg)


try:
from . import _imagingft as core
except ImportError:
core = _ImagingFtNotInstalled()
except ImportError as ex:
from ._util import DeferredError

core = DeferredError(ex)


_UNSPECIFIED = object()
Expand Down
10 changes: 8 additions & 2 deletions src/PIL/features.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,10 @@ def check_module(feature):
try:
__import__(module)
return True
except ImportError:
except ModuleNotFoundError:
return False
except ImportError as ex:
warnings.warn(str(ex))
return False


Expand Down Expand Up @@ -145,7 +148,10 @@ def check_feature(feature):
try:
imported_module = __import__(module, fromlist=["PIL"])
return getattr(imported_module, flag)
except ImportError:
except ModuleNotFoundError:
return None
except ImportError as ex:
warnings.warn(str(ex))
return None


Expand Down
19 changes: 1 addition & 18 deletions src/_imagingft.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,12 +33,6 @@
#include FT_COLOR_H
#endif

#define KEEP_PY_UNICODE

#if !defined(FT_LOAD_TARGET_MONO)
#define FT_LOAD_TARGET_MONO FT_LOAD_MONOCHROME
#endif

/* -------------------------------------------------------------------- */
/* error table */

Expand Down Expand Up @@ -420,11 +414,9 @@ text_layout_fallback(
if (mask) {
load_flags |= FT_LOAD_TARGET_MONO;
}
#ifdef FT_LOAD_COLOR
if (color) {
load_flags |= FT_LOAD_COLOR;
}
#endif
for (i = 0; font_getchar(string, i, &ch); i++) {
(*glyph_info)[i].index = FT_Get_Char_Index(self->face, ch);
error = FT_Load_Glyph(self->face, (*glyph_info)[i].index, load_flags);
Expand Down Expand Up @@ -581,11 +573,9 @@ font_getsize(FontObject *self, PyObject *args) {
if (mask) {
load_flags |= FT_LOAD_TARGET_MONO;
}
#ifdef FT_LOAD_COLOR
if (color) {
load_flags |= FT_LOAD_COLOR;
}
#endif

/*
* text bounds are given by:
Expand Down Expand Up @@ -844,11 +834,9 @@ font_render(FontObject *self, PyObject *args) {
if (mask) {
load_flags |= FT_LOAD_TARGET_MONO;
}
#ifdef FT_LOAD_COLOR
if (color) {
load_flags |= FT_LOAD_COLOR;
}
#endif

/*
* calculate x_min and y_max
Expand Down Expand Up @@ -958,13 +946,11 @@ font_render(FontObject *self, PyObject *args) {
/* bitmap is now FT_PIXEL_MODE_GRAY, fall through */
case FT_PIXEL_MODE_GRAY:
break;
#ifdef FT_LOAD_COLOR
case FT_PIXEL_MODE_BGRA:
if (color) {
break;
}
/* we didn't ask for color, fall through to default */
#endif
default:
PyErr_SetString(PyExc_OSError, "unsupported bitmap pixel mode");
goto glyph_error;
Expand Down Expand Up @@ -995,7 +981,6 @@ font_render(FontObject *self, PyObject *args) {
} else {
target = im->image8[yy] + xx;
}
#ifdef FT_LOAD_COLOR
if (color && bitmap.pixel_mode == FT_PIXEL_MODE_BGRA) {
/* paste color glyph */
for (k = x0; k < x1; k++) {
Expand All @@ -1010,9 +995,7 @@ font_render(FontObject *self, PyObject *args) {
target[k * 4 + 3] = source[k * 4 + 3];
}
}
} else
#endif
if (bitmap.pixel_mode == FT_PIXEL_MODE_GRAY) {
} else if (bitmap.pixel_mode == FT_PIXEL_MODE_GRAY) {
if (color) {
unsigned char *ink = (unsigned char *)&foreground_ink;
for (k = x0; k < x1; k++) {
Expand Down

0 comments on commit 3cfdef3

Please sign in to comment.