mirror of
https://github.com/servo/servo.git
synced 2025-08-08 23:15:33 +01:00
Hook up layout and the renderer
This commit is contained in:
parent
450cef2b69
commit
0374f06a90
3 changed files with 53 additions and 28 deletions
|
@ -41,12 +41,19 @@ fn draw_display_list(
|
||||||
clear(draw_target);
|
clear(draw_target);
|
||||||
|
|
||||||
for display_list.each {|item|
|
for display_list.each {|item|
|
||||||
|
let (r, g, b) = alt check item.item_type {
|
||||||
|
solid_color(r, g, b) { (r, g, b) }
|
||||||
|
};
|
||||||
let bounds = (*item).bounds;
|
let bounds = (*item).bounds;
|
||||||
|
|
||||||
|
let to_float = fn@(u: u8) -> float {
|
||||||
|
(u as float) / 255f
|
||||||
|
};
|
||||||
|
|
||||||
let red_color = {
|
let red_color = {
|
||||||
r: 1f as AzFloat,
|
r: to_float(r) as AzFloat,
|
||||||
g: 0f as AzFloat,
|
g: to_float(g) as AzFloat,
|
||||||
b: 0f as AzFloat,
|
b: to_float(b) as AzFloat,
|
||||||
a: 0.5f as AzFloat
|
a: 0.5f as AzFloat
|
||||||
};
|
};
|
||||||
let red_pattern = AzCreateColorPattern(ptr::addr_of(red_color));
|
let red_pattern = AzCreateColorPattern(ptr::addr_of(red_color));
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
import gfx::geom::*;
|
import gfx::geom::*;
|
||||||
|
|
||||||
enum item_type {
|
enum item_type {
|
||||||
solid_color
|
solid_color(u8, u8, u8),
|
||||||
|
// FIXME: Shape code does not understand the alignment without this
|
||||||
|
padding(u8, u8, u8, u8)
|
||||||
}
|
}
|
||||||
|
|
||||||
enum display_item = {
|
enum display_item = {
|
||||||
|
|
|
@ -13,6 +13,7 @@ import gfx::renderer;
|
||||||
import dom::base::*;
|
import dom::base::*;
|
||||||
import display_list::*;
|
import display_list::*;
|
||||||
import dom::rcu::scope;
|
import dom::rcu::scope;
|
||||||
|
import base::tree;
|
||||||
|
|
||||||
enum msg {
|
enum msg {
|
||||||
build,
|
build,
|
||||||
|
@ -24,14 +25,30 @@ fn layout(renderer: chan<renderer::msg>) -> chan<msg> {
|
||||||
spawn_listener::<msg> {|po|
|
spawn_listener::<msg> {|po|
|
||||||
|
|
||||||
let s = scope();
|
let s = scope();
|
||||||
let box = base::new_box(s.new_node(nk_div));
|
let n0 = s.new_node(nk_img(size(int_to_au(10),int_to_au(10))));
|
||||||
|
let n1 = s.new_node(nk_img(size(int_to_au(10),int_to_au(15))));
|
||||||
|
let n2 = s.new_node(nk_img(size(int_to_au(10),int_to_au(20))));
|
||||||
|
let n3 = s.new_node(nk_div);
|
||||||
|
|
||||||
|
tree::add_child(n3, n0);
|
||||||
|
tree::add_child(n3, n1);
|
||||||
|
tree::add_child(n3, n2);
|
||||||
|
|
||||||
|
let b0 = base::linked_box(n0);
|
||||||
|
let b1 = base::linked_box(n1);
|
||||||
|
let b2 = base::linked_box(n2);
|
||||||
|
let b3 = base::linked_box(n3);
|
||||||
|
|
||||||
|
tree::add_child(b3, b0);
|
||||||
|
tree::add_child(b3, b1);
|
||||||
|
tree::add_child(b3, b2);
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
alt recv(po) {
|
alt recv(po) {
|
||||||
build {
|
build {
|
||||||
|
#debug("layout: received layout request");
|
||||||
base::reflow_block(box, int_to_au(800));
|
base::reflow_block(b3, int_to_au(800));
|
||||||
let dlist = build_display_list(box);
|
let dlist = build_display_list(b3);
|
||||||
|
|
||||||
send(renderer, gfx::renderer::render(dlist));
|
send(renderer, gfx::renderer::render(dlist));
|
||||||
}
|
}
|
||||||
|
@ -44,24 +61,23 @@ fn layout(renderer: chan<renderer::msg>) -> chan<msg> {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn build_display_list(_box: @base::box) -> display_list::display_list {
|
fn build_display_list(box: @base::box) -> display_list::display_list {
|
||||||
let r = core::rand::rng();
|
let mut list = [box_to_display_item(box)];
|
||||||
[
|
|
||||||
display_item({
|
for tree::each_child(box) {|c|
|
||||||
item_type: solid_color,
|
list += build_display_list(c);
|
||||||
bounds: geom::box(
|
}
|
||||||
int_to_au(r.next() as int % 800 - 100),
|
|
||||||
int_to_au(r.next() as int % 600 - 100),
|
#debug("display_list: %?", list);
|
||||||
int_to_au(200),
|
ret list;
|
||||||
int_to_au(200))
|
}
|
||||||
}),
|
|
||||||
display_item({
|
fn box_to_display_item(box: @base::box) -> display_item {
|
||||||
item_type: solid_color,
|
let r = rand::rng();
|
||||||
bounds: geom::box(
|
let item = display_item({
|
||||||
int_to_au(r.next() as int % 800 - 100),
|
item_type: solid_color(r.next() as u8, r.next() as u8, r.next() as u8),
|
||||||
int_to_au(r.next() as int % 600 - 100),
|
bounds: box.bounds
|
||||||
int_to_au(200),
|
});
|
||||||
int_to_au(200))
|
#debug("layout: display item: %?", item);
|
||||||
})
|
ret item;
|
||||||
]
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue