mirror of
https://github.com/Textualize/textual.git
synced 2025-10-17 02:38:12 +03:00
added start and end index to get_render_lines
This commit is contained in:
@@ -325,14 +325,14 @@ class Compositor:
|
|||||||
return Style.null()
|
return Style.null()
|
||||||
if widget not in self.regions:
|
if widget not in self.regions:
|
||||||
return Style.null()
|
return Style.null()
|
||||||
lines = widget.get_render_lines()
|
|
||||||
x -= region.x
|
x -= region.x
|
||||||
y -= region.y
|
y -= region.y
|
||||||
if y > len(lines):
|
lines = widget.get_render_lines(y, y + 1)
|
||||||
|
if not lines:
|
||||||
return Style.null()
|
return Style.null()
|
||||||
line = lines[y]
|
|
||||||
end = 0
|
end = 0
|
||||||
for segment in line:
|
for segment in lines[0]:
|
||||||
end += segment.cell_length
|
end += segment.cell_length
|
||||||
if x < end:
|
if x < end:
|
||||||
return segment.style or Style.null()
|
return segment.style or Style.null()
|
||||||
@@ -422,12 +422,11 @@ class Compositor:
|
|||||||
if region in clip:
|
if region in clip:
|
||||||
yield region, clip, widget.get_render_lines()
|
yield region, clip, widget.get_render_lines()
|
||||||
elif overlaps(clip, region):
|
elif overlaps(clip, region):
|
||||||
lines = widget.get_render_lines()
|
|
||||||
new_x, new_y, new_width, new_height = intersection(region, clip)
|
new_x, new_y, new_width, new_height = intersection(region, clip)
|
||||||
delta_x = new_x - region.x
|
delta_x = new_x - region.x
|
||||||
delta_y = new_y - region.y
|
delta_y = new_y - region.y
|
||||||
splits = [delta_x, delta_x + new_width]
|
splits = [delta_x, delta_x + new_width]
|
||||||
lines = lines[delta_y : delta_y + new_height]
|
lines = widget.get_render_lines(delta_y, delta_y + new_height)
|
||||||
lines = [list(divide(line, splits))[1] for line in lines]
|
lines = [list(divide(line, splits))[1] for line in lines]
|
||||||
yield region, clip, lines
|
yield region, clip, lines
|
||||||
|
|
||||||
|
|||||||
@@ -507,16 +507,25 @@ class Widget(DOMNode):
|
|||||||
width, height = self.size
|
width, height = self.size
|
||||||
renderable = self.render_styled()
|
renderable = self.render_styled()
|
||||||
options = self.console.options.update_dimensions(width, height)
|
options = self.console.options.update_dimensions(width, height)
|
||||||
|
|
||||||
lines = self.console.render_lines(renderable, options)
|
lines = self.console.render_lines(renderable, options)
|
||||||
self._render_cache = RenderCache(self.size, lines)
|
self._render_cache = RenderCache(self.size, lines)
|
||||||
self._dirty_regions.clear()
|
self._dirty_regions.clear()
|
||||||
|
|
||||||
def get_render_lines(self) -> Lines:
|
def get_render_lines(
|
||||||
"""Get segment lines to render the widget."""
|
self, start: int | None = None, end: int | None = None
|
||||||
|
) -> Lines:
|
||||||
|
"""Get segment lines to render the widget.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
start (int | None, optional): line start index, or None for first line. Defaults to None.
|
||||||
|
end (int | None, optional): line end index, or None for last line. Defaults to None.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Lines: A list of lists of segments.
|
||||||
|
"""
|
||||||
if self._dirty_regions:
|
if self._dirty_regions:
|
||||||
self._render_lines()
|
self._render_lines()
|
||||||
lines = self._render_cache.lines
|
lines = self._render_cache.lines[start:end]
|
||||||
return lines
|
return lines
|
||||||
|
|
||||||
def check_layout(self) -> bool:
|
def check_layout(self) -> bool:
|
||||||
|
|||||||
Reference in New Issue
Block a user