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();

ただし、これは親の 1 つの次元のみを埋めます。ただし、両方の次元が満たされるように、その次元で親をオーバーフローさせたいと思います。

一般的に、私の目標は までに達成できると思いますchild.set_size_request(parent_width, parent_height)。親のサイズが変更されるたびに、これを行う必要があります。

size_allocateアイデア 1:親のシグナルを聞く。size_allocateシグナルが削除されたため、機能しません: https://docs.gtk.org/gtk4/migrating-3to4.html#adapt-to-gtkwidgets-size-allocation-changes

アイデア 2: でサブクラスPicture化してサイズを設定しallocate()ます。しかしPicture、明らかにサブクラス化できません。コンパイラは私にそれを教えてくれます

タイプ ParentType = gtk::Picture; => トレイトIsSubclassable<FillingPicture>は実装されていませんPicture

アイデア 3: サブクラス化して内部Widgetで使用する( https://github.com/gtk-rs/gtk4-rs/issues/393から)。実際に表示されるように、すべての関数呼び出しをリンクする方法がわかりません。(これを行うのも間違っているように感じます。これが簡単に可能であれば、おそらくサブクラス化できますか?)PicturePicturePicture

アイデア 4:Pictureクラス全体をゼロから再実装する。単純なサイズ変更のためだけに、やり過ぎでメンテナンスのオーバーヘッドが多すぎるようです。

アイデア 5: CSS プロパティを使用して親を埋める。widthandheightを 100% に設定しようとしましたが、相対的なサイズは許可されていないようです。また、coverCSS 属性はサポートされていません。

アイデア 6: GTK をドロップする

上記のアイデアに対する他のアイデアや修正はありますか?

4

0 に答える 0