Implement fullscreen

This commit is contained in:
Julian Mutter 2023-10-21 15:52:35 +02:00
parent ddb04f1e20
commit bc0ce2f934

View File

@ -8,6 +8,7 @@ use gtk4::{
use poppler::Page; use poppler::Page;
pub struct Ui { pub struct Ui {
window: ApplicationWindow,
bottom_bar: gtk4::Box, bottom_bar: gtk4::Box,
header_bar: gtk4::HeaderBar, header_bar: gtk4::HeaderBar,
page_indicator: gtk4::Label, page_indicator: gtk4::Label,
@ -60,14 +61,16 @@ impl DocumentCanvas {
} }
pub fn toggle_fullscreen(ui: &Ui) { pub fn toggle_fullscreen(ui: &Ui) {
match ui.header_bar.is_visible() { match !ui.window.is_fullscreen() {
true => { true => {
ui.header_bar.hide(); ui.header_bar.hide();
ui.bottom_bar.hide(); ui.bottom_bar.hide();
ui.window.fullscreen();
} }
false => { false => {
ui.header_bar.show(); ui.header_bar.show();
ui.bottom_bar.show(); ui.bottom_bar.show();
ui.window.unfullscreen();
} }
} }
} }
@ -128,8 +131,15 @@ impl Ui {
let open_file_button = Button::from_icon_name("document-open"); let open_file_button = Button::from_icon_name("document-open");
let app_wrapper = Box::builder().orientation(Orientation::Vertical).build(); let app_wrapper = Box::builder().orientation(Orientation::Vertical).build();
let window = ApplicationWindow::builder()
.application(app)
.title("Music Reader")
.child(&app_wrapper)
.maximized(true)
.build();
let ui = Ui { let ui = Ui {
window,
bottom_bar: Box::builder().hexpand_set(true).build(), bottom_bar: Box::builder().hexpand_set(true).build(),
header_bar: HeaderBar::builder().build(), header_bar: HeaderBar::builder().build(),
page_indicator: Label::builder().build(), page_indicator: Label::builder().build(),
@ -170,23 +180,17 @@ impl Ui {
}), }),
); );
let window = ApplicationWindow::builder() ui.borrow()
.application(app) .window
.title("Music Reader") .set_titlebar(Some(&ui.borrow().header_bar));
.child(&app_wrapper)
.maximized(true)
.build();
let window = Rc::new(RefCell::new(window));
window.borrow().set_titlebar(Some(&ui.borrow().header_bar));
open_file_button.connect_clicked( open_file_button.connect_clicked(
glib::clone!(@strong ui, @strong window => @default-panic, move |_button| { glib::clone!(@strong ui => @default-panic, move |_button| {
choose_file(Rc::clone(&ui), &window.borrow()); choose_file(Rc::clone(&ui), &ui.borrow().window);
}), }),
); );
window.borrow().present(); ui.borrow().window.present();
ui ui
} }
} }