我正在尝试编写一个加载图像的程序,当用户调整窗口大小时,图像也会调整大小,就好像它有“height:100%”,在Rust语言中使用FLTK。
这是我写的:
use fltk::{frame::Frame, window, app, prelude::*, image::JpegImage};
fn main() {
let app = app::App::default().with_scheme(app::Scheme::Gtk);
let mut main_win = window::Window::default()
.with_size(800, 600)
.center_screen()
.with_label("PhotoTest");
let mut img_frame = Frame::default().size_of_parent();
let img = JpegImage::load("flower.jpg").unwrap();
img_frame.set_image(Some(img));
img_frame.resize_callback(|s,_,_,_,_| {
s.image().unwrap().scale(s.w(), s.h(), true, true);
s.redraw();
});
main_win.make_resizable(true);
main_win.end();
main_win.show();
app.run().unwrap();
}
然而,图像并没有改变。这也适用于其他操作,比如inactive()
,就好像图像根本没有改变。事实上,当使用println!("Frame - {}, Image - {}", s.w(), s.image().unwrap().w()) inside the callback, the
时,img_frame '得到一个新的大小,而图像的大小保持不变,这表明回调正在得到它的调用,只是不能应用它。
这些操作在图像被移到框架中之前都很好用,这时它们就被忽略了。我是不是做了什么很愚蠢的事情?请帮帮忙。
1条答案
按热度按时间wkyowqbh1#
在添加图像之前先定义回调函数如何?