pyglet 2.1.13__py3-none-any.whl → 3.0.dev1__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.
Files changed (267) hide show
  1. pyglet/__init__.py +67 -61
  2. pyglet/__init__.pyi +15 -8
  3. pyglet/app/__init__.py +22 -13
  4. pyglet/app/async_app.py +212 -0
  5. pyglet/app/base.py +2 -1
  6. pyglet/app/{xlib.py → linux.py} +3 -3
  7. pyglet/config/__init__.py +101 -0
  8. pyglet/config/gl/__init__.py +30 -0
  9. pyglet/config/gl/egl.py +120 -0
  10. pyglet/config/gl/macos.py +262 -0
  11. pyglet/config/gl/windows.py +267 -0
  12. pyglet/config/gl/x11.py +142 -0
  13. pyglet/customtypes.py +43 -2
  14. pyglet/display/__init__.py +8 -6
  15. pyglet/display/base.py +3 -63
  16. pyglet/display/cocoa.py +12 -17
  17. pyglet/display/emscripten.py +39 -0
  18. pyglet/display/headless.py +23 -30
  19. pyglet/display/wayland.py +157 -0
  20. pyglet/display/win32.py +5 -21
  21. pyglet/display/xlib.py +19 -27
  22. pyglet/display/xlib_vidmoderestore.py +2 -2
  23. pyglet/enums.py +183 -0
  24. pyglet/event.py +0 -1
  25. pyglet/experimental/geoshader_sprite.py +15 -13
  26. pyglet/experimental/hidraw.py +6 -15
  27. pyglet/experimental/multitexture_sprite.py +31 -19
  28. pyglet/experimental/particles.py +13 -35
  29. pyglet/font/__init__.py +251 -85
  30. pyglet/font/base.py +116 -61
  31. pyglet/font/dwrite/__init__.py +349 -204
  32. pyglet/font/dwrite/dwrite_lib.py +27 -5
  33. pyglet/font/fontconfig.py +14 -6
  34. pyglet/font/freetype.py +138 -87
  35. pyglet/font/freetype_lib.py +19 -0
  36. pyglet/font/group.py +179 -0
  37. pyglet/font/harfbuzz/__init__.py +3 -3
  38. pyglet/font/pyodide_js.py +310 -0
  39. pyglet/font/quartz.py +319 -126
  40. pyglet/font/ttf.py +45 -3
  41. pyglet/font/user.py +14 -19
  42. pyglet/font/win32.py +45 -21
  43. pyglet/graphics/__init__.py +8 -787
  44. pyglet/graphics/allocation.py +115 -1
  45. pyglet/graphics/api/__init__.py +77 -0
  46. pyglet/graphics/api/base.py +299 -0
  47. pyglet/graphics/api/gl/__init__.py +58 -0
  48. pyglet/graphics/api/gl/base.py +24 -0
  49. pyglet/graphics/{vertexbuffer.py → api/gl/buffer.py} +104 -159
  50. pyglet/graphics/api/gl/cocoa/context.py +76 -0
  51. pyglet/graphics/api/gl/context.py +391 -0
  52. pyglet/graphics/api/gl/default_shaders.py +0 -0
  53. pyglet/graphics/api/gl/draw.py +627 -0
  54. pyglet/graphics/api/gl/egl/__init__.py +0 -0
  55. pyglet/graphics/api/gl/egl/context.py +92 -0
  56. pyglet/graphics/api/gl/enums.py +76 -0
  57. pyglet/graphics/api/gl/framebuffer.py +315 -0
  58. pyglet/graphics/api/gl/gl.py +5463 -0
  59. pyglet/graphics/api/gl/gl_info.py +188 -0
  60. pyglet/graphics/api/gl/global_opengl.py +226 -0
  61. pyglet/{gl → graphics/api/gl}/lib.py +34 -18
  62. pyglet/graphics/api/gl/shader.py +1476 -0
  63. pyglet/graphics/api/gl/shapes.py +55 -0
  64. pyglet/graphics/api/gl/sprite.py +102 -0
  65. pyglet/graphics/api/gl/state.py +219 -0
  66. pyglet/graphics/api/gl/text.py +190 -0
  67. pyglet/graphics/api/gl/texture.py +1526 -0
  68. pyglet/graphics/{vertexarray.py → api/gl/vertexarray.py} +11 -13
  69. pyglet/graphics/api/gl/vertexdomain.py +751 -0
  70. pyglet/graphics/api/gl/win32/__init__.py +0 -0
  71. pyglet/graphics/api/gl/win32/context.py +108 -0
  72. pyglet/graphics/api/gl/win32/wgl_info.py +24 -0
  73. pyglet/graphics/api/gl/xlib/__init__.py +0 -0
  74. pyglet/graphics/api/gl/xlib/context.py +174 -0
  75. pyglet/{gl → graphics/api/gl/xlib}/glx_info.py +26 -31
  76. pyglet/graphics/api/gl1/__init__.py +0 -0
  77. pyglet/{gl → graphics/api/gl1}/gl_compat.py +3 -2
  78. pyglet/graphics/api/gl2/__init__.py +0 -0
  79. pyglet/graphics/api/gl2/buffer.py +320 -0
  80. pyglet/graphics/api/gl2/draw.py +600 -0
  81. pyglet/graphics/api/gl2/global_opengl.py +122 -0
  82. pyglet/graphics/api/gl2/shader.py +200 -0
  83. pyglet/graphics/api/gl2/shapes.py +51 -0
  84. pyglet/graphics/api/gl2/sprite.py +79 -0
  85. pyglet/graphics/api/gl2/text.py +175 -0
  86. pyglet/graphics/api/gl2/vertexdomain.py +364 -0
  87. pyglet/graphics/api/webgl/__init__.py +233 -0
  88. pyglet/graphics/api/webgl/buffer.py +302 -0
  89. pyglet/graphics/api/webgl/context.py +234 -0
  90. pyglet/graphics/api/webgl/draw.py +590 -0
  91. pyglet/graphics/api/webgl/enums.py +76 -0
  92. pyglet/graphics/api/webgl/framebuffer.py +360 -0
  93. pyglet/graphics/api/webgl/gl.py +1537 -0
  94. pyglet/graphics/api/webgl/gl_info.py +130 -0
  95. pyglet/graphics/api/webgl/shader.py +1346 -0
  96. pyglet/graphics/api/webgl/shapes.py +92 -0
  97. pyglet/graphics/api/webgl/sprite.py +102 -0
  98. pyglet/graphics/api/webgl/state.py +227 -0
  99. pyglet/graphics/api/webgl/text.py +187 -0
  100. pyglet/graphics/api/webgl/texture.py +1227 -0
  101. pyglet/graphics/api/webgl/vertexarray.py +54 -0
  102. pyglet/graphics/api/webgl/vertexdomain.py +616 -0
  103. pyglet/graphics/api/webgl/webgl_js.pyi +307 -0
  104. pyglet/{image → graphics}/atlas.py +33 -32
  105. pyglet/graphics/base.py +10 -0
  106. pyglet/graphics/buffer.py +245 -0
  107. pyglet/graphics/draw.py +578 -0
  108. pyglet/graphics/framebuffer.py +26 -0
  109. pyglet/graphics/instance.py +178 -69
  110. pyglet/graphics/shader.py +267 -1553
  111. pyglet/graphics/state.py +83 -0
  112. pyglet/graphics/texture.py +703 -0
  113. pyglet/graphics/vertexdomain.py +695 -538
  114. pyglet/gui/ninepatch.py +10 -10
  115. pyglet/gui/widgets.py +120 -10
  116. pyglet/image/__init__.py +20 -1973
  117. pyglet/image/animation.py +12 -12
  118. pyglet/image/base.py +730 -0
  119. pyglet/image/codecs/__init__.py +9 -0
  120. pyglet/image/codecs/bmp.py +53 -30
  121. pyglet/image/codecs/dds.py +53 -31
  122. pyglet/image/codecs/gdiplus.py +38 -14
  123. pyglet/image/codecs/gdkpixbuf2.py +0 -2
  124. pyglet/image/codecs/js_image.py +99 -0
  125. pyglet/image/codecs/ktx2.py +161 -0
  126. pyglet/image/codecs/pil.py +1 -1
  127. pyglet/image/codecs/png.py +1 -1
  128. pyglet/image/codecs/wic.py +11 -2
  129. pyglet/info.py +26 -24
  130. pyglet/input/__init__.py +8 -0
  131. pyglet/input/base.py +163 -105
  132. pyglet/input/controller.py +13 -19
  133. pyglet/input/controller_db.py +39 -24
  134. pyglet/input/emscripten/__init__.py +18 -0
  135. pyglet/input/emscripten/gamepad_js.py +397 -0
  136. pyglet/input/linux/__init__.py +11 -5
  137. pyglet/input/linux/evdev.py +10 -11
  138. pyglet/input/linux/x11_xinput.py +2 -2
  139. pyglet/input/linux/x11_xinput_tablet.py +1 -1
  140. pyglet/input/macos/__init__.py +7 -2
  141. pyglet/input/macos/darwin_gc.py +559 -0
  142. pyglet/input/win32/__init__.py +1 -1
  143. pyglet/input/win32/directinput.py +34 -29
  144. pyglet/input/win32/xinput.py +11 -61
  145. pyglet/lib.py +3 -3
  146. pyglet/libs/__init__.py +1 -1
  147. pyglet/{gl → libs/darwin}/agl.py +1 -1
  148. pyglet/libs/darwin/cocoapy/__init__.py +2 -2
  149. pyglet/libs/darwin/cocoapy/cocoahelpers.py +181 -0
  150. pyglet/libs/darwin/cocoapy/cocoalibs.py +31 -0
  151. pyglet/libs/darwin/cocoapy/cocoatypes.py +27 -0
  152. pyglet/libs/darwin/cocoapy/runtime.py +81 -45
  153. pyglet/libs/darwin/coreaudio.py +4 -4
  154. pyglet/{gl → libs/darwin}/lib_agl.py +9 -8
  155. pyglet/libs/darwin/quartzkey.py +1 -3
  156. pyglet/libs/egl/__init__.py +2 -0
  157. pyglet/libs/egl/egl_lib.py +576 -0
  158. pyglet/libs/egl/eglext.py +51 -5
  159. pyglet/libs/linux/__init__.py +0 -0
  160. pyglet/libs/linux/egl/__init__.py +0 -0
  161. pyglet/libs/linux/egl/eglext.py +22 -0
  162. pyglet/libs/linux/glx/__init__.py +0 -0
  163. pyglet/{gl → libs/linux/glx}/glx.py +13 -14
  164. pyglet/{gl → libs/linux/glx}/glxext_arb.py +408 -192
  165. pyglet/{gl → libs/linux/glx}/glxext_mesa.py +1 -1
  166. pyglet/{gl → libs/linux/glx}/glxext_nv.py +345 -164
  167. pyglet/{gl → libs/linux/glx}/lib_glx.py +3 -2
  168. pyglet/libs/linux/wayland/__init__.py +0 -0
  169. pyglet/libs/linux/wayland/client.py +1068 -0
  170. pyglet/libs/linux/wayland/lib_wayland.py +207 -0
  171. pyglet/libs/linux/wayland/wayland_egl.py +38 -0
  172. pyglet/libs/{wayland → linux/wayland}/xkbcommon.py +26 -0
  173. pyglet/libs/{x11 → linux/x11}/xf86vmode.py +4 -4
  174. pyglet/libs/{x11 → linux/x11}/xinerama.py +2 -2
  175. pyglet/libs/{x11 → linux/x11}/xinput.py +10 -10
  176. pyglet/libs/linux/x11/xrandr.py +0 -0
  177. pyglet/libs/{x11 → linux/x11}/xrender.py +1 -1
  178. pyglet/libs/shared/__init__.py +0 -0
  179. pyglet/libs/shared/spirv/__init__.py +0 -0
  180. pyglet/libs/shared/spirv/lib_shaderc.py +85 -0
  181. pyglet/libs/shared/spirv/lib_spirv_cross.py +126 -0
  182. pyglet/libs/win32/__init__.py +28 -8
  183. pyglet/libs/win32/constants.py +59 -48
  184. pyglet/libs/win32/context_managers.py +20 -3
  185. pyglet/libs/win32/dinput.py +105 -88
  186. pyglet/{gl → libs/win32}/lib_wgl.py +52 -26
  187. pyglet/libs/win32/types.py +58 -23
  188. pyglet/{gl → libs/win32}/wgl.py +32 -25
  189. pyglet/{gl → libs/win32}/wglext_arb.py +364 -2
  190. pyglet/media/__init__.py +9 -10
  191. pyglet/media/codecs/__init__.py +12 -1
  192. pyglet/media/codecs/base.py +99 -96
  193. pyglet/media/codecs/ffmpeg.py +2 -2
  194. pyglet/media/codecs/ffmpeg_lib/libavformat.py +3 -8
  195. pyglet/media/codecs/webaudio_pyodide.py +111 -0
  196. pyglet/media/drivers/__init__.py +9 -4
  197. pyglet/media/drivers/base.py +4 -4
  198. pyglet/media/drivers/openal/__init__.py +1 -1
  199. pyglet/media/drivers/openal/adaptation.py +3 -3
  200. pyglet/media/drivers/pulse/__init__.py +1 -1
  201. pyglet/media/drivers/pulse/adaptation.py +3 -3
  202. pyglet/media/drivers/pyodide_js/__init__.py +8 -0
  203. pyglet/media/drivers/pyodide_js/adaptation.py +288 -0
  204. pyglet/media/drivers/xaudio2/adaptation.py +3 -3
  205. pyglet/media/player.py +276 -193
  206. pyglet/media/player_worker_thread.py +1 -1
  207. pyglet/model/__init__.py +39 -29
  208. pyglet/model/codecs/base.py +4 -4
  209. pyglet/model/codecs/gltf.py +3 -3
  210. pyglet/model/codecs/obj.py +71 -43
  211. pyglet/resource.py +129 -78
  212. pyglet/shapes.py +154 -194
  213. pyglet/sprite.py +47 -164
  214. pyglet/text/__init__.py +44 -54
  215. pyglet/text/caret.py +12 -7
  216. pyglet/text/document.py +19 -17
  217. pyglet/text/formats/html.py +2 -2
  218. pyglet/text/formats/structured.py +10 -40
  219. pyglet/text/layout/__init__.py +20 -13
  220. pyglet/text/layout/base.py +176 -287
  221. pyglet/text/layout/incremental.py +9 -10
  222. pyglet/text/layout/scrolling.py +7 -95
  223. pyglet/window/__init__.py +183 -172
  224. pyglet/window/cocoa/__init__.py +62 -51
  225. pyglet/window/cocoa/pyglet_delegate.py +2 -25
  226. pyglet/window/cocoa/pyglet_view.py +9 -8
  227. pyglet/window/dialog/__init__.py +184 -0
  228. pyglet/window/dialog/base.py +99 -0
  229. pyglet/window/dialog/darwin.py +121 -0
  230. pyglet/window/dialog/linux.py +72 -0
  231. pyglet/window/dialog/windows.py +194 -0
  232. pyglet/window/emscripten/__init__.py +779 -0
  233. pyglet/window/headless/__init__.py +44 -28
  234. pyglet/window/key.py +2 -0
  235. pyglet/window/mouse.py +2 -2
  236. pyglet/window/wayland/__init__.py +377 -0
  237. pyglet/window/win32/__init__.py +101 -46
  238. pyglet/window/xlib/__init__.py +104 -66
  239. {pyglet-2.1.13.dist-info → pyglet-3.0.dev1.dist-info}/METADATA +2 -3
  240. pyglet-3.0.dev1.dist-info/RECORD +322 -0
  241. {pyglet-2.1.13.dist-info → pyglet-3.0.dev1.dist-info}/WHEEL +1 -1
  242. pyglet/gl/__init__.py +0 -208
  243. pyglet/gl/base.py +0 -499
  244. pyglet/gl/cocoa.py +0 -309
  245. pyglet/gl/gl.py +0 -4625
  246. pyglet/gl/gl.pyi +0 -2320
  247. pyglet/gl/gl_compat.pyi +0 -3097
  248. pyglet/gl/gl_info.py +0 -190
  249. pyglet/gl/headless.py +0 -166
  250. pyglet/gl/wgl_info.py +0 -36
  251. pyglet/gl/wglext_nv.py +0 -1096
  252. pyglet/gl/win32.py +0 -268
  253. pyglet/gl/xlib.py +0 -295
  254. pyglet/image/buffer.py +0 -274
  255. pyglet/image/codecs/s3tc.py +0 -354
  256. pyglet/libs/x11/xrandr.py +0 -166
  257. pyglet-2.1.13.dist-info/RECORD +0 -234
  258. /pyglet/{libs/wayland → graphics/api/gl/cocoa}/__init__.py +0 -0
  259. /pyglet/libs/{egl → linux/egl}/egl.py +0 -0
  260. /pyglet/libs/{egl → linux/egl}/lib.py +0 -0
  261. /pyglet/libs/{ioctl.py → linux/ioctl.py} +0 -0
  262. /pyglet/libs/{wayland → linux/wayland}/gbm.py +0 -0
  263. /pyglet/libs/{x11 → linux/x11}/__init__.py +0 -0
  264. /pyglet/libs/{x11 → linux/x11}/cursorfont.py +0 -0
  265. /pyglet/libs/{x11 → linux/x11}/xlib.py +0 -0
  266. /pyglet/libs/{x11 → linux/x11}/xsync.py +0 -0
  267. {pyglet-2.1.13.dist-info/licenses → pyglet-3.0.dev1.dist-info}/LICENSE +0 -0
@@ -17,7 +17,7 @@ from pyglet.text.layout.base import (
17
17
  _LayoutContext,
18
18
  _Line,
19
19
  )
20
- from pyglet.text.layout.scrolling import ScrollableTextDecorationGroup, ScrollableTextLayoutGroup
20
+ from pyglet.text.layout import ScrollableTextLayoutGroup, ScrollableTextDecorationGroup
21
21
 
22
22
  if TYPE_CHECKING:
23
23
  from pyglet.customtypes import AnchorX, AnchorY
@@ -143,9 +143,9 @@ class IncrementalTextLayout(TextLayout, EventDispatcher):
143
143
  area = (self.left, self.bottom, self._width, self._height)
144
144
 
145
145
  for group in self.group_cache.values():
146
- group.scissor_area = area
147
- self.background_decoration_group.scissor_area = area
148
- self.foreground_decoration_group.scissor_area = area
146
+ group.uniforms["scissor_area"] = area
147
+ self.background_decoration_group.uniforms["scissor_area"] = area
148
+ self.foreground_decoration_group.uniforms["scissor_area"] = area
149
149
 
150
150
  def _init_document(self) -> None:
151
151
  assert self._document, "Cannot remove document from IncrementalTextLayout"
@@ -235,7 +235,6 @@ class IncrementalTextLayout(TextLayout, EventDispatcher):
235
235
  self._invalid_flow.is_invalid() or
236
236
  self._invalid_lines.is_invalid())
237
237
 
238
- len_groups = len(self.group_cache)
239
238
  # Special care if there is no text:
240
239
  if not self.glyphs:
241
240
  for line in self.lines:
@@ -261,8 +260,8 @@ class IncrementalTextLayout(TextLayout, EventDispatcher):
261
260
 
262
261
  # Update group cache areas if the count has changed. Usually if it starts with no text.
263
262
  # Group cache is only cleared in a regular TextLayout. May need revisiting if that changes.
264
- if len_groups != len(self.group_cache):
265
- self._update_scissor_area()
263
+ #if len_groups != len(self.group_cache):
264
+ self._update_scissor_area()
266
265
 
267
266
  if trigger_update_event:
268
267
  self.dispatch_event("on_layout_update")
@@ -305,7 +304,7 @@ class IncrementalTextLayout(TextLayout, EventDispatcher):
305
304
  self.offsets[start] = GlyphPosition(0, 0, 0, 0)
306
305
  else:
307
306
  text = self.document.text[start:end]
308
- glyphs, offsets = font.get_glyphs(text)
307
+ glyphs, offsets = font.get_glyphs(text, self._shaping)
309
308
  self.glyphs[start:end] = glyphs
310
309
  self.offsets[start:end] = offsets
311
310
 
@@ -661,7 +660,7 @@ class IncrementalTextLayout(TextLayout, EventDispatcher):
661
660
  return self._rotation
662
661
 
663
662
  @rotation.setter
664
- def rotation(self, angle: float) -> None: # noqa: ARG002
663
+ def rotation(self, angle: float) -> None:
665
664
  msg = "Rotating IncrementalTextLayout's is not supported."
666
665
  raise NotImplementedError(msg)
667
666
 
@@ -939,7 +938,7 @@ class IncrementalTextLayout(TextLayout, EventDispatcher):
939
938
  if x <= self.view_x:
940
939
  self.view_x = x
941
940
 
942
- elif x >= self.view_x + self.width or (x >= self.view_x + self.width) and (self._content_width > self.width):
941
+ elif x >= self.view_x + self.width or ((x >= self.view_x + self.width) and (self._content_width > self.width)):
943
942
  self.view_x = x - self.width
944
943
 
945
944
  elif self.view_x + self.width > self._content_width:
@@ -2,104 +2,16 @@ from __future__ import annotations
2
2
 
3
3
  from typing import TYPE_CHECKING, ClassVar
4
4
 
5
- from pyglet import graphics
6
- from pyglet.gl import (
7
- GL_BLEND,
8
- GL_ONE_MINUS_SRC_ALPHA,
9
- GL_SRC_ALPHA,
10
- GL_TEXTURE0,
11
- glActiveTexture,
12
- glBindTexture,
13
- glBlendFunc,
14
- glDisable,
15
- glEnable,
16
- )
17
- from pyglet.text.layout.base import TextLayout
5
+ from pyglet.text.layout.base import TextLayout, ScrollableTextLayoutGroup, ScrollableTextDecorationGroup
18
6
 
19
7
  if TYPE_CHECKING:
8
+ from pyglet.graphics.draw import Group
20
9
  from pyglet.customtypes import AnchorX, AnchorY
21
10
  from pyglet.graphics import Batch
22
- from pyglet.graphics.shader import ShaderProgram
23
- from pyglet.image import Texture
11
+ from pyglet.graphics import ShaderProgram
24
12
  from pyglet.text.document import AbstractDocument
25
13
 
26
14
 
27
- class ScrollableTextLayoutGroup(graphics.Group):
28
- """Default rendering group for :py:class:`~pyglet.text.layout.ScrollableTextLayout`.
29
-
30
- The group maintains internal state for specifying the viewable
31
- area, and for scrolling. Because the group has internal state
32
- specific to the text layout, the group is never shared.
33
- """
34
- scissor_area: ClassVar[tuple[int, int, int, int]] = 0, 0, 0, 0
35
-
36
- def __init__(self, texture: Texture, program: ShaderProgram, order: int = 1, # noqa: D107
37
- parent: graphics.Group | None = None) -> None:
38
-
39
- super().__init__(order=order, parent=parent)
40
- self.texture = texture
41
- self.program = program
42
-
43
- def set_state(self) -> None:
44
- self.program.use()
45
- self.program["scissor"] = True
46
- self.program["scissor_area"] = self.scissor_area
47
-
48
- glActiveTexture(GL_TEXTURE0)
49
- glBindTexture(self.texture.target, self.texture.id)
50
-
51
- glEnable(GL_BLEND)
52
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
53
-
54
- def unset_state(self) -> None:
55
- glDisable(GL_BLEND)
56
- self.program.stop()
57
-
58
- def __repr__(self) -> str:
59
- return f"{self.__class__.__name__}({self.texture})"
60
-
61
- def __eq__(self, other: object) -> bool:
62
- return self is other
63
-
64
- def __hash__(self) -> int:
65
- return id(self)
66
-
67
-
68
- class ScrollableTextDecorationGroup(graphics.Group):
69
- """Create a text decoration rendering group.
70
-
71
- The group is created internally when a :py:class:`~pyglet.text.Label`
72
- is created; applications usually do not need to explicitly create it.
73
- """
74
-
75
- scissor_area: ClassVar[tuple[int, int, int, int]] = 0, 0, 0, 0
76
-
77
- def __init__(self, program: ShaderProgram, order: int = 0, parent: graphics.Group | None = None) -> None: # noqa: D107
78
- super().__init__(order=order, parent=parent)
79
- self.program = program
80
-
81
- def set_state(self) -> None:
82
- self.program.use()
83
- self.program["scissor"] = True
84
- self.program["scissor_area"] = self.scissor_area
85
-
86
- glEnable(GL_BLEND)
87
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
88
-
89
- def unset_state(self) -> None:
90
- glDisable(GL_BLEND)
91
- self.program.stop()
92
-
93
- def __repr__(self) -> str:
94
- return f"{self.__class__.__name__}(scissor={self.scissor_area})"
95
-
96
- def __eq__(self, other: object) -> bool:
97
- return self is other
98
-
99
- def __hash__(self) -> int:
100
- return id(self)
101
-
102
-
103
15
  class ScrollableTextLayout(TextLayout):
104
16
  """Display text in a scrollable viewport.
105
17
 
@@ -127,7 +39,7 @@ class ScrollableTextLayout(TextLayout):
127
39
  x: float = 0, y: float = 0, z: float = 0,
128
40
  width: int = None, height: int = None,
129
41
  anchor_x: AnchorX = 'left', anchor_y: AnchorY = 'bottom', rotation: float = 0, multiline: bool = False,
130
- dpi: float | None = None, batch: Batch | None = None, group: graphics.Group | None = None,
42
+ dpi: float | None = None, batch: Batch | None = None, group: Group | None = None,
131
43
  program: ShaderProgram | None = None, wrap_lines: bool = True) -> None:
132
44
 
133
45
  if width is None or height is None:
@@ -144,10 +56,10 @@ class ScrollableTextLayout(TextLayout):
144
56
  area = (self.left, self.bottom, self._width, self._height)
145
57
 
146
58
  for group in self.group_cache.values():
147
- group.scissor_area = area
59
+ group.uniforms["scissor_area"] = area
148
60
 
149
- self.background_decoration_group.scissor_area = area
150
- self.foreground_decoration_group.scissor_area = area
61
+ self.background_decoration_group.uniforms["scissor_area"] = area
62
+ self.foreground_decoration_group.uniforms["scissor_area"] = area
151
63
 
152
64
  def _update(self) -> None:
153
65
  super()._update()