mirror of
https://github.com/servo/servo.git
synced 2025-08-06 22:15:33 +01:00
Fix the origin when resizing
This commit is contained in:
parent
12954d12c3
commit
467c799532
3 changed files with 31 additions and 17 deletions
|
@ -1 +1 @@
|
||||||
Subproject commit 2025d76833460b09e4c6d7e43af21fafd3e701a4
|
Subproject commit 163656ee4aa53fcd5dbb8e264112e268d373ee71
|
|
@ -1 +1 @@
|
||||||
Subproject commit 827c3e99e6995aac6bffe030acf56c96fc543da4
|
Subproject commit f46557d3b3dfcb66965a73f8a00bc0be21b8d625
|
|
@ -6,6 +6,7 @@ use dvec::DVec;
|
||||||
use gfx::compositor::{LayerBuffer, Compositor};
|
use gfx::compositor::{LayerBuffer, Compositor};
|
||||||
use dom::event::{Event, ResizeEvent};
|
use dom::event::{Event, ResizeEvent};
|
||||||
use layers::ImageLayer;
|
use layers::ImageLayer;
|
||||||
|
use geom::matrix::{Matrix4, identity};
|
||||||
use geom::size::Size2D;
|
use geom::size::Size2D;
|
||||||
use ShareGlContext = sharegl::platform::Context;
|
use ShareGlContext = sharegl::platform::Context;
|
||||||
use std::cmp::FuzzyEq;
|
use std::cmp::FuzzyEq;
|
||||||
|
@ -98,7 +99,8 @@ fn mainloop(mode: Mode, po: comm::Port<Msg>, dom_event_chan: pipes::SharedChan<E
|
||||||
image_layer.common.set_transform(original_layer_transform.scale(&800.0f32, &600.0f32, &1f32));
|
image_layer.common.set_transform(original_layer_transform.scale(&800.0f32, &600.0f32, &1f32));
|
||||||
|
|
||||||
let scene = @layers::scene::Scene(layers::layers::ImageLayerKind(image_layer),
|
let scene = @layers::scene::Scene(layers::layers::ImageLayerKind(image_layer),
|
||||||
Size2D(800.0f32, 600.0f32));
|
Size2D(800.0f32, 600.0f32),
|
||||||
|
identity(0.0f32));
|
||||||
|
|
||||||
let done = @mut false;
|
let done = @mut false;
|
||||||
let resize_rate_limiter = @ResizeRateLimiter(move dom_event_chan);
|
let resize_rate_limiter = @ResizeRateLimiter(move dom_event_chan);
|
||||||
|
@ -131,11 +133,6 @@ fn mainloop(mode: Mode, po: comm::Port<Msg>, dom_event_chan: pipes::SharedChan<E
|
||||||
image_layer.set_image(image);
|
image_layer.set_image(image);
|
||||||
image_layer.common.set_transform(original_layer_transform.scale(
|
image_layer.common.set_transform(original_layer_transform.scale(
|
||||||
&(width as f32), &(height as f32), &1.0f32));
|
&(width as f32), &(height as f32), &1.0f32));
|
||||||
|
|
||||||
// FIXME: Cross-crate struct mutability is broken.
|
|
||||||
let size: &mut Size2D<f32>;
|
|
||||||
unsafe { size = cast::transmute(&scene.size); }
|
|
||||||
*size = Size2D(width as f32, height as f32);
|
|
||||||
}
|
}
|
||||||
Exit => {
|
Exit => {
|
||||||
*done = true;
|
*done = true;
|
||||||
|
@ -144,6 +141,29 @@ fn mainloop(mode: Mode, po: comm::Port<Msg>, dom_event_chan: pipes::SharedChan<E
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let adjust_for_window_resizing: fn@() = || {
|
||||||
|
let height = surfaces.front.layer_buffer.size.height as uint;
|
||||||
|
let window_width = glut::get(glut::WindowWidth) as uint;
|
||||||
|
let window_height = glut::get(glut::WindowHeight) as uint;
|
||||||
|
|
||||||
|
// FIXME: Cross-crate struct mutability is broken.
|
||||||
|
let size: &mut Size2D<f32>;
|
||||||
|
unsafe { size = cast::transmute(&scene.size); }
|
||||||
|
*size = Size2D(window_width as f32, window_height as f32);
|
||||||
|
};
|
||||||
|
|
||||||
|
let composite: fn@() = || {
|
||||||
|
#debug("osmain: drawing to screen");
|
||||||
|
|
||||||
|
do util::time::time(~"compositing") {
|
||||||
|
adjust_for_window_resizing();
|
||||||
|
layers::rendergl::render_scene(context, scene);
|
||||||
|
}
|
||||||
|
|
||||||
|
glut::swap_buffers();
|
||||||
|
glut::post_redisplay();
|
||||||
|
};
|
||||||
|
|
||||||
match window {
|
match window {
|
||||||
GlutWindow(window) => {
|
GlutWindow(window) => {
|
||||||
do glut::reshape_func(window) |width, height| {
|
do glut::reshape_func(window) |width, height| {
|
||||||
|
@ -151,19 +171,13 @@ fn mainloop(mode: Mode, po: comm::Port<Msg>, dom_event_chan: pipes::SharedChan<E
|
||||||
|
|
||||||
#debug("osmain: window resized to %d,%d", width as int, height as int);
|
#debug("osmain: window resized to %d,%d", width as int, height as int);
|
||||||
resize_rate_limiter.window_resized(width as uint, height as uint);
|
resize_rate_limiter.window_resized(width as uint, height as uint);
|
||||||
|
|
||||||
|
composite();
|
||||||
}
|
}
|
||||||
|
|
||||||
do glut::display_func() {
|
do glut::display_func() {
|
||||||
check_for_messages();
|
check_for_messages();
|
||||||
|
composite();
|
||||||
#debug("osmain: drawing to screen");
|
|
||||||
|
|
||||||
do util::time::time(~"compositing") {
|
|
||||||
layers::rendergl::render_scene(context, scene);
|
|
||||||
}
|
|
||||||
|
|
||||||
glut::swap_buffers();
|
|
||||||
glut::post_redisplay();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
while !*done {
|
while !*done {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue