Skip to content

Commit 25b773f

Browse files
committed
moved out func from chat to resman
1 parent f7b55c4 commit 25b773f

File tree

2 files changed

+36
-34
lines changed

2 files changed

+36
-34
lines changed

src/renderer/layers/chat.py

+4-33
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
from typing import Optional
2-
from PIL import Image, ImageDraw, ImageFont
2+
from PIL import Image, ImageDraw
33
from renderer.base import LayerBase
44
from renderer.const import COLORS_NORMAL
55
from renderer.data import Message, ReplayData
66
from renderer.render import Renderer
77
from functools import lru_cache
8-
from langdetect import detect
9-
from hanzidentifier import has_chinese
108

119
class LayerChatBase(LayerBase):
1210
"""The class for handling in-game chat messages.
@@ -64,7 +62,9 @@ def build(self, message: Message) -> Image.Image:
6462
# if image := self._lines.get(m_hash, None):
6563
# return image
6664

67-
self._font = self._pick_font_with_message(message)
65+
self._font = self._renderer.resman.load_font_with_message(
66+
message
67+
)
6868
base = Image.new("RGBA", (560, 17))
6969
draw = ImageDraw.Draw(base)
7070
player = self._players[message.player_id]
@@ -142,32 +142,3 @@ def unpack_color(packed_value: int) -> tuple:
142142
packed_value = packed_value >> bit
143143
values.append(value)
144144
return tuple(reversed(values))
145-
146-
def _pick_font_with_message(self, message: Message) -> ImageFont.FreeTypeFont:
147-
"""Pick the font based on the message language.
148-
149-
Args:
150-
message (Message): The message.
151-
152-
Returns:
153-
ImageFont.FreeTypeFont: The font.
154-
"""
155-
chat_message = message.message
156-
language = detect(message.message) # this can detect Chinese as Korean
157-
if has_chinese(chat_message):
158-
return self._renderer.resman.load_font(
159-
filename="warhelios_bold_zh.ttf", size=12
160-
)
161-
162-
if language == "ja":
163-
return self._renderer.resman.load_font(
164-
filename="warhelios_bold_jp.ttf", size=12
165-
)
166-
elif language == "ko":
167-
return self._renderer.resman.load_font(
168-
filename="warhelios_bold_ko.ttf", size=12
169-
)
170-
else: # fallback to the default font
171-
return self._renderer.resman.load_font(
172-
filename="warhelios_bold.ttf", size=12
173-
)

src/renderer/resman.py

+32-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55
from PIL import Image
66
from typing import Optional
77
from PIL import ImageFont
8-
8+
from langdetect import detect
9+
from hanzidentifier import has_chinese
10+
from renderer.data import Message
911

1012
class ResourceManager:
1113
"""A resource manager."""
@@ -69,6 +71,35 @@ def load_font(
6971
data = ImageFont.truetype(fr, size=size)
7072
self._cache[key] = data
7173
return data
74+
75+
def load_font_with_message(self, message: Message) -> ImageFont.FreeTypeFont:
76+
"""Pick the font based on the message language.
77+
78+
Args:
79+
message (Message): The message.
80+
81+
Returns:
82+
ImageFont.FreeTypeFont: The font.
83+
"""
84+
chat_message = message.message
85+
language = detect(message.message) # this can detect Chinese as Korean
86+
if has_chinese(chat_message):
87+
return self.load_font(
88+
filename="warhelios_bold_zh.ttf", size=12
89+
)
90+
91+
if language == "ja":
92+
return self.load_font(
93+
filename="warhelios_bold_jp.ttf", size=12
94+
)
95+
elif language == "ko":
96+
return self.load_font(
97+
filename="warhelios_bold_ko.ttf", size=12
98+
)
99+
else: # fallback to the default font
100+
return self.load_font(
101+
filename="warhelios_bold.ttf", size=12
102+
)
72103

73104
def load_image(
74105
self,

0 commit comments

Comments
 (0)