fill3: Let portal contents be center aligned
This commit is contained in:
parent
0abca96868
commit
e5c48a6128
2 changed files with 29 additions and 6 deletions
|
|
@ -4,6 +4,7 @@
|
|||
|
||||
import asyncio
|
||||
import contextlib
|
||||
import enum
|
||||
import itertools
|
||||
import os
|
||||
import re
|
||||
|
|
@ -192,16 +193,24 @@ class ScrollBar:
|
|||
return [bar] if self._is_horizontal else [char for char in bar]
|
||||
|
||||
|
||||
class Alignment(enum.Enum):
|
||||
left = enum.auto()
|
||||
right = enum.auto()
|
||||
top = enum.auto()
|
||||
bottom = enum.auto()
|
||||
center = enum.auto()
|
||||
|
||||
|
||||
class Portal:
|
||||
|
||||
def __init__(self, widget, position=(0, 0), background_char=" ",
|
||||
is_scroll_limited=False, is_left_aligned=True, is_top_aligned=True):
|
||||
is_scroll_limited=False, x_alignment=Alignment.left, y_alignment=Alignment.top):
|
||||
self.widget = widget
|
||||
self.position = position
|
||||
self.background_char = background_char
|
||||
self.is_scroll_limited = is_scroll_limited
|
||||
self.is_left_aligned = is_left_aligned
|
||||
self.is_top_aligned = is_top_aligned
|
||||
self.x_alignment = x_alignment
|
||||
self.y_alignment = y_alignment
|
||||
self.last_dimensions = 0, 0
|
||||
|
||||
def _scroll_half_pages(self, dx, dy):
|
||||
|
|
@ -226,13 +235,27 @@ class Portal:
|
|||
widget_width, widget_height = appearance_dimensions
|
||||
x, y = self.position
|
||||
if widget_width <= portal_width:
|
||||
x = 0 if self.is_left_aligned else (widget_width - portal_width)
|
||||
if self.x_alignment == Alignment.left:
|
||||
x = 0
|
||||
elif self.x_alignment == Alignment.center:
|
||||
x = (widget_width - portal_width) // 2
|
||||
elif self.x_alignment == Alignment.right:
|
||||
x = widget_width - portal_width
|
||||
else:
|
||||
raise NotImplementedError
|
||||
elif x < 0:
|
||||
x = 0
|
||||
elif x > (widget_width - portal_width):
|
||||
x = widget_width - portal_width
|
||||
if widget_height <= portal_height:
|
||||
y = 0 if self.is_top_aligned else (widget_height - portal_height)
|
||||
if self.y_alignment == Alignment.top:
|
||||
y = 0
|
||||
elif self.y_alignment == Alignment.center:
|
||||
y = (widget_height - portal_height) // 2
|
||||
elif self.y_alignment == Alignment.bottom:
|
||||
y = widget_height - portal_height
|
||||
else:
|
||||
raise NotImplementedError
|
||||
elif y < 0:
|
||||
y = 0
|
||||
elif y > (widget_height - portal_height):
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ class WidgetTests(unittest.TestCase):
|
|||
portal.position = (1, 0)
|
||||
portal.limit_scroll((6, 1), (1, 1))
|
||||
self.assertEqual(portal.position, (0, 0))
|
||||
portal.is_left_aligned = False
|
||||
portal.x_alignment = fill3.Alignment.right
|
||||
portal.limit_scroll((6, 1), (1, 1))
|
||||
self.assertEqual(portal.position, (-5, 0))
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue