Skip to content

Commit 8f94946

Browse files
committed
feat: Extend image example to show animation
1 parent 21f9ac0 commit 8f94946

File tree

1 file changed

+26
-4
lines changed

1 file changed

+26
-4
lines changed

ui/examples/image.rs

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,19 @@
22
33
extern crate ui;
44

5+
use std::sync::{Arc, Mutex};
6+
57
use ui::{BoxControl, Window, InitOptions};
68
use ui::{Image, Area, AreaHandler, AreaKeyEvent, AreaDrawParams};
79

810
struct ImageAreaHandler {
9-
data: Vec<u32>
11+
data: Arc<Mutex<Vec<u32>>>
1012
}
1113

1214
impl AreaHandler for ImageAreaHandler {
1315
fn draw(&mut self, _area: &Area, area_draw_params: &AreaDrawParams) {
1416
let img = Image::new(100, 100);
15-
img.load_pixmap(0, 0, 100, 100, &self.data);
17+
img.load_pixmap(0, 0, 100, 100, &*self.data.lock().unwrap());
1618
area_draw_params.context.draw_image(0.0, 0.0, &img);
1719
}
1820

@@ -35,8 +37,28 @@ fn run() {
3537
vbox.set_padded(true);
3638
mainwin.set_child(vbox.clone().into());
3739

38-
let area = Area::new(Box::new(ImageAreaHandler {data: vec![0xff123456;100*100]}));
39-
vbox.append(area.into(),false);
40+
let mut data = Arc::new(Mutex::new(vec![0xff123456;100*100]));
41+
42+
let area = Area::new(Box::new(ImageAreaHandler { data: data.clone() }));
43+
vbox.append((&area).into(),false);
44+
45+
::std::thread::spawn(move || {
46+
let mut color = 0x0000ff;
47+
loop {
48+
color = color << 4 | (color & 0xff000000) >> 24;
49+
for j in 0..100 {
50+
::std::thread::sleep_ms(10);
51+
{
52+
let mut d = data.lock().unwrap();
53+
for i in 0..100 {
54+
d[i+j*100] = 0xff000000 | color;
55+
}
56+
}
57+
area.queue_redraw_all();
58+
}
59+
}
60+
});
61+
4062

4163
mainwin.show();
4264
ui::main();

0 commit comments

Comments
 (0)