diff python/src/glide/mod.rs @ 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 7492d384d122
children
line wrap: on
line diff
--- 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;
+
 }