1- from typing import Any , Optional , Tuple , List
1+ from typing import Any , Optional , Tuple , List , Dict
22
33from anki .hooks import wrap
44import aqt
55import aqt .colors
66from aqt import gui_hooks , mw
77from aqt .webview import AnkiWebView
88from aqt .theme import theme_manager
9- from aqt .qt import QColor
9+ from aqt .qt import QColor , QPalette , Qt
1010
1111from .ankiaddonconfig import ConfigManager
1212
@@ -18,12 +18,25 @@ def recolor_python() -> None:
1818 conf .load ()
1919 color_entries = conf .get ("colors" )
2020 for color_name in color_entries :
21- if (anki_color := getattr (aqt .colors , color_name , None )) is not None :
22- color_entry = color_entries [color_name ]
23- anki_color ["light" ] = color_entry [1 ]
24- anki_color ["dark" ] = color_entry [2 ]
25- setattr (aqt .colors , color_name , anki_color )
21+ replace_color (color_entries , color_name )
22+ replace_color (color_entries , "BUTTON_GRADIENT_START" , "BUTTON_HOVER" )
23+ replace_color (color_entries , "BUTTON_GRADIENT_END" , "BUTTON_HOVER" )
2624 theme_manager .apply_style ()
25+ _apply_style ()
26+
27+
28+ def replace_color (
29+ color_entries : Dict [str , List [str ]],
30+ anki_name : str ,
31+ addon_name : Optional [str ] = None ,
32+ ) -> None :
33+ if addon_name is None :
34+ addon_name = anki_name
35+ if (anki_color := getattr (aqt .colors , anki_name , None )) is not None :
36+ color_entry = color_entries [addon_name ]
37+ anki_color ["light" ] = color_entry [1 ]
38+ anki_color ["dark" ] = color_entry [2 ]
39+ setattr (aqt .colors , anki_name , anki_color )
2740
2841
2942def get_window_bg_color (* args : Any ) -> QColor :
@@ -36,6 +49,61 @@ def replace_webview_bg() -> None:
3649 AnkiWebView .get_window_bg_color = get_window_bg_color # type: ignore
3750
3851
52+ def _apply_style () -> None :
53+ """
54+ Used because Anki doesn't style palette in MacOS.
55+
56+ Mostly identical to aqt.theme_manager._apply_style
57+ changed Button color to BUTTON_BG from BUTTON_GRADIENT_START
58+ """
59+ manager = theme_manager
60+ palette = QPalette ()
61+ text = manager .qcolor (aqt .colors .FG )
62+ palette .setColor (QPalette .ColorRole .WindowText , text )
63+ palette .setColor (QPalette .ColorRole .ToolTipText , text )
64+ palette .setColor (QPalette .ColorRole .Text , text )
65+ palette .setColor (QPalette .ColorRole .ButtonText , text )
66+
67+ hlbg = manager .qcolor (aqt .colors .HIGHLIGHT_BG )
68+ palette .setColor (
69+ QPalette .ColorRole .HighlightedText , manager .qcolor (aqt .colors .HIGHLIGHT_FG )
70+ )
71+ palette .setColor (QPalette .ColorRole .Highlight , hlbg )
72+
73+ canvas = manager .qcolor (aqt .colors .CANVAS )
74+ palette .setColor (QPalette .ColorRole .Window , canvas )
75+ palette .setColor (QPalette .ColorRole .AlternateBase , canvas )
76+
77+ palette .setColor (QPalette .ColorRole .Button , manager .qcolor (aqt .colors .BUTTON_BG ))
78+
79+ input_base = manager .qcolor (aqt .colors .CANVAS_CODE )
80+ palette .setColor (QPalette .ColorRole .Base , input_base )
81+ palette .setColor (QPalette .ColorRole .ToolTipBase , input_base )
82+
83+ palette .setColor (
84+ QPalette .ColorRole .PlaceholderText , manager .qcolor (aqt .colors .FG_SUBTLE )
85+ )
86+
87+ disabled_color = manager .qcolor (aqt .colors .FG_DISABLED )
88+ palette .setColor (
89+ QPalette .ColorGroup .Disabled , QPalette .ColorRole .Text , disabled_color
90+ )
91+ palette .setColor (
92+ QPalette .ColorGroup .Disabled , QPalette .ColorRole .ButtonText , disabled_color
93+ )
94+ palette .setColor (
95+ QPalette .ColorGroup .Disabled ,
96+ QPalette .ColorRole .HighlightedText ,
97+ disabled_color ,
98+ )
99+
100+ palette .setColor (QPalette .ColorRole .Link , manager .qcolor (aqt .colors .FG_LINK ))
101+
102+ palette .setColor (QPalette .ColorRole .BrightText , Qt .GlobalColor .red )
103+
104+ mw .app .setPalette (palette )
105+
106+
39107# ReColor CSS Colors
40108
41109
0 commit comments