Skip to content

Commit 5dddb2c

Browse files
authored
Use enums for Modes and RawModes in C (#9256)
2 parents e7b72a3 + 4fbe28a commit 5dddb2c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+1717
-1124
lines changed

setup.py

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@
2121
from setuptools import Extension, setup
2222
from setuptools.command.build_ext import build_ext
2323

24+
TYPE_CHECKING = False
25+
if TYPE_CHECKING:
26+
from setuptools import _BuildInfo
27+
2428
configuration: dict[str, list[str]] = {}
2529

2630
# parse configuration from _custom_build/backend.py
@@ -1072,16 +1076,20 @@ def debug_build() -> bool:
10721076
return hasattr(sys, "gettotalrefcount") or FUZZING_BUILD
10731077

10741078

1079+
libraries: list[tuple[str, _BuildInfo]] = [
1080+
("pil_imaging_mode", {"sources": ["src/libImaging/Mode.c"]}),
1081+
]
1082+
10751083
files: list[str | os.PathLike[str]] = ["src/_imaging.c"]
10761084
for src_file in _IMAGING:
10771085
files.append("src/" + src_file + ".c")
10781086
for src_file in _LIB_IMAGING:
10791087
files.append(os.path.join("src/libImaging", src_file + ".c"))
10801088
ext_modules = [
1081-
Extension("PIL._imaging", files),
1082-
Extension("PIL._imagingft", ["src/_imagingft.c"]),
1083-
Extension("PIL._imagingcms", ["src/_imagingcms.c"]),
1084-
Extension("PIL._webp", ["src/_webp.c"]),
1089+
Extension("PIL._imaging", files, libraries=["pil_imaging_mode"]),
1090+
Extension("PIL._imagingft", ["src/_imagingft.c"], libraries=["pil_imaging_mode"]),
1091+
Extension("PIL._imagingcms", ["src/_imagingcms.c"], libraries=["pil_imaging_mode"]),
1092+
Extension("PIL._webp", ["src/_webp.c"], libraries=["pil_imaging_mode"]),
10851093
Extension("PIL._avif", ["src/_avif.c"]),
10861094
Extension("PIL._imagingtk", ["src/_imagingtk.c", "src/Tk/tkImaging.c"]),
10871095
Extension("PIL._imagingmath", ["src/_imagingmath.c"]),
@@ -1093,6 +1101,7 @@ def debug_build() -> bool:
10931101
setup(
10941102
cmdclass={"build_ext": pil_build_ext},
10951103
ext_modules=ext_modules,
1104+
libraries=libraries,
10961105
zip_safe=not (debug_build() or PLATFORM_MINGW),
10971106
)
10981107
except RequiredDependencyException as err:

src/Tk/tkImaging.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -121,15 +121,16 @@ PyImagingPhotoPut(
121121

122122
/* Mode */
123123

124-
if (strcmp(im->mode, "1") == 0 || strcmp(im->mode, "L") == 0) {
124+
if (im->mode == IMAGING_MODE_1 || im->mode == IMAGING_MODE_L) {
125125
block.pixelSize = 1;
126126
block.offset[0] = block.offset[1] = block.offset[2] = block.offset[3] = 0;
127-
} else if (strncmp(im->mode, "RGB", 3) == 0) {
127+
} else if (im->mode == IMAGING_MODE_RGB || im->mode == IMAGING_MODE_RGBA ||
128+
im->mode == IMAGING_MODE_RGBX || im->mode == IMAGING_MODE_RGBa) {
128129
block.pixelSize = 4;
129130
block.offset[0] = 0;
130131
block.offset[1] = 1;
131132
block.offset[2] = 2;
132-
if (strcmp(im->mode, "RGBA") == 0) {
133+
if (im->mode == IMAGING_MODE_RGBA) {
133134
block.offset[3] = 3; /* alpha (or reserved, under Tk 8.2) */
134135
} else {
135136
block.offset[3] = 0; /* no alpha */

0 commit comments

Comments
 (0)