Update fltk (#169)

- Fixes #163
- Reimplements window resize
  - Still has problems on macOS; Resizing with the drag handle blocks the main loop. See:
    - https://github.com/glfw/glfw/issues/1251
    - https://github.com/rust-windowing/winit/issues/219
This commit is contained in:
Jay Oster 2021-05-29 03:27:33 -07:00 committed by GitHub
parent b76ae1f7bc
commit 23da739650
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 15 additions and 3 deletions

View file

@ -10,7 +10,7 @@ optimize = ["log/release_max_level_warn"]
default = ["optimize"] default = ["optimize"]
[dependencies] [dependencies]
fltk = { version = "1.0", features = ["no-images", "no-pango"] } fltk = { version = "1.0.14", features = ["no-images", "no-pango"] }
env_logger = "0.8" env_logger = "0.8"
log = "0.4" log = "0.4"
pixels = { path = "../.." } pixels = { path = "../.." }

View file

@ -2,7 +2,7 @@
#![forbid(unsafe_code)] #![forbid(unsafe_code)]
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
use fltk::{app, prelude::*, window::Window}; use fltk::{app, enums::Event, prelude::*, window::Window};
use log::error; use log::error;
use pixels::{Error, Pixels, SurfaceTexture}; use pixels::{Error, Pixels, SurfaceTexture};
use std::{thread, time::Duration}; use std::{thread, time::Duration};
@ -26,19 +26,30 @@ fn main() -> Result<(), Error> {
let mut win = Window::default() let mut win = Window::default()
.with_size(WIDTH as i32, HEIGHT as i32) .with_size(WIDTH as i32, HEIGHT as i32)
.with_label("Hello Pixels"); .with_label("Hello Pixels");
win.make_resizable(true);
win.end(); win.end();
win.show(); win.show();
let mut pixels = { let mut pixels = {
let surface_texture = SurfaceTexture::new(WIDTH, HEIGHT, &win); let pixel_width = win.pixel_w() as u32;
let pixel_height = win.pixel_h() as u32;
let surface_texture = SurfaceTexture::new(pixel_width, pixel_height, &win);
Pixels::new(WIDTH, HEIGHT, surface_texture)? Pixels::new(WIDTH, HEIGHT, surface_texture)?
}; };
let mut world = World::new(); let mut world = World::new();
while app.wait() { while app.wait() {
// Handle window events
if app::event() == Event::Resize {
let pixel_width = win.pixel_w() as u32;
let pixel_height = win.pixel_h() as u32;
pixels.resize_surface(pixel_width, pixel_height);
}
// Update internal state // Update internal state
world.update(); world.update();
// Draw the current frame // Draw the current frame
world.draw(pixels.get_frame()); world.draw(pixels.get_frame());
if pixels if pixels
@ -49,6 +60,7 @@ fn main() -> Result<(), Error> {
app.quit(); app.quit();
} }
win.redraw(); win.redraw();
// Calls to redraw in the event loop require an explicit sleep // Calls to redraw in the event loop require an explicit sleep
thread::sleep(Duration::from_millis(SLEEP)); thread::sleep(Duration::from_millis(SLEEP));
} }