Commit 1cfd791833cb9908fe13fac2aaa27b236aa1e92f

Authored by Georg Hopp
1 parent d8cd5ed9

display remaining sleep time for next frame in window

... ... @@ -35,6 +35,7 @@ pub trait Canvas {
35 35
36 36 fn clear(&mut self);
37 37 fn draw(&mut self, c :&dyn Drawable, ofs :Coordinate, color :u32);
  38 + fn put_text(&self, ofs :Coordinate, s :&str);
38 39 fn show(&self);
39 40 }
40 41
... ...
... ... @@ -344,12 +344,12 @@ fn main() {
344 344 // use floating point values.
345 345 // https://rechneronline.de/pi/tetrahedron.php
346 346 // yi = a / 12 * √6
347   - // yc = a / 4 * √6
348   - // zi = √3 / 6 * a
349   - // zc = √3 / 3 * a
350 347 let yi = 60.0 / 12.0 * 6.0.sqrt().unwrap();
  348 + // yc = a / 4 * √6
351 349 let yc = 60.0 / 4.0 * 6.0.sqrt().unwrap();
  350 + // zi = √3 / 6 * a
352 351 let zi = 3.0.sqrt().unwrap() / 6.0 * 60.0;
  352 + // zc = √3 / 3 * a
353 353 let zc = 3.0.sqrt().unwrap() / 3.0 * 60.0;
354 354
355 355 let i = Vector( 0.0, yc, 0.0);
... ... @@ -471,7 +471,6 @@ fn main() {
471 471 canvas.draw( &co, Coordinate(0,0), 0x0000FF);
472 472 canvas.draw( &cl, Coordinate(0,0), 0x0000FF);
473 473 canvas.draw( &cr, Coordinate(0,0), 0x0000FF);
474   - canvas.show();
475 474
476 475 let passed = Instant::now() - last;
477 476 let f = (passed.as_nanos() / step.as_nanos()) as u32;
... ... @@ -481,7 +480,10 @@ fn main() {
481 480 }
482 481
483 482 last = last + step*(f + 1);
484   - println!("Sleep for: {:?}", last - Instant::now());
  483 + canvas.put_text( Coordinate(10, 15)
  484 + , &format!( "sleep: {:?}"
  485 + , last - Instant::now() ));
  486 + canvas.show();
485 487 thread::sleep(last - Instant::now());
486 488 }
487 489 });
... ...
... ... @@ -74,10 +74,10 @@ impl XcbEasel {
74 74 , screen.root(), 0, 0, width, width, 0
75 75 , xcb::WINDOW_CLASS_INPUT_OUTPUT as u16
76 76 , screen.root_visual()
77   - , &[(xcb::CW_BACK_PIXEL, screen.white_pixel())] );
  77 + , &[(xcb::CW_BACK_PIXEL, screen.black_pixel())] );
78 78
79 79 xcb::create_gc( &conn, gc, screen.root()
80   - , &[ (xcb::GC_FOREGROUND, screen.black_pixel())
  80 + , &[ (xcb::GC_FOREGROUND, screen.white_pixel())
81 81 , (xcb::GC_GRAPHICS_EXPOSURES, 0) ] );
82 82
83 83 let (shmid, shm) = getshm((width * height) as usize);
... ... @@ -120,8 +120,8 @@ fn getshm<'a>(size :usize) -> (i32, &'a mut [u32]) {
120 120
121 121 unsafe {
122 122 let id = libc::shmget( libc::IPC_PRIVATE
123   - , size * 4
124   - , libc::IPC_CREAT | 0o744 );
  123 + , size * 4
  124 + , libc::IPC_CREAT | 0o744 );
125 125 let ptr = libc::shmat(id, ptr::null(), 0);
126 126 (id as i32, from_raw_parts_mut(ptr as *mut u32, size))
127 127 }
... ... @@ -233,6 +233,13 @@ impl<'a> Canvas for XcbCanvas<'a> {
233 233 }
234 234 }
235 235
  236 + fn put_text(&self, ofs :Coordinate, s :&str) {
  237 + let Coordinate(xofs, yofs) = ofs;
  238 + xcb::xproto::image_text_8( &self.conn, self.pixmap, self.gc
  239 + , xofs as i16, yofs as i16, s );
  240 + self.conn.flush();
  241 + }
  242 +
236 243 fn show(&self) {
237 244 xcb::copy_area( &self.conn, self.pixmap, self.window, self.gc
238 245 , 0, 0, 0, 0
... ...
Please register or login to post a comment