Skip to content

Commit 35dbab4

Browse files
UrtsiSantsitheCapypara
authored andcommitted
Library: Port 'CSS Gradients' to Python (#724)
* Library: Port 'CSS Gradients' to Python * Fix string formatting * Use snake case * Make it work * library: CSS Gradients, py: Explicitly init GtkSource --------- Co-authored-by: Marco Capypara Köpcke <[email protected]>
1 parent 4faf86d commit 35dbab4

File tree

1 file changed

+121
-0
lines changed
  • src/Library/demos/CSS Gradients

1 file changed

+121
-0
lines changed
Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
import gi
2+
3+
gi.require_version("Gtk", "4.0")
4+
gi.require_version("Gdk", "4.0")
5+
gi.require_version("Adw", "1")
6+
gi.require_version("GtkSource", "5")
7+
from gi.repository import Gtk, Gdk, Adw, GtkSource
8+
import workbench
9+
10+
Adw.init()
11+
GtkSource.init()
12+
13+
14+
combo_row_gradient_type = workbench.builder.get_object(
15+
"combo_row_gradient_type",
16+
)
17+
spin_row_angle = workbench.builder.get_object("spin_row_angle")
18+
button_color_1 = workbench.builder.get_object("button_color_1")
19+
button_color_2 = workbench.builder.get_object("button_color_2")
20+
button_color_3 = workbench.builder.get_object("button_color_3")
21+
gtksource_buffer = workbench.builder.get_object("gtksource_buffer")
22+
button_copy_css = workbench.builder.get_object("button_copy_css")
23+
24+
25+
def generate_css():
26+
angle_string = spin_row_angle.get_value()
27+
first_color_string = button_color_1.get_rgba().to_string()
28+
second_color_string = button_color_2.get_rgba().to_string()
29+
third_color_string = button_color_3.get_rgba().to_string()
30+
31+
css = ""
32+
if combo_row_gradient_type.get_selected() == 0:
33+
css = f"""
34+
.background-gradient {{
35+
background-image: linear-gradient(
36+
{angle_string}deg,
37+
{first_color_string},
38+
{second_color_string},
39+
{third_color_string}
40+
);
41+
}}"""
42+
elif combo_row_gradient_type.get_selected() == 1:
43+
css = f"""
44+
.background-gradient {{
45+
background-image: radial-gradient(
46+
{first_color_string},
47+
{second_color_string},
48+
{third_color_string}
49+
);
50+
}}"""
51+
elif combo_row_gradient_type.get_selected() == 2:
52+
css = f"""
53+
.background-gradient {{
54+
background-image: conic-gradient(
55+
from {angle_string}deg,
56+
{first_color_string},
57+
{second_color_string},
58+
{third_color_string}
59+
);
60+
}}"""
61+
62+
return css.lstrip()
63+
64+
65+
def update_css_provider(css):
66+
display = Gdk.Display.get_default()
67+
68+
css_provider = Gtk.CssProvider()
69+
css_provider.load_from_string(css)
70+
Gtk.StyleContext.add_provider_for_display(
71+
display,
72+
css_provider,
73+
Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION,
74+
)
75+
76+
77+
def update(*args):
78+
spin_row_angle.set_sensitive(combo_row_gradient_type.get_selected() != 1)
79+
css = generate_css()
80+
gtksource_buffer.set_text(css, -1)
81+
update_css_provider(css)
82+
83+
84+
combo_row_gradient_type.connect("notify::selected", update)
85+
spin_row_angle.connect("notify::value", update)
86+
button_color_1.connect("notify::rgba", update)
87+
button_color_2.connect("notify::rgba", update)
88+
button_color_3.connect("notify::rgba", update)
89+
90+
update()
91+
92+
93+
clipboard = Gdk.Display.get_default().get_clipboard()
94+
95+
button_copy_css.connect(
96+
"clicked",
97+
lambda *args: clipboard.set(
98+
gtksource_buffer.get_text(
99+
gtksource_buffer.get_start_iter(), gtksource_buffer.get_end_iter(), False
100+
)
101+
),
102+
)
103+
104+
scheme_manager = GtkSource.StyleSchemeManager.get_default()
105+
106+
107+
def update_color_scheme():
108+
scheme = scheme_manager.get_scheme(
109+
"Adwaita-dark" if style_manager.get_dark() else "Adwaita"
110+
)
111+
gtksource_buffer.set_style_scheme(scheme)
112+
113+
114+
style_manager = Adw.StyleManager.get_default()
115+
style_manager.connect("notify::dark", lambda *args: update_color_scheme)
116+
117+
update_color_scheme()
118+
119+
language_manager = GtkSource.LanguageManager.get_default()
120+
css_language = language_manager.get_language("css")
121+
gtksource_buffer.set_language(css_language)

0 commit comments

Comments
 (0)