Mercurial > touhou
changeset 775:28d8b892fd06
Python: Upgrade pyo3 from 0.17 to 0.26
| author | Link Mauve <linkmauve@linkmauve.fr> |
|---|---|
| date | Mon, 13 Oct 2025 17:44:38 +0000 |
| parents | d08eb4c9fce3 |
| children | 94033091458b |
| files | python/Cargo.toml python/src/glide/mod.rs python/src/lib.rs |
| diffstat | 3 files changed, 33 insertions(+), 21 deletions(-) [+] |
line wrap: on
line diff
--- a/python/Cargo.toml +++ b/python/Cargo.toml @@ -14,7 +14,7 @@ [dependencies] touhou-formats = "*" -pyo3 = "0.17" +pyo3 = "0.26" image = { version = "0.24", default-features = false, features = ["png"], optional = true } [features]
--- a/python/src/glide/mod.rs +++ b/python/src/glide/mod.rs @@ -1,5 +1,5 @@ use pyo3::prelude::*; -use pyo3::types::{PyList, PyDict, PySequence}; +use pyo3::types::{PyList, PyDict, PySequence, PyListMethods}; use pyo3::exceptions::PyTypeError; use std::collections::{HashMap, BTreeMap}; use image::GenericImageView; @@ -152,7 +152,7 @@ println!("TODO: GameRenderer::load_background({background})"); } - fn render_elements(&self, py: Python, elements: &PyList, shift: (f32, f32)) -> PyResult<()> { + fn render_elements(&self, py: Python, elements: Bound<PyList>, shift: (f32, f32)) -> PyResult<()> { let module = py.import("pytouhou.ui.glide.sprite")?; let get_sprite_rendering_data = module.getattr("get_sprite_rendering_data")?; let mut prev_texture = u32::MAX; @@ -168,7 +168,7 @@ let y: f32 = element.getattr("y")?.extract()?; let sprite = element.getattr("sprite")?; if !sprite.is_none() { - let (pos, mut texcoords, color): ([f32; 12], [f32; 4], u32) = get_sprite_rendering_data.call1((sprite,))?.extract()?; + let (pos, mut texcoords, color): ([f32; 12], [f32; 4], u32) = get_sprite_rendering_data.call1((&sprite,))?.extract()?; for coord in &mut texcoords { *coord *= 256.0; } @@ -189,7 +189,7 @@ gr::buffer_clear(0x000000ff, 0xff, 0xffff); for things in ["enemies", "effects", "players_bullets"/*, "lasers_sprites()"*/, "players"/*, "msg_sprites()"*/, "bullets", "lasers", "cancelled_bullets", "items", "labels"] { let things = game.getattr(py, things)?; - let things: &PyList = things.extract(py)?; + let things = things.extract(py)?; self.render_elements(py, things, (32.0, 16.0))?; } let interface = game.getattr(py, "interface")?; @@ -200,7 +200,7 @@ fn render_interface(&self, py: Python, interface: PyObject, boss: bool) -> PyResult<()> { let items = interface.getattr(py, "items")?; - let items: &PyList = items.extract(py)?; + let items = items.extract(py)?; self.render_elements(py, items, (0.0, 0.0))?; /* // TODO: figure out why this doesn’t render alphanumeric characters. @@ -210,7 +210,7 @@ */ if boss { let items = interface.getattr(py, "boss_items")?; - let items: &PyList = items.extract(py)?; + let items = items.extract(py)?; self.render_elements(py, items, (0.0, 0.0))?; } Ok(()) @@ -247,12 +247,22 @@ gr::buffer_swap(1); } -pub fn module(py: Python) -> PyResult<&PyModule> { - let m = PyModule::new(py, "glide")?; - m.add_class::<GameRenderer>()?; - m.add_function(wrap_pyfunction!(init, m)?)?; - m.add_function(wrap_pyfunction!(shutdown, m)?)?; - m.add_function(wrap_pyfunction!(create_window, m)?)?; - m.add_function(wrap_pyfunction!(buffer_swap, m)?)?; - Ok(&m) +#[pymodule] +#[pyo3(name = "glide")] +pub mod module { + #[pymodule_export] + use super::GameRenderer; + + #[pymodule_export] + use super::init; + + #[pymodule_export] + use super::shutdown; + + #[pymodule_export] + use super::create_window; + + #[pymodule_export] + use super::buffer_swap; + }
--- a/python/src/lib.rs +++ b/python/src/lib.rs @@ -31,16 +31,18 @@ self.inner.list_files().cloned().collect() } - fn get_file(&mut self, py: Python, name: &str) -> PyObject { + fn get_file(&mut self, py: Python, name: &str) -> Py<PyAny> { let data = self.inner.get_file(name, true).unwrap(); - PyBytes::new(py, &data).into_py(py) + PyBytes::new(py, &data).into() } } #[pymodule] -fn libtouhou(py: Python, m: &PyModule) -> PyResult<()> { - m.add_class::<PBG3>()?; +mod libtouhou { + #[pymodule_export] + use super::PBG3; + #[cfg(feature = "glide")] - m.add_submodule(glide::module(py)?)?; - Ok(()) + #[pymodule_export] + use super::glide::module; }
