lifx-async 4.3.9__py3-none-any.whl → 4.4.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -653,6 +653,7 @@ class TileStateDevice:
653
653
  user_y: float
654
654
  width: int
655
655
  height: int
656
+ supported_frame_buffers: int
656
657
  device_version: DeviceStateVersion
657
658
  firmware: DeviceStateHostFirmware
658
659
 
@@ -676,8 +677,8 @@ class TileStateDevice:
676
677
  result += serializer.pack_value(self.width, "uint8")
677
678
  # height: uint8
678
679
  result += serializer.pack_value(self.height, "uint8")
679
- # Reserved 1 bytes
680
- result += serializer.pack_reserved(1)
680
+ # supported_frame_buffers: uint8
681
+ result += serializer.pack_value(self.supported_frame_buffers, "uint8")
681
682
  # device_version: DeviceStateVersion
682
683
  result += self.device_version.pack()
683
684
  # firmware: DeviceStateHostFirmware
@@ -711,8 +712,10 @@ class TileStateDevice:
711
712
  width, current_offset = serializer.unpack_value(data, "uint8", current_offset)
712
713
  # height: uint8
713
714
  height, current_offset = serializer.unpack_value(data, "uint8", current_offset)
714
- # Skip reserved 1 bytes
715
- current_offset += 1
715
+ # supported_frame_buffers: uint8
716
+ supported_frame_buffers, current_offset = serializer.unpack_value(
717
+ data, "uint8", current_offset
718
+ )
716
719
  # device_version: DeviceStateVersion
717
720
  device_version, current_offset = DeviceStateVersion.unpack(data, current_offset)
718
721
  # firmware: DeviceStateHostFirmware
@@ -727,6 +730,7 @@ class TileStateDevice:
727
730
  user_y=user_y,
728
731
  width=width,
729
732
  height=height,
733
+ supported_frame_buffers=supported_frame_buffers,
730
734
  device_version=device_version,
731
735
  firmware=firmware,
732
736
  ),
@@ -790,6 +794,7 @@ FIELD_MAPPINGS: dict[str, dict[str, str]] = {
790
794
  "device_version": "DeviceVersion",
791
795
  "firmware": "Firmware",
792
796
  "height": "Height",
797
+ "supported_frame_buffers": "SupportedFrameBuffers",
793
798
  "user_x": "UserX",
794
799
  "user_y": "UserY",
795
800
  "width": "Width",
lifx/theme/generators.py CHANGED
@@ -165,10 +165,16 @@ class MatrixGenerator:
165
165
  shuffled_theme = theme.shuffled()
166
166
  shuffled_theme.ensure_color()
167
167
 
168
+ # Add points for all tiles first
168
169
  for (left_x, top_y), (width, height) in self.coords_and_sizes:
169
170
  canvas.add_points_for_tile((left_x, top_y), shuffled_theme)
170
- canvas.shuffle_points()
171
- canvas.blur_by_distance()
171
+
172
+ # Shuffle and blur ONCE after all points are added
173
+ # (Previously these were inside the loop, causing earlier tiles' points
174
+ # to be shuffled/blurred multiple times, displacing them from their
175
+ # intended positions and losing theme color variety)
176
+ canvas.shuffle_points()
177
+ canvas.blur_by_distance()
172
178
 
173
179
  # Create tile canvas and fill gaps
174
180
  tile_canvas = Canvas()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lifx-async
3
- Version: 4.3.9
3
+ Version: 4.4.1
4
4
  Summary: A modern, type-safe, async Python library for controlling LIFX lights
5
5
  Author-email: Avi Miller <me@dje.li>
6
6
  Maintainer-email: Avi Miller <me@dje.li>
@@ -1,16 +1,16 @@
1
- lifx/__init__.py,sha256=KoZSiVHofkBbIW5cwhQ4_qHjYDsb1lUX1s5rbUpjkec,2302
2
- lifx/api.py,sha256=Hwo8IZTDSo-sjpT4gph1oGSVVlZJwDS5uityxmLXP3Q,33933
1
+ lifx/__init__.py,sha256=GBubbz5IrtHDMCJ9aeBzOGztvg0GTLE70rS_di1VMBQ,2524
2
+ lifx/api.py,sha256=PFS2b28ow40kCQvT_MKvBLZD6fKCbvsoOQFtiODDrPE,33861
3
3
  lifx/color.py,sha256=wcmeeiBmOAjunInERNd6rslKvBEpV4vfjwwiZ8v7H8A,17877
4
- lifx/const.py,sha256=dW64lf_jwAD40GSd6hkFkrni5j-w2qkV3pl6YNdCxv4,3426
4
+ lifx/const.py,sha256=cf_O_3TqJjIBXF1tI35PkJ1JOhmy4tRt14PSa63pilA,3471
5
5
  lifx/exceptions.py,sha256=pikAMppLn7gXyjiQVWM_tSvXKNh-g366nG_UWyqpHhc,815
6
6
  lifx/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
- lifx/devices/__init__.py,sha256=V7hW8sM_RwFgbR4Hv1ByR1JLhYq7Ft1X9pylQjCXYB8,777
8
- lifx/devices/base.py,sha256=dVTjzIz_h5dd2tTJkWUTpu5HmQ-H1R2hcTqqzw5_84c,43790
9
- lifx/devices/hev.py,sha256=ow4AU3eOVAcMK2KKAyQUTB7z6EDoRz7StwVOvwwS4Sk,10124
10
- lifx/devices/infrared.py,sha256=q8q_cpjdRwojk76jBEdBeIYmqAA4FuTy7ZUquy2yEdg,4498
11
- lifx/devices/light.py,sha256=EvUeCtjMS23PUoj3cOshFJ8SYT517ksH_3p27J3Sr2o,28452
12
- lifx/devices/matrix.py,sha256=8VI02LtL_hzIzyXMu1be6QEY8W1e7-jtuitKJ6clFW8,33426
13
- lifx/devices/multizone.py,sha256=JaKpMvpxz7-RnhkJ1gS6uYrXwEFdJUpyldQsGtXZb_g,28106
7
+ lifx/devices/__init__.py,sha256=vMNbhQKMpx3zD7EPbiejjDoAYTeT-q_USYez0RtwgmQ,951
8
+ lifx/devices/base.py,sha256=x2RlGeCv60QLKklP6kA9wbCc3rmcHHhmvkSJHqTow5s,63151
9
+ lifx/devices/hev.py,sha256=T5hvt2q_vdgPBvThx_-M7n5pZu9pL0y9Fs3Zz_KL0NM,15588
10
+ lifx/devices/infrared.py,sha256=ePk9qxX_s-hv5gQMvio1Vv8FYiCd68HF0ySbWgSrvuU,8130
11
+ lifx/devices/light.py,sha256=gk92lhViUWINGaxDWbs4qn8Stnn2fGCfRkC5Kk0Q-hI,34087
12
+ lifx/devices/matrix.py,sha256=8Z0FbBGUzRhvqs3h9fL9ZQ691C9mAoA6kuOrhe89Qwk,41061
13
+ lifx/devices/multizone.py,sha256=8OJ6zP5xgSCmlMQDj2mLUZ352EMkbYMbDZ1X-Cux7AU,32786
14
14
  lifx/effects/__init__.py,sha256=4DF31yp7RJic5JoltMlz5dCtF5KQobU6NOUtLUKkVKE,1509
15
15
  lifx/effects/base.py,sha256=YO0Hbg2VYHKPtfYnWxmrtzYoPGOi9BUXhn8HVFKv5IM,10283
16
16
  lifx/effects/colorloop.py,sha256=kuuyENJS2irAN8vZAFsDa2guQdDbmmc4PJNiyZTfFPE,15840
@@ -29,18 +29,18 @@ lifx/products/generator.py,sha256=5bDFfrJ8ocwuhEr4dZB4LpVcqOqC3KxJSDiphPMu8CI,15
29
29
  lifx/products/registry.py,sha256=ILIJlQxcxJUzRH-LGU_bnHjV-TxDEucKovuJcWvG4q8,43831
30
30
  lifx/protocol/__init__.py,sha256=-wjC-wBcb7fxi5I-mJr2Ad8K2YRflJFdLLdobfD-W1Q,56
31
31
  lifx/protocol/base.py,sha256=x4cKT5sbaEmILbmPH3y5Lwk6gj3h9Xv_JvTX91cPQwM,12354
32
- lifx/protocol/generator.py,sha256=zTyyGc5QMmwSsb3akfsWYMae33N7mvsvbRY5zXvxGzI,58937
32
+ lifx/protocol/generator.py,sha256=bmLjr8xNClD-kfo9_z4CTDIiP1OkmPcNsD2Mkz41NhA,60619
33
33
  lifx/protocol/header.py,sha256=HaYQ5wEjAMgefO3dIxKb0w4VG4fLcfLj-fnHVwfp1ao,7174
34
34
  lifx/protocol/models.py,sha256=eOvOSAWbglR1SYWcC_YpicewtsdbVlQ6E2lfcC4NQrk,8172
35
35
  lifx/protocol/packets.py,sha256=ENp3irGITdV5rGah3eUzgsXqihI95upAPh7AdTsP7sk,43303
36
- lifx/protocol/protocol_types.py,sha256=GynDgT4ywpXeH1HDA4if3o1K7dPOQ4g-QHP2qFQOoN4,23468
36
+ lifx/protocol/protocol_types.py,sha256=m15A82zVrwAXomTqo-GfNmAIynVRDSV94UqHDkWgiJI,23781
37
37
  lifx/protocol/serializer.py,sha256=Cl87-Y8_LnvqFANjorJK2CMoRtBGksB_Eq07xHMTqH0,10387
38
38
  lifx/theme/__init__.py,sha256=dg4Y25dYq22EemFyxQ1fyb3D_bP2hhxGCd9BE1g_hvk,1320
39
39
  lifx/theme/canvas.py,sha256=4h7lgN8iu_OdchObGDgbxTqQLCb-FRKC-M-YCWef_i4,8048
40
- lifx/theme/generators.py,sha256=L0X6_iApLx6XDboGlYunaVsl6nvUCqMfn23VQmRkyCk,6125
40
+ lifx/theme/generators.py,sha256=nq3Yvntq_h-eFHbmmow3LcAdA_hEbRRaP5mv9Bydrjk,6435
41
41
  lifx/theme/library.py,sha256=tKlKZNqJp8lRGDnilWyDm_Qr1vCRGGwuvWVS82anNpQ,21326
42
42
  lifx/theme/theme.py,sha256=qMEx_8E41C0Cc6f083XHiAXEglTv4YlXW0UFsG1rQKg,5521
43
- lifx_async-4.3.9.dist-info/METADATA,sha256=MvH3VOBWH7ExbvDEZFteiTYdgd8RozuQU_c2aBLMtiE,2609
44
- lifx_async-4.3.9.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
45
- lifx_async-4.3.9.dist-info/licenses/LICENSE,sha256=eBz48GRA3gSiWn3rYZAz2Ewp35snnhV9cSqkVBq7g3k,1832
46
- lifx_async-4.3.9.dist-info/RECORD,,
43
+ lifx_async-4.4.1.dist-info/METADATA,sha256=GPXITqP1r-6RIp91S1SuabkN4ie0cJxMvM498v3AKwg,2609
44
+ lifx_async-4.4.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
45
+ lifx_async-4.4.1.dist-info/licenses/LICENSE,sha256=eBz48GRA3gSiWn3rYZAz2Ewp35snnhV9cSqkVBq7g3k,1832
46
+ lifx_async-4.4.1.dist-info/RECORD,,