2

我正在尝试创建一个图像,该图像在两个维度上填充其父小部件,同时保持纵横比。在 gtk4-rs 我做了

let picture_widget = gtk::Picture::builder()
    .hexpand(true)
    .vexpand(true)
    .halign(gtk::Align::Fill)
    .valign(gtk::Align::Fill)
    .keep_aspect_ratio(true)
    .can_shrink(true)
    .build();

但这仅填充了父级的一个维度。但是,我想溢出该维度中的父级,以便填充两个维度。

一般来说,我认为我的目标可以通过child.set_size_request(parent_width, parent_height). 每次父大小更改时都需要这样做。

想法1:听size_allocate父母的信号。不起作用,因为size_allocate信号已被删除:https ://docs.gtk.org/gtk4/migrating-3to4.html#adapt-to-gtkwidgets-size-allocation-changes

想法 2:子类化Picture并在allocate(). 但Picture显然不可子类化。编译器告诉我

类型 ParentType = gtk::图片;=> 特征IsSubclassable<FillingPicture>未实现Picture

想法 3:子类化WidgetPicture在内部使用(来自https://github.com/gtk-rs/gtk4-rs/issues/393)。我不知道如何将所有函数调用链接在一起,以便Picture实际显示。(这样做也感觉不对。如果这很容易实现,Picture那么可能是子类化的吗?)

Picture想法 4:从头开始重新实现整个类。似乎只是为了简单的调整大小而过度杀伤和过多的维护开销。

想法5:使用CSS属性填充父级。我尝试将widthand设置height为 100%,但显然不允许使用相对大小。cover也不支持 CSS 属性。

想法 6:放弃 GTK

上述想法的任何其他想法或修复?

4

0 回答 0