Skip to content

Commit

Permalink
Python 3.10 support (#161)
Browse files Browse the repository at this point in the history
Add cp310 build
  • Loading branch information
kyamagu committed Nov 30, 2021
1 parent 805223f commit b13dc12
Show file tree
Hide file tree
Showing 6 changed files with 61 additions and 46 deletions.
10 changes: 5 additions & 5 deletions .github/workflows/ci.yml
Expand Up @@ -2,9 +2,9 @@ name: CI

on:
push:
branches: [master]
branches: [main]
pull_request:
branches: [master]
branches: [main]
release:
types: [published]

Expand Down Expand Up @@ -36,14 +36,14 @@ jobs:
- name: Build wheels
uses: pypa/cibuildwheel@v2.1.1
env:
CIBW_BUILD: cp37-* cp38-* cp39-*
CIBW_BUILD: cp*
CIBW_ARCHS: ${{ matrix.arch }}
CIBW_ENVIRONMENT_MACOS: TARGET_ARCH=${{ matrix.arch }}
CIBW_MANYLINUX_X86_64_IMAGE: manylinux2014
CIBW_BEFORE_ALL: bash scripts/build_${{ runner.os }}.sh
CIBW_BEFORE_BUILD: pip install pybind11 numpy
CIBW_TEST_REQUIRES: pytest pillow==8.3.1 glfw
CIBW_TEST_REQUIRES_MACOS: pytest pillow pyopengl pyopengl-accelerate
CIBW_TEST_REQUIRES: pytest pillow glfw
CIBW_TEST_REQUIRES_MACOS: pytest pillow pyopengl
CIBW_TEST_COMMAND: python -m pytest {project}/tests
CIBW_TEST_COMMAND_LINUX: >
xvfb-run -s "-screen 0 640x480x24" python -m pytest {project}/tests
Expand Down
15 changes: 15 additions & 0 deletions setup.py
Expand Up @@ -202,5 +202,20 @@ def build_extensions(self):
'build_dir': ('setup.py', 'docs/_build'),
},
},
classifiers=[
'Development Status :: 4 - Beta',
'Intended Audience :: Developers',
'Intended Audience :: End Users/Desktop',
'License :: OSI Approved :: BSD License',
'Operating System :: MacOS :: MacOS X',
'Operating System :: Microsoft :: Windows',
'Operating System :: POSIX',
'Programming Language :: Python :: 3.7',
'Programming Language :: Python :: 3.8',
'Programming Language :: Python :: 3.9',
'Programming Language :: Python :: 3.10',
'Topic :: Multimedia :: Graphics',
'Topic :: Scientific/Engineering :: Visualization',
],
zip_safe=False,
)
4 changes: 2 additions & 2 deletions src/skia/Canvas.cpp
Expand Up @@ -435,7 +435,7 @@ canvas
void* addr = canvas.accessTopLayerPixels(&info, &rowBytes, origin);
if (!addr)
return py::none();
ssize_t bytesPerPixel = info.bytesPerPixel();
py::ssize_t bytesPerPixel = info.bytesPerPixel();
const char* format =
(bytesPerPixel == 1) ?
py::format_descriptor<uint8_t>::value :
Expand All @@ -451,7 +451,7 @@ canvas
bytesPerPixel,
format,
{ info.width(), info.height() },
{ ssize_t(rowBytes), bytesPerPixel },
{ py::ssize_t(rowBytes), bytesPerPixel },
true
);
},
Expand Down
2 changes: 1 addition & 1 deletion src/skia/String.cpp
Expand Up @@ -18,7 +18,7 @@ py::class_<SkString>(m, "String")
.def(py::init<size_t>(), py::arg("size"))
.def(py::init(
[] (py::str str) {
ssize_t length = 0;
py::ssize_t length = 0;
auto buffer = PyUnicode_AsUTF8AndSize(str.ptr(), &length);
if (!buffer)
throw py::value_error("Failed to get UTF-8 str.");
Expand Down
4 changes: 2 additions & 2 deletions src/skia/common.h
Expand Up @@ -58,10 +58,10 @@ SkImageInfo NumPyToImageInfo(
py::array array, SkColorType ct, SkAlphaType at, const SkColorSpace* cs);

py::buffer_info ImageInfoToBufferInfo(
const SkImageInfo& imageInfo, void* data, ssize_t rowBytes = 0,
const SkImageInfo& imageInfo, void* data, py::ssize_t rowBytes = 0,
bool readonly = true);
py::memoryview ImageInfoToMemoryView(
const SkImageInfo& imageInfo, void* data, ssize_t rowBytes = 0,
const SkImageInfo& imageInfo, void* data, py::ssize_t rowBytes = 0,
bool readonly = true);
py::dict ImageInfoToArrayInterface(
const SkImageInfo& imageInfo, size_t rowBytes = 0);
Expand Down
72 changes: 36 additions & 36 deletions src/skia/utils.cpp
Expand Up @@ -79,10 +79,10 @@ SkImageInfo NumPyToImageInfo(py::array array, SkColorType ct, SkAlphaType at,
}

py::buffer_info ImageInfoToBufferInfo(
const SkImageInfo& imageInfo, void* data, ssize_t rowBytes, bool readonly) {
ssize_t width = imageInfo.width();
ssize_t height = imageInfo.height();
ssize_t bytesPerPixel = imageInfo.bytesPerPixel();
const SkImageInfo& imageInfo, void* data, py::ssize_t rowBytes, bool readonly) {
py::ssize_t width = imageInfo.width();
py::ssize_t height = imageInfo.height();
py::ssize_t bytesPerPixel = imageInfo.bytesPerPixel();
if (!rowBytes)
rowBytes = imageInfo.minRowBytes();
switch (imageInfo.colorType()) {
Expand All @@ -102,8 +102,8 @@ py::buffer_info ImageInfoToBufferInfo(
case kRGB_888x_SkColorType:
case kBGRA_8888_SkColorType:
return py::buffer_info(
data, 1, "B", 3, { height, width, ssize_t(4) },
{ rowBytes, bytesPerPixel, ssize_t(1) }, readonly);
data, 1, "B", 3, { height, width, py::ssize_t(4) },
{ rowBytes, bytesPerPixel, py::ssize_t(1) }, readonly);

case kRGBA_1010102_SkColorType:
case kBGRA_1010102_SkColorType:
Expand All @@ -116,18 +116,18 @@ py::buffer_info ImageInfoToBufferInfo(
case kRGBA_F16Norm_SkColorType:
case kRGBA_F16_SkColorType:
return py::buffer_info(
data, 2, "e", 3, { height, width, ssize_t(4) },
{ rowBytes, bytesPerPixel, ssize_t(2) }, readonly);
data, 2, "e", 3, { height, width, py::ssize_t(4) },
{ rowBytes, bytesPerPixel, py::ssize_t(2) }, readonly);

case kRGBA_F32_SkColorType:
return py::buffer_info(
data, 4, "f", 3, { height, width, ssize_t(4) },
{ rowBytes, bytesPerPixel, ssize_t(4) }, readonly);
data, 4, "f", 3, { height, width, py::ssize_t(4) },
{ rowBytes, bytesPerPixel, py::ssize_t(4) }, readonly);

case kR8G8_unorm_SkColorType:
return py::buffer_info(
data, 1, "B", 3, { height, width, ssize_t(2) },
{ rowBytes, bytesPerPixel, ssize_t(1) }, readonly);
data, 1, "B", 3, { height, width, py::ssize_t(2) },
{ rowBytes, bytesPerPixel, py::ssize_t(1) }, readonly);

case kA16_float_SkColorType:
return py::buffer_info(
Expand All @@ -136,8 +136,8 @@ py::buffer_info ImageInfoToBufferInfo(

case kR16G16_float_SkColorType:
return py::buffer_info(
data, 2, "e", 3, { height, width, ssize_t(2) },
{ rowBytes, bytesPerPixel, ssize_t(2) }, readonly);
data, 2, "e", 3, { height, width, py::ssize_t(2) },
{ rowBytes, bytesPerPixel, py::ssize_t(2) }, readonly);

case kA16_unorm_SkColorType:
return py::buffer_info(
Expand All @@ -146,13 +146,13 @@ py::buffer_info ImageInfoToBufferInfo(

case kR16G16_unorm_SkColorType:
return py::buffer_info(
data, 2, "<H", 3, { height, width, ssize_t(2) },
{ rowBytes, bytesPerPixel, ssize_t(2) }, readonly);
data, 2, "<H", 3, { height, width, py::ssize_t(2) },
{ rowBytes, bytesPerPixel, py::ssize_t(2) }, readonly);

case kR16G16B16A16_unorm_SkColorType:
return py::buffer_info(
data, 2, "<H", 3, { height, width, ssize_t(4) },
{ rowBytes, bytesPerPixel, ssize_t(2) }, readonly);
data, 2, "<H", 3, { height, width, py::ssize_t(4) },
{ rowBytes, bytesPerPixel, py::ssize_t(2) }, readonly);

case kUnknown_SkColorType:
default:
Expand All @@ -161,10 +161,10 @@ py::buffer_info ImageInfoToBufferInfo(
}

py::memoryview ImageInfoToMemoryView(
const SkImageInfo& imageInfo, void* data, ssize_t rowBytes, bool readonly) {
ssize_t width = imageInfo.width();
ssize_t height = imageInfo.height();
ssize_t bytesPerPixel = imageInfo.bytesPerPixel();
const SkImageInfo& imageInfo, void* data, py::ssize_t rowBytes, bool readonly) {
py::ssize_t width = imageInfo.width();
py::ssize_t height = imageInfo.height();
py::ssize_t bytesPerPixel = imageInfo.bytesPerPixel();
if (!rowBytes)
rowBytes = imageInfo.minRowBytes();
switch (imageInfo.colorType()) {
Expand All @@ -184,8 +184,8 @@ py::memoryview ImageInfoToMemoryView(
case kRGB_888x_SkColorType:
case kBGRA_8888_SkColorType:
return py::memoryview::from_buffer(
data, 1, "B", { height, width, ssize_t(4) },
{ rowBytes, bytesPerPixel, ssize_t(1) }, readonly);
data, 1, "B", { height, width, py::ssize_t(4) },
{ rowBytes, bytesPerPixel, py::ssize_t(1) }, readonly);

case kRGBA_1010102_SkColorType:
case kBGRA_1010102_SkColorType:
Expand All @@ -198,18 +198,18 @@ py::memoryview ImageInfoToMemoryView(
case kRGBA_F16Norm_SkColorType:
case kRGBA_F16_SkColorType:
return py::memoryview::from_buffer(
data, 2, "e", { height, width, ssize_t(4) },
{ rowBytes, bytesPerPixel, ssize_t(2) }, readonly);
data, 2, "e", { height, width, py::ssize_t(4) },
{ rowBytes, bytesPerPixel, py::ssize_t(2) }, readonly);

case kRGBA_F32_SkColorType:
return py::memoryview::from_buffer(
data, 4, "f", { height, width, ssize_t(4) },
{ rowBytes, bytesPerPixel, ssize_t(4) }, readonly);
data, 4, "f", { height, width, py::ssize_t(4) },
{ rowBytes, bytesPerPixel, py::ssize_t(4) }, readonly);

case kR8G8_unorm_SkColorType:
return py::memoryview::from_buffer(
data, 1, "B", { height, width, ssize_t(2) },
{ rowBytes, bytesPerPixel, ssize_t(1) }, readonly);
data, 1, "B", { height, width, py::ssize_t(2) },
{ rowBytes, bytesPerPixel, py::ssize_t(1) }, readonly);

case kA16_float_SkColorType:
return py::memoryview::from_buffer(
Expand All @@ -218,8 +218,8 @@ py::memoryview ImageInfoToMemoryView(

case kR16G16_float_SkColorType:
return py::memoryview::from_buffer(
data, 2, "e", { height, width, ssize_t(2) },
{ rowBytes, bytesPerPixel, ssize_t(2) }, readonly);
data, 2, "e", { height, width, py::ssize_t(2) },
{ rowBytes, bytesPerPixel, py::ssize_t(2) }, readonly);

case kA16_unorm_SkColorType:
return py::memoryview::from_buffer(
Expand All @@ -228,13 +228,13 @@ py::memoryview ImageInfoToMemoryView(

case kR16G16_unorm_SkColorType:
return py::memoryview::from_buffer(
data, 2, "<H", { height, width, ssize_t(2) },
{ rowBytes, bytesPerPixel, ssize_t(2) }, readonly);
data, 2, "<H", { height, width, py::ssize_t(2) },
{ rowBytes, bytesPerPixel, py::ssize_t(2) }, readonly);

case kR16G16B16A16_unorm_SkColorType:
return py::memoryview::from_buffer(
data, 2, "<H", { height, width, ssize_t(4) },
{ rowBytes, bytesPerPixel, ssize_t(2) }, readonly);
data, 2, "<H", { height, width, py::ssize_t(4) },
{ rowBytes, bytesPerPixel, py::ssize_t(2) }, readonly);

case kUnknown_SkColorType:
default:
Expand Down

0 comments on commit b13dc12

Please sign in to comment.