Css 根据Gtk 3.0中的小部件大小缩放字体大小
我在GTK3.0中有一个标签(使用Vala),它的样式是CSS。我想根据小部件的大小调整字体大小,这样字体就可以填充小部件/标签,但不会变得太大 使用CSS方法实现这一点的最佳方法是什么?现在我正在将字体设置为Css 根据Gtk 3.0中的小部件大小缩放字体大小,css,gtk,vala,Css,Gtk,Vala,我在GTK3.0中有一个标签(使用Vala),它的样式是CSS。我想根据小部件的大小调整字体大小,这样字体就可以填充小部件/标签,但不会变得太大 使用CSS方法实现这一点的最佳方法是什么?现在我正在将字体设置为 font-size: 5em 但据我所知,这与屏幕分辨率无关 例如,在分辨率较低的屏幕上,我得到以下结果(注意截止时钟): 之前我们使用了绝对缩放(请参阅此差异以获得令人惊讶的简洁),但我们希望继续使用CSS (如果您感兴趣)您需要设置 font-size: 5% 在CSS文件中如
font-size: 5em
但据我所知,这与屏幕分辨率无关
例如,在分辨率较低的屏幕上,我得到以下结果(注意截止时钟):
之前我们使用了绝对缩放(请参阅此差异以获得令人惊讶的简洁),但我们希望继续使用CSS
(如果您感兴趣)您需要设置
font-size: 5%
在CSS文件中如果在ems或%中设置字体大小,它将基于默认字体大小。诀窍是根据窗口大小更改默认字体大小。连接到窗口的
配置\u事件
,并在调整窗口大小时设置新的默认字体大小
下面是一个简化的示例:
const string WINDOW_CSS_TEMPLATE = "#mywindow { font-size: %fpx; }";
const string APPLICATION_CSS = "#mywindow .label { font-size: 5em; }";
void main(string [] args) {
Gtk.init(ref args);
var win = new Gtk.Window();
win.name = "mywindow";
win.default_width = 800;
win.default_height = 600;
var label = new Gtk.Label("Some text");
label.halign = Gtk.Align.END;
label.valign = Gtk.Align.END;
win.add(label);
win.destroy.connect(Gtk.main_quit);
var win_provider = new Gtk.CssProvider();
Gtk.StyleContext.add_provider_for_screen(Gdk.Screen.get_default(),
win_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION);
var app_provider = new Gtk.CssProvider();
try {
app_provider.load_from_data(APPLICATION_CSS, -1);
} catch (Error e) {
Process.exit(1);
}
Gtk.StyleContext.add_provider_for_screen(Gdk.Screen.get_default(),
app_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION);
win.configure_event.connect((event) => {
try {
// Replace this with your desired calculation of the base font size
var target_size = (double) event.height / 600.0 * 12.0;
var css = WINDOW_CSS_TEMPLATE.printf(target_size);
win_provider.load_from_data(css, -1);
} catch (Error e) {
Process.exit(1);
}
return Gdk.EVENT_PROPAGATE;
});
win.show_all();
Gtk.main();
}
这只关心窗口的高度,因此,如果将窗口的大小调整为比其高度大得多,您将得到一个难以理解的小标签,但您可以插入任何适合您的计算。这样做只会使文本非常小。据我所知,此上下文中的
%
值是默认字体大小的百分比,而不是它所在的容器的百分比。因此,在这种情况下,相当于5em
的是500%
可以完美地工作。在我的例子中,我们保证永远不会改变窗口的大小,所以我有一个基本相同的问题,但是我如何在C中做到这一点,或者我必须问我自己的问题