From d365fc43e6c5d251fe95510c83b982a075bcd194 Mon Sep 17 00:00:00 2001 From: Andrew Ward Date: Fri, 21 Mar 2025 10:14:23 +0000 Subject: [PATCH] remove clam yellowy bg colour --- utils/__pycache__/text_to_mic.cpython-312.pyc | Bin 68465 -> 70672 bytes utils/text_to_mic.py | 86 ++++++++++++++---- 2 files changed, 67 insertions(+), 19 deletions(-) diff --git a/utils/__pycache__/text_to_mic.cpython-312.pyc b/utils/__pycache__/text_to_mic.cpython-312.pyc index 162b6c7a1bf92a38c9f7d876f6b760a3631815cb..9d333b17899cbbbc1b6d2d55c478416ae13f7e06 100644 GIT binary patch delta 12821 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 SiFu#Ut=_Nxy8_ERvi^S~6^-@) delta 11422 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", lambda e: self.presets_canvas.configure(scrollregion=self.presets_canvas.bbox("all"))) # Populate tabs and presets - self.populate_tabs() + self.populate_tabs() # Refresh tabs to show selection self.refresh_presets_display() self.toggle_presets() self.toggle_presets() @@ -867,53 +906,62 @@ Please also make sure you read the Terms of use and licence statement before usi preset_width = max(self.presets_canvas.winfo_width() // 3, 150) # Minimum width of 100 preset_height = 100 - print(f"preset width: {preset_width}") + # Get our custom style colors + bg_color = self.style.lookup('TFrame', 'background') + text_color = self.style.lookup('TLabel', 'foreground') + accent_color = "#e0e0e4" # Slightly darker grey for accents # Configure columns to fill available space for col in range(3): self.presets_scrollable_frame.columnconfigure(col, weight=1) - # Populate filtered presets in grid layout for i, phrase in enumerate(display_phrases): - frame = ttk.Frame(self.presets_scrollable_frame, width=preset_width, height=preset_height, relief="solid", borderwidth=1) - frame.grid(row=i // 4, column=i % 4, padx=2, pady=2, sticky="nsew") + # Create a frame with soft border and clean look + frame = ttk.Frame(self.presets_scrollable_frame, width=preset_width, height=preset_height) + frame.grid(row=i // 4, column=i % 4, padx=3, pady=3, sticky="nsew") frame.grid_propagate(False) + + # Create a subtle border around each preset with more modern look + inner_frame = ttk.Frame(frame, style='Card.TFrame') + inner_frame.pack(fill=tk.BOTH, expand=True, padx=1, pady=1) + + # Style for card-like appearance + self.style.configure('Card.TFrame', + background=bg_color, + borderwidth=1, + relief="solid") self.presets_scrollable_frame.grid_columnconfigure(i % 4, weight=1) # Make columns expandable self.presets_scrollable_frame.grid_rowconfigure(i // 4, weight=1) # Make rows expandable - - # Text label with truncation for long text wrapped_text = self.wrap_text(phrase["text"], max_lines=3, max_chars_per_line=20) - label = ttk.Label(frame, text=wrapped_text, anchor="center", justify="center", width=20) + label = ttk.Label(inner_frame, text=wrapped_text, anchor="center", justify="center", width=20) label.pack(fill=tk.BOTH, expand=True, padx=5, pady=5) label.bind("", lambda e, t=phrase["text"]: self.insert_text(t)) label.bind("", lambda e, t=phrase["text"]: self.play_preset(t)) # Bottom frame for icons - bottom_frame = ttk.Frame(frame) + bottom_frame = ttk.Frame(inner_frame) bottom_frame.pack(side=tk.BOTTOM, fill=tk.X, pady=2) + # Style for flat buttons with our modern look self.style.configure("Flat.TButton", borderwidth=0, highlightthickness=0, - font=("Arial", 12), # Adjust font and size - anchor="center") # Center text - + font=("Arial", 12), + anchor="center", + background=bg_color) # Favourite button fav_icon = "❤️" if phrase["isFavourite"] else "♡" fav_btn = ttk.Button(bottom_frame, text=fav_icon, command=lambda p=phrase: self.toggle_favourite(p), width=2, style="Flat.TButton") fav_btn.pack(side=tk.RIGHT, padx=2) - #fav_btn.config(borderwidth=0, highlightthickness=0) # Remove border # Delete button del_btn = ttk.Button(bottom_frame, text="🗑️", command=lambda t=phrase["text"]: self.delete_preset(self.current_category, t), width=2, style="Flat.TButton") del_btn.pack(side=tk.RIGHT, padx=2) - #del_btn.config(borderwidth=0, highlightthickness=0) # Remove border - # Update scroll region after populating all items self.presets_canvas.configure(scrollregion=self.presets_canvas.bbox("all"))