61 lines
1.5 KiB
Plaintext
61 lines
1.5 KiB
Plaintext
#[cfg(feature = "gtk")]
|
|
mod graphical {
|
|
extern crate gtk;
|
|
|
|
use self::gtk::traits::*;
|
|
use self::gtk::{Inhibit, Window, WindowType};
|
|
use std::ops::Not;
|
|
use std::sync::{Arc, RwLock};
|
|
|
|
pub fn create_window() {
|
|
gtk::init().expect("Failed to initialize GTK");
|
|
|
|
let window = Window::new(WindowType::Toplevel);
|
|
window.connect_delete_event(|_, _| {
|
|
gtk::main_quit();
|
|
Inhibit(false)
|
|
});
|
|
let button = gtk::Button::new_with_label("Hello World! ");
|
|
window.add(&button);
|
|
|
|
let lock = Arc::new(RwLock::new(false));
|
|
|
|
let lock_button = lock.clone();
|
|
button.connect_clicked(move |_| {
|
|
let mut reverse = lock_button.write().unwrap();
|
|
*reverse = reverse.not();
|
|
});
|
|
|
|
let lock_thread = lock.clone();
|
|
gtk::timeout_add(100, move || {
|
|
let reverse = lock_thread.read().unwrap();
|
|
let mut text = button.get_label().unwrap();
|
|
let len = &text.len();
|
|
|
|
if *reverse {
|
|
let begin = &text.split_off(1);
|
|
text.insert_str(0, begin);
|
|
} else {
|
|
let end = &text.split_off(len - 1);
|
|
text.insert_str(0, end);
|
|
}
|
|
|
|
button.set_label(&text);
|
|
|
|
gtk::Continue(true)
|
|
});
|
|
|
|
window.show_all();
|
|
gtk::main();
|
|
}
|
|
}
|
|
|
|
|
|
#[cfg(feature = "gtk")]
|
|
fn main() {
|
|
graphical::create_window();
|
|
}
|
|
|
|
#[cfg(not(feature = "gtk"))]
|
|
fn main() {}
|