Compare commits

..
3 Commits
Author SHA1 Message Date
lm b4b6fa4e87 Rearrange palette header to show current colour 2025-10-17 16:09:24 +02:00
lm a5d2aacdf6 Light theme background to pure white 2025-10-17 16:07:35 +02:00
lm 666ce85470 Display initial swatch using default colour centre 2025-10-17 16:06:07 +02:00
3 changed files with 49 additions and 17 deletions
+6 -1
View File
@@ -83,12 +83,17 @@ class ColorPickerMixin:
def _update_selected_colour(self, r: int, g: int, b: int) -> None: def _update_selected_colour(self, r: int, g: int, b: int) -> None:
self.selected_colour = (r, g, b) self.selected_colour = (r, g, b)
hex_colour = f"#{r:02x}{g:02x}{b:02x}"
if hasattr(self, "current_colour_sw"): if hasattr(self, "current_colour_sw"):
hex_colour = f"#{r:02x}{g:02x}{b:02x}"
try: try:
self.current_colour_sw.configure(background=hex_colour) self.current_colour_sw.configure(background=hex_colour)
except Exception: except Exception:
pass pass
if hasattr(self, "current_colour_label"):
try:
self.current_colour_label.configure(text=f"Aktuelle Farbe ({hex_colour})")
except Exception:
pass
def _set_slider_targets(self, hue_deg: float, saturation: float, value: float) -> None: def _set_slider_targets(self, hue_deg: float, saturation: float, value: float) -> None:
span = getattr(self, "hue_span", 45.0) span = getattr(self, "hue_span", 45.0)
+1 -1
View File
@@ -38,7 +38,7 @@ class ThemeMixin:
status_fg = "#f5f5f5" status_fg = "#f5f5f5"
highlight_fg = "#f2c744" highlight_fg = "#f2c744"
else: else:
bg, fg = "#ededf2", "#202020" bg, fg = "#ffffff", "#202020"
status_fg = "#1c1c1c" status_fg = "#1c1c1c"
highlight_fg = "#c56217" highlight_fg = "#c56217"
self.root.configure(bg=bg) # type: ignore[attr-defined] self.root.configure(bg=bg) # type: ignore[attr-defined]
+42 -15
View File
@@ -1,10 +1,11 @@
"""UI helpers and reusable Tk callbacks.""" """UI helpers and reusable Tk callbacks."""
from __future__ import annotations from __future__ import annotations
import tkinter as tk import colorsys
import tkinter.font as tkfont import tkinter as tk
from tkinter import ttk import tkinter.font as tkfont
from tkinter import ttk
class UIBuilderMixin: class UIBuilderMixin:
@@ -49,20 +50,26 @@ class UIBuilderMixin:
palette_frame = ttk.Frame(self.root) palette_frame = ttk.Frame(self.root)
palette_frame.pack(fill=tk.X, padx=12, pady=(6, 8)) palette_frame.pack(fill=tk.X, padx=12, pady=(6, 8))
default_colour = self._default_colour_hex()
current_frame = ttk.Frame(palette_frame)
current_frame.pack(side=tk.LEFT, padx=(0, 16))
ttk.Label(current_frame, text="Farbe:").pack(side=tk.LEFT, padx=(0, 6))
self.current_colour_sw = tk.Canvas( self.current_colour_sw = tk.Canvas(
palette_frame, current_frame,
width=24, width=24,
height=24, height=24,
highlightthickness=0, highlightthickness=0,
background="#f2c744", background=default_colour,
bd=0, bd=0,
) )
self.current_colour_sw.pack(side=tk.LEFT, padx=(0, 8), pady=2) self.current_colour_sw.pack(side=tk.LEFT, pady=2)
self.current_colour_label = ttk.Label(palette_frame, text="Aktuelle Farbe") self.current_colour_label = ttk.Label(current_frame, text=f"({default_colour})")
self.current_colour_label.pack(side=tk.LEFT, padx=(0, 8)) self.current_colour_label.pack(side=tk.LEFT, padx=(6, 0))
ttk.Label(palette_frame, text="Beispielfarben:").pack(side=tk.LEFT, padx=(0, 8))
swatch_container = ttk.Frame(palette_frame) ttk.Label(palette_frame, text="Weitere Farben:").pack(side=tk.LEFT, padx=(0, 8))
swatch_container.pack(side=tk.LEFT) swatch_container = ttk.Frame(palette_frame)
swatch_container.pack(side=tk.LEFT)
for name, hex_code in self._preset_colours(): for name, hex_code in self._preset_colours():
self._add_palette_swatch(swatch_container, name, hex_code) self._add_palette_swatch(swatch_container, name, hex_code)
@@ -514,6 +521,26 @@ class UIBuilderMixin:
self.ratio_label.configure(foreground=colour) self.ratio_label.configure(foreground=colour)
except Exception: except Exception:
pass pass
def _default_colour_hex(self) -> str:
defaults = getattr(self, "DEFAULTS", {})
hue_min = float(defaults.get("hue_min", 0.0))
hue_max = float(defaults.get("hue_max", hue_min))
if hue_min <= hue_max:
hue = (hue_min + hue_max) / 2.0
else:
span = ((hue_max + 360.0) - hue_min) / 2.0
hue = (hue_min + span) % 360.0
sat_min = float(defaults.get("sat_min", 0.0))
saturation = (sat_min + 100.0) / 2.0
val_min = float(defaults.get("val_min", 0.0))
val_max = float(defaults.get("val_max", 100.0))
value = (val_min + val_max) / 2.0
r, g, b = colorsys.hsv_to_rgb(hue / 360.0, saturation / 100.0, value / 100.0)
return f"#{int(r * 255):02x}{int(g * 255):02x}{int(b * 255):02x}"
def _init_copy_menu(self): def _init_copy_menu(self):
self._copy_target = None self._copy_target = None