mirror of
https://github.com/servo/servo.git
synced 2025-08-03 12:40:06 +01:00
auto merge of #1445 : webconv/servo/PR_android, r=kmcallister
1. We've aimed to android 4.3 Jellybean devices like Galaxy 10.1 and Galaxy Nexus, etc. I think it could still support android 4.1 2. Needs android ndk r9(not r9b) and latest android sdk 3. Needs some device list update on sdk for apk build. 4. Currently we can not build android port on mac because compiler build problem like https://github.com/mozilla/rust/pull/10921. Hopefully I expect that it could be resolved at next rust upgrade.
This commit is contained in:
commit
90f44738a4
19 changed files with 177 additions and 97 deletions
6
.gitmodules
vendored
6
.gitmodules
vendored
|
@ -110,3 +110,9 @@
|
|||
path = src/support/encoding/rust-encoding
|
||||
url = https://github.com/mozilla-servo/rust-encoding.git
|
||||
branch = rust-servo
|
||||
[submodule "src/support/egl/rust-egl"]
|
||||
path = src/support/egl/rust-egl
|
||||
url = https://github.com/webconvforge/rust-egl.git
|
||||
[submodule "src/platform/android/servo-android-glue"]
|
||||
path = src/platform/android/servo-android-glue
|
||||
url = https://github.com/webconvforge/servo-android-glue.git
|
||||
|
|
25
Makefile.in
25
Makefile.in
|
@ -55,10 +55,6 @@ export CFG_ENABLE_DEBUG
|
|||
export CFG_ENABLE_DEBUG_SKIA
|
||||
export RUSTC=$(CFG_RUSTC)
|
||||
export RUSTFLAGS=$(CFG_RUSTC_FLAGS)
|
||||
export CC=$(CFG_CC)
|
||||
export CXX=$(CFG_CXX)
|
||||
export LD=$(CFG_LD)
|
||||
export AR=$(CFG_AR)
|
||||
export RANLIB=$(CFG_RANLIB)
|
||||
export PYTHON=$(CFG_PYTHON2)
|
||||
export PATH=$(CFG_PATH)
|
||||
|
@ -95,7 +91,7 @@ $(S)config.stamp : $(S)configure $(S)Makefile.in
|
|||
ifneq ($(CFG_LOCAL_RUSTC),1)
|
||||
$(CFG_RUSTC): $(B)src/compiler/rust/rust-auto-clean-stamp
|
||||
@$(call E, building rustc)
|
||||
$(Q)CFG_RUSTC_FLAGS= CFG_ENABLE_DEBUG= RUSTFLAGS= $(MAKE) -C "$(CFG_BUILD_DIR)src/compiler/rust" CC=gcc CXX=g++ LD=ld AR=ar
|
||||
$(Q)CFG_RUSTC_FLAGS= CFG_ENABLE_DEBUG= RUSTFLAGS= $(MAKE) -C "$(CFG_BUILD_DIR)src/compiler/rust"
|
||||
|
||||
clean-rust:
|
||||
@$(call E, cleaning rustc)
|
||||
|
@ -180,6 +176,11 @@ endif
|
|||
|
||||
$(eval $(call DEF_SUBMODULE_DEPS,$(1)))
|
||||
|
||||
CROSS_COMPILER_CC = CC=$(CFG_CC)
|
||||
CROSS_COMPILER_CXX = CXX=$(CFG_CXX)
|
||||
CROSS_COMPILER_LD = LD=$(CFG_LD)
|
||||
CROSS_COMPILER_AR = AR=$(CFG_AR)
|
||||
|
||||
$$(DONE_$(1)) : $$(DONE_DEPS_$(1)) $$(ROUGH_DEPS_$(1)) $$(RUSTC_DEP_$(1))
|
||||
# @$$(call E, make: $(1))
|
||||
# @$$(call E, $(1) deps= $$(DEPS_$(1)))
|
||||
|
@ -191,6 +192,10 @@ $$(DONE_$(1)) : $$(DONE_DEPS_$(1)) $$(ROUGH_DEPS_$(1)) $$(RUSTC_DEP_$(1))
|
|||
$$(ENV_CFLAGS_$(1)) \
|
||||
$$(ENV_CXXFLAGS_$(1)) \
|
||||
$$(ENV_RFLAGS_$(1)) \
|
||||
$$(CROSS_COMPILER_CC) \
|
||||
$$(CROSS_COMPILER_CXX) \
|
||||
$$(CROSS_COMPILER_LD) \
|
||||
$$(CROSS_COMPILER_AR) \
|
||||
$$(MAKE) -C $$(B)src/$$(PATH_$(1)) && touch $$(DONE_$(1))
|
||||
|
||||
# main submodule target
|
||||
|
@ -338,6 +343,16 @@ package: servo
|
|||
cp $(B)src/platform/macos/rust-cocoa/lib*.dylib Servo.app/Contents/MacOS/src/platform/macos/rust-cocoa/
|
||||
cp $(B)src/support/azure/rust-azure/lib*.dylib Servo.app/Contents/MacOS/src/support/azure/rust-azure/
|
||||
|
||||
else ifeq ($(CFG_OSTYPE),linux-androideabi)
|
||||
package: servo
|
||||
mkdir -p sofile
|
||||
-exec cp -f {} $(CFG_BUILD_HOME)sofile \;
|
||||
find . ! \( \( -type d -path './sofile' -o -path './$(CFG_TARGET_TRIPLES)/src/compiler/rust' \) -prune \) -name '*.so' -type f | xargs cp -f -t $(CFG_BUILD_HOME)sofile
|
||||
find $(CFG_RUST_HOME)/lib/rustc/$(CFG_TARGET_TRIPLES)/lib/ -name '*.so' -type f -size +1c | xargs cp -f -t $(CFG_BUILD_HOME)sofile
|
||||
cd $(S)src/platform/android/servo-android-glue && make with-libs
|
||||
cd $(CFG_BUILD_HOME)
|
||||
cp $(S)src/platform/android/servo-android-glue/bin/ServoAndroid-debug.apk -t $(CFG_BUILD_HOME)
|
||||
|
||||
else
|
||||
|
||||
bindings: $(AUTOGEN_SRC_script)
|
||||
|
|
3
configure
vendored
3
configure
vendored
|
@ -374,7 +374,7 @@ probe_need CFG_AUTOCONF213 autoconf213 \
|
|||
step_msg "looking for build programs"
|
||||
case ${TARGET_OSTYPE} in
|
||||
android)
|
||||
CFG_PATH="${CFG_ANDROID_CROSS_PATH}/bin":$PATH
|
||||
CFG_PATH=$PATH:"${CFG_ANDROID_CROSS_PATH}/bin"
|
||||
OLD_PATH=$PATH
|
||||
export PATH=${CFG_PATH}
|
||||
|
||||
|
@ -535,6 +535,7 @@ if [ $CFG_OSTYPE = "linux-androideabi" ]
|
|||
then
|
||||
CFG_SUBMODULES="\
|
||||
support/glut/rust-glut \
|
||||
support/egl/rust-egl \
|
||||
platform/android/libexpat \
|
||||
platform/android/libfreetype2 \
|
||||
platform/android/fontconfig \
|
||||
|
|
|
@ -171,6 +171,7 @@ endif
|
|||
|
||||
ifeq ($(CFG_OSTYPE),linux-androideabi)
|
||||
DEPS_rust-azure += \
|
||||
rust-egl \
|
||||
rust-freetype \
|
||||
rust-fontconfig \
|
||||
fontconfig \
|
||||
|
@ -181,6 +182,7 @@ DEPS_rust-azure += \
|
|||
|
||||
# See note at top of file
|
||||
DEPS_rust-layers += \
|
||||
rust-egl \
|
||||
rust-freetype \
|
||||
rust-fontconfig \
|
||||
rust-xlib \
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit 67d7be0ff197fe0d0c420abc8ac9c4b94a3ed025
|
||||
Subproject commit f6b236b9d2780edc1336ea5f62c2ba0fed6e34c5
|
|
@ -1,4 +1,4 @@
|
|||
# If this file is modified, then rust will be forcibly cleaned and then rebuilt.
|
||||
# The actual contents of this file do not matter, but to trigger a change on the
|
||||
# build bots then the contents should be changed so git updates the mtime.
|
||||
2013-10-31
|
||||
2014-01-02
|
||||
|
|
|
@ -28,11 +28,11 @@ use std::cast;
|
|||
use std::ptr;
|
||||
use std::str;
|
||||
|
||||
fn float_to_fixed_ft(f: float) -> i32 {
|
||||
fn float_to_fixed_ft(f: f64) -> i32 {
|
||||
float_to_fixed(6, f)
|
||||
}
|
||||
|
||||
fn fixed_to_float_ft(f: i32) -> float {
|
||||
fn fixed_to_float_ft(f: i32) -> f64 {
|
||||
fixed_to_float(6, f)
|
||||
}
|
||||
|
||||
|
@ -62,7 +62,7 @@ pub struct FontHandle {
|
|||
#[unsafe_destructor]
|
||||
impl Drop for FontHandle {
|
||||
#[fixed_stack_segment]
|
||||
fn drop(&self) {
|
||||
fn drop(&mut self) {
|
||||
assert!(self.face.is_not_null());
|
||||
unsafe {
|
||||
if !FT_Done_Face(self.face).succeeded() {
|
||||
|
@ -77,7 +77,7 @@ impl FontHandleMethods for FontHandle {
|
|||
buf: ~[u8],
|
||||
style: &SpecifiedFontStyle)
|
||||
-> Result<FontHandle, ()> {
|
||||
let ft_ctx: FT_Library = fctx.ctx.ctx;
|
||||
let ft_ctx: FT_Library = fctx.ctx.borrow().ctx;
|
||||
if ft_ctx.is_null() { return Err(()); }
|
||||
|
||||
let face_result = do buf.as_imm_buf |bytes: *u8, len: uint| {
|
||||
|
@ -92,7 +92,7 @@ impl FontHandleMethods for FontHandle {
|
|||
let handle = FontHandle {
|
||||
face: face,
|
||||
source: FontSourceMem(buf),
|
||||
handle: *fctx
|
||||
handle: fctx.clone()
|
||||
};
|
||||
Ok(handle)
|
||||
}
|
||||
|
@ -100,10 +100,8 @@ impl FontHandleMethods for FontHandle {
|
|||
};
|
||||
|
||||
#[fixed_stack_segment]
|
||||
fn create_face_from_buffer(lib: FT_Library,
|
||||
cbuf: *u8, cbuflen: uint, pt_size: float)
|
||||
-> Result<FT_Face, ()> {
|
||||
|
||||
fn create_face_from_buffer(lib: FT_Library, cbuf: *u8, cbuflen: uint, pt_size: f64)
|
||||
-> Result<FT_Face, ()> {
|
||||
unsafe {
|
||||
let mut face: FT_Face = ptr::null();
|
||||
let face_index = 0 as FT_Long;
|
||||
|
@ -206,7 +204,7 @@ impl FontHandleMethods for FontHandle {
|
|||
let void_glyph = (*self.face).glyph;
|
||||
let slot: FT_GlyphSlot = cast::transmute(void_glyph);
|
||||
assert!(slot.is_not_null());
|
||||
debug!("metrics: {}", (*slot).metrics);
|
||||
debug!("metrics: {:?}", (*slot).metrics);
|
||||
let advance = (*slot).metrics.horiAdvance;
|
||||
debug!("h_advance for {} is {}", glyph, advance);
|
||||
let advance = advance as i32;
|
||||
|
@ -223,12 +221,12 @@ impl FontHandleMethods for FontHandle {
|
|||
/* TODO(Issue #76): complete me */
|
||||
let face = self.get_face_rec();
|
||||
|
||||
let underline_size = self.font_units_to_au(face.underline_thickness as float);
|
||||
let underline_offset = self.font_units_to_au(face.underline_position as float);
|
||||
let em_size = self.font_units_to_au(face.units_per_EM as float);
|
||||
let ascent = self.font_units_to_au(face.ascender as float);
|
||||
let descent = self.font_units_to_au(face.descender as float);
|
||||
let max_advance = self.font_units_to_au(face.max_advance_width as float);
|
||||
let underline_size = self.font_units_to_au(face.underline_thickness as f64);
|
||||
let underline_offset = self.font_units_to_au(face.underline_position as f64);
|
||||
let em_size = self.font_units_to_au(face.units_per_EM as f64);
|
||||
let ascent = self.font_units_to_au(face.ascender as f64);
|
||||
let descent = self.font_units_to_au(face.descender as f64);
|
||||
let max_advance = self.font_units_to_au(face.max_advance_width as f64);
|
||||
|
||||
// 'leading' is supposed to be the vertical distance between two baselines,
|
||||
// reflected by the height attibute in freetype. On OS X (w/ CTFont),
|
||||
|
@ -236,7 +234,7 @@ impl FontHandleMethods for FontHandle {
|
|||
// the top of the next line's ascent or: (line_height - ascent - descent),
|
||||
// see http://stackoverflow.com/a/5635981 for CTFont implementation.
|
||||
// Convert using a formular similar to what CTFont returns for consistency.
|
||||
let height = self.font_units_to_au(face.height as float);
|
||||
let height = self.font_units_to_au(face.height as f64);
|
||||
let leading = height - (ascent + descent);
|
||||
|
||||
let mut strikeout_size = geometry::from_pt(0.0);
|
||||
|
@ -246,9 +244,9 @@ impl FontHandleMethods for FontHandle {
|
|||
let os2 = FT_Get_Sfnt_Table(face, ft_sfnt_os2) as *TT_OS2;
|
||||
let valid = os2.is_not_null() && (*os2).version != 0xffff;
|
||||
if valid {
|
||||
strikeout_size = self.font_units_to_au((*os2).yStrikeoutSize as float);
|
||||
strikeout_offset = self.font_units_to_au((*os2).yStrikeoutPosition as float);
|
||||
x_height = self.font_units_to_au((*os2).sxHeight as float);
|
||||
strikeout_size = self.font_units_to_au((*os2).yStrikeoutSize as f64);
|
||||
strikeout_offset = self.font_units_to_au((*os2).yStrikeoutPosition as f64);
|
||||
x_height = self.font_units_to_au((*os2).sxHeight as f64);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -276,7 +274,7 @@ impl FontHandleMethods for FontHandle {
|
|||
|
||||
impl<'self> FontHandle {
|
||||
#[fixed_stack_segment]
|
||||
fn set_char_size(face: FT_Face, pt_size: float) -> Result<(), ()>{
|
||||
fn set_char_size(face: FT_Face, pt_size: f64) -> Result<(), ()>{
|
||||
let char_width = float_to_fixed_ft(pt_size) as FT_F26Dot6;
|
||||
let char_height = float_to_fixed_ft(pt_size) as FT_F26Dot6;
|
||||
let h_dpi = 72;
|
||||
|
@ -289,10 +287,10 @@ impl<'self> FontHandle {
|
|||
}
|
||||
|
||||
#[fixed_stack_segment]
|
||||
pub fn new_from_file(fctx: &FontContextHandle, file: ~str,
|
||||
pub fn new_from_file(fctx: &FontContextHandle, file: &str,
|
||||
style: &SpecifiedFontStyle) -> Result<FontHandle, ()> {
|
||||
unsafe {
|
||||
let ft_ctx: FT_Library = fctx.ctx.ctx;
|
||||
let ft_ctx: FT_Library = fctx.ctx.borrow().ctx;
|
||||
if ft_ctx.is_null() { return Err(()); }
|
||||
|
||||
let mut face: FT_Face = ptr::null();
|
||||
|
@ -306,9 +304,9 @@ impl<'self> FontHandle {
|
|||
}
|
||||
if FontHandle::set_char_size(face, style.pt_size).is_ok() {
|
||||
Ok(FontHandle {
|
||||
source: FontSourceFile(file),
|
||||
source: FontSourceFile(file.to_str()),
|
||||
face: face,
|
||||
handle: *fctx
|
||||
handle: fctx.clone()
|
||||
})
|
||||
} else {
|
||||
Err(())
|
||||
|
@ -320,7 +318,7 @@ impl<'self> FontHandle {
|
|||
pub fn new_from_file_unstyled(fctx: &FontContextHandle, file: ~str)
|
||||
-> Result<FontHandle, ()> {
|
||||
unsafe {
|
||||
let ft_ctx: FT_Library = fctx.ctx.ctx;
|
||||
let ft_ctx: FT_Library = fctx.ctx.borrow().ctx;
|
||||
if ft_ctx.is_null() { return Err(()); }
|
||||
|
||||
let mut face: FT_Face = ptr::null();
|
||||
|
@ -336,7 +334,7 @@ impl<'self> FontHandle {
|
|||
Ok(FontHandle {
|
||||
source: FontSourceFile(file),
|
||||
face: face,
|
||||
handle: *fctx
|
||||
handle: fctx.clone()
|
||||
})
|
||||
}
|
||||
}
|
||||
|
@ -347,7 +345,7 @@ impl<'self> FontHandle {
|
|||
}
|
||||
}
|
||||
|
||||
fn font_units_to_au(&self, value: float) -> Au {
|
||||
fn font_units_to_au(&self, value: f64) -> Au {
|
||||
let face = self.get_face_rec();
|
||||
|
||||
// face.size is a *c_void in the bindings, presumably to avoid
|
||||
|
@ -355,8 +353,8 @@ impl<'self> FontHandle {
|
|||
let size: &FT_SizeRec = unsafe { cast::transmute(&(*face.size)) };
|
||||
let metrics: &FT_Size_Metrics = &(*size).metrics;
|
||||
|
||||
let em_size = face.units_per_EM as float;
|
||||
let x_scale = (metrics.x_ppem as float) / em_size as float;
|
||||
let em_size = face.units_per_EM as f64;
|
||||
let x_scale = (metrics.x_ppem as f64) / em_size as f64;
|
||||
|
||||
// If this isn't true then we're scaling one of the axes wrong
|
||||
assert!(metrics.x_ppem == metrics.y_ppem);
|
||||
|
|
|
@ -11,23 +11,24 @@ use freetype::freetype::{FTErrorMethods, FT_Library};
|
|||
use freetype::freetype::{FT_Done_FreeType, FT_Init_FreeType};
|
||||
|
||||
use std::ptr;
|
||||
use std::rc::Rc;
|
||||
|
||||
#[deriving(Clone)]
|
||||
struct FreeTypeLibraryHandle {
|
||||
ctx: FT_Library,
|
||||
}
|
||||
|
||||
impl Drop for FreeTypeLibraryHandle {
|
||||
#[fixed_stack_segment]
|
||||
fn drop(&self) {
|
||||
assert!(self.ctx.is_not_null());
|
||||
unsafe {
|
||||
FT_Done_FreeType(self.ctx);
|
||||
}
|
||||
}
|
||||
#[deriving(Clone)]
|
||||
pub struct FontContextHandle {
|
||||
ctx: Rc<FreeTypeLibraryHandle>,
|
||||
}
|
||||
|
||||
pub struct FontContextHandle {
|
||||
ctx: @FreeTypeLibraryHandle,
|
||||
impl Drop for FreeTypeLibraryHandle {
|
||||
#[fixed_stack_segment]
|
||||
fn drop(&mut self) {
|
||||
assert!(self.ctx.is_not_null());
|
||||
unsafe { FT_Done_FreeType(self.ctx) };
|
||||
}
|
||||
}
|
||||
|
||||
impl FontContextHandle {
|
||||
|
@ -35,27 +36,22 @@ impl FontContextHandle {
|
|||
pub fn new() -> FontContextHandle {
|
||||
unsafe {
|
||||
let ctx: FT_Library = ptr::null();
|
||||
let result = FT_Init_FreeType(ptr::to_unsafe_ptr(&ctx));
|
||||
if !result.succeeded() { fail!(); }
|
||||
|
||||
let result = FT_Init_FreeType(&ctx);
|
||||
if !result.succeeded() { fail!("Unable to initialize FreeType library"); }
|
||||
FontContextHandle {
|
||||
ctx: @FreeTypeLibraryHandle { ctx: ctx },
|
||||
ctx: Rc::new(FreeTypeLibraryHandle { ctx: ctx }),
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl FontContextHandleMethods for FontContextHandle {
|
||||
fn clone(&self) -> FontContextHandle {
|
||||
FontContextHandle { ctx: self.ctx }
|
||||
}
|
||||
|
||||
fn create_font_from_identifier(&self, name: ~str, style: UsedFontStyle)
|
||||
-> Result<FontHandle, ()> {
|
||||
debug!("Creating font handle for {:s}", name);
|
||||
do path_from_identifier(name, &style).chain |file_name| {
|
||||
do path_from_identifier(name, &style).and_then |file_name| {
|
||||
debug!("Opening font face {:s}", file_name);
|
||||
FontHandle::new_from_file(self, file_name, &style)
|
||||
FontHandle::new_from_file(self, file_name.to_owned(), &style)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,7 +19,6 @@ use fontconfig::fontconfig::{
|
|||
|
||||
|
||||
use font::{FontHandleMethods, UsedFontStyle};
|
||||
use font_context::FontContextHandleMethods;
|
||||
use font_list::{FontEntry, FontFamily, FontFamilyMap};
|
||||
use platform::font::FontHandle;
|
||||
use platform::font_context::FontContextHandle;
|
||||
|
@ -53,7 +52,7 @@ impl FontListHandle {
|
|||
while FcPatternGetString(*font, FC_FAMILY, v, &family) == FcResultMatch {
|
||||
let family_name = str::raw::from_c_str(family as *c_char);
|
||||
debug!("Creating new FontFamily for family: {:s}", family_name);
|
||||
let new_family = @mut FontFamily::new(family_name);
|
||||
let new_family = FontFamily::new(family_name);
|
||||
family_map.insert(family_name, new_family);
|
||||
v += 1;
|
||||
}
|
||||
|
@ -64,8 +63,8 @@ impl FontListHandle {
|
|||
}
|
||||
|
||||
#[fixed_stack_segment]
|
||||
pub fn load_variations_for_family(&self, family: @mut FontFamily) {
|
||||
debug!("getting variations for {}", family);
|
||||
pub fn load_variations_for_family(&self, family: &mut FontFamily) {
|
||||
debug!("getting variations for {:?}", family);
|
||||
unsafe {
|
||||
let config = FcConfigGetCurrent();
|
||||
let font_set = FcConfigGetFonts(config, FcSetSystem);
|
||||
|
@ -120,7 +119,7 @@ impl FontListHandle {
|
|||
let font_handle = font_handle.unwrap();
|
||||
|
||||
debug!("Creating new FontEntry for face: {:s}", font_handle.face_name());
|
||||
let entry = @FontEntry::new(font_handle);
|
||||
let entry = FontEntry::new(font_handle);
|
||||
family.entries.push(entry);
|
||||
}
|
||||
|
||||
|
@ -141,7 +140,7 @@ struct AutoPattern {
|
|||
|
||||
impl Drop for AutoPattern {
|
||||
#[fixed_stack_segment]
|
||||
fn drop(&self) {
|
||||
fn drop(&mut self) {
|
||||
unsafe {
|
||||
FcPatternDestroy(self.pattern);
|
||||
}
|
||||
|
|
|
@ -11,7 +11,9 @@ use geom::size::Size2D;
|
|||
use gfx::render_task::{ReRenderMsg, UnusedBufferMsg};
|
||||
use layers::layers::{ContainerLayerKind, ContainerLayer, Flip, NoFlip, TextureLayer};
|
||||
use layers::layers::TextureLayerKind;
|
||||
#[cfg(target_os="macos")] use layers::layers::VerticalFlip;
|
||||
#[cfg(target_os="macos")]
|
||||
#[cfg(target_os="android")]
|
||||
use layers::layers::VerticalFlip;
|
||||
use layers::platform::surface::{NativeCompositingGraphicsContext, NativeSurfaceMethods};
|
||||
use layers::texturegl::{Texture, TextureTarget};
|
||||
#[cfg(target_os="macos")] use layers::texturegl::TextureTargetRectangle;
|
||||
|
@ -424,7 +426,18 @@ impl CompositorLayer {
|
|||
(flip, TextureTargetRectangle(size))
|
||||
}
|
||||
|
||||
#[cfg(not(target_os="macos"))]
|
||||
#[cfg(target_os="android")]
|
||||
fn texture_flip_and_target(cpu_painting: bool, size: Size2D<uint>) -> (Flip, TextureTarget) {
|
||||
let flip = if cpu_painting {
|
||||
NoFlip
|
||||
} else {
|
||||
VerticalFlip
|
||||
};
|
||||
|
||||
(flip, TextureTarget2D)
|
||||
}
|
||||
|
||||
#[cfg(target_os="linux")]
|
||||
fn texture_flip_and_target(_: bool, _: Size2D<uint>) -> (Flip, TextureTarget) {
|
||||
(NoFlip, TextureTarget2D)
|
||||
}
|
||||
|
|
|
@ -12,6 +12,7 @@ use windowing::{Forward, Back};
|
|||
|
||||
use alert::{Alert, AlertMethods};
|
||||
use std::libc::c_int;
|
||||
use std::local_data;
|
||||
use geom::point::Point2D;
|
||||
use geom::size::Size2D;
|
||||
use servo_msg::compositor_msg::{IdleRenderState, RenderState, RenderingRenderState};
|
||||
|
@ -35,7 +36,8 @@ impl ApplicationMethods for Application {
|
|||
}
|
||||
|
||||
impl Drop for Application {
|
||||
fn drop(&self) {
|
||||
fn drop(&mut self) {
|
||||
drop_local_window();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -78,26 +80,31 @@ impl WindowMethods<Application> for Window {
|
|||
throbber_frame: 0,
|
||||
};
|
||||
|
||||
let event_queue = window.event_queue;
|
||||
install_local_window(window);
|
||||
|
||||
// Register event handlers.
|
||||
|
||||
//Added dummy display callback to freeglut. According to freeglut ref, we should register some kind of display callback after freeglut 3.0.
|
||||
do glut::display_func || {
|
||||
debug!("GLUT display func registered");
|
||||
}
|
||||
do glut::reshape_func(window.glut_window) |width, height| {
|
||||
event_queue.push(ResizeWindowEvent(width as uint, height as uint))
|
||||
local_window().event_queue.push(ResizeWindowEvent(width as uint, height as uint))
|
||||
}
|
||||
do glut::keyboard_func |key, _, _| {
|
||||
window.handle_key(key)
|
||||
local_window().handle_key(key)
|
||||
}
|
||||
do glut::mouse_func |button, state, x, y| {
|
||||
if button < 3 {
|
||||
window.handle_mouse(button, state, x, y);
|
||||
local_window().handle_mouse(button, state, x, y);
|
||||
}
|
||||
else {
|
||||
match button {
|
||||
3 => {
|
||||
event_queue.push(ScrollWindowEvent(Point2D(0.0, 5.0 as f32), Point2D(0.0 as i32, 5.0 as i32)));
|
||||
local_window().event_queue.push(ScrollWindowEvent(Point2D(0.0, 5.0 as f32), Point2D(0.0 as i32, 5.0 as i32)));
|
||||
},
|
||||
4 => {
|
||||
event_queue.push(ScrollWindowEvent(Point2D(0.0, -5.0 as f32), Point2D(0.0 as i32, -5.0 as i32)));
|
||||
local_window().event_queue.push(ScrollWindowEvent(Point2D(0.0, -5.0 as f32), Point2D(0.0 as i32, -5.0 as i32)));
|
||||
},
|
||||
_ => {}
|
||||
}
|
||||
|
@ -206,7 +213,7 @@ impl Window {
|
|||
/// Helper function to handle a click
|
||||
fn handle_mouse(&self, button: c_int, state: c_int, x: c_int, y: c_int) {
|
||||
// FIXME(tkuehn): max pixel dist should be based on pixel density
|
||||
let max_pixel_dist = 10f64;
|
||||
let max_pixel_dist = 10f32;
|
||||
let event = match state {
|
||||
glut::MOUSE_DOWN => {
|
||||
*self.mouse_down_point = Point2D(x, y);
|
||||
|
@ -217,7 +224,7 @@ impl Window {
|
|||
if *self.mouse_down_button == button {
|
||||
let pixel_dist = *self.mouse_down_point - Point2D(x, y);
|
||||
let pixel_dist = ((pixel_dist.x * pixel_dist.x +
|
||||
pixel_dist.y * pixel_dist.y) as float).sqrt();
|
||||
pixel_dist.y * pixel_dist.y) as f32).sqrt();
|
||||
if pixel_dist < max_pixel_dist {
|
||||
let click_event = MouseWindowClickEvent(button as uint,
|
||||
Point2D(x as f32, y as f32));
|
||||
|
@ -245,3 +252,16 @@ impl Window {
|
|||
}
|
||||
}
|
||||
|
||||
static TLS_KEY: local_data::Key<@mut Window> = &local_data::Key;
|
||||
|
||||
fn install_local_window(window: @mut Window) {
|
||||
local_data::set(TLS_KEY, window);
|
||||
}
|
||||
|
||||
fn drop_local_window() {
|
||||
local_data::pop(TLS_KEY);
|
||||
}
|
||||
|
||||
fn local_window() -> @mut Window {
|
||||
local_data::get(TLS_KEY, |v| *v.unwrap())
|
||||
}
|
||||
|
|
|
@ -56,6 +56,8 @@ pub use servo_util::url::make_url;
|
|||
use std::comm;
|
||||
#[cfg(not(test))]
|
||||
use std::os;
|
||||
#[cfg(not(test))]
|
||||
use std::str;
|
||||
use std::task::spawn_with;
|
||||
|
||||
#[path="compositing/compositor_task.rs"]
|
||||
|
@ -100,27 +102,26 @@ pub mod platform;
|
|||
#[path = "util/mod.rs"]
|
||||
pub mod util;
|
||||
|
||||
#[cfg(not(test))]
|
||||
#[cfg(not(test), target_os="linux")]
|
||||
#[cfg(not(test), target_os="macos")]
|
||||
#[start]
|
||||
fn start(argc: int, argv: **u8) -> int {
|
||||
#[cfg(target_os="linux")]
|
||||
#[cfg(target_os="macos")]
|
||||
fn getopts() -> Opts {
|
||||
opts::from_cmdline_args(os::args())
|
||||
}
|
||||
#[cfg(target_os="android")]
|
||||
fn getopts() -> Opts {
|
||||
let mut args:~[~str] = ~[];
|
||||
args.push(~"servo");
|
||||
let servo_url = os::getenv(~"SERVO_URL");
|
||||
match servo_url {
|
||||
Some(s) => { args.push(s); },
|
||||
None => { fail!("No url input"); }
|
||||
}
|
||||
opts::from_cmdline_args(args)
|
||||
}
|
||||
do std::rt::start_on_main_thread(argc, argv) {
|
||||
run(getopts())
|
||||
run(opts::from_cmdline_args(os::args()))
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(not(test), target_os="android")]
|
||||
#[no_mangle]
|
||||
pub extern "C" fn android_start(argc: int, argv: **u8) -> int {
|
||||
do std::rt::start_on_main_thread(argc, argv) {
|
||||
let mut args:~[~str] = ~[];
|
||||
for i in range(0u, argc as uint) {
|
||||
unsafe {
|
||||
args.push(str::raw::from_c_str(*argv.offset(i as int) as *i8));
|
||||
}
|
||||
}
|
||||
run(opts::from_cmdline_args(args))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -35,6 +35,13 @@ pub mod platform {
|
|||
pub mod surface;
|
||||
}
|
||||
|
||||
#[cfg(target_os="android")]
|
||||
pub mod android {
|
||||
#[cfg(target_os="android")]
|
||||
pub mod surface;
|
||||
}
|
||||
|
||||
|
||||
pub mod surface;
|
||||
}
|
||||
|
||||
|
|
20
src/components/msg/platform/android/surface.rs
Normal file
20
src/components/msg/platform/android/surface.rs
Normal file
|
@ -0,0 +1,20 @@
|
|||
/* 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/. */
|
||||
|
||||
//! EGL-specific implementation of cross-process surfaces. This uses EGL surfaces.
|
||||
|
||||
use platform::surface::NativeSurfaceAzureMethods;
|
||||
|
||||
use azure::AzSkiaGrGLSharedSurfaceRef;
|
||||
use layers::platform::surface::NativeSurface;
|
||||
use std::cast;
|
||||
|
||||
impl NativeSurfaceAzureMethods for NativeSurface {
|
||||
fn from_azure_surface(surface: AzSkiaGrGLSharedSurfaceRef) -> NativeSurface {
|
||||
unsafe {
|
||||
NativeSurface::from_image_khr(cast::transmute(surface))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
1
src/platform/android/servo-android-glue
Submodule
1
src/platform/android/servo-android-glue
Submodule
|
@ -0,0 +1 @@
|
|||
Subproject commit caf03d371cb99c9c72a7127114d8f5365a02eb06
|
1
src/support/egl/rust-egl
Submodule
1
src/support/egl/rust-egl
Submodule
|
@ -0,0 +1 @@
|
|||
Subproject commit 2eae43848b0a00d84f43e76b6d310bd69ffc7a3f
|
|
@ -1 +1 @@
|
|||
Subproject commit 3626d203319a4d12ac68fecee11e18850e180e78
|
||||
Subproject commit 633324e13f6b565615ef59f4463a4c528c90ba54
|
|
@ -1 +1 @@
|
|||
Subproject commit 985790fe16d10d50391675d00df832fc2b8e1048
|
||||
Subproject commit e8123cee2432c1b430c3df781489493f8ecdb6c0
|
|
@ -1 +1 @@
|
|||
Subproject commit 73b73c23696a373b84289711b537eaa00065e4f9
|
||||
Subproject commit a30fd879f21f78672c41a519a60e590003e2caf1
|
Loading…
Add table
Add a link
Reference in a new issue