Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Python 3.10 support #161

Merged
merged 6 commits into from Nov 30, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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