縦横比を維持しながら、親ウィジェットを両方の次元で塗りつぶす画像を作成しようとしています。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から)。実際に表示されるように、すべての関数呼び出しをリンクする方法がわかりません。(これを行うのも間違っているように感じます。これが簡単に可能であれば、おそらくサブクラス化できますか?)Picture
Picture
Picture
アイデア 4:Picture
クラス全体をゼロから再実装する。単純なサイズ変更のためだけに、やり過ぎでメンテナンスのオーバーヘッドが多すぎるようです。
アイデア 5: CSS プロパティを使用して親を埋める。width
andheight
を 100% に設定しようとしましたが、相対的なサイズは許可されていないようです。また、cover
CSS 属性はサポートされていません。
アイデア 6: GTK をドロップする
上記のアイデアに対する他のアイデアや修正はありますか?