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.
- pyglet/__init__.py +67 -61
- pyglet/__init__.pyi +15 -8
- pyglet/app/__init__.py +22 -13
- pyglet/app/async_app.py +212 -0
- pyglet/app/base.py +2 -1
- pyglet/app/{xlib.py → linux.py} +3 -3
- pyglet/config/__init__.py +101 -0
- pyglet/config/gl/__init__.py +30 -0
- pyglet/config/gl/egl.py +120 -0
- pyglet/config/gl/macos.py +262 -0
- pyglet/config/gl/windows.py +267 -0
- pyglet/config/gl/x11.py +142 -0
- pyglet/customtypes.py +43 -2
- pyglet/display/__init__.py +8 -6
- pyglet/display/base.py +3 -63
- pyglet/display/cocoa.py +12 -17
- pyglet/display/emscripten.py +39 -0
- pyglet/display/headless.py +23 -30
- pyglet/display/wayland.py +157 -0
- pyglet/display/win32.py +5 -21
- pyglet/display/xlib.py +19 -27
- pyglet/display/xlib_vidmoderestore.py +2 -2
- pyglet/enums.py +183 -0
- pyglet/event.py +0 -1
- pyglet/experimental/geoshader_sprite.py +15 -13
- pyglet/experimental/hidraw.py +6 -15
- pyglet/experimental/multitexture_sprite.py +31 -19
- pyglet/experimental/particles.py +13 -35
- pyglet/font/__init__.py +251 -85
- pyglet/font/base.py +116 -61
- pyglet/font/dwrite/__init__.py +349 -204
- pyglet/font/dwrite/dwrite_lib.py +27 -5
- pyglet/font/fontconfig.py +14 -6
- pyglet/font/freetype.py +138 -87
- pyglet/font/freetype_lib.py +19 -0
- pyglet/font/group.py +179 -0
- pyglet/font/harfbuzz/__init__.py +3 -3
- pyglet/font/pyodide_js.py +310 -0
- pyglet/font/quartz.py +319 -126
- pyglet/font/ttf.py +45 -3
- pyglet/font/user.py +14 -19
- pyglet/font/win32.py +45 -21
- pyglet/graphics/__init__.py +8 -787
- pyglet/graphics/allocation.py +115 -1
- pyglet/graphics/api/__init__.py +77 -0
- pyglet/graphics/api/base.py +299 -0
- pyglet/graphics/api/gl/__init__.py +58 -0
- pyglet/graphics/api/gl/base.py +24 -0
- pyglet/graphics/{vertexbuffer.py → api/gl/buffer.py} +104 -159
- pyglet/graphics/api/gl/cocoa/context.py +76 -0
- pyglet/graphics/api/gl/context.py +391 -0
- pyglet/graphics/api/gl/default_shaders.py +0 -0
- pyglet/graphics/api/gl/draw.py +627 -0
- pyglet/graphics/api/gl/egl/__init__.py +0 -0
- pyglet/graphics/api/gl/egl/context.py +92 -0
- pyglet/graphics/api/gl/enums.py +76 -0
- pyglet/graphics/api/gl/framebuffer.py +315 -0
- pyglet/graphics/api/gl/gl.py +5463 -0
- pyglet/graphics/api/gl/gl_info.py +188 -0
- pyglet/graphics/api/gl/global_opengl.py +226 -0
- pyglet/{gl → graphics/api/gl}/lib.py +34 -18
- pyglet/graphics/api/gl/shader.py +1476 -0
- pyglet/graphics/api/gl/shapes.py +55 -0
- pyglet/graphics/api/gl/sprite.py +102 -0
- pyglet/graphics/api/gl/state.py +219 -0
- pyglet/graphics/api/gl/text.py +190 -0
- pyglet/graphics/api/gl/texture.py +1526 -0
- pyglet/graphics/{vertexarray.py → api/gl/vertexarray.py} +11 -13
- pyglet/graphics/api/gl/vertexdomain.py +751 -0
- pyglet/graphics/api/gl/win32/__init__.py +0 -0
- pyglet/graphics/api/gl/win32/context.py +108 -0
- pyglet/graphics/api/gl/win32/wgl_info.py +24 -0
- pyglet/graphics/api/gl/xlib/__init__.py +0 -0
- pyglet/graphics/api/gl/xlib/context.py +174 -0
- pyglet/{gl → graphics/api/gl/xlib}/glx_info.py +26 -31
- pyglet/graphics/api/gl1/__init__.py +0 -0
- pyglet/{gl → graphics/api/gl1}/gl_compat.py +3 -2
- pyglet/graphics/api/gl2/__init__.py +0 -0
- pyglet/graphics/api/gl2/buffer.py +320 -0
- pyglet/graphics/api/gl2/draw.py +600 -0
- pyglet/graphics/api/gl2/global_opengl.py +122 -0
- pyglet/graphics/api/gl2/shader.py +200 -0
- pyglet/graphics/api/gl2/shapes.py +51 -0
- pyglet/graphics/api/gl2/sprite.py +79 -0
- pyglet/graphics/api/gl2/text.py +175 -0
- pyglet/graphics/api/gl2/vertexdomain.py +364 -0
- pyglet/graphics/api/webgl/__init__.py +233 -0
- pyglet/graphics/api/webgl/buffer.py +302 -0
- pyglet/graphics/api/webgl/context.py +234 -0
- pyglet/graphics/api/webgl/draw.py +590 -0
- pyglet/graphics/api/webgl/enums.py +76 -0
- pyglet/graphics/api/webgl/framebuffer.py +360 -0
- pyglet/graphics/api/webgl/gl.py +1537 -0
- pyglet/graphics/api/webgl/gl_info.py +130 -0
- pyglet/graphics/api/webgl/shader.py +1346 -0
- pyglet/graphics/api/webgl/shapes.py +92 -0
- pyglet/graphics/api/webgl/sprite.py +102 -0
- pyglet/graphics/api/webgl/state.py +227 -0
- pyglet/graphics/api/webgl/text.py +187 -0
- pyglet/graphics/api/webgl/texture.py +1227 -0
- pyglet/graphics/api/webgl/vertexarray.py +54 -0
- pyglet/graphics/api/webgl/vertexdomain.py +616 -0
- pyglet/graphics/api/webgl/webgl_js.pyi +307 -0
- pyglet/{image → graphics}/atlas.py +33 -32
- pyglet/graphics/base.py +10 -0
- pyglet/graphics/buffer.py +245 -0
- pyglet/graphics/draw.py +578 -0
- pyglet/graphics/framebuffer.py +26 -0
- pyglet/graphics/instance.py +178 -69
- pyglet/graphics/shader.py +267 -1553
- pyglet/graphics/state.py +83 -0
- pyglet/graphics/texture.py +703 -0
- pyglet/graphics/vertexdomain.py +695 -538
- pyglet/gui/ninepatch.py +10 -10
- pyglet/gui/widgets.py +120 -10
- pyglet/image/__init__.py +20 -1973
- pyglet/image/animation.py +12 -12
- pyglet/image/base.py +730 -0
- pyglet/image/codecs/__init__.py +9 -0
- pyglet/image/codecs/bmp.py +53 -30
- pyglet/image/codecs/dds.py +53 -31
- pyglet/image/codecs/gdiplus.py +38 -14
- pyglet/image/codecs/gdkpixbuf2.py +0 -2
- pyglet/image/codecs/js_image.py +99 -0
- pyglet/image/codecs/ktx2.py +161 -0
- pyglet/image/codecs/pil.py +1 -1
- pyglet/image/codecs/png.py +1 -1
- pyglet/image/codecs/wic.py +11 -2
- pyglet/info.py +26 -24
- pyglet/input/__init__.py +8 -0
- pyglet/input/base.py +163 -105
- pyglet/input/controller.py +13 -19
- pyglet/input/controller_db.py +39 -24
- pyglet/input/emscripten/__init__.py +18 -0
- pyglet/input/emscripten/gamepad_js.py +397 -0
- pyglet/input/linux/__init__.py +11 -5
- pyglet/input/linux/evdev.py +10 -11
- pyglet/input/linux/x11_xinput.py +2 -2
- pyglet/input/linux/x11_xinput_tablet.py +1 -1
- pyglet/input/macos/__init__.py +7 -2
- pyglet/input/macos/darwin_gc.py +559 -0
- pyglet/input/win32/__init__.py +1 -1
- pyglet/input/win32/directinput.py +34 -29
- pyglet/input/win32/xinput.py +11 -61
- pyglet/lib.py +3 -3
- pyglet/libs/__init__.py +1 -1
- pyglet/{gl → libs/darwin}/agl.py +1 -1
- pyglet/libs/darwin/cocoapy/__init__.py +2 -2
- pyglet/libs/darwin/cocoapy/cocoahelpers.py +181 -0
- pyglet/libs/darwin/cocoapy/cocoalibs.py +31 -0
- pyglet/libs/darwin/cocoapy/cocoatypes.py +27 -0
- pyglet/libs/darwin/cocoapy/runtime.py +81 -45
- pyglet/libs/darwin/coreaudio.py +4 -4
- pyglet/{gl → libs/darwin}/lib_agl.py +9 -8
- pyglet/libs/darwin/quartzkey.py +1 -3
- pyglet/libs/egl/__init__.py +2 -0
- pyglet/libs/egl/egl_lib.py +576 -0
- pyglet/libs/egl/eglext.py +51 -5
- pyglet/libs/linux/__init__.py +0 -0
- pyglet/libs/linux/egl/__init__.py +0 -0
- pyglet/libs/linux/egl/eglext.py +22 -0
- pyglet/libs/linux/glx/__init__.py +0 -0
- pyglet/{gl → libs/linux/glx}/glx.py +13 -14
- pyglet/{gl → libs/linux/glx}/glxext_arb.py +408 -192
- pyglet/{gl → libs/linux/glx}/glxext_mesa.py +1 -1
- pyglet/{gl → libs/linux/glx}/glxext_nv.py +345 -164
- pyglet/{gl → libs/linux/glx}/lib_glx.py +3 -2
- pyglet/libs/linux/wayland/__init__.py +0 -0
- pyglet/libs/linux/wayland/client.py +1068 -0
- pyglet/libs/linux/wayland/lib_wayland.py +207 -0
- pyglet/libs/linux/wayland/wayland_egl.py +38 -0
- pyglet/libs/{wayland → linux/wayland}/xkbcommon.py +26 -0
- pyglet/libs/{x11 → linux/x11}/xf86vmode.py +4 -4
- pyglet/libs/{x11 → linux/x11}/xinerama.py +2 -2
- pyglet/libs/{x11 → linux/x11}/xinput.py +10 -10
- pyglet/libs/linux/x11/xrandr.py +0 -0
- pyglet/libs/{x11 → linux/x11}/xrender.py +1 -1
- pyglet/libs/shared/__init__.py +0 -0
- pyglet/libs/shared/spirv/__init__.py +0 -0
- pyglet/libs/shared/spirv/lib_shaderc.py +85 -0
- pyglet/libs/shared/spirv/lib_spirv_cross.py +126 -0
- pyglet/libs/win32/__init__.py +28 -8
- pyglet/libs/win32/constants.py +59 -48
- pyglet/libs/win32/context_managers.py +20 -3
- pyglet/libs/win32/dinput.py +105 -88
- pyglet/{gl → libs/win32}/lib_wgl.py +52 -26
- pyglet/libs/win32/types.py +58 -23
- pyglet/{gl → libs/win32}/wgl.py +32 -25
- pyglet/{gl → libs/win32}/wglext_arb.py +364 -2
- pyglet/media/__init__.py +9 -10
- pyglet/media/codecs/__init__.py +12 -1
- pyglet/media/codecs/base.py +99 -96
- pyglet/media/codecs/ffmpeg.py +2 -2
- pyglet/media/codecs/ffmpeg_lib/libavformat.py +3 -8
- pyglet/media/codecs/webaudio_pyodide.py +111 -0
- pyglet/media/drivers/__init__.py +9 -4
- pyglet/media/drivers/base.py +4 -4
- pyglet/media/drivers/openal/__init__.py +1 -1
- pyglet/media/drivers/openal/adaptation.py +3 -3
- pyglet/media/drivers/pulse/__init__.py +1 -1
- pyglet/media/drivers/pulse/adaptation.py +3 -3
- pyglet/media/drivers/pyodide_js/__init__.py +8 -0
- pyglet/media/drivers/pyodide_js/adaptation.py +288 -0
- pyglet/media/drivers/xaudio2/adaptation.py +3 -3
- pyglet/media/player.py +276 -193
- pyglet/media/player_worker_thread.py +1 -1
- pyglet/model/__init__.py +39 -29
- pyglet/model/codecs/base.py +4 -4
- pyglet/model/codecs/gltf.py +3 -3
- pyglet/model/codecs/obj.py +71 -43
- pyglet/resource.py +129 -78
- pyglet/shapes.py +154 -194
- pyglet/sprite.py +47 -164
- pyglet/text/__init__.py +44 -54
- pyglet/text/caret.py +12 -7
- pyglet/text/document.py +19 -17
- pyglet/text/formats/html.py +2 -2
- pyglet/text/formats/structured.py +10 -40
- pyglet/text/layout/__init__.py +20 -13
- pyglet/text/layout/base.py +176 -287
- pyglet/text/layout/incremental.py +9 -10
- pyglet/text/layout/scrolling.py +7 -95
- pyglet/window/__init__.py +183 -172
- pyglet/window/cocoa/__init__.py +62 -51
- pyglet/window/cocoa/pyglet_delegate.py +2 -25
- pyglet/window/cocoa/pyglet_view.py +9 -8
- pyglet/window/dialog/__init__.py +184 -0
- pyglet/window/dialog/base.py +99 -0
- pyglet/window/dialog/darwin.py +121 -0
- pyglet/window/dialog/linux.py +72 -0
- pyglet/window/dialog/windows.py +194 -0
- pyglet/window/emscripten/__init__.py +779 -0
- pyglet/window/headless/__init__.py +44 -28
- pyglet/window/key.py +2 -0
- pyglet/window/mouse.py +2 -2
- pyglet/window/wayland/__init__.py +377 -0
- pyglet/window/win32/__init__.py +101 -46
- pyglet/window/xlib/__init__.py +104 -66
- {pyglet-2.1.13.dist-info → pyglet-3.0.dev1.dist-info}/METADATA +2 -3
- pyglet-3.0.dev1.dist-info/RECORD +322 -0
- {pyglet-2.1.13.dist-info → pyglet-3.0.dev1.dist-info}/WHEEL +1 -1
- pyglet/gl/__init__.py +0 -208
- pyglet/gl/base.py +0 -499
- pyglet/gl/cocoa.py +0 -309
- pyglet/gl/gl.py +0 -4625
- pyglet/gl/gl.pyi +0 -2320
- pyglet/gl/gl_compat.pyi +0 -3097
- pyglet/gl/gl_info.py +0 -190
- pyglet/gl/headless.py +0 -166
- pyglet/gl/wgl_info.py +0 -36
- pyglet/gl/wglext_nv.py +0 -1096
- pyglet/gl/win32.py +0 -268
- pyglet/gl/xlib.py +0 -295
- pyglet/image/buffer.py +0 -274
- pyglet/image/codecs/s3tc.py +0 -354
- pyglet/libs/x11/xrandr.py +0 -166
- pyglet-2.1.13.dist-info/RECORD +0 -234
- /pyglet/{libs/wayland → graphics/api/gl/cocoa}/__init__.py +0 -0
- /pyglet/libs/{egl → linux/egl}/egl.py +0 -0
- /pyglet/libs/{egl → linux/egl}/lib.py +0 -0
- /pyglet/libs/{ioctl.py → linux/ioctl.py} +0 -0
- /pyglet/libs/{wayland → linux/wayland}/gbm.py +0 -0
- /pyglet/libs/{x11 → linux/x11}/__init__.py +0 -0
- /pyglet/libs/{x11 → linux/x11}/cursorfont.py +0 -0
- /pyglet/libs/{x11 → linux/x11}/xlib.py +0 -0
- /pyglet/libs/{x11 → linux/x11}/xsync.py +0 -0
- {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
|
|
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
|
-
|
|
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:
|
|
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:
|
pyglet/text/layout/scrolling.py
CHANGED
|
@@ -2,104 +2,16 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
from typing import TYPE_CHECKING, ClassVar
|
|
4
4
|
|
|
5
|
-
from pyglet import
|
|
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
|
|
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:
|
|
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()
|