Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Switch pybind11 classes to smart holders
This is the recommended, but not-yet-default, holder for C++ classes.
  • Loading branch information
QuLogic committed Jul 14, 2026
commit 4146edf58aa56ec3e6317f4d67b30c0d088eb9fd
4 changes: 2 additions & 2 deletions src/_backend_agg_wrapper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,7 @@ PyRendererAgg_draw_gouraud_triangles(RendererAgg *self,

PYBIND11_MODULE(_backend_agg, m, py::mod_gil_not_used())
{
py::class_<RendererAgg>(m, "RendererAgg", py::buffer_protocol())
py::classh<RendererAgg>(m, "RendererAgg", py::buffer_protocol())
.def(py::init<unsigned int, unsigned int, double>(),
"width"_a, "height"_a, "dpi"_a)

Expand Down Expand Up @@ -237,7 +237,7 @@ PYBIND11_MODULE(_backend_agg, m, py::mod_gil_not_used())
return py::buffer_info(renderer->pixBuffer, shape, strides);
});

py::class_<BufferRegion>(m, "BufferRegion", py::buffer_protocol())
py::classh<BufferRegion>(m, "BufferRegion", py::buffer_protocol())
// BufferRegion is not constructible from Python, thus no py::init is added.
.def("set_x", &PyBufferRegion_set_x)
.def("set_y", &PyBufferRegion_set_y)
Expand Down
10 changes: 5 additions & 5 deletions src/ft2font_wrapper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1476,7 +1476,7 @@ PYBIND11_MODULE(ft2font, m, py::mod_gil_not_used())
.value("BOLD", StyleFlags::BOLD)
.finalize();

py::class_<FT2Image>(m, "FT2Image", py::is_final(), py::buffer_protocol(),
py::classh<FT2Image>(m, "FT2Image", py::is_final(), py::buffer_protocol(),
PyFT2Image__doc__)
.def(py::init(
[](long width, long height) {
Expand All @@ -1496,7 +1496,7 @@ PYBIND11_MODULE(ft2font, m, py::mod_gil_not_used())
return py::buffer_info(self.get_buffer(), shape, strides);
});

py::class_<PyPositionedBitmap>(m, "_PositionedBitmap", py::is_final())
py::classh<PyPositionedBitmap>(m, "_PositionedBitmap", py::is_final())
.def_readonly("left", &PyPositionedBitmap::left)
.def_readonly("top", &PyPositionedBitmap::top)
.def_property_readonly(
Expand All @@ -1507,7 +1507,7 @@ PYBIND11_MODULE(ft2font, m, py::mod_gil_not_used())
})
;

py::class_<PyGlyph>(m, "Glyph", py::is_final(), PyGlyph__doc__)
py::classh<PyGlyph>(m, "Glyph", py::is_final(), PyGlyph__doc__)
.def(py::init<>([]() -> PyGlyph {
// Glyph is not useful from Python, so mark it as not constructible.
throw std::runtime_error("Glyph is not constructible");
Expand All @@ -1531,7 +1531,7 @@ PYBIND11_MODULE(ft2font, m, py::mod_gil_not_used())
.def_property_readonly("bbox", &PyGlyph_get_bbox,
"The control box of the glyph.");

py::class_<LayoutItem>(m, "LayoutItem", py::is_final())
py::classh<LayoutItem>(m, "LayoutItem", py::is_final())
.def(py::init<>([]() -> LayoutItem {
// LayoutItem is not useful from Python, so mark it as not constructible.
throw std::runtime_error("LayoutItem is not constructible");
Expand All @@ -1557,7 +1557,7 @@ PYBIND11_MODULE(ft2font, m, py::mod_gil_not_used())
item.glyph_index, item.x, item.y, item.prev_kern);
});

py::class_<PyFT2Font>(m, "FT2Font", py::is_final(), py::buffer_protocol(),
py::classh<PyFT2Font>(m, "FT2Font", py::is_final(), py::buffer_protocol(),
PyFT2Font__doc__)
.def(py::init(&PyFT2Font_init),
"filename"_a, "hinting_factor"_a=py::none(), py::kw_only(),
Expand Down
6 changes: 3 additions & 3 deletions src/tri/_tri_wrapper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ using namespace pybind11::literals;

PYBIND11_MODULE(_tri, m, py::mod_gil_not_used())
{
py::class_<Triangulation>(m, "Triangulation", py::is_final())
py::classh<Triangulation>(m, "Triangulation", py::is_final())
.def(py::init<const Triangulation::CoordinateArray&,
const Triangulation::CoordinateArray&,
const Triangulation::TriangleArray&,
Expand All @@ -31,7 +31,7 @@ PYBIND11_MODULE(_tri, m, py::mod_gil_not_used())
.def("set_mask", &Triangulation::set_mask,
"Set or clear the mask array.");

py::class_<TriContourGenerator>(m, "TriContourGenerator", py::is_final())
py::classh<TriContourGenerator>(m, "TriContourGenerator", py::is_final())
.def(py::init<Triangulation&,
const TriContourGenerator::CoordinateArray&>(),
"triangulation"_a,
Expand All @@ -44,7 +44,7 @@ PYBIND11_MODULE(_tri, m, py::mod_gil_not_used())
.def("create_filled_contour", &TriContourGenerator::create_filled_contour,
"Create and return a filled contour.");

py::class_<TrapezoidMapTriFinder>(m, "TrapezoidMapTriFinder", py::is_final())
py::classh<TrapezoidMapTriFinder>(m, "TrapezoidMapTriFinder", py::is_final())
.def(py::init<Triangulation&>(),
"triangulation"_a,
"Create a new C++ TrapezoidMapTriFinder object.\n"
Expand Down