diff --git a/Cargo.lock b/Cargo.lock index 86b293b867e..ea2fc66c898 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,6 +4,7 @@ version = "0.0.1" dependencies = [ "compositing 0.0.1", "gfx 0.0.1", + "glfw_app 0.0.1", "layout 0.0.1", "msg 0.0.1", "net 0.0.1", @@ -32,7 +33,7 @@ dependencies = [ "egl 0.1.0 (git+https://github.com/servo/rust-egl#88f2a13812ddbce2bf2317221663a61c31b3e220)", "freetype 0.1.0 (git+https://github.com/servo/rust-freetype#0b03da276e4bdeae2300596dabc4ccb16733ad70)", "geom 0.1.0 (git+https://github.com/servo/rust-geom#90add8d65273c8a46aa16d73959e29a51d0c282d)", - "glfw 0.0.1 (git+https://github.com/servo/glfw-rs?ref=servo#7ccfaca315a43d97914e1601c90ad348ef190edf)", + "glfw 0.0.1 (git+https://github.com/servo/glfw-rs?ref=servo#a15c2d04b8969aea653841d1d79e5fdf68de664b)", "layers 0.1.0 (git+https://github.com/servo/rust-layers#180d3ff2f28d239e32d01982c76be5c97d5763a8)", "opengles 0.1.0 (git+https://github.com/servo/rust-opengles#6776e9c07feb149d34b087039ecf6b2c143e3afc)", "skia-sys 0.0.20130412 (git+https://github.com/servo/skia#6d696712962fd0d41120b7a414a48417da8e6a92)", @@ -64,8 +65,6 @@ dependencies = [ "devtools_traits 0.0.1", "geom 0.1.0 (git+https://github.com/servo/rust-geom#90add8d65273c8a46aa16d73959e29a51d0c282d)", "gfx 0.0.1", - "glfw 0.0.1 (git+https://github.com/servo/glfw-rs?ref=servo#7ccfaca315a43d97914e1601c90ad348ef190edf)", - "glut 0.0.1 (git+https://github.com/servo/rust-glut#01af0162ea0322ad1a40d6adb023a39813605949)", "layers 0.1.0 (git+https://github.com/servo/rust-layers#180d3ff2f28d239e32d01982c76be5c97d5763a8)", "layout_traits 0.0.1", "msg 0.0.1", @@ -195,7 +194,7 @@ dependencies = [ [[package]] name = "glfw" version = "0.0.1" -source = "git+https://github.com/servo/glfw-rs?ref=servo#7ccfaca315a43d97914e1601c90ad348ef190edf" +source = "git+https://github.com/servo/glfw-rs?ref=servo#a15c2d04b8969aea653841d1d79e5fdf68de664b" dependencies = [ "glfw-sys 3.0.4 (git+https://github.com/servo/glfw?ref=cargo-3.0.4#65a2b4721276589d9de24f6a9999a2db37286cae)", "semver 0.0.1 (git+https://github.com/rust-lang/semver#d04583a173395b76c1eaa15cc630a5f6f8f0ae10)", @@ -207,11 +206,16 @@ version = "3.0.4" source = "git+https://github.com/servo/glfw?ref=cargo-3.0.4#65a2b4721276589d9de24f6a9999a2db37286cae" [[package]] -name = "glut" +name = "glfw_app" version = "0.0.1" -source = "git+https://github.com/servo/rust-glut#01af0162ea0322ad1a40d6adb023a39813605949" dependencies = [ - "opengles 0.1.0 (git+https://github.com/servo/rust-opengles#6776e9c07feb149d34b087039ecf6b2c143e3afc)", + "alert 0.1.0 (git+https://github.com/servo/rust-alert#fdc24f13be8d8a2d15214ec228d166b3221b809e)", + "compositing 0.0.1", + "geom 0.1.0 (git+https://github.com/servo/rust-geom#90add8d65273c8a46aa16d73959e29a51d0c282d)", + "glfw 0.0.1 (git+https://github.com/servo/glfw-rs?ref=servo#a15c2d04b8969aea653841d1d79e5fdf68de664b)", + "layers 0.1.0 (git+https://github.com/servo/rust-layers#180d3ff2f28d239e32d01982c76be5c97d5763a8)", + "msg 0.0.1", + "util 0.0.1", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 2472f99be99..a48a9b7ecd5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,7 +6,7 @@ authors = ["The Servo Project Developers"] [lib] name = "servo" -crate-type = ["rlib", "dylib"] +crate-type = ["rlib"] [[bin]] name = "servo" @@ -24,6 +24,8 @@ name = "contenttest" path = "tests/contenttest.rs" harness = false +[features] +default = ["glfw_app"] [dependencies.compositing] path = "components/compositing" @@ -46,5 +48,9 @@ path = "components/layout" [dependencies.gfx] path = "components/gfx" +[dependencies.glfw_app] +path = "ports/glfw" +optional = true + [dependencies.url] git = "https://github.com/servo/rust-url" diff --git a/README.md b/README.md index 5794bf98b55..e418a618d74 100644 --- a/README.md +++ b/README.md @@ -89,7 +89,6 @@ git clone https://github.com/servo/servo cd servo ANDROID_TOOLCHAIN=/path/to/toolchain ANDROID_NDK=/path/to/ndk PATH=$PATH:/path/to/toolchain/bin ./mach build --android cd ports/android -ANDROID_NDK=/path/to/ndk ANDROID_SDK=/path/to/sdk make ANDROID_SDK=/path/to/sdk make install ``` diff --git a/components/compositing/Cargo.toml b/components/compositing/Cargo.toml index e306ae8fd94..83a4bbee5cc 100644 --- a/components/compositing/Cargo.toml +++ b/components/compositing/Cargo.toml @@ -40,10 +40,6 @@ git = "https://github.com/servo/rust-azure" [dependencies.geom] git = "https://github.com/servo/rust-geom" -[dependencies.glfw] -git = "https://github.com/servo/glfw-rs" -branch = "servo" - [dependencies.layers] git = "https://github.com/servo/rust-layers" @@ -61,7 +57,3 @@ git = "https://github.com/servo/rust-core-graphics" [dependencies.core_text] git = "https://github.com/servo/rust-core-text" - -[dependencies.glut] -git = "https://github.com/servo/rust-glut" - diff --git a/components/compositing/compositor.rs b/components/compositing/compositor.rs index af19496be88..6aa0ca46913 100644 --- a/components/compositing/compositor.rs +++ b/components/compositing/compositor.rs @@ -11,7 +11,6 @@ use constellation::SendableFrameTree; use events; use events::ScrollPositionChanged; use pipeline::CompositionPipeline; -use platform::{Application, Window}; use windowing; use windowing::{FinishedWindowEvent, IdleWindowEvent, LoadUrlWindowEvent, MouseWindowClickEvent}; use windowing::{MouseWindowEvent, MouseWindowEventClass, MouseWindowMouseDownEvent}; @@ -54,7 +53,7 @@ use time::precise_time_s; use url::Url; -pub struct IOCompositor { +pub struct IOCompositor { /// The application window. window: Rc, @@ -136,22 +135,13 @@ enum ShutdownState { FinishedShuttingDown, } -impl IOCompositor { - fn new(app: &Application, - opts: Opts, - port: Receiver, - constellation_chan: ConstellationChan, - time_profiler_chan: TimeProfilerChan, - memory_profiler_chan: MemoryProfilerChan) -> IOCompositor { - - let scale_factor = match opts.device_pixels_per_px { - Some(device_pixels_per_px) => device_pixels_per_px, - None => ScaleFactor(1.0), - }; - let framebuffer_size = opts.initial_window_size.as_f32() * scale_factor; - - let window: Rc = WindowMethods::new(app, opts.output_file.is_none(), - framebuffer_size.as_uint()); +impl IOCompositor { + fn new(window: Rc, + opts: Opts, + port: Receiver, + constellation_chan: ConstellationChan, + time_profiler_chan: TimeProfilerChan, + memory_profiler_chan: MemoryProfilerChan) -> IOCompositor { // Create an initial layer tree. // @@ -192,13 +182,13 @@ impl IOCompositor { } } - pub fn create(app: &Application, + pub fn create(window: Rc, opts: Opts, port: Receiver, constellation_chan: ConstellationChan, time_profiler_chan: TimeProfilerChan, memory_profiler_chan: MemoryProfilerChan) { - let mut compositor = IOCompositor::new(app, + let mut compositor = IOCompositor::new(window, opts, port, constellation_chan, diff --git a/components/compositing/compositor_task.rs b/components/compositing/compositor_task.rs index 786c05f27da..aa133741cea 100644 --- a/components/compositing/compositor_task.rs +++ b/components/compositing/compositor_task.rs @@ -7,8 +7,7 @@ pub use windowing; use compositor; use headless; pub use constellation::SendableFrameTree; -use windowing::{ApplicationMethods, WindowMethods}; -use platform::Application; +use windowing::WindowMethods; use azure::azure_hl::{SourceSurfaceMethods, Color}; use geom::point::Point2D; @@ -23,6 +22,7 @@ use servo_util::memory::MemoryProfilerChan; use servo_util::opts::Opts; use servo_util::time::TimeProfilerChan; use std::comm::{channel, Sender, Receiver}; +use std::rc::Rc; use url::Url; @@ -183,28 +183,9 @@ pub enum Msg { LoadComplete(PipelineId, Url), } -pub enum CompositorMode { - Windowed(Application), - Headless -} - -pub struct CompositorTask { - pub mode: CompositorMode, -} +pub struct CompositorTask; impl CompositorTask { - fn new(is_headless: bool) -> CompositorTask { - let mode: CompositorMode = if is_headless { - Headless - } else { - Windowed(ApplicationMethods::new()) - }; - - CompositorTask { - mode: mode - } - } - /// Creates a graphics context. Platform-specific. /// /// FIXME(pcwalton): Probably could be less platform-specific, using the metadata abstraction. @@ -217,24 +198,24 @@ impl CompositorTask { NativeCompositingGraphicsContext::new() } - pub fn create(opts: Opts, + pub fn create( + window: Option>, + opts: Opts, port: Receiver, constellation_chan: ConstellationChan, time_profiler_chan: TimeProfilerChan, memory_profiler_chan: MemoryProfilerChan) { - let compositor = CompositorTask::new(opts.headless); - - match compositor.mode { - Windowed(ref app) => { - compositor::IOCompositor::create(app, + match window { + Some(window) => { + compositor::IOCompositor::create(window, opts, port, constellation_chan.clone(), time_profiler_chan, memory_profiler_chan) } - Headless => { + None => { headless::NullCompositor::create(port, constellation_chan.clone(), time_profiler_chan, diff --git a/components/compositing/lib.rs b/components/compositing/lib.rs index 1b8131ec299..44592caa61c 100644 --- a/components/compositing/lib.rs +++ b/components/compositing/lib.rs @@ -19,10 +19,6 @@ extern crate azure; extern crate devtools_traits; extern crate geom; extern crate gfx; -#[cfg(not(target_os="android"))] -extern crate glfw; -#[cfg(target_os="android")] -extern crate glut; extern crate layers; extern crate layout_traits; extern crate opengles; @@ -56,7 +52,4 @@ mod headless; pub mod pipeline; pub mod constellation; -mod windowing; - -#[path="platform/mod.rs"] -pub mod platform; +pub mod windowing; diff --git a/components/compositing/windowing.rs b/components/compositing/windowing.rs index 6a90167628a..5091ee50f15 100644 --- a/components/compositing/windowing.rs +++ b/components/compositing/windowing.rs @@ -10,7 +10,6 @@ use geom::size::TypedSize2D; use layers::geometry::DevicePixel; use servo_msg::compositor_msg::{ReadyState, RenderState}; use servo_util::geometry::ScreenPx; -use std::rc::Rc; pub enum MouseWindowEvent { MouseWindowClickEvent(uint, TypedPoint2D), @@ -54,14 +53,7 @@ pub enum WindowEvent { QuitWindowEvent, } -/// Methods for an abstract Application. -pub trait ApplicationMethods { - fn new() -> Self; -} - -pub trait WindowMethods { - /// Creates a new window. - fn new(app: &A, is_foreground: bool, size: TypedSize2D) -> Rc; +pub trait WindowMethods { /// Returns the size of the window in hardware pixels. fn framebuffer_size(&self) -> TypedSize2D; /// Returns the size of the window in density-independent "px" units. diff --git a/ports/android/Makefile b/ports/android/Makefile index 6328462c60b..e23d4c8ee5e 100644 --- a/ports/android/Makefile +++ b/ports/android/Makefile @@ -1,9 +1,11 @@ +CARGO_OPTS ?= + .PHONY: all -all: +all: glut_app NDK_DEBUG=1 $(ANDROID_NDK)/ndk-build -B - find ../../target ! \( -type d -name dist -prune \) -name libmozjs.so | \ + find glut_app/target ! \( -type d -name dist -prune \) -name libmozjs.so | \ xargs -I {} cp -f {} libs/armeabi - find ../../target ! \( -type d -name dist -prune \) -name 'libservo-*.so' | \ + find glut_app/target ! \( -type d -name dist -prune \) -name 'libglut_app-*.so' | \ xargs -I {} cp -f {} libs/armeabi/libservo.so find ../../rust/lib/rustlib/arm-linux-androideabi/lib \ -name '*.so' -type f -size +1c | \ @@ -14,6 +16,11 @@ all: --path . ant debug +.PHONY: glut_app +glut_app: + cd glut_app; \ + ../../../mach cargo build --target=arm-linux-androideabi $(CARGO_OPTS) + .PHONY: install install: $(ANDROID_SDK)/platform-tools/adb install -r bin/ServoAndroid-debug.apk diff --git a/ports/android/glut_app/Cargo.lock b/ports/android/glut_app/Cargo.lock new file mode 100644 index 00000000000..345c74274e5 --- /dev/null +++ b/ports/android/glut_app/Cargo.lock @@ -0,0 +1,519 @@ +[root] +name = "glut_app" +version = "0.0.1" +dependencies = [ + "alert 0.1.0 (git+https://github.com/servo/rust-alert#fdc24f13be8d8a2d15214ec228d166b3221b809e)", + "compositing 0.0.1", + "geom 0.1.0 (git+https://github.com/servo/rust-geom#90add8d65273c8a46aa16d73959e29a51d0c282d)", + "glut 0.0.1 (git+https://github.com/servo/rust-glut#01af0162ea0322ad1a40d6adb023a39813605949)", + "layers 0.1.0 (git+https://github.com/servo/rust-layers#180d3ff2f28d239e32d01982c76be5c97d5763a8)", + "msg 0.0.1", + "servo 0.0.1", + "util 0.0.1", +] + +[[package]] +name = "alert" +version = "0.1.0" +source = "git+https://github.com/servo/rust-alert#fdc24f13be8d8a2d15214ec228d166b3221b809e" +dependencies = [ + "cocoa 0.1.0 (git+https://github.com/servo/rust-cocoa#acb9b4efc70c3f285057c2aee774f38f81a1b98d)", + "core_foundation 0.1.0 (git+https://github.com/servo/rust-core-foundation#166a601ff3e0fc3a64ca1a9090d02c8d4f22b61a)", +] + +[[package]] +name = "azure" +version = "0.1.0" +source = "git+https://github.com/servo/rust-azure#b357751c04a89a87e6ef1f0cebe5f20957dd112d" +dependencies = [ + "core_foundation 0.1.0 (git+https://github.com/servo/rust-core-foundation#166a601ff3e0fc3a64ca1a9090d02c8d4f22b61a)", + "core_graphics 0.1.0 (git+https://github.com/servo/rust-core-graphics#6a9919f8a912cc67571b891ba198d5325964a104)", + "core_text 0.1.0 (git+https://github.com/servo/rust-core-text#1ad11072b31657eeccaf4879c6e98723d488bd3d)", + "egl 0.1.0 (git+https://github.com/servo/rust-egl#88f2a13812ddbce2bf2317221663a61c31b3e220)", + "freetype 0.1.0 (git+https://github.com/servo/rust-freetype#0b03da276e4bdeae2300596dabc4ccb16733ad70)", + "geom 0.1.0 (git+https://github.com/servo/rust-geom#90add8d65273c8a46aa16d73959e29a51d0c282d)", + "glfw 0.0.1 (git+https://github.com/servo/glfw-rs?ref=servo#a15c2d04b8969aea653841d1d79e5fdf68de664b)", + "layers 0.1.0 (git+https://github.com/servo/rust-layers#180d3ff2f28d239e32d01982c76be5c97d5763a8)", + "opengles 0.1.0 (git+https://github.com/servo/rust-opengles#6776e9c07feb149d34b087039ecf6b2c143e3afc)", + "skia-sys 0.0.20130412 (git+https://github.com/servo/skia#6d696712962fd0d41120b7a414a48417da8e6a92)", + "xlib 0.1.0 (git+https://github.com/servo/rust-xlib#581d4faddec5188d3c3ae5307dbea28aab90644c)", +] + +[[package]] +name = "canvas" +version = "0.0.1" +dependencies = [ + "azure 0.1.0 (git+https://github.com/servo/rust-azure#b357751c04a89a87e6ef1f0cebe5f20957dd112d)", + "geom 0.1.0 (git+https://github.com/servo/rust-geom#90add8d65273c8a46aa16d73959e29a51d0c282d)", +] + +[[package]] +name = "cocoa" +version = "0.1.0" +source = "git+https://github.com/servo/rust-cocoa#acb9b4efc70c3f285057c2aee774f38f81a1b98d" + +[[package]] +name = "compositing" +version = "0.0.1" +dependencies = [ + "alert 0.1.0 (git+https://github.com/servo/rust-alert#fdc24f13be8d8a2d15214ec228d166b3221b809e)", + "azure 0.1.0 (git+https://github.com/servo/rust-azure#b357751c04a89a87e6ef1f0cebe5f20957dd112d)", + "core_graphics 0.1.0 (git+https://github.com/servo/rust-core-graphics#6a9919f8a912cc67571b891ba198d5325964a104)", + "core_text 0.1.0 (git+https://github.com/servo/rust-core-text#1ad11072b31657eeccaf4879c6e98723d488bd3d)", + "devtools 0.0.1", + "devtools_traits 0.0.1", + "geom 0.1.0 (git+https://github.com/servo/rust-geom#90add8d65273c8a46aa16d73959e29a51d0c282d)", + "gfx 0.0.1", + "layers 0.1.0 (git+https://github.com/servo/rust-layers#180d3ff2f28d239e32d01982c76be5c97d5763a8)", + "layout_traits 0.0.1", + "msg 0.0.1", + "net 0.0.1", + "opengles 0.1.0 (git+https://github.com/servo/rust-opengles#6776e9c07feb149d34b087039ecf6b2c143e3afc)", + "png 0.1.0 (git+https://github.com/servo/rust-png#74418ffbf20e94b0d3bed4a9d004062a13342c79)", + "script_traits 0.0.1", + "url 0.1.0 (git+https://github.com/servo/rust-url#29f70a47230c2aa736e263977247c786e0b2c243)", + "util 0.0.1", +] + +[[package]] +name = "core_foundation" +version = "0.1.0" +source = "git+https://github.com/servo/rust-core-foundation#166a601ff3e0fc3a64ca1a9090d02c8d4f22b61a" + +[[package]] +name = "core_graphics" +version = "0.1.0" +source = "git+https://github.com/servo/rust-core-graphics#6a9919f8a912cc67571b891ba198d5325964a104" +dependencies = [ + "core_foundation 0.1.0 (git+https://github.com/servo/rust-core-foundation#166a601ff3e0fc3a64ca1a9090d02c8d4f22b61a)", +] + +[[package]] +name = "core_text" +version = "0.1.0" +source = "git+https://github.com/servo/rust-core-text#1ad11072b31657eeccaf4879c6e98723d488bd3d" +dependencies = [ + "core_foundation 0.1.0 (git+https://github.com/servo/rust-core-foundation#166a601ff3e0fc3a64ca1a9090d02c8d4f22b61a)", + "core_graphics 0.1.0 (git+https://github.com/servo/rust-core-graphics#6a9919f8a912cc67571b891ba198d5325964a104)", +] + +[[package]] +name = "cssparser" +version = "0.1.0" +source = "git+https://github.com/servo/rust-cssparser#22146ce095cb62df39d459c3a79d1486041f96f6" +dependencies = [ + "encoding 0.1.0 (git+https://github.com/lifthrasiir/rust-encoding#28eafb604a92c7786685b46c0fc02682ba3ab265)", +] + +[[package]] +name = "devtools" +version = "0.0.1" +dependencies = [ + "devtools_traits 0.0.1", + "msg 0.0.1", +] + +[[package]] +name = "devtools_traits" +version = "0.0.1" +dependencies = [ + "msg 0.0.1", +] + +[[package]] +name = "egl" +version = "0.1.0" +source = "git+https://github.com/servo/rust-egl#88f2a13812ddbce2bf2317221663a61c31b3e220" + +[[package]] +name = "encoding" +version = "0.1.0" +source = "git+https://github.com/lifthrasiir/rust-encoding#28eafb604a92c7786685b46c0fc02682ba3ab265" + +[[package]] +name = "expat-sys" +version = "2.1.0" +source = "git+https://github.com/servo/libexpat#da2ddaf78cbef836b8790807bb76b357c58df3a1" + +[[package]] +name = "fontconfig" +version = "0.1.0" +source = "git+https://github.com/servo/rust-fontconfig#b16c1e12ecb74b1e4e9a9b23c2b98580a34cf201" +dependencies = [ + "fontconfig-sys 2.11.1 (git+https://github.com/servo/libfontconfig#fcc324d2c8175d2e8e8c0aab032c03a404809f6d)", +] + +[[package]] +name = "fontconfig-sys" +version = "2.11.1" +source = "git+https://github.com/servo/libfontconfig#fcc324d2c8175d2e8e8c0aab032c03a404809f6d" +dependencies = [ + "expat-sys 2.1.0 (git+https://github.com/servo/libexpat#da2ddaf78cbef836b8790807bb76b357c58df3a1)", + "freetype-sys 2.4.11 (git+https://github.com/servo/libfreetype2#5b6499164106f094937565595c7b96d07de55521)", +] + +[[package]] +name = "freetype" +version = "0.1.0" +source = "git+https://github.com/servo/rust-freetype#0b03da276e4bdeae2300596dabc4ccb16733ad70" + +[[package]] +name = "freetype-sys" +version = "2.4.11" +source = "git+https://github.com/servo/libfreetype2#5b6499164106f094937565595c7b96d07de55521" + +[[package]] +name = "geom" +version = "0.1.0" +source = "git+https://github.com/servo/rust-geom#90add8d65273c8a46aa16d73959e29a51d0c282d" + +[[package]] +name = "gfx" +version = "0.0.1" +dependencies = [ + "azure 0.1.0 (git+https://github.com/servo/rust-azure#b357751c04a89a87e6ef1f0cebe5f20957dd112d)", + "core_foundation 0.1.0 (git+https://github.com/servo/rust-core-foundation#166a601ff3e0fc3a64ca1a9090d02c8d4f22b61a)", + "core_graphics 0.1.0 (git+https://github.com/servo/rust-core-graphics#6a9919f8a912cc67571b891ba198d5325964a104)", + "core_text 0.1.0 (git+https://github.com/servo/rust-core-text#1ad11072b31657eeccaf4879c6e98723d488bd3d)", + "fontconfig 0.1.0 (git+https://github.com/servo/rust-fontconfig#b16c1e12ecb74b1e4e9a9b23c2b98580a34cf201)", + "freetype 0.1.0 (git+https://github.com/servo/rust-freetype#0b03da276e4bdeae2300596dabc4ccb16733ad70)", + "geom 0.1.0 (git+https://github.com/servo/rust-geom#90add8d65273c8a46aa16d73959e29a51d0c282d)", + "harfbuzz 0.1.0 (git+https://github.com/servo/rust-harfbuzz#ad520942cc17232e1a40cdd8a99c2905623d35f6)", + "layers 0.1.0 (git+https://github.com/servo/rust-layers#180d3ff2f28d239e32d01982c76be5c97d5763a8)", + "msg 0.0.1", + "net 0.0.1", + "plugins 0.0.1", + "png 0.1.0 (git+https://github.com/servo/rust-png#74418ffbf20e94b0d3bed4a9d004062a13342c79)", + "stb_image 0.1.0 (git+https://github.com/servo/rust-stb-image#f5022de4ad6bb474a03493d1f274dde9b0f1af0c)", + "style 0.0.1", + "url 0.1.0 (git+https://github.com/servo/rust-url#29f70a47230c2aa736e263977247c786e0b2c243)", + "util 0.0.1", +] + +[[package]] +name = "glfw" +version = "0.0.1" +source = "git+https://github.com/servo/glfw-rs?ref=servo#a15c2d04b8969aea653841d1d79e5fdf68de664b" +dependencies = [ + "glfw-sys 3.0.4 (git+https://github.com/servo/glfw?ref=cargo-3.0.4#65a2b4721276589d9de24f6a9999a2db37286cae)", + "semver 0.0.1 (git+https://github.com/rust-lang/semver#d04583a173395b76c1eaa15cc630a5f6f8f0ae10)", +] + +[[package]] +name = "glfw-sys" +version = "3.0.4" +source = "git+https://github.com/servo/glfw?ref=cargo-3.0.4#65a2b4721276589d9de24f6a9999a2db37286cae" + +[[package]] +name = "glut" +version = "0.0.1" +source = "git+https://github.com/servo/rust-glut#01af0162ea0322ad1a40d6adb023a39813605949" +dependencies = [ + "opengles 0.1.0 (git+https://github.com/servo/rust-opengles#6776e9c07feb149d34b087039ecf6b2c143e3afc)", +] + +[[package]] +name = "harfbuzz" +version = "0.1.0" +source = "git+https://github.com/servo/rust-harfbuzz#ad520942cc17232e1a40cdd8a99c2905623d35f6" + +[[package]] +name = "http" +version = "0.1.0-pre" +source = "git+https://github.com/servo/rust-http?ref=servo#92019011b0cdf1bffc8c584830de1bf330d79d0d" +dependencies = [ + "openssl 0.0.0 (git+https://github.com/sfackler/rust-openssl.git#a495465b75ffb18ff2303c5a11a103e00a15a13d)", + "url 0.1.0 (git+https://github.com/servo/rust-url#29f70a47230c2aa736e263977247c786e0b2c243)", +] + +[[package]] +name = "hubbub" +version = "0.1.0" +source = "git+https://github.com/servo/rust-hubbub#c7f868e688de6e9cbdc26aa09292ed072bc2648b" +dependencies = [ + "hubbub-sys 0.1.2 (git+https://github.com/servo/libhubbub#6d09893991dedc616b264058442a304c03842213)", +] + +[[package]] +name = "hubbub-sys" +version = "0.1.2" +source = "git+https://github.com/servo/libhubbub#6d09893991dedc616b264058442a304c03842213" +dependencies = [ + "parserutils-sys 0.1.1 (git+https://github.com/servo/libparserutils#651b636ba1214bceeb0907adb1eab60efe0d4598)", +] + +[[package]] +name = "io_surface" +version = "0.1.0" +source = "git+https://github.com/servo/rust-io-surface#7038341220bd7e86e21118fac2cbc6bd50890e47" +dependencies = [ + "core_foundation 0.1.0 (git+https://github.com/servo/rust-core-foundation#166a601ff3e0fc3a64ca1a9090d02c8d4f22b61a)", + "geom 0.1.0 (git+https://github.com/servo/rust-geom#90add8d65273c8a46aa16d73959e29a51d0c282d)", + "opengles 0.1.0 (git+https://github.com/servo/rust-opengles#6776e9c07feb149d34b087039ecf6b2c143e3afc)", +] + +[[package]] +name = "js" +version = "0.1.0" +source = "git+https://github.com/servo/rust-mozjs#41fb0d80a5ed5614ca13a120cdb3281e599d4e04" +dependencies = [ + "mozjs-sys 0.0.0 (git+https://github.com/servo/mozjs#47cd6a4e60c75642ba182f0df9a42b71ec7c2c88)", +] + +[[package]] +name = "layers" +version = "0.1.0" +source = "git+https://github.com/servo/rust-layers#180d3ff2f28d239e32d01982c76be5c97d5763a8" +dependencies = [ + "core_foundation 0.1.0 (git+https://github.com/servo/rust-core-foundation#166a601ff3e0fc3a64ca1a9090d02c8d4f22b61a)", + "egl 0.1.0 (git+https://github.com/servo/rust-egl#88f2a13812ddbce2bf2317221663a61c31b3e220)", + "geom 0.1.0 (git+https://github.com/servo/rust-geom#90add8d65273c8a46aa16d73959e29a51d0c282d)", + "io_surface 0.1.0 (git+https://github.com/servo/rust-io-surface#7038341220bd7e86e21118fac2cbc6bd50890e47)", + "opengles 0.1.0 (git+https://github.com/servo/rust-opengles#6776e9c07feb149d34b087039ecf6b2c143e3afc)", + "xlib 0.1.0 (git+https://github.com/servo/rust-xlib#581d4faddec5188d3c3ae5307dbea28aab90644c)", +] + +[[package]] +name = "layout" +version = "0.0.1" +dependencies = [ + "encoding 0.1.0 (git+https://github.com/lifthrasiir/rust-encoding#28eafb604a92c7786685b46c0fc02682ba3ab265)", + "geom 0.1.0 (git+https://github.com/servo/rust-geom#90add8d65273c8a46aa16d73959e29a51d0c282d)", + "gfx 0.0.1", + "layout_traits 0.0.1", + "net 0.0.1", + "plugins 0.0.1", + "script 0.0.1", + "script_traits 0.0.1", + "string_cache 0.0.0 (git+https://github.com/servo/string-cache#97754929f38d93f6728d1f0acce8107648420e98)", + "string_cache_macros 0.0.0 (git+https://github.com/servo/string-cache#97754929f38d93f6728d1f0acce8107648420e98)", + "style 0.0.1", + "url 0.1.0 (git+https://github.com/servo/rust-url#29f70a47230c2aa736e263977247c786e0b2c243)", + "util 0.0.1", +] + +[[package]] +name = "layout_traits" +version = "0.0.1" +dependencies = [ + "gfx 0.0.1", + "msg 0.0.1", + "net 0.0.1", + "script_traits 0.0.1", + "util 0.0.1", +] + +[[package]] +name = "lazy_static" +version = "0.1.0" +source = "git+https://github.com/Kimundi/lazy-static.rs#e62a65372f1dd9019e37eb9381d819edff80e360" + +[[package]] +name = "mozjs-sys" +version = "0.0.0" +source = "git+https://github.com/servo/mozjs#47cd6a4e60c75642ba182f0df9a42b71ec7c2c88" + +[[package]] +name = "msg" +version = "0.0.1" +dependencies = [ + "azure 0.1.0 (git+https://github.com/servo/rust-azure#b357751c04a89a87e6ef1f0cebe5f20957dd112d)", + "core_foundation 0.1.0 (git+https://github.com/servo/rust-core-foundation#166a601ff3e0fc3a64ca1a9090d02c8d4f22b61a)", + "geom 0.1.0 (git+https://github.com/servo/rust-geom#90add8d65273c8a46aa16d73959e29a51d0c282d)", + "io_surface 0.1.0 (git+https://github.com/servo/rust-io-surface#7038341220bd7e86e21118fac2cbc6bd50890e47)", + "layers 0.1.0 (git+https://github.com/servo/rust-layers#180d3ff2f28d239e32d01982c76be5c97d5763a8)", + "url 0.1.0 (git+https://github.com/servo/rust-url#29f70a47230c2aa736e263977247c786e0b2c243)", + "util 0.0.1", +] + +[[package]] +name = "net" +version = "0.0.1" +dependencies = [ + "geom 0.1.0 (git+https://github.com/servo/rust-geom#90add8d65273c8a46aa16d73959e29a51d0c282d)", + "http 0.1.0-pre (git+https://github.com/servo/rust-http?ref=servo#92019011b0cdf1bffc8c584830de1bf330d79d0d)", + "png 0.1.0 (git+https://github.com/servo/rust-png#74418ffbf20e94b0d3bed4a9d004062a13342c79)", + "stb_image 0.1.0 (git+https://github.com/servo/rust-stb-image#f5022de4ad6bb474a03493d1f274dde9b0f1af0c)", + "url 0.1.0 (git+https://github.com/servo/rust-url#29f70a47230c2aa736e263977247c786e0b2c243)", + "util 0.0.1", +] + +[[package]] +name = "opengles" +version = "0.1.0" +source = "git+https://github.com/servo/rust-opengles#6776e9c07feb149d34b087039ecf6b2c143e3afc" + +[[package]] +name = "openssl" +version = "0.0.0" +source = "git+https://github.com/sfackler/rust-openssl.git#a495465b75ffb18ff2303c5a11a103e00a15a13d" + +[[package]] +name = "parserutils-sys" +version = "0.1.1" +source = "git+https://github.com/servo/libparserutils#651b636ba1214bceeb0907adb1eab60efe0d4598" + +[[package]] +name = "phf" +version = "0.0.0" +source = "git+https://github.com/sfackler/rust-phf#06254fdde7708630a6397c41c6c17ef81a4b66a0" + +[[package]] +name = "phf_mac" +version = "0.0.0" +source = "git+https://github.com/sfackler/rust-phf#06254fdde7708630a6397c41c6c17ef81a4b66a0" + +[[package]] +name = "plugins" +version = "0.0.1" + +[[package]] +name = "png" +version = "0.1.0" +source = "git+https://github.com/servo/rust-png#74418ffbf20e94b0d3bed4a9d004062a13342c79" +dependencies = [ + "png-sys 1.6.3 (git+https://github.com/servo/libpng?ref=servo#d01f32b4eb86904695efe7fc02b574f902e21a98)", +] + +[[package]] +name = "png-sys" +version = "1.6.3" +source = "git+https://github.com/servo/libpng?ref=servo#d01f32b4eb86904695efe7fc02b574f902e21a98" + +[[package]] +name = "script" +version = "0.0.1" +dependencies = [ + "canvas 0.0.1", + "cssparser 0.1.0 (git+https://github.com/servo/rust-cssparser#22146ce095cb62df39d459c3a79d1486041f96f6)", + "devtools_traits 0.0.1", + "encoding 0.1.0 (git+https://github.com/lifthrasiir/rust-encoding#28eafb604a92c7786685b46c0fc02682ba3ab265)", + "geom 0.1.0 (git+https://github.com/servo/rust-geom#90add8d65273c8a46aa16d73959e29a51d0c282d)", + "gfx 0.0.1", + "http 0.1.0-pre (git+https://github.com/servo/rust-http?ref=servo#92019011b0cdf1bffc8c584830de1bf330d79d0d)", + "hubbub 0.1.0 (git+https://github.com/servo/rust-hubbub#c7f868e688de6e9cbdc26aa09292ed072bc2648b)", + "js 0.1.0 (git+https://github.com/servo/rust-mozjs#41fb0d80a5ed5614ca13a120cdb3281e599d4e04)", + "msg 0.0.1", + "net 0.0.1", + "plugins 0.0.1", + "script_traits 0.0.1", + "string_cache 0.0.0 (git+https://github.com/servo/string-cache#97754929f38d93f6728d1f0acce8107648420e98)", + "string_cache_macros 0.0.0 (git+https://github.com/servo/string-cache#97754929f38d93f6728d1f0acce8107648420e98)", + "style 0.0.1", + "url 0.1.0 (git+https://github.com/servo/rust-url#29f70a47230c2aa736e263977247c786e0b2c243)", + "util 0.0.1", + "uuid 0.0.1 (git+https://github.com/rust-lang/uuid#c3041068f413a5e46d795d21a346072794593839)", +] + +[[package]] +name = "script_traits" +version = "0.0.1" +dependencies = [ + "devtools_traits 0.0.1", + "geom 0.1.0 (git+https://github.com/servo/rust-geom#90add8d65273c8a46aa16d73959e29a51d0c282d)", + "msg 0.0.1", + "net 0.0.1", + "url 0.1.0 (git+https://github.com/servo/rust-url#29f70a47230c2aa736e263977247c786e0b2c243)", + "util 0.0.1", +] + +[[package]] +name = "semver" +version = "0.0.1" +source = "git+https://github.com/rust-lang/semver#d04583a173395b76c1eaa15cc630a5f6f8f0ae10" + +[[package]] +name = "servo" +version = "0.0.1" +dependencies = [ + "compositing 0.0.1", + "gfx 0.0.1", + "layout 0.0.1", + "msg 0.0.1", + "net 0.0.1", + "script 0.0.1", + "url 0.1.0 (git+https://github.com/servo/rust-url#29f70a47230c2aa736e263977247c786e0b2c243)", + "util 0.0.1", +] + +[[package]] +name = "skia-sys" +version = "0.0.20130412" +source = "git+https://github.com/servo/skia#6d696712962fd0d41120b7a414a48417da8e6a92" +dependencies = [ + "expat-sys 2.1.0 (git+https://github.com/servo/libexpat#da2ddaf78cbef836b8790807bb76b357c58df3a1)", + "freetype-sys 2.4.11 (git+https://github.com/servo/libfreetype2#5b6499164106f094937565595c7b96d07de55521)", +] + +[[package]] +name = "stb_image" +version = "0.1.0" +source = "git+https://github.com/servo/rust-stb-image#f5022de4ad6bb474a03493d1f274dde9b0f1af0c" + +[[package]] +name = "string_cache" +version = "0.0.0" +source = "git+https://github.com/servo/string-cache#97754929f38d93f6728d1f0acce8107648420e98" +dependencies = [ + "phf 0.0.0 (git+https://github.com/sfackler/rust-phf#06254fdde7708630a6397c41c6c17ef81a4b66a0)", + "phf_mac 0.0.0 (git+https://github.com/sfackler/rust-phf#06254fdde7708630a6397c41c6c17ef81a4b66a0)", + "string_cache_macros 0.0.0 (git+https://github.com/servo/string-cache#97754929f38d93f6728d1f0acce8107648420e98)", +] + +[[package]] +name = "string_cache_macros" +version = "0.0.0" +source = "git+https://github.com/servo/string-cache#97754929f38d93f6728d1f0acce8107648420e98" +dependencies = [ + "lazy_static 0.1.0 (git+https://github.com/Kimundi/lazy-static.rs#e62a65372f1dd9019e37eb9381d819edff80e360)", +] + +[[package]] +name = "style" +version = "0.0.1" +dependencies = [ + "cssparser 0.1.0 (git+https://github.com/servo/rust-cssparser#22146ce095cb62df39d459c3a79d1486041f96f6)", + "encoding 0.1.0 (git+https://github.com/lifthrasiir/rust-encoding#28eafb604a92c7786685b46c0fc02682ba3ab265)", + "geom 0.1.0 (git+https://github.com/servo/rust-geom#90add8d65273c8a46aa16d73959e29a51d0c282d)", + "lazy_static 0.1.0 (git+https://github.com/Kimundi/lazy-static.rs#e62a65372f1dd9019e37eb9381d819edff80e360)", + "plugins 0.0.1", + "string_cache 0.0.0 (git+https://github.com/servo/string-cache#97754929f38d93f6728d1f0acce8107648420e98)", + "string_cache_macros 0.0.0 (git+https://github.com/servo/string-cache#97754929f38d93f6728d1f0acce8107648420e98)", + "url 0.1.0 (git+https://github.com/servo/rust-url#29f70a47230c2aa736e263977247c786e0b2c243)", + "util 0.0.1", +] + +[[package]] +name = "task_info" +version = "0.0.1" + +[[package]] +name = "url" +version = "0.1.0" +source = "git+https://github.com/servo/rust-url#29f70a47230c2aa736e263977247c786e0b2c243" +dependencies = [ + "encoding 0.1.0 (git+https://github.com/lifthrasiir/rust-encoding#28eafb604a92c7786685b46c0fc02682ba3ab265)", +] + +[[package]] +name = "util" +version = "0.0.1" +dependencies = [ + "azure 0.1.0 (git+https://github.com/servo/rust-azure#b357751c04a89a87e6ef1f0cebe5f20957dd112d)", + "geom 0.1.0 (git+https://github.com/servo/rust-geom#90add8d65273c8a46aa16d73959e29a51d0c282d)", + "string_cache 0.0.0 (git+https://github.com/servo/string-cache#97754929f38d93f6728d1f0acce8107648420e98)", + "string_cache_macros 0.0.0 (git+https://github.com/servo/string-cache#97754929f38d93f6728d1f0acce8107648420e98)", + "task_info 0.0.1", + "url 0.1.0 (git+https://github.com/servo/rust-url#29f70a47230c2aa736e263977247c786e0b2c243)", +] + +[[package]] +name = "uuid" +version = "0.0.1" +source = "git+https://github.com/rust-lang/uuid#c3041068f413a5e46d795d21a346072794593839" + +[[package]] +name = "xlib" +version = "0.1.0" +source = "git+https://github.com/servo/rust-xlib#581d4faddec5188d3c3ae5307dbea28aab90644c" + diff --git a/ports/android/glut_app/Cargo.toml b/ports/android/glut_app/Cargo.toml new file mode 100644 index 00000000000..a4372c4a910 --- /dev/null +++ b/ports/android/glut_app/Cargo.toml @@ -0,0 +1,34 @@ +[package] +name = "glut_app" +version = "0.0.1" +authors = ["The Servo Project Developers"] + +[lib] +name = "glut_app" +path = "lib.rs" +crate-type = ["dylib"] + +[dependencies.alert] +git = "https://github.com/servo/rust-alert" + +[dependencies.compositing] +path = "../../../components/compositing" + +[dependencies.geom] +git = "https://github.com/servo/rust-geom" + +[dependencies.glut] +git = "https://github.com/servo/rust-glut" + +[dependencies.layers] +git = "https://github.com/servo/rust-layers" + +[dependencies.msg] +path = "../../../components/msg" + +[dependencies.servo] +path = "../../.." +default-features = false + +[dependencies.util] +path = "../../../components/util" diff --git a/ports/android/glut_app/lib.rs b/ports/android/glut_app/lib.rs new file mode 100644 index 00000000000..90269e91c5b --- /dev/null +++ b/ports/android/glut_app/lib.rs @@ -0,0 +1,64 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//! A simple application that uses GLUT to open a window for Servo to display in. + +#![license = "MPL"] +#![feature(macro_rules, phase)] +#![deny(unused_imports, unused_variable)] + +extern crate alert; +extern crate compositing; +extern crate geom; +extern crate glut; +extern crate layers; +extern crate libc; +#[phase(plugin, link)] extern crate log; +extern crate msg; +extern crate native; +extern crate servo; +#[phase(plugin, link)] extern crate util; + +use geom::scale_factor::ScaleFactor; +use std::rc::Rc; +use std::string; +use util::opts; +use window::Window; + +use glut::glut::{init, init_display_mode, DOUBLE}; + +mod window; + +pub fn create_window(opts: &opts::Opts) -> Rc { + // Initialize GLUT. + init(); + init_display_mode(DOUBLE); + + // Read command-line options. + let scale_factor = opts.device_pixels_per_px.unwrap_or(ScaleFactor(1.0)); + let size = opts.initial_window_size.as_f32() * scale_factor; + + // Open a window. + Window::new(size.as_uint()) +} + +#[no_mangle] +#[allow(dead_code)] +pub extern "C" fn android_start(argc: int, argv: *const *const u8) -> int { + native::start(argc, argv, proc() { + let mut args: Vec = vec!(); + for i in range(0u, argc as uint) { + unsafe { + args.push(string::raw::from_buf(*argv.offset(i as int) as *const u8)); + } + } + + opts::from_cmdline_args(args.as_slice()).map(|mut opts| { + // Always use CPU rendering on android. + opts.cpu_painting = true; + let window = Some(create_window(&opts)); + servo::run(opts, window); + }); + }) +} diff --git a/components/compositing/platform/common/glut_windowing.rs b/ports/android/glut_app/window.rs similarity index 90% rename from components/compositing/platform/common/glut_windowing.rs rename to ports/android/glut_app/window.rs index 00d5cc889e8..a9e06af2ccb 100644 --- a/components/compositing/platform/common/glut_windowing.rs +++ b/ports/android/glut_app/window.rs @@ -4,11 +4,11 @@ //! A windowing implementation using GLUT. -use windowing::{ApplicationMethods, WindowEvent, WindowMethods}; -use windowing::{IdleWindowEvent, ResizeWindowEvent, LoadUrlWindowEvent, MouseWindowEventClass}; -use windowing::{ScrollWindowEvent, ZoomWindowEvent, NavigationWindowEvent, FinishedWindowEvent}; -use windowing::{MouseWindowClickEvent, MouseWindowMouseDownEvent, MouseWindowMouseUpEvent}; -use windowing::{Forward, Back}; +use compositing::windowing::{WindowEvent, WindowMethods}; +use compositing::windowing::{IdleWindowEvent, ResizeWindowEvent, LoadUrlWindowEvent, MouseWindowEventClass}; +use compositing::windowing::{ScrollWindowEvent, ZoomWindowEvent, NavigationWindowEvent, FinishedWindowEvent}; +use compositing::windowing::{MouseWindowClickEvent, MouseWindowMouseDownEvent, MouseWindowMouseUpEvent}; +use compositing::windowing::{Forward, Back}; use alert::{Alert, AlertMethods}; use libc::{c_int, c_uchar}; @@ -18,33 +18,16 @@ use geom::point::{Point2D, TypedPoint2D}; use geom::scale_factor::ScaleFactor; use geom::size::TypedSize2D; use layers::geometry::DevicePixel; -use servo_msg::compositor_msg::{IdleRenderState, RenderState, RenderingRenderState}; -use servo_msg::compositor_msg::{FinishedLoading, Blank, ReadyState}; -use servo_util::geometry::ScreenPx; +use msg::compositor_msg::{IdleRenderState, RenderState, RenderingRenderState}; +use msg::compositor_msg::{FinishedLoading, Blank, ReadyState}; +use util::geometry::ScreenPx; -use glut::glut::{ACTIVE_SHIFT, DOUBLE, WindowHeight}; +use glut::glut::{ACTIVE_SHIFT, WindowHeight}; use glut::glut::WindowWidth; use glut::glut; // static THROBBER: [char, ..8] = [ '⣾', '⣽', '⣻', '⢿', '⡿', '⣟', '⣯', '⣷' ]; -/// A structure responsible for setting up and tearing down the entire windowing system. -pub struct Application; - -impl ApplicationMethods for Application { - fn new() -> Application { - glut::init(); - glut::init_display_mode(DOUBLE); - Application - } -} - -impl Drop for Application { - fn drop(&mut self) { - drop_local_window(); - } -} - /// The type of a window. pub struct Window { pub glut_window: glut::Window, @@ -61,9 +44,9 @@ pub struct Window { pub throbber_frame: Cell, } -impl WindowMethods for Window { +impl Window { /// Creates a new window. - fn new(_: &Application, _: bool, size: TypedSize2D) -> Rc { + pub fn new(size: TypedSize2D) -> Rc { // Create the GLUT window. let window_size = size.to_untyped(); glut::init_window_size(window_size.width, window_size.height); @@ -145,7 +128,15 @@ impl WindowMethods for Window { wrapped_window } +} +impl Drop for Window { + fn drop(&mut self) { + drop_local_window(); + } +} + +impl WindowMethods for Window { /// Returns the size of the window in hardware pixels. fn framebuffer_size(&self) -> TypedSize2D { TypedSize2D(glut::get(WindowWidth) as uint, glut::get(WindowHeight) as uint) diff --git a/ports/cef/Cargo.lock b/ports/cef/Cargo.lock index fb5a1d2faaf..212487a0cd5 100644 --- a/ports/cef/Cargo.lock +++ b/ports/cef/Cargo.lock @@ -8,8 +8,8 @@ dependencies = [ "devtools 0.0.1", "geom 0.1.0 (git+https://github.com/servo/rust-geom#90add8d65273c8a46aa16d73959e29a51d0c282d)", "gfx 0.0.1", - "glfw 0.0.1 (git+https://github.com/servo/glfw-rs?ref=servo#955dbe919870b0536f79123232d87c0efe3c552e)", - "glut 0.0.1 (git+https://github.com/servo/rust-glut#01af0162ea0322ad1a40d6adb023a39813605949)", + "glfw 0.0.1 (git+https://github.com/servo/glfw-rs?ref=servo#a15c2d04b8969aea653841d1d79e5fdf68de664b)", + "glfw_app 0.0.1", "js 0.1.0 (git+https://github.com/servo/rust-mozjs#41fb0d80a5ed5614ca13a120cdb3281e599d4e04)", "layers 0.1.0 (git+https://github.com/servo/rust-layers#180d3ff2f28d239e32d01982c76be5c97d5763a8)", "msg 0.0.1", @@ -44,7 +44,7 @@ dependencies = [ "egl 0.1.0 (git+https://github.com/servo/rust-egl#88f2a13812ddbce2bf2317221663a61c31b3e220)", "freetype 0.1.0 (git+https://github.com/servo/rust-freetype#0b03da276e4bdeae2300596dabc4ccb16733ad70)", "geom 0.1.0 (git+https://github.com/servo/rust-geom#90add8d65273c8a46aa16d73959e29a51d0c282d)", - "glfw 0.0.1 (git+https://github.com/servo/glfw-rs?ref=servo#955dbe919870b0536f79123232d87c0efe3c552e)", + "glfw 0.0.1 (git+https://github.com/servo/glfw-rs?ref=servo#a15c2d04b8969aea653841d1d79e5fdf68de664b)", "layers 0.1.0 (git+https://github.com/servo/rust-layers#180d3ff2f28d239e32d01982c76be5c97d5763a8)", "opengles 0.1.0 (git+https://github.com/servo/rust-opengles#6776e9c07feb149d34b087039ecf6b2c143e3afc)", "skia-sys 0.0.20130412 (git+https://github.com/servo/skia#6d696712962fd0d41120b7a414a48417da8e6a92)", @@ -76,8 +76,6 @@ dependencies = [ "devtools_traits 0.0.1", "geom 0.1.0 (git+https://github.com/servo/rust-geom#90add8d65273c8a46aa16d73959e29a51d0c282d)", "gfx 0.0.1", - "glfw 0.0.1 (git+https://github.com/servo/glfw-rs?ref=servo#955dbe919870b0536f79123232d87c0efe3c552e)", - "glut 0.0.1 (git+https://github.com/servo/rust-glut#01af0162ea0322ad1a40d6adb023a39813605949)", "layers 0.1.0 (git+https://github.com/servo/rust-layers#180d3ff2f28d239e32d01982c76be5c97d5763a8)", "layout_traits 0.0.1", "msg 0.0.1", @@ -207,7 +205,7 @@ dependencies = [ [[package]] name = "glfw" version = "0.0.1" -source = "git+https://github.com/servo/glfw-rs?ref=servo#955dbe919870b0536f79123232d87c0efe3c552e" +source = "git+https://github.com/servo/glfw-rs?ref=servo#a15c2d04b8969aea653841d1d79e5fdf68de664b" dependencies = [ "glfw-sys 3.0.4 (git+https://github.com/servo/glfw?ref=cargo-3.0.4#65a2b4721276589d9de24f6a9999a2db37286cae)", "semver 0.0.1 (git+https://github.com/rust-lang/semver#d04583a173395b76c1eaa15cc630a5f6f8f0ae10)", @@ -219,11 +217,16 @@ version = "3.0.4" source = "git+https://github.com/servo/glfw?ref=cargo-3.0.4#65a2b4721276589d9de24f6a9999a2db37286cae" [[package]] -name = "glut" +name = "glfw_app" version = "0.0.1" -source = "git+https://github.com/servo/rust-glut#01af0162ea0322ad1a40d6adb023a39813605949" dependencies = [ - "opengles 0.1.0 (git+https://github.com/servo/rust-opengles#6776e9c07feb149d34b087039ecf6b2c143e3afc)", + "alert 0.1.0 (git+https://github.com/servo/rust-alert#fdc24f13be8d8a2d15214ec228d166b3221b809e)", + "compositing 0.0.1", + "geom 0.1.0 (git+https://github.com/servo/rust-geom#90add8d65273c8a46aa16d73959e29a51d0c282d)", + "glfw 0.0.1 (git+https://github.com/servo/glfw-rs?ref=servo#a15c2d04b8969aea653841d1d79e5fdf68de664b)", + "layers 0.1.0 (git+https://github.com/servo/rust-layers#180d3ff2f28d239e32d01982c76be5c97d5763a8)", + "msg 0.0.1", + "util 0.0.1", ] [[package]] @@ -428,6 +431,7 @@ dependencies = [ "msg 0.0.1", "net 0.0.1", "url 0.1.0 (git+https://github.com/servo/rust-url#29f70a47230c2aa736e263977247c786e0b2c243)", + "util 0.0.1", ] [[package]] @@ -441,6 +445,7 @@ version = "0.0.1" dependencies = [ "compositing 0.0.1", "gfx 0.0.1", + "glfw_app 0.0.1", "layout 0.0.1", "msg 0.0.1", "net 0.0.1", diff --git a/ports/cef/Cargo.toml b/ports/cef/Cargo.toml index 95ffcf73cef..a0de421b970 100644 --- a/ports/cef/Cargo.toml +++ b/ports/cef/Cargo.toml @@ -11,6 +11,9 @@ crate-type = ["dylib"] [dependencies.servo] path = "../.." +[dependencies.glfw_app] +path = "../glfw" + [dependencies.plugins] path = "../../components/plugins" @@ -45,9 +48,6 @@ git = "https://github.com/servo/rust-geom" git = "https://github.com/servo/glfw-rs" branch = "servo" -[dependencies.glut] -git = "https://github.com/servo/rust-glut" - [dependencies.js] git = "https://github.com/servo/rust-mozjs" diff --git a/ports/cef/core.rs b/ports/cef/core.rs index d425252f3a2..f1b6549c2cc 100644 --- a/ports/cef/core.rs +++ b/ports/cef/core.rs @@ -7,6 +7,7 @@ use azure; use command_line::command_line_init; use eutil::fptr_is_null; use geom::size::TypedSize2D; +use glfw_app; use libc::{c_int, c_void}; use native; use servo; @@ -74,7 +75,8 @@ pub extern "C" fn cef_run_message_loop() { dump_flow_tree: false, }; native::start(0, 0 as *const *const u8, proc() { - servo::run(opts); + let window = Some(glfw_app::create_window(&opts)); + servo::run(opts, window); }); } diff --git a/ports/cef/lib.rs b/ports/cef/lib.rs index e486644aa89..bf7aeec80e6 100644 --- a/ports/cef/lib.rs +++ b/ports/cef/lib.rs @@ -18,10 +18,8 @@ extern crate servo; extern crate azure; extern crate geom; extern crate gfx; -#[cfg(not(target_os="android"))] extern crate glfw; -#[cfg(target_os="android")] -extern crate glut; +extern crate glfw_app; extern crate js; extern crate layers; extern crate opengles; diff --git a/ports/glfw/Cargo.toml b/ports/glfw/Cargo.toml new file mode 100644 index 00000000000..3212bd428ac --- /dev/null +++ b/ports/glfw/Cargo.toml @@ -0,0 +1,30 @@ +[package] +name = "glfw_app" +version = "0.0.1" +authors = ["The Servo Project Developers"] + +[lib] +name = "glfw_app" +path = "lib.rs" + +[dependencies.alert] +git = "https://github.com/servo/rust-alert" + +[dependencies.compositing] +path = "../../components/compositing" + +[dependencies.geom] +git = "https://github.com/servo/rust-geom" + +[dependencies.glfw] +git = "https://github.com/servo/glfw-rs" +branch = "servo" + +[dependencies.layers] +git = "https://github.com/servo/rust-layers" + +[dependencies.msg] +path = "../../components/msg" + +[dependencies.util] +path = "../../components/util" diff --git a/ports/glfw/lib.rs b/ports/glfw/lib.rs new file mode 100644 index 00000000000..d0f96f950eb --- /dev/null +++ b/ports/glfw/lib.rs @@ -0,0 +1,43 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//! A simple application that uses GLFW to open a window for Servo to display in. + +#![license = "MPL"] +#![feature(macro_rules)] +#![deny(unused_imports, unused_variable)] + +extern crate alert; +extern crate compositing; +extern crate geom; +extern crate glfw; +extern crate layers; +extern crate libc; +extern crate msg; +extern crate time; +extern crate util; + +use geom::scale_factor::ScaleFactor; +use std::rc::Rc; +use window::Window; + +mod window; + +pub fn create_window(opts: &util::opts::Opts) -> Rc { + // Initialize GLFW. + let glfw = glfw::init(glfw::LOG_ERRORS).unwrap_or_else(|_| { + // handles things like inability to connect to X + // cannot simply fail, since the runtime isn't up yet (causes a nasty abort) + println!("GLFW initialization failed"); + unsafe { libc::exit(1); } + }); + + // Read command-line options. + let foreground = opts.output_file.is_none(); + let scale_factor = opts.device_pixels_per_px.unwrap_or(ScaleFactor(1.0)); + let size = opts.initial_window_size.as_f32() * scale_factor; + + // Open a window. + Window::new(glfw, foreground, size.as_uint()) +} diff --git a/components/compositing/platform/common/glfw_windowing.rs b/ports/glfw/window.rs similarity index 87% rename from components/compositing/platform/common/glfw_windowing.rs rename to ports/glfw/window.rs index dfe200bf8d8..50be31f05db 100644 --- a/components/compositing/platform/common/glfw_windowing.rs +++ b/ports/glfw/window.rs @@ -4,15 +4,15 @@ //! A windowing implementation using GLFW. -use windowing::{ApplicationMethods, WindowEvent, WindowMethods}; -use windowing::{IdleWindowEvent, ResizeWindowEvent, LoadUrlWindowEvent, MouseWindowEventClass, MouseWindowMoveEventClass}; -use windowing::{ScrollWindowEvent, ZoomWindowEvent, PinchZoomWindowEvent, NavigationWindowEvent, FinishedWindowEvent}; -use windowing::{QuitWindowEvent, MouseWindowClickEvent, MouseWindowMouseDownEvent, MouseWindowMouseUpEvent}; -use windowing::RefreshWindowEvent; -use windowing::{Forward, Back}; +use compositing::windowing::{WindowEvent, WindowMethods}; +use compositing::windowing::{IdleWindowEvent, ResizeWindowEvent, LoadUrlWindowEvent, MouseWindowEventClass, MouseWindowMoveEventClass}; +use compositing::windowing::{ScrollWindowEvent, ZoomWindowEvent, PinchZoomWindowEvent, NavigationWindowEvent, FinishedWindowEvent}; +use compositing::windowing::{QuitWindowEvent, MouseWindowClickEvent, MouseWindowMouseDownEvent, MouseWindowMouseUpEvent}; +use compositing::windowing::RefreshWindowEvent; +use compositing::windowing::{Forward, Back}; use alert::{Alert, AlertMethods}; -use libc::{exit, c_int}; +use libc::c_int; use time; use time::Timespec; use std::cell::{Cell, RefCell}; @@ -23,35 +23,14 @@ use geom::point::{Point2D, TypedPoint2D}; use geom::scale_factor::ScaleFactor; use geom::size::TypedSize2D; use layers::geometry::DevicePixel; -use servo_msg::compositor_msg::{IdleRenderState, RenderState, RenderingRenderState}; -use servo_msg::compositor_msg::{FinishedLoading, Blank, Loading, PerformingLayout, ReadyState}; -use servo_util::geometry::ScreenPx; +use msg::compositor_msg::{IdleRenderState, RenderState, RenderingRenderState}; +use msg::compositor_msg::{FinishedLoading, Blank, Loading, PerformingLayout, ReadyState}; +use util::geometry::ScreenPx; use glfw; use glfw::Context; /// A structure responsible for setting up and tearing down the entire windowing system. -pub struct Application { - pub glfw: glfw::Glfw, -} - -impl ApplicationMethods for Application { - fn new() -> Application { - let app = glfw::init(glfw::LOG_ERRORS); - match app { - Err(_) => { - // handles things like inability to connect to X - // cannot simply fail, since the runtime isn't up yet (causes a nasty abort) - println!("GLFW initialization failed"); - unsafe { exit(1); } - } - Ok(app) => { - Application { glfw: app } - } - } - } -} - macro_rules! glfw_callback( ( $callback:path ($($arg:ident: $arg_ty:ty),*) $block:expr @@ -102,21 +81,22 @@ pub struct Window { last_title_set_time: Cell, } -impl WindowMethods for Window { +impl Window { /// Creates a new window. - fn new(app: &Application, is_foreground: bool, size: TypedSize2D) -> Rc { + pub fn new(glfw: glfw::Glfw, is_foreground: bool, size: TypedSize2D) + -> Rc { // Create the GLFW window. let window_size = size.to_untyped(); - app.glfw.window_hint(glfw::Visible(is_foreground)); - let (glfw_window, events) = app.glfw.create_window(window_size.width as u32, - window_size.height as u32, - "Servo", glfw::Windowed) + glfw.window_hint(glfw::Visible(is_foreground)); + let (glfw_window, events) = glfw.create_window(window_size.width as u32, + window_size.height as u32, + "Servo", glfw::Windowed) .expect("Failed to create GLFW window"); glfw_window.make_current(); // Create our window object. let window = Window { - glfw: app.glfw, + glfw: glfw, glfw_window: glfw_window, events: events, @@ -144,7 +124,9 @@ impl WindowMethods for Window { wrapped_window } +} +impl WindowMethods for Window { /// Returns the size of the window in hardware pixels. fn framebuffer_size(&self) -> TypedSize2D { let (width, height) = self.glfw_window.get_framebuffer_size(); diff --git a/python/servo/build_commands.py b/python/servo/build_commands.py index 2d67fdb8c75..5a7316a9b97 100644 --- a/python/servo/build_commands.py +++ b/python/servo/build_commands.py @@ -46,20 +46,22 @@ class MachCommands(CommandBase): opts += ["--release"] if target: opts += ["--target", target] - elif android: - opts += ["--target", "arm-linux-androideabi"] if jobs is not None: opts += ["-j", jobs] if verbose: opts += ["-v"] build_start = time() - status = subprocess.call( - ["cargo", "build"] + opts, - env=self.build_env()) if android: - status = status or subprocess.call( - ["make", "-C", "ports/android"], + make_opts = [] + if opts: + make_opts += ["CARGO_OPTS=" + " ".join(opts)] + status = subprocess.call( + ["make", "-C", "ports/android"] + make_opts, + env=self.build_env()) + else: + status = subprocess.call( + ["cargo", "build"] + opts, env=self.build_env()) elapsed = time() - build_start diff --git a/src/lib.rs b/src/lib.rs index 79ace45134c..132d0314558 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -33,6 +33,8 @@ extern crate url; #[cfg(not(test))] use compositing::{CompositorChan, CompositorTask, Constellation}; #[cfg(not(test))] +use compositing::windowing::WindowMethods; +#[cfg(not(test))] use servo_msg::constellation_msg::{ConstellationChan, InitLoadUrlMsg}; #[cfg(not(test))] use script::dom::bindings::codegen::RegisterBindings; @@ -55,36 +57,12 @@ use green::GreenTaskBuilder; #[cfg(not(test))] use std::os; #[cfg(not(test))] +use std::rc::Rc; +#[cfg(not(test))] use std::task::TaskBuilder; -#[cfg(not(test), target_os="android")] -use std::string; - -#[cfg(not(test), target_os="android")] -#[no_mangle] -#[allow(dead_code)] -pub extern "C" fn android_start(argc: int, argv: *const *const u8) -> int { - native::start(argc, argv, proc() { - let mut args: Vec = vec!(); - for i in range(0u, argc as uint) { - unsafe { - args.push(string::raw::from_buf(*argv.offset(i as int) as *const u8)); - } - } - - let opts = opts::from_cmdline_args(args.as_slice()); - match opts { - Some(mut o) => { - // Always use CPU rendering on android. - o.cpu_painting = true; - run(o); - }, - None => {} - } - }) -} #[cfg(not(test))] -pub fn run(opts: opts::Opts) { +pub fn run(opts: opts::Opts, window: Option>) { ::servo_util::opts::set_experimental_enabled(opts.enable_experimental); RegisterBindings::RegisterProxyHandlers(); @@ -149,7 +127,8 @@ pub fn run(opts: opts::Opts) { let constellation_chan = result_port.recv(); debug!("preparing to enter main loop"); - CompositorTask::create(opts, + CompositorTask::create(window, + opts, compositor_port, constellation_chan, time_profiler_chan, diff --git a/src/main.rs b/src/main.rs index a1ced51d823..9d78c0967c7 100644 --- a/src/main.rs +++ b/src/main.rs @@ -11,6 +11,9 @@ extern crate servo; extern crate native; extern crate "util" as servo_util; +#[cfg(not(test),not(target_os="android"))] +extern crate glfw_app; + #[cfg(not(test),not(target_os="android"))] use servo_util::opts; @@ -20,13 +23,19 @@ use servo::run; #[cfg(not(test),not(target_os="android"))] use std::os; -#[cfg(not(test), target_os="linux")] -#[cfg(not(test), target_os="macos")] +#[cfg(not(test), not(target_os="android"))] #[start] #[allow(dead_code)] fn start(argc: int, argv: *const *const u8) -> int { native::start(argc, argv, proc() { - opts::from_cmdline_args(os::args().as_slice()).map(run); + opts::from_cmdline_args(os::args().as_slice()).map(|opts| { + let window = if opts.headless { + None + } else { + Some(glfw_app::create_window(&opts)) + }; + run(opts, window); + }); }) }