ソースを参照

fix `color32.alpha_blend`

blueloveTH 10 ヶ月 前
コミット
2bdbe8a684
3 ファイル変更10 行追加2 行削除
  1. 1 1
      include/typings/vmath.pyi
  2. 6 0
      src/modules/vmath.c
  3. 3 1
      tests/80_color32.py

+ 1 - 1
include/typings/vmath.pyi

@@ -216,7 +216,7 @@ class color32:
     def ansi_bg(self, text: str) -> str: ...
 
     @staticmethod
-    def alpha_blend(src: color32, dst: color32) -> color32: ...
+    def alpha_blend(src: color32, dst: color32 | None) -> color32: ...
 
 
 def rgb(r: int, g: int, b: int) -> color32: ...

+ 6 - 0
src/modules/vmath.c

@@ -1071,6 +1071,12 @@ static bool vmath_rgba(int argc, py_Ref argv) {
 
 static bool color32_alpha_blend_STATIC(int argc, py_Ref argv) {
     PY_CHECK_ARGC(2);
+    if(!py_checktype(&argv[0], tp_color32)) return false;
+    if(py_isnone(&argv[1])) {
+        py_assign(py_retval(), &argv[0]);
+        return true;
+    }
+    if(!py_checktype(&argv[1], tp_color32)) return false;
     c11_color32 src = py_tocolor32(&argv[0]);
     c11_color32 dst = py_tocolor32(&argv[1]);
     float alpha = src.a / 255.0f;

+ 3 - 1
tests/80_color32.py

@@ -31,4 +31,6 @@ assert a.to_vec3i() == vec3i(int(a.r * alpha), int(a.g * alpha), int(a.b * alpha
 
 c = rgb(100, 200, 255)
 assert c.ansi_fg('xxx') == '\x1b[38;2;100;200;255mxxx\x1b[0m'
-assert c.ansi_bg('xxx') == '\x1b[48;2;100;200;255mxxx\x1b[0m'
+assert c.ansi_bg('xxx') == '\x1b[48;2;100;200;255mxxx\x1b[0m'
+
+assert color32.alpha_blend(a, None) == a