Skip to content

Commit 2a6b18d

Browse files
authored
Port 'CSS Gradients' demo to Vala (#155)
1 parent 6a9de43 commit 2a6b18d

File tree

1 file changed

+121
-0
lines changed

1 file changed

+121
-0
lines changed

src/CSS Gradients/main.vala

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
#! /usr/bin/env -S vala workbench.vala --pkg libadwaita-1 --pkg gtksourceview-5
2+
3+
private GtkSource.Buffer gtksource_buffer;
4+
private Adw.ComboRow combo_row_gradient_type;
5+
private Adw.SpinRow spin_row_angle;
6+
private Gtk.ColorDialogButton button_color_1;
7+
private Gtk.ColorDialogButton button_color_2;
8+
private Gtk.ColorDialogButton button_color_3;
9+
private Adw.StyleManager style_manager;
10+
private GtkSource.StyleSchemeManager scheme_manager;
11+
private Gtk.CssProvider css_provider;
12+
private string css;
13+
14+
void update () {
15+
spin_row_angle.sensitive = combo_row_gradient_type.selected != 1;
16+
css = generate_css ();
17+
gtksource_buffer.set_text (css, -1);
18+
update_css_provider (css);
19+
}
20+
21+
void update_css_provider (string css) {
22+
var display = Gdk.Display.get_default ();
23+
if (css_provider == null) {
24+
css_provider = new Gtk.CssProvider ();
25+
} else {
26+
Gtk.StyleContext.remove_provider_for_display (display, css_provider);
27+
}
28+
29+
css_provider.load_from_string (css);
30+
Gtk.StyleContext.add_provider_for_display (display, css_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION);
31+
}
32+
33+
string generate_css () {
34+
double angle = spin_row_angle.get_value ();
35+
string angle_string = angle.to_string ();
36+
string first_color_string = button_color_1.get_rgba ().to_string ();
37+
string second_color_string = button_color_2.get_rgba ().to_string ();
38+
string third_color_string = button_color_3.get_rgba ().to_string ();
39+
40+
uint selected = combo_row_gradient_type.selected;
41+
switch (selected) {
42+
case 0:
43+
css = @".background-gradient {
44+
background-image: linear-gradient(
45+
$(angle_string)deg,
46+
$(first_color_string),
47+
$(second_color_string),
48+
$(third_color_string)
49+
);
50+
}";
51+
break;
52+
case 1:
53+
css = @".background-gradient {
54+
background-image: radial-gradient(
55+
$(first_color_string),
56+
$(second_color_string),
57+
$(third_color_string)
58+
);
59+
}";
60+
break;
61+
case 2:
62+
css = @".background-gradient {
63+
background-image: conic-gradient(
64+
from $(angle_string)deg,
65+
$(first_color_string),
66+
$(second_color_string),
67+
$(third_color_string)
68+
);
69+
}";
70+
break;
71+
}
72+
return css;
73+
}
74+
75+
void update_color_scheme () {
76+
string scheme_name = style_manager.dark ? "Adwaita-dark" : "Adwaita";
77+
GtkSource.StyleScheme scheme = scheme_manager.get_scheme (scheme_name);
78+
79+
if (scheme != null) {
80+
gtksource_buffer.style_scheme = scheme;
81+
}
82+
}
83+
84+
public void main () {
85+
combo_row_gradient_type = (Adw.ComboRow) workbench.builder.get_object ("combo_row_gradient_type");
86+
spin_row_angle = (Adw.SpinRow) workbench.builder.get_object ("spin_row_angle");
87+
button_color_1 = (Gtk.ColorDialogButton) workbench.builder.get_object ("button_color_1");
88+
button_color_2 = (Gtk.ColorDialogButton) workbench.builder.get_object ("button_color_2");
89+
button_color_3 = (Gtk.ColorDialogButton) workbench.builder.get_object ("button_color_3");
90+
gtksource_buffer = (GtkSource.Buffer) workbench.builder.get_object ("gtksource_buffer");
91+
var button_copy_css = (Gtk.Button) workbench.builder.get_object ("button_copy_css");
92+
93+
combo_row_gradient_type.notify["selected"].connect (update);
94+
spin_row_angle.notify["value"].connect (update);
95+
button_color_1.notify["rgba"].connect (update);
96+
button_color_2.notify["rgba"].connect (update);
97+
button_color_3.notify["rgba"].connect (update);
98+
/*
99+
* code view
100+
*/
101+
Gdk.Clipboard clipboard = Gdk.Display.get_default ().get_clipboard ();
102+
103+
button_copy_css.clicked.connect (() => {
104+
Gtk.TextIter start, end;
105+
gtksource_buffer.get_start_iter (out start);
106+
gtksource_buffer.get_end_iter (out end);
107+
string text = gtksource_buffer.get_text (start, end, false);
108+
clipboard.set_text (text);
109+
});
110+
111+
scheme_manager = GtkSource.StyleSchemeManager.get_default ();
112+
style_manager = Adw.StyleManager.get_default ();
113+
style_manager.notify["dark"].connect (() => update_color_scheme ());
114+
115+
var language_manager = GtkSource.LanguageManager.get_default ();
116+
GtkSource.Language css_language = language_manager.get_language ("css");
117+
gtksource_buffer.language = css_language;
118+
119+
update ();
120+
update_color_scheme ();
121+
}

0 commit comments

Comments
 (0)