diff options
author | Patrick Walton <pcwalton@mimiga.net> | 2012-06-14 14:51:31 -0700 |
---|---|---|
committer | Patrick Walton <pcwalton@mimiga.net> | 2012-06-14 14:51:51 -0700 |
commit | 3084d15a364e7b20d216d0a19e4fbc2557ba7435 (patch) | |
tree | 445ac9d19ed203cc17b6a12638c214b935f35e40 /src | |
parent | 56ec9a9a0291de8ee28af51a0e4e345176711128 (diff) | |
download | servo-3084d15a364e7b20d216d0a19e4fbc2557ba7435.tar.gz servo-3084d15a364e7b20d216d0a19e4fbc2557ba7435.zip |
Move to rust-geom
Diffstat (limited to 'src')
m--------- | src/rust-harfbuzz | 0 | ||||
m--------- | src/rust-mozjs | 0 | ||||
m--------- | src/rust-stb-image | 0 | ||||
-rw-r--r-- | src/servo/dom/base.rs | 5 | ||||
-rw-r--r-- | src/servo/gfx/geom.rs | 41 | ||||
-rw-r--r-- | src/servo/gfx/geometry.rs | 39 | ||||
-rw-r--r-- | src/servo/gfx/renderer.rs | 2 | ||||
-rw-r--r-- | src/servo/gfx/surface.rs | 8 | ||||
-rw-r--r-- | src/servo/layout/base.rs | 31 | ||||
-rw-r--r-- | src/servo/layout/block.rs | 10 | ||||
-rw-r--r-- | src/servo/layout/box_builder.rs | 4 | ||||
-rw-r--r-- | src/servo/layout/display_list.rs | 5 | ||||
-rw-r--r-- | src/servo/layout/inline.rs | 9 | ||||
-rw-r--r-- | src/servo/layout/layout.rs | 26 | ||||
-rw-r--r-- | src/servo/layout/text.rs | 23 | ||||
-rw-r--r-- | src/servo/parser/html_builder.rs | 28 | ||||
-rwxr-xr-x | src/servo/servo.rc | 3 | ||||
-rw-r--r-- | src/servo/text/glyph.rs | 9 | ||||
-rw-r--r-- | src/servo/text/shaper.rs | 11 |
19 files changed, 138 insertions, 116 deletions
diff --git a/src/rust-harfbuzz b/src/rust-harfbuzz -Subproject b6eb91692604522fb2823158bb570c025c87801 +Subproject 43db075b2aac4c9b8623736b034479523cc2005 diff --git a/src/rust-mozjs b/src/rust-mozjs -Subproject 6ddfc6bcda65ea6d318432813ab7d940d569803 +Subproject ed52cbf4179aef19a5afa507faf140e1152dd6d diff --git a/src/rust-stb-image b/src/rust-stb-image -Subproject 5eb1ee67bc91d5e52a8810341b057211fbe5cb9 +Subproject 73229f656e75517c3906eb20ba1a48e8df3d258 diff --git a/src/servo/dom/base.rs b/src/servo/dom/base.rs index 5e8684d07d6..19435e7ae7b 100644 --- a/src/servo/dom/base.rs +++ b/src/servo/dom/base.rs @@ -1,5 +1,6 @@ import dom::rcu::{writer_methods}; -import gfx::geom::{au, size}; +import gfx::geometry::au; +import geom::size::Size2D; import layout::base::layout_data; import util::tree; import dvec::{dvec, extensions}; @@ -50,7 +51,7 @@ class attr { enum element_subclass { es_unknown, es_div, - es_img({mut size: size<au>}), + es_img({mut size: Size2D<au>}), es_head } diff --git a/src/servo/gfx/geom.rs b/src/servo/gfx/geom.rs deleted file mode 100644 index a66f842f336..00000000000 --- a/src/servo/gfx/geom.rs +++ /dev/null @@ -1,41 +0,0 @@ -type point<A> = { x: A, y: A }; -type size<A> = { width: A, height: A }; -type rect<A> = { origin: point<A>, size: size<A> }; - -enum au = int; - -impl size for size<int> { - fn area() -> int { - self.width * self.height - } -} - -fn point<A:copy>(x: A, y: A) -> point<A> { - {x: x, y: y} -} - -fn size<A:copy>(w: A, h: A) -> size<A> { - {width: w, height: h} -} - -fn box<A:copy>(x: A, y: A, w: A, h: A) -> rect<A> { - {origin: point(x, y), - size: size(w, h)} -} - -fn zero_rect_au() -> rect<au> { - let z = au(0); - {origin: point(z, z), size: zero_size_au()} -} - -fn zero_size_au() -> size<au> { - {width: au(0), height: au(0)} -} - -pure fn px_to_au(i: int) -> au { - au(i * 60) -} - -pure fn au_to_px(au: au) -> int { - *au / 60 -} diff --git a/src/servo/gfx/geometry.rs b/src/servo/gfx/geometry.rs new file mode 100644 index 00000000000..dd6c5b2e69d --- /dev/null +++ b/src/servo/gfx/geometry.rs @@ -0,0 +1,39 @@ +import geom::point::Point2D; +import geom::rect::Rect; +import geom::size::Size2D; +import num::num; + +enum au = int; + +impl au of num for au { + fn add(&&other: au) -> au { au(*self + *other) } + fn sub(&&other: au) -> au { au(*self - *other) } + fn mul(&&other: au) -> au { au(*self * *other) } + fn div(&&other: au) -> au { au(*self / *other) } + fn modulo(&&other: au) -> au { au(*self % *other) } + fn neg() -> au { au(-*self) } + + fn to_int() -> int { *self } + fn from_int(n: int) -> au { au(n) } +} + +fn box<A:copy num>(x: A, y: A, w: A, h: A) -> Rect<A> { + Rect(Point2D(x, y), Size2D(w, h)) +} + +fn zero_rect_au() -> Rect<au> { + let z = au(0); + Rect(Point2D(z, z), Size2D(z, z)) +} + +fn zero_size_au() -> Size2D<au> { + Size2D(au(0), au(0)) +} + +pure fn px_to_au(i: int) -> au { + au(i * 60) +} + +pure fn au_to_px(au: au) -> int { + *au / 60 +} diff --git a/src/servo/gfx/renderer.rs b/src/servo/gfx/renderer.rs index 6de0bfb6434..34b1cf8ebce 100644 --- a/src/servo/gfx/renderer.rs +++ b/src/servo/gfx/renderer.rs @@ -1,5 +1,5 @@ import platform::osmain; -import geom::*; +import geometry::*; import comm::*; import image::base::image; import dl = layout::display_list; diff --git a/src/servo/gfx/surface.rs b/src/servo/gfx/surface.rs index 816dbaeb1c7..55f5f73e128 100644 --- a/src/servo/gfx/surface.rs +++ b/src/servo/gfx/surface.rs @@ -1,5 +1,5 @@ -import gfx::geom; -import gfx::geom::size; +import geom::size::Size2D; +import int::num; enum format { fo_rgba_8888 @@ -7,7 +7,7 @@ enum format { } type image_surface = { - size: geom::size<int>, + size: Size2D<int>, format: format, buffer: [u8] }; @@ -20,7 +20,7 @@ impl format for format { } } -fn image_surface(size: geom::size<int>, format: format) -> image_surface { +fn image_surface(size: Size2D<int>, format: format) -> image_surface { { size: copy size, format: format, diff --git a/src/servo/layout/base.rs b/src/servo/layout/base.rs index 7a499fc38d9..6c3d6b932bc 100644 --- a/src/servo/layout/base.rs +++ b/src/servo/layout/base.rs @@ -3,8 +3,11 @@ import dom::base::{element, es_div, es_img, node_data, node_kind, node}; import dom::rcu; import dom::rcu::reader_methods; -import gfx::geom; -import gfx::geom::{size, rect, point, au, zero_size_au}; +import gfx::geometry; +import gfx::geometry::{au, zero_size_au}; +import geom::point::Point2D; +import geom::rect::Rect; +import geom::size::Size2D; import image::base::image; import /*layout::*/block::block_layout_methods; import /*layout::*/inline::inline_layout_methods; @@ -15,7 +18,7 @@ import util::tree; enum box_kind { bk_block, bk_inline, - bk_intrinsic(@geom::size<au>), + bk_intrinsic(@Size2D<au>), bk_text(@text_box) } @@ -32,7 +35,7 @@ class appearance { enum box = { tree: tree::fields<@box>, node: node, - mut bounds: geom::rect<au>, + mut bounds: Rect<au>, kind: box_kind, appearance: appearance }; @@ -102,7 +105,7 @@ impl layout_methods for @box { } #[doc="The trivial reflow routine for instrinsically-sized frames."] - fn reflow_intrinsic(size: geom::size<au>) { + fn reflow_intrinsic(size: Size2D<au>) { self.bounds.size = copy size; #debug["reflow_intrinsic size=%?", copy self.bounds]; @@ -162,7 +165,7 @@ mod test { } */ - fn flat_bounds(root: @box) -> [geom::rect<au>] { + fn flat_bounds(root: @box) -> [Rect<au>] { let mut r = []; for tree::each_child(btree, root) {|c| r += flat_bounds(c); @@ -175,13 +178,13 @@ mod test { fn do_layout() { let s = scope(); - fn mk_img(size: size<au>) -> ~dom::base::element_subclass { + fn mk_img(size: Size2D<au>) -> ~dom::base::element_subclass { ~es_img({mut size: size}) } - let n0 = s.new_node(nk_element(element("img", mk_img(size(au(10),au(10)))))); - let n1 = s.new_node(nk_element(element("img", mk_img(size(au(10),au(10)))))); - let n2 = s.new_node(nk_element(element("img", mk_img(size(au(10),au(20)))))); + let n0 = s.new_node(nk_element(element("img", mk_img(Size2D(au(10),au(10)))))); + let n1 = s.new_node(nk_element(element("img", mk_img(Size2D(au(10),au(10)))))); + let n2 = s.new_node(nk_element(element("img", mk_img(Size2D(au(10),au(20)))))); let n3 = s.new_node(nk_element(element("div", ~es_div))); tree::add_child(s, n3, n0); @@ -200,10 +203,10 @@ mod test { b3.reflow_block(au(100)); let fb = flat_bounds(b3); #debug["fb=%?", fb]; - assert fb == [geom::box(au(0), au(0), au(10), au(10)), // n0 - geom::box(au(0), au(10), au(10), au(15)), // n1 - geom::box(au(0), au(25), au(10), au(20)), // n2 - geom::box(au(0), au(0), au(100), au(45))]; // n3 + assert fb == [geometry::box(au(0), au(0), au(10), au(10)), // n0 + geometry::box(au(0), au(10), au(10), au(15)), // n1 + geometry::box(au(0), au(25), au(10), au(20)), // n2 + geometry::box(au(0), au(0), au(100), au(45))]; // n3 } } diff --git a/src/servo/layout/block.rs b/src/servo/layout/block.rs index c890f5b00b0..1e1e0e3b8e9 100644 --- a/src/servo/layout/block.rs +++ b/src/servo/layout/block.rs @@ -1,6 +1,8 @@ #[doc="Block layout."] -import gfx::geom::au; +import geom::point::Point2D; +import geom::size::Size2D; +import gfx::geometry::au; import /*layout::*/base::*; // FIXME: Can't get around import *; resolve bug. import util::tree; @@ -24,13 +26,13 @@ impl block_layout_methods for @box { for tree::each_child(btree, self) {|c| let mut blk_available_width = available_width; // FIXME subtract borders, margins, etc - c.bounds.origin = {x: au(0), y: au(current_height)}; + c.bounds.origin = Point2D(au(0), au(current_height)); c.reflow(blk_available_width); current_height += *c.bounds.size.height; } - self.bounds.size = {width: available_width, // FIXME - height: au(current_height)}; + // FIXME: Width is wrong in the calculation below. + self.bounds.size = Size2D(available_width, au(current_height)); #debug["reflow_block size=%?", copy self.bounds]; } diff --git a/src/servo/layout/box_builder.rs b/src/servo/layout/box_builder.rs index a6d9c595cb7..c95b4ec15bb 100644 --- a/src/servo/layout/box_builder.rs +++ b/src/servo/layout/box_builder.rs @@ -3,7 +3,7 @@ import dom::base::{element, es_div, es_img, nk_element, nk_text, node}; import dom::style::{display_type, di_block, di_inline, di_none}; import dom::rcu::reader_methods; -import gfx::geom; +import gfx::geometry; import /*layout::*/base::{appearance, bk_block, bk_inline, bk_intrinsic}; import /*layout::*/base::{bk_text, box, box_kind, btree, node_methods, ntree}; import /*layout::*/base::{rd_tree_ops, wr_tree_ops}; @@ -30,7 +30,7 @@ enum ctxt = { fn new_box(n: node, kind: box_kind) -> @box { @box({tree: tree::empty(), node: n, - mut bounds: geom::zero_rect_au(), + mut bounds: geometry::zero_rect_au(), kind: kind, appearance: appearance() }) } diff --git a/src/servo/layout/display_list.rs b/src/servo/layout/display_list.rs index d159f368079..c51d57d3ac7 100644 --- a/src/servo/layout/display_list.rs +++ b/src/servo/layout/display_list.rs @@ -1,4 +1,5 @@ -import gfx::geom::*; +import gfx::geometry::*; +import geom::rect::Rect; import image::base::image; enum item_type { @@ -10,7 +11,7 @@ enum item_type { enum display_item = { item_type: item_type, - bounds: rect<au> + bounds: Rect<au> }; type display_list = [display_item]; diff --git a/src/servo/layout/inline.rs b/src/servo/layout/inline.rs index 6272bdc8dd2..7c5b388092d 100644 --- a/src/servo/layout/inline.rs +++ b/src/servo/layout/inline.rs @@ -2,7 +2,9 @@ import dom::rcu; import dom::rcu::reader_methods; -import gfx::geom::au; +import geom::point::Point2D; +import geom::size::Size2D; +import gfx::geometry::au; import /*layout::*/base::*; // FIXME: Can't get around import *; resolve bug. import /*layout::*/style::style::*; // ditto import util::tree; @@ -21,15 +23,14 @@ impl inline_layout_methods for @box { let mut current_height = 0; for tree::each_child(btree, self) { |kid| - kid.bounds.origin = { x: au(x), y: au(y) }; + kid.bounds.origin = Point2D(au(x), au(y)); kid.reflow(au(inline_available_width)); inline_available_width -= *kid.bounds.size.width; x += *kid.bounds.size.width; current_height = int::max(current_height, *kid.bounds.size.height); } - self.bounds.size = { width: available_width, - height: au(current_height) }; + self.bounds.size = Size2D(available_width, au(current_height)); #debug["reflow_inline size=%?", copy self.bounds]; } diff --git a/src/servo/layout/layout.rs b/src/servo/layout/layout.rs index fd82928b5cb..a83e5393b2a 100644 --- a/src/servo/layout/layout.rs +++ b/src/servo/layout/layout.rs @@ -7,7 +7,9 @@ them to be rendered import task::*; import comm::*; -import gfx::geom::{au, au_to_px, px_to_au, point, box}; +import gfx::geometry::{au, au_to_px, box, px_to_au}; +import geom::point::Point2D; +import geom::rect::Rect; import gfx::renderer; import dom::base::node; import dom::rcu::scope; @@ -52,16 +54,18 @@ fn layout(to_renderer: chan<renderer::msg>) -> chan<msg> { #[doc=" -Builds a display list for a box and all its children. -Args: --box: the box to build the display list for --origin: the coordinates of upper-left corner of the box containing - the passed in box. +Builds a display list for a box and all its children. + +# Arguments + +* `box` - The box to build the display list for. +* `origin` - The coordinates of upper-left corner of the box containing the + passed-in box. "] -fn build_display_list_from_origin(box: @base::box, origin : point<au>) +fn build_display_list_from_origin(box: @base::box, origin: Point2D<au>) -> dl::display_list { - let box_origin = point( + let box_origin = Point2D( px_to_au(au_to_px(origin.x) + au_to_px(box.bounds.origin.x)), px_to_au(au_to_px(origin.y) + au_to_px(box.bounds.origin.y))); #debug("Handed origin %?, box has bounds %?, starting with origin %?", origin, copy box.bounds, box_origin); @@ -78,7 +82,7 @@ fn build_display_list_from_origin(box: @base::box, origin : point<au>) } fn build_display_list(box : @base::box) -> dl::display_list { - ret build_display_list_from_origin(box, point(au(0), au(0))); + ret build_display_list_from_origin(box, Point2D(au(0), au(0))); } #[doc=" @@ -89,13 +93,13 @@ Args: -origin: the coordinates of upper-left corner of the passed in box. "] -fn box_to_display_item(box: @base::box, origin : point<au>) +fn box_to_display_item(box: @base::box, origin: Point2D<au>) -> dl::display_item { let mut item; #debug("request to display a box from origin %?", origin); - let bounds = {origin : origin, size : box.bounds.size}; + let bounds = Rect(origin, copy box.bounds.size); alt (box.appearance.background_image, box.appearance.background_color) { (some(image), some(*)) | (some(image), none) { diff --git a/src/servo/layout/text.rs b/src/servo/layout/text.rs index 10c03e3d788..6bb8f5def9f 100644 --- a/src/servo/layout/text.rs +++ b/src/servo/layout/text.rs @@ -1,6 +1,7 @@ #[doc="Text layout."] -import gfx::geom::au; +import geom::size::Size2D; +import gfx::geometry::au; import /*layout::*/base::*; // FIXME: Can't get around import *; resolve bug. import servo_text::text_run::text_run; @@ -26,16 +27,16 @@ impl text_layout_methods for @box { subbox.run = some(copy run); run.shape(); - self.bounds.size = { - width: - alt vec::last_opt(run.glyphs.get()) { - some(glyph) { - au(*glyph.pos.offset.x + *glyph.pos.advance.x) - } - none { au(0) } - }, - height: au(60 * 14) - }; + self.bounds.size = + Size2D(alt vec::last_opt(run.glyphs.get()) { + some(glyph) { + au(*glyph.pos.offset.x + *glyph.pos.advance.x) + } + none { + au(0) + } + }, + au(60 * 14)); } } diff --git a/src/servo/parser/html_builder.rs b/src/servo/parser/html_builder.rs index 398b65e8f3b..738dda8692c 100644 --- a/src/servo/parser/html_builder.rs +++ b/src/servo/parser/html_builder.rs @@ -5,10 +5,12 @@ import dom::base::{attr, element, element_subclass, es_div, es_head, es_img}; import dom::base::{es_unknown, methods, nk_element, nk_text, rd_tree_ops}; import dom::base::{wr_tree_ops}; import dom = dom::base; +import dvec::extensions; +import geom::size::Size2D; +import gfx::geometry; +import gfx::geometry::au; import parser = parser::lexer::html; import parser::token; -import gfx::geom; -import dvec::extensions; fn link_up_attribute(scope: dom::node_scope, node: dom::node, -key: str, -value: str) { @@ -22,14 +24,20 @@ fn link_up_attribute(scope: dom::node_scope, node: dom::node, -key: str, alt *element.subclass { es_img(img) if key == "width" { alt int::from_str(value) { - none { /* drop on the floor */ } - some(s) { img.size.width = geom::px_to_au(s); } + none { + // Drop on the floor. + } + some(s) { img.size.width = geometry::px_to_au(s); } } } es_img(img) if key == "height" { alt int::from_str(value) { - none { /* drop on the floor */ } - some(s) { img.size.height = geom::px_to_au(s); } + none { + // Drop on the floor. + } + some(s) { + img.size.height = geometry::px_to_au(s); + } } } es_div | es_img(*) | es_head | es_unknown { @@ -48,10 +56,10 @@ fn build_element_subclass(tag_name: str) -> ~element_subclass { alt tag_name { "div" { ret ~es_div; } "img" { - ret ~es_img({mut size: { - width: geom::px_to_au(100), - height: geom::px_to_au(100) - }}); + ret ~es_img({ + mut size: Size2D(geometry::px_to_au(100), + geometry::px_to_au(100)) + }); } "head" { ret ~es_head; } _ { ret ~es_unknown; } diff --git a/src/servo/servo.rc b/src/servo/servo.rc index b638c60b725..e18f182a67a 100755 --- a/src/servo/servo.rc +++ b/src/servo/servo.rc @@ -11,6 +11,7 @@ use sdl; use azure; use js; use stb_image; +use geom; mod dom { mod base; @@ -19,7 +20,7 @@ mod dom { } mod gfx { - mod geom; + mod geometry; mod surface; mod renderer; mod pngsink; diff --git a/src/servo/text/glyph.rs b/src/servo/text/glyph.rs index b446da09441..e819a33a1da 100644 --- a/src/servo/text/glyph.rs +++ b/src/servo/text/glyph.rs @@ -1,10 +1,11 @@ -import gfx::geom::{au, point}; +import gfx::geometry::au; +import geom::point::Point2D; #[doc="The position of a glyph on the screen."] class glyph_pos { - let advance: point<au>; - let offset: point<au>; - new(advance: point<au>, offset: point<au>) { + let advance: Point2D<au>; + let offset: Point2D<au>; + new(advance: Point2D<au>, offset: Point2D<au>) { self.advance = advance; self.offset = offset; } diff --git a/src/servo/text/shaper.rs b/src/servo/text/shaper.rs index 90f2dc3ba4a..035a3253c1f 100644 --- a/src/servo/text/shaper.rs +++ b/src/servo/text/shaper.rs @@ -7,7 +7,8 @@ import libc::{c_uint, c_int, c_void}; import font::font; import glyph::{glyph, glyph_pos}; import ptr::{null, addr_of, offset}; -import gfx::geom::{point, px_to_au}; +import gfx::geometry::{au, px_to_au}; +import geom::point::Point2D; import unsafe::reinterpret_cast; import harfbuzz::{HB_MEMORY_MODE_READONLY, @@ -130,10 +131,10 @@ crust fn glyph_func(_font: *hb_font_t, } fn hb_glyph_pos_to_servo_glyph_pos(hb_pos: hb_glyph_position_t) -> glyph_pos { - glyph_pos(point(px_to_au(hb_pos.x_advance as int), - px_to_au(hb_pos.y_advance as int)), - point(px_to_au(hb_pos.x_offset as int), - px_to_au(hb_pos.y_offset as int))) + glyph_pos(Point2D(px_to_au(hb_pos.x_advance as int), + px_to_au(hb_pos.y_advance as int)), + Point2D(px_to_au(hb_pos.x_offset as int), + px_to_au(hb_pos.y_offset as int))) } #[test] |