Add glfw window_refresh_callback, windows now redraw on linux

Fixes #941.
This commit is contained in:
Daniel Hedlund 2013-12-14 16:08:58 -08:00
parent c5d81f13c1
commit c44001b64c
3 changed files with 11 additions and 0 deletions

View file

@ -9,6 +9,7 @@ use windowing::{ApplicationMethods, WindowEvent, WindowMethods};
use windowing::{IdleWindowEvent, ResizeWindowEvent, LoadUrlWindowEvent, MouseWindowEventClass};
use windowing::{ScrollWindowEvent, ZoomWindowEvent, NavigationWindowEvent, FinishedWindowEvent};
use windowing::{QuitWindowEvent, MouseWindowClickEvent, MouseWindowMouseDownEvent, MouseWindowMouseUpEvent};
use windowing::RefreshWindowEvent;
use azure::azure_hl::SourceSurfaceMethods;
use azure::azure_hl;
@ -241,6 +242,10 @@ pub fn run_compositor(compositor: &CompositorTask) {
match event {
IdleWindowEvent => {}
RefreshWindowEvent => {
recomposite = true;
}
ResizeWindowEvent(width, height) => {
let new_size = Size2D(width, height);
if window_size != new_size {

View file

@ -8,6 +8,7 @@ use windowing::{ApplicationMethods, WindowEvent, WindowMethods};
use windowing::{IdleWindowEvent, ResizeWindowEvent, LoadUrlWindowEvent, MouseWindowEventClass};
use windowing::{ScrollWindowEvent, ZoomWindowEvent, NavigationWindowEvent, FinishedWindowEvent};
use windowing::{QuitWindowEvent, MouseWindowClickEvent, MouseWindowMouseDownEvent, MouseWindowMouseUpEvent};
use windowing::RefreshWindowEvent;
use windowing::{Forward, Back};
use alert::{Alert, AlertMethods};
@ -92,6 +93,9 @@ impl WindowMethods<Application> for Window {
do window.glfw_window.set_framebuffer_size_callback |_win, width, height| {
local_window().event_queue.push(ResizeWindowEvent(width as uint, height as uint))
}
do window.glfw_window.set_refresh_callback |_win| {
local_window().event_queue.push(RefreshWindowEvent)
}
do window.glfw_window.set_key_callback |_win, key, _scancode, action, mods| {
if action == glfw::Press {
local_window().handle_key(key, mods)

View file

@ -26,6 +26,8 @@ pub enum WindowEvent {
/// FIXME: This is a bogus event and is only used because we don't have the new
/// scheduler integrated with the platform event loop.
IdleWindowEvent,
/// Sent when part of the window is marked dirty and needs to be redrawn.
RefreshWindowEvent,
/// Sent when the window is resized.
ResizeWindowEvent(uint, uint),
/// Sent when a new URL is to be loaded.