mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
Wrap lines for NotesPage
This commit is contained in:
parent
30801dff9f
commit
8608b73009
@ -65,7 +65,8 @@ class KneeboardPageWriter:
|
|||||||
else:
|
else:
|
||||||
self.foreground_fill = (15, 15, 15)
|
self.foreground_fill = (15, 15, 15)
|
||||||
self.background_fill = (255, 252, 252)
|
self.background_fill = (255, 252, 252)
|
||||||
self.image = Image.new("RGB", (768, 1024), self.background_fill)
|
self.image_size = (768, 1024)
|
||||||
|
self.image = Image.new("RGB", self.image_size, self.background_fill)
|
||||||
# These font sizes create a relatively full page for current sorties. If
|
# These font sizes create a relatively full page for current sorties. If
|
||||||
# we start generating more complicated flight plans, or start including
|
# we start generating more complicated flight plans, or start including
|
||||||
# more information in the comm ladder (the latter of which we should
|
# more information in the comm ladder (the latter of which we should
|
||||||
@ -84,6 +85,7 @@ class KneeboardPageWriter:
|
|||||||
"resources/fonts/Inconsolata.otf", 20, layout_engine=ImageFont.LAYOUT_BASIC
|
"resources/fonts/Inconsolata.otf", 20, layout_engine=ImageFont.LAYOUT_BASIC
|
||||||
)
|
)
|
||||||
self.draw = ImageDraw.Draw(self.image)
|
self.draw = ImageDraw.Draw(self.image)
|
||||||
|
self.page_margin = page_margin
|
||||||
self.x = page_margin
|
self.x = page_margin
|
||||||
self.y = page_margin
|
self.y = page_margin
|
||||||
self.line_spacing = line_spacing
|
self.line_spacing = line_spacing
|
||||||
@ -97,12 +99,21 @@ class KneeboardPageWriter:
|
|||||||
text: str,
|
text: str,
|
||||||
font: Optional[ImageFont.FreeTypeFont] = None,
|
font: Optional[ImageFont.FreeTypeFont] = None,
|
||||||
fill: Optional[Tuple[int, int, int]] = None,
|
fill: Optional[Tuple[int, int, int]] = None,
|
||||||
|
wrap: bool = False,
|
||||||
) -> None:
|
) -> None:
|
||||||
if font is None:
|
if font is None:
|
||||||
font = self.content_font
|
font = self.content_font
|
||||||
if fill is None:
|
if fill is None:
|
||||||
fill = self.foreground_fill
|
fill = self.foreground_fill
|
||||||
|
|
||||||
|
if wrap:
|
||||||
|
text = "\n".join(
|
||||||
|
self.wrap_line_with_font(
|
||||||
|
line, self.image_size[0] - self.page_margin - self.x, font
|
||||||
|
)
|
||||||
|
for line in text.splitlines()
|
||||||
|
)
|
||||||
|
|
||||||
self.draw.text(self.position, text, font=font, fill=fill)
|
self.draw.text(self.position, text, font=font, fill=fill)
|
||||||
width, height = self.draw.textsize(text, font=font)
|
width, height = self.draw.textsize(text, font=font)
|
||||||
self.y += height + self.line_spacing
|
self.y += height + self.line_spacing
|
||||||
@ -146,6 +157,24 @@ class KneeboardPageWriter:
|
|||||||
output = combo
|
output = combo
|
||||||
return "".join(segments + [output]).strip()
|
return "".join(segments + [output]).strip()
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def wrap_line_with_font(
|
||||||
|
inputstr: str, max_width: int, font: ImageFont.FreeTypeFont
|
||||||
|
) -> str:
|
||||||
|
if font.getsize(inputstr)[0] <= max_width:
|
||||||
|
return inputstr
|
||||||
|
tokens = inputstr.split(" ")
|
||||||
|
output = ""
|
||||||
|
segments = []
|
||||||
|
for token in tokens:
|
||||||
|
combo = output + " " + token
|
||||||
|
if font.getsize(combo)[0] > max_width:
|
||||||
|
segments.append(output + "\n")
|
||||||
|
output = token
|
||||||
|
else:
|
||||||
|
output = combo
|
||||||
|
return "".join(segments + [output]).strip()
|
||||||
|
|
||||||
|
|
||||||
class KneeboardPage:
|
class KneeboardPage:
|
||||||
"""Base class for all kneeboard pages."""
|
"""Base class for all kneeboard pages."""
|
||||||
@ -631,7 +660,7 @@ class NotesPage(KneeboardPage):
|
|||||||
def write(self, path: Path) -> None:
|
def write(self, path: Path) -> None:
|
||||||
writer = KneeboardPageWriter(dark_theme=self.dark_kneeboard)
|
writer = KneeboardPageWriter(dark_theme=self.dark_kneeboard)
|
||||||
writer.title(f"Notes")
|
writer.title(f"Notes")
|
||||||
writer.text(self.notes)
|
writer.text(self.notes, wrap=True)
|
||||||
writer.write(path)
|
writer.write(path)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user