Untitled
unknown
plain_text
10 months ago
4.4 kB
5
Indexable
def draw(self):
"""Modified draw method to incorporate pulse and press animations"""
self.delete('all')
# Calculate combined scale from both press and pulse animations
combined_scale = self.press_scale * self.pulse_scale
scaled_size = self.size * combined_scale
# Get colors from bin configuration
circle_color = self.bin_config['color_dark'] if self.dark_mode else self.bin_config['color']
ring_color = self.get_ring_color()
progress_color = self.get_progress_color()
bg_color = '#1c1c1e' if self.dark_mode else '#f5f5f7'
# Configure canvas background
self.configure(bg=bg_color)
# Create new image for drawing
self.im = Image.new('RGBA', (1000, 1000), bg_color)
draw = ImageDraw.Draw(self.im)
# Calculate dimensions for ring
outer_padding = 40
ring_width = 40
circle_padding = 15
# For light mode, draw a white circle behind everything
if not self.dark_mode:
draw.ellipse(
(outer_padding-ring_width, outer_padding-ring_width,
1000-outer_padding+ring_width, 1000-outer_padding+ring_width),
fill='white'
)
# Draw ring (trough)
draw.arc(
(outer_padding-ring_width, outer_padding-ring_width,
1000-outer_padding+ring_width, 1000-outer_padding+ring_width),
-90, 270, ring_color, ring_width
)
# Draw progress arc
if self.fill_level > 0:
angle = int(self.fill_level * 360 / 100)
draw.arc(
(outer_padding-ring_width, outer_padding-ring_width,
1000-outer_padding+ring_width, 1000-outer_padding+ring_width),
-90, -90 + angle, progress_color, ring_width
)
# Draw base circle with outline
if not self.dark_mode:
# White outline
draw.ellipse(
(outer_padding + circle_padding - 1,
outer_padding + circle_padding - 1,
1000-outer_padding - circle_padding + 1,
1000-outer_padding - circle_padding + 1),
fill='white'
)
# Draw colored circle
draw.ellipse(
(outer_padding + circle_padding,
outer_padding + circle_padding,
1000-outer_padding - circle_padding,
1000-outer_padding - circle_padding),
fill=circle_color
)
# Resize image with combined scaling
resized = self.im.resize(
(int(scaled_size), int(scaled_size)),
Image.Resampling.LANCZOS
)
self.arc = ImageTk.PhotoImage(resized)
# Calculate centered position accounting for scaling
x_pos = (self.size - scaled_size) / 2
y_pos = (self.size - scaled_size) / 2
# Display the image centered
self.create_image(
self.size/2,
self.size/2,
image=self.arc,
anchor='center'
)
# Get text color based on circle color
def get_text_color(background_color):
color = background_color.lstrip('#')
rgb = tuple(int(color[i:i+2], 16) for i in (0, 2, 4))
luminance = (0.299 * rgb[0] + 0.587 * rgb[1] + 0.114 * rgb[2]) / 255
return '#000000' if luminance > 0.5 else '#ffffff'
text_color = get_text_color(circle_color)
# Get translated name
root = self.winfo_toplevel()
current_language = getattr(root, 'LANGUAGE', 'EN')
displayed_name = self._bin_config.get_bin_name(
self.bin_config,
getattr(self, 'language', current_language)
)
# Draw text with combined scaling
font_size = int(18 * combined_scale)
self.create_text(
self.size/2,
self.size/2,
text=displayed_name,
font=('Dongle', font_size, 'normal'),
fill=text_color,
justify='center',
width=self.size-20
)Editor is loading...
Leave a Comment