mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-08 10:44:56 +00:00
servo: Merge #14153 - Add support for DirectWrite font rendering on Windows (from vvuk:win32-dwrite); r=glennw
<!-- Please describe your changes on the following line: --> This PR adds support for DirectWrite text rendering using a thin wrapper for dwrite, as well as similar functionality added to WebRender. In doing so it removes the FreeType dep from the Windows build. There is still work to be done here, but this is a good starting point for future cleanup and fixes. --- <!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: --> - [X] `./mach build -d` does not report any errors - [ ] `./mach test-tidy` does not report any errors - [X] These changes fix #13371 (github issue number if applicable). <!-- Either: --> - [ ] There are tests for these changes OR - [X] These changes do not require tests because they are already tested by other tests <!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. --> Source-Repo: https://github.com/servo/servo Source-Revision: 796fae4bbe966a4e6e32b01fa44f6123c7162992 --HG-- rename : servo/components/style/servo/mod.rs => servo/resources/shaders/cs_text_run.glsl rename : servo/resources/shaders/ps_clear.fs.glsl => servo/resources/shaders/ps_cache_image.fs.glsl rename : servo/resources/shaders/ps_clear.glsl => servo/resources/shaders/ps_cache_image.glsl
This commit is contained in:
parent
a53793b757
commit
57fb13cb5d
@ -53,15 +53,12 @@ core-foundation = "0.2"
|
||||
core-graphics = "0.4"
|
||||
core-text = "2.0"
|
||||
|
||||
[target.'cfg(any(target_os = "linux", target_os = "android", target_os = "windows"))'.dependencies]
|
||||
freetype = {git = "https://github.com/servo/rust-freetype"}
|
||||
|
||||
[target.'cfg(any(target_os = "linux", target_os = "android"))'.dependencies]
|
||||
freetype = {git = "https://github.com/servo/rust-freetype"}
|
||||
servo-fontconfig = "0.2.1"
|
||||
|
||||
[target.'cfg(any(target_arch = "x86_64", target_arch = "aarch64"))'.dependencies]
|
||||
simd = {git = "https://github.com/huonw/simd"}
|
||||
|
||||
[target.'cfg(target_os = "windows")'.dependencies]
|
||||
winapi = "0.2"
|
||||
gdi32-sys = "0.2"
|
||||
dwrote = {git = "https://github.com/vvuk/dwrote-rs"}
|
||||
|
@ -29,19 +29,16 @@ extern crate bitflags;
|
||||
#[cfg(target_os = "macos")] extern crate core_text;
|
||||
|
||||
// Windows-specific library dependencies
|
||||
#[cfg(target_os = "windows")] extern crate gdi32;
|
||||
#[cfg(target_os = "windows")] extern crate winapi;
|
||||
#[cfg(target_os = "windows")] extern crate dwrote;
|
||||
|
||||
extern crate euclid;
|
||||
extern crate fnv;
|
||||
|
||||
// Platforms that use Freetype/Fontconfig library dependencies
|
||||
#[cfg(any(target_os = "linux", target_os = "android"))]
|
||||
extern crate fontconfig;
|
||||
extern crate fontsan;
|
||||
#[cfg(any(target_os = "linux", target_os = "android", target_os = "windows"))]
|
||||
#[cfg(any(target_os = "linux", target_os = "android"))]
|
||||
extern crate freetype;
|
||||
|
||||
extern crate gfx_traits;
|
||||
|
||||
// Eventually we would like the shaper to be pluggable, as many operating systems have their own
|
||||
|
@ -2,19 +2,19 @@
|
||||
* 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/. */
|
||||
|
||||
#[cfg(any(target_os = "linux", target_os = "android", target_os = "windows"))]
|
||||
#[cfg(any(target_os = "linux", target_os = "android"))]
|
||||
pub use platform::freetype::{font, font_context};
|
||||
|
||||
#[cfg(any(target_os = "linux", target_os = "android"))]
|
||||
pub use platform::freetype::{font_list, font_template};
|
||||
|
||||
#[cfg(target_os = "windows")]
|
||||
pub use platform::windows::{font_list, font_template};
|
||||
pub use platform::windows::{font, font_context, font_list, font_template};
|
||||
|
||||
#[cfg(target_os = "macos")]
|
||||
pub use platform::macos::{font, font_context, font_list, font_template};
|
||||
|
||||
#[cfg(any(target_os = "linux", target_os = "android", target_os = "windows"))]
|
||||
#[cfg(any(target_os = "linux", target_os = "android"))]
|
||||
mod freetype {
|
||||
use libc::c_char;
|
||||
use std::ffi::CStr;
|
||||
@ -46,6 +46,8 @@ mod macos {
|
||||
|
||||
#[cfg(target_os = "windows")]
|
||||
mod windows {
|
||||
pub mod font;
|
||||
pub mod font_context;
|
||||
pub mod font_list;
|
||||
pub mod font_template;
|
||||
}
|
||||
|
204
servo/components/gfx/platform/windows/font.rs
Normal file
204
servo/components/gfx/platform/windows/font.rs
Normal file
@ -0,0 +1,204 @@
|
||||
/* 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/. */
|
||||
|
||||
// NOTE: https://www.chromium.org/directwrite-font-proxy has useful
|
||||
// information for an approach that we'll likely need to take when the
|
||||
// renderer moves to a sandboxed process.
|
||||
|
||||
use app_units::Au;
|
||||
use dwrote::{Font, FontFace};
|
||||
use dwrote::{FontWeight, FontStretch, FontStyle};
|
||||
use font::{FontHandleMethods, FontMetrics, FontTableMethods};
|
||||
use font::{FontTableTag, FractionalPixel};
|
||||
use platform::font_template::FontTemplateData;
|
||||
use platform::windows::font_context::FontContextHandle;
|
||||
use platform::windows::font_list::font_from_atom;
|
||||
use std::sync::Arc;
|
||||
use style::computed_values::{font_stretch, font_weight};
|
||||
use text::glyph::GlyphId;
|
||||
|
||||
// 1em = 12pt = 16px, assuming 72 points per inch and 96 px per inch
|
||||
fn pt_to_px(pt: f64) -> f64 { pt / 72. * 96. }
|
||||
fn em_to_px(em: f64) -> f64 { em * 16. }
|
||||
fn au_from_em(em: f64) -> Au { Au::from_f64_px(em_to_px(em)) }
|
||||
fn au_from_pt(pt: f64) -> Au { Au::from_f64_px(pt_to_px(pt)) }
|
||||
|
||||
pub struct FontTable {
|
||||
data: Vec<u8>,
|
||||
}
|
||||
|
||||
impl FontTable {
|
||||
pub fn wrap(data: &[u8]) -> FontTable {
|
||||
FontTable { data: data.to_vec() }
|
||||
}
|
||||
}
|
||||
|
||||
impl FontTableMethods for FontTable {
|
||||
fn buffer(&self) -> &[u8] {
|
||||
&self.data
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct FontHandle {
|
||||
font_data: Arc<FontTemplateData>,
|
||||
font: Font,
|
||||
face: FontFace,
|
||||
em_size: f32,
|
||||
du_per_em: f32,
|
||||
du_to_px: f32,
|
||||
scaled_du_to_px: f32,
|
||||
}
|
||||
|
||||
impl FontHandle {
|
||||
}
|
||||
|
||||
impl FontHandleMethods for FontHandle {
|
||||
fn new_from_template(_: &FontContextHandle, template: Arc<FontTemplateData>, pt_size: Option<Au>)
|
||||
-> Result<Self, ()>
|
||||
{
|
||||
if let Some(_) = template.bytes {
|
||||
// FIXME we should load from template.bytes
|
||||
Err(())
|
||||
} else {
|
||||
let font = font_from_atom(&template.identifier);
|
||||
let face = font.create_font_face();
|
||||
|
||||
let pt_size = pt_size.unwrap_or(au_from_pt(12.));
|
||||
let du_per_em = face.metrics().designUnitsPerEm as f32;
|
||||
|
||||
let em_size = pt_size.to_f32_px() / 16.;
|
||||
let design_units_per_pixel = du_per_em / 16.;
|
||||
|
||||
let design_units_to_pixels = 1. / design_units_per_pixel;
|
||||
let scaled_design_units_to_pixels = em_size / design_units_per_pixel;
|
||||
|
||||
Ok(FontHandle {
|
||||
font_data: template.clone(),
|
||||
font: font,
|
||||
face: face,
|
||||
em_size: em_size,
|
||||
du_per_em: du_per_em,
|
||||
du_to_px: design_units_to_pixels,
|
||||
scaled_du_to_px: scaled_design_units_to_pixels,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
fn template(&self) -> Arc<FontTemplateData> {
|
||||
self.font_data.clone()
|
||||
}
|
||||
|
||||
fn family_name(&self) -> String {
|
||||
self.font.family_name()
|
||||
}
|
||||
|
||||
fn face_name(&self) -> String {
|
||||
self.font.face_name()
|
||||
}
|
||||
|
||||
fn is_italic(&self) -> bool {
|
||||
match self.font.style() {
|
||||
FontStyle::Normal => false,
|
||||
FontStyle::Oblique | FontStyle::Italic => true,
|
||||
}
|
||||
}
|
||||
|
||||
fn boldness(&self) -> font_weight::T {
|
||||
match self.font.weight() {
|
||||
FontWeight::Thin => font_weight::T::Weight100,
|
||||
FontWeight::ExtraLight => font_weight::T::Weight200,
|
||||
FontWeight::Light => font_weight::T::Weight300,
|
||||
// slightly lighter gray
|
||||
FontWeight::SemiLight => font_weight::T::Weight300,
|
||||
FontWeight::Regular => font_weight::T::Weight400,
|
||||
FontWeight::Medium => font_weight::T::Weight500,
|
||||
FontWeight::SemiBold => font_weight::T::Weight600,
|
||||
FontWeight::Bold => font_weight::T::Weight700,
|
||||
FontWeight::ExtraBold => font_weight::T::Weight800,
|
||||
FontWeight::Black => font_weight::T::Weight900,
|
||||
// slightly blacker black
|
||||
FontWeight::ExtraBlack => font_weight::T::Weight900,
|
||||
}
|
||||
}
|
||||
|
||||
fn stretchiness(&self) -> font_stretch::T {
|
||||
match self.font.stretch() {
|
||||
FontStretch::Undefined => font_stretch::T::normal,
|
||||
FontStretch::UltraCondensed => font_stretch::T::ultra_condensed,
|
||||
FontStretch::ExtraCondensed => font_stretch::T::extra_condensed,
|
||||
FontStretch::Condensed => font_stretch::T::condensed,
|
||||
FontStretch::SemiCondensed => font_stretch::T::semi_condensed,
|
||||
FontStretch::Normal => font_stretch::T::normal,
|
||||
FontStretch::SemiExpanded => font_stretch::T::semi_expanded,
|
||||
FontStretch::Expanded => font_stretch::T::expanded,
|
||||
FontStretch::ExtraExpanded => font_stretch::T::extra_expanded,
|
||||
FontStretch::UltraExpanded => font_stretch::T::ultra_expanded,
|
||||
}
|
||||
}
|
||||
|
||||
fn glyph_index(&self, codepoint: char) -> Option<GlyphId> {
|
||||
let glyph = self.face.get_glyph_indices(&[codepoint as u32])[0];
|
||||
if glyph == 0 {
|
||||
return None;
|
||||
}
|
||||
Some(glyph as GlyphId)
|
||||
}
|
||||
|
||||
fn glyph_h_advance(&self, glyph: GlyphId) -> Option<FractionalPixel> {
|
||||
if glyph == 0 {
|
||||
return None;
|
||||
}
|
||||
|
||||
let gm = self.face.get_design_glyph_metrics(&[glyph as u16], false)[0];
|
||||
let f = (gm.advanceWidth as f32 * self.scaled_du_to_px) as FractionalPixel;
|
||||
|
||||
Some(f)
|
||||
}
|
||||
|
||||
/// Can this font do basic horizontal LTR shaping without Harfbuzz?
|
||||
fn can_do_fast_shaping(&self) -> bool {
|
||||
// TODO copy CachedKernTable from the MacOS X implementation to
|
||||
// somehwere global and use it here. We could also implement the
|
||||
// IDirectWriteFontFace1 interface and use the glyph kerning pair
|
||||
// methods there.
|
||||
false
|
||||
}
|
||||
|
||||
fn glyph_h_kerning(&self, _: GlyphId, _: GlyphId) -> FractionalPixel {
|
||||
0.0
|
||||
}
|
||||
|
||||
fn metrics(&self) -> FontMetrics {
|
||||
let dm = self.face.metrics();
|
||||
|
||||
let au_from_du = |du| -> Au { Au::from_f32_px(du as f32 * self.du_to_px) };
|
||||
let au_from_du_s = |du| -> Au { Au:: from_f32_px(du as f32 * self.scaled_du_to_px) };
|
||||
|
||||
// anything that we calculate and don't just pull out of self.face.metrics
|
||||
// is pulled out here for clarity
|
||||
let leading = dm.ascent - dm.capHeight;
|
||||
|
||||
let metrics = FontMetrics {
|
||||
underline_size: au_from_du(dm.underlineThickness as i32),
|
||||
underline_offset: au_from_du_s(dm.underlinePosition as i32),
|
||||
strikeout_size: au_from_du(dm.strikethroughThickness as i32),
|
||||
strikeout_offset: au_from_du_s(dm.strikethroughPosition as i32),
|
||||
leading: au_from_du_s(leading as i32),
|
||||
x_height: au_from_du_s(dm.xHeight as i32),
|
||||
em_size: au_from_em(self.em_size as f64),
|
||||
ascent: au_from_du_s(dm.ascent as i32),
|
||||
descent: au_from_du_s(dm.descent as i32),
|
||||
max_advance: au_from_pt(0.0), // FIXME
|
||||
average_advance: au_from_pt(0.0), // FIXME
|
||||
line_gap: au_from_du(dm.lineGap as i32),
|
||||
};
|
||||
debug!("Font metrics (@{} pt): {:?}", self.em_size * 12., metrics);
|
||||
metrics
|
||||
}
|
||||
|
||||
fn table_for_tag(&self, tag: FontTableTag) -> Option<FontTable> {
|
||||
self.face.get_font_table(tag).map(|bytes| FontTable { data: bytes })
|
||||
}
|
||||
}
|
21
servo/components/gfx/platform/windows/font_context.rs
Normal file
21
servo/components/gfx/platform/windows/font_context.rs
Normal file
@ -0,0 +1,21 @@
|
||||
/* 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/. */
|
||||
|
||||
use heapsize::HeapSizeOf;
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct FontContextHandle;
|
||||
|
||||
impl FontContextHandle {
|
||||
// *shrug*
|
||||
pub fn new() -> FontContextHandle {
|
||||
FontContextHandle {}
|
||||
}
|
||||
}
|
||||
|
||||
impl HeapSizeOf for FontContextHandle {
|
||||
fn heap_size_of_children(&self) -> usize {
|
||||
0
|
||||
}
|
||||
}
|
@ -2,73 +2,70 @@
|
||||
* 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/. */
|
||||
|
||||
use gdi32;
|
||||
use std::ffi::OsString;
|
||||
use std::os::windows::ffi::OsStringExt;
|
||||
use std::ptr;
|
||||
use winapi::{LOGFONTW, LPARAM, OUT_TT_ONLY_PRECIS, VOID};
|
||||
use winapi::{c_int, DWORD, LF_FACESIZE};
|
||||
use dwrote::{Font, FontDescriptor, FontCollection};
|
||||
use servo_atoms::Atom;
|
||||
use std::collections::HashMap;
|
||||
use std::sync::Mutex;
|
||||
use std::sync::atomic::{Ordering, AtomicUsize};
|
||||
|
||||
lazy_static! {
|
||||
static ref FONT_ATOM_COUNTER: AtomicUsize = AtomicUsize::new(1);
|
||||
static ref FONT_ATOM_MAP: Mutex<HashMap<Atom, FontDescriptor>> = Mutex::new(HashMap::new());
|
||||
}
|
||||
|
||||
pub static SANS_SERIF_FONT_FAMILY: &'static str = "Arial";
|
||||
|
||||
pub fn system_default_family(_: &str) -> Option<String> {
|
||||
None
|
||||
Some("Verdana".to_owned())
|
||||
}
|
||||
|
||||
pub fn last_resort_font_families() -> Vec<String> {
|
||||
vec!("Arial".to_owned())
|
||||
}
|
||||
|
||||
unsafe extern "system" fn enum_font_callback(lpelfe: *const LOGFONTW,
|
||||
_: *const VOID,
|
||||
_: DWORD,
|
||||
lparam: LPARAM) -> c_int {
|
||||
let name = (*lpelfe).lfFaceName;
|
||||
let term_pos = name.iter().position(|c| *c == 0).unwrap();
|
||||
let name = OsString::from_wide(&name[0..term_pos]).into_string().unwrap();
|
||||
|
||||
let fonts = lparam as *mut Vec<String>;
|
||||
let fonts = &mut *fonts;
|
||||
fonts.push(name);
|
||||
|
||||
1
|
||||
}
|
||||
|
||||
pub fn for_each_available_family<F>(mut callback: F) where F: FnMut(String) {
|
||||
let mut fonts = Vec::new();
|
||||
|
||||
let mut config = LOGFONTW {
|
||||
lfHeight: 0,
|
||||
lfWidth: 0,
|
||||
lfEscapement: 0,
|
||||
lfOrientation: 0,
|
||||
lfWeight: 0,
|
||||
lfItalic: 0,
|
||||
lfUnderline: 0,
|
||||
lfStrikeOut: 0,
|
||||
lfCharSet: 0,
|
||||
lfOutPrecision: OUT_TT_ONLY_PRECIS as u8,
|
||||
lfClipPrecision: 0,
|
||||
lfQuality: 0,
|
||||
lfPitchAndFamily: 0,
|
||||
lfFaceName: [0; LF_FACESIZE],
|
||||
};
|
||||
|
||||
unsafe {
|
||||
let hdc = gdi32::CreateCompatibleDC(ptr::null_mut());
|
||||
gdi32::EnumFontFamiliesExW(hdc,
|
||||
&mut config,
|
||||
Some(enum_font_callback),
|
||||
&mut fonts as *mut Vec<String> as LPARAM,
|
||||
0);
|
||||
gdi32::DeleteDC(hdc);
|
||||
}
|
||||
|
||||
for family in fonts {
|
||||
callback(family);
|
||||
let system_fc = FontCollection::system();
|
||||
for family in system_fc.families_iter() {
|
||||
callback(family.name());
|
||||
}
|
||||
}
|
||||
|
||||
// for_each_variation is supposed to return a string that can be
|
||||
// atomized and then uniquely used to return back to this font.
|
||||
// Some platforms use the full postscript name (MacOS X), or
|
||||
// a font filename.
|
||||
//
|
||||
// For windows we're going to use just a basic integer value that
|
||||
// we'll stringify, and then put them all in a HashMap with
|
||||
// the actual FontDescriptor there.
|
||||
|
||||
pub fn for_each_variation<F>(family_name: &str, mut callback: F) where F: FnMut(String) {
|
||||
callback(family_name.to_owned());
|
||||
let system_fc = FontCollection::system();
|
||||
if let Some(family) = system_fc.get_font_family_by_name(family_name) {
|
||||
let count = family.get_font_count();
|
||||
for i in 0..count {
|
||||
let font = family.get_font(i);
|
||||
let index = FONT_ATOM_COUNTER.fetch_add(1, Ordering::Relaxed);
|
||||
let index_str = format!("{}", index);
|
||||
let atom = Atom::from(index_str.clone());
|
||||
|
||||
{
|
||||
let descriptor = font.to_descriptor();
|
||||
let mut fonts = FONT_ATOM_MAP.lock().unwrap();
|
||||
fonts.insert(atom, descriptor);
|
||||
}
|
||||
|
||||
callback(index_str);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn descriptor_from_atom(ident: &Atom) -> FontDescriptor {
|
||||
let fonts = FONT_ATOM_MAP.lock().unwrap();
|
||||
fonts.get(ident).unwrap().clone()
|
||||
}
|
||||
|
||||
pub fn font_from_atom(ident: &Atom) -> Font {
|
||||
let fonts = FONT_ATOM_MAP.lock().unwrap();
|
||||
FontCollection::system().get_font_from_descriptor(fonts.get(ident).unwrap()).unwrap()
|
||||
}
|
||||
|
@ -2,88 +2,49 @@
|
||||
* 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/. */
|
||||
|
||||
use gdi32;
|
||||
use platform::windows::font_list::{descriptor_from_atom, font_from_atom};
|
||||
use servo_atoms::Atom;
|
||||
use std::ffi::OsString;
|
||||
use std::io::Error;
|
||||
use std::os::windows::ffi::OsStrExt;
|
||||
use std::ptr;
|
||||
use std::io;
|
||||
use webrender_traits::NativeFontHandle;
|
||||
use winapi::{DWORD, LF_FACESIZE, LOGFONTW, OUT_TT_ONLY_PRECIS, WCHAR};
|
||||
|
||||
const GDI_ERROR: DWORD = 0xffffffff;
|
||||
|
||||
#[derive(Deserialize, Serialize, Debug)]
|
||||
pub struct FontTemplateData {
|
||||
pub bytes: Vec<u8>,
|
||||
pub bytes: Option<Vec<u8>>,
|
||||
pub identifier: Atom,
|
||||
}
|
||||
|
||||
impl FontTemplateData {
|
||||
pub fn new(identifier: Atom,
|
||||
font_data: Option<Vec<u8>>) -> Result<FontTemplateData, Error> {
|
||||
let bytes = match font_data {
|
||||
Some(bytes) => {
|
||||
bytes
|
||||
},
|
||||
None => {
|
||||
assert!(identifier.len() < LF_FACESIZE);
|
||||
let name = OsString::from(identifier.as_ref());
|
||||
let buffer: Vec<WCHAR> = name.encode_wide().collect();
|
||||
let mut string: [WCHAR; LF_FACESIZE] = [0; LF_FACESIZE];
|
||||
|
||||
for (src, dest) in buffer.iter().zip(string.iter_mut()) {
|
||||
*dest = *src;
|
||||
}
|
||||
|
||||
let config = LOGFONTW {
|
||||
lfHeight: 0,
|
||||
lfWidth: 0,
|
||||
lfEscapement: 0,
|
||||
lfOrientation: 0,
|
||||
lfWeight: 0,
|
||||
lfItalic: 0,
|
||||
lfUnderline: 0,
|
||||
lfStrikeOut: 0,
|
||||
lfCharSet: 0,
|
||||
lfOutPrecision: OUT_TT_ONLY_PRECIS as u8,
|
||||
lfClipPrecision: 0,
|
||||
lfQuality: 0,
|
||||
lfPitchAndFamily: 0,
|
||||
lfFaceName: string,
|
||||
};
|
||||
|
||||
unsafe {
|
||||
let hdc = gdi32::CreateCompatibleDC(ptr::null_mut());
|
||||
let hfont = gdi32::CreateFontIndirectW(&config as *const _);
|
||||
gdi32::SelectObject(hdc, hfont as *mut _);
|
||||
let size = gdi32::GetFontData(hdc, 0, 0, ptr::null_mut(), 0);
|
||||
assert!(size != GDI_ERROR);
|
||||
let mut buffer: Vec<u8> = vec![0; size as usize];
|
||||
let actual_size = gdi32::GetFontData(hdc, 0, 0, buffer.as_mut_ptr() as *mut _, size);
|
||||
assert!(actual_size == size);
|
||||
gdi32::DeleteDC(hdc);
|
||||
gdi32::DeleteObject(hfont as *mut _);
|
||||
buffer
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
font_data: Option<Vec<u8>>) -> Result<FontTemplateData, io::Error> {
|
||||
Ok(FontTemplateData {
|
||||
bytes: bytes,
|
||||
bytes: font_data,
|
||||
identifier: identifier,
|
||||
})
|
||||
}
|
||||
|
||||
pub fn bytes(&self) -> Vec<u8> {
|
||||
self.bytes.clone()
|
||||
if self.bytes.is_some() {
|
||||
self.bytes.as_ref().unwrap().clone()
|
||||
} else {
|
||||
let font = font_from_atom(&self.identifier);
|
||||
let face = font.create_font_face();
|
||||
let files = face.get_files();
|
||||
assert!(files.len() > 0);
|
||||
|
||||
files[0].get_font_file_bytes()
|
||||
}
|
||||
}
|
||||
|
||||
pub fn bytes_if_in_memory(&self) -> Option<Vec<u8>> {
|
||||
Some(self.bytes())
|
||||
self.bytes.clone()
|
||||
}
|
||||
|
||||
pub fn native_font(&self) -> Option<NativeFontHandle> {
|
||||
None
|
||||
if self.bytes.is_some() {
|
||||
panic!("Can't create fonts yet");
|
||||
}
|
||||
|
||||
let descriptor = descriptor_from_atom(&self.identifier);
|
||||
Some(descriptor)
|
||||
}
|
||||
}
|
||||
|
136
servo/components/servo/Cargo.lock
generated
136
servo/components/servo/Cargo.lock
generated
@ -49,8 +49,8 @@ dependencies = [
|
||||
"util 0.0.1",
|
||||
"util_tests 0.0.1",
|
||||
"webdriver_server 0.0.1",
|
||||
"webrender 0.8.0 (git+https://github.com/servo/webrender)",
|
||||
"webrender_traits 0.8.0 (git+https://github.com/servo/webrender)",
|
||||
"webrender 0.8.1 (git+https://github.com/servo/webrender)",
|
||||
"webrender_traits 0.8.1 (git+https://github.com/servo/webrender)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -278,7 +278,7 @@ dependencies = [
|
||||
"offscreen_gl_context 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"plugins 0.0.1",
|
||||
"util 0.0.1",
|
||||
"webrender_traits 0.8.0 (git+https://github.com/servo/webrender)",
|
||||
"webrender_traits 0.8.1 (git+https://github.com/servo/webrender)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -294,7 +294,7 @@ dependencies = [
|
||||
"plugins 0.0.1",
|
||||
"serde 0.8.17 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde_derive 0.8.17 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"webrender_traits 0.8.0 (git+https://github.com/servo/webrender)",
|
||||
"webrender_traits 0.8.1 (git+https://github.com/servo/webrender)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -396,8 +396,8 @@ dependencies = [
|
||||
"time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"util 0.0.1",
|
||||
"webrender 0.8.0 (git+https://github.com/servo/webrender)",
|
||||
"webrender_traits 0.8.0 (git+https://github.com/servo/webrender)",
|
||||
"webrender 0.8.1 (git+https://github.com/servo/webrender)",
|
||||
"webrender_traits 0.8.1 (git+https://github.com/servo/webrender)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -430,7 +430,7 @@ dependencies = [
|
||||
"style_traits 0.0.1",
|
||||
"url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"util 0.0.1",
|
||||
"webrender_traits 0.8.0 (git+https://github.com/servo/webrender)",
|
||||
"webrender_traits 0.8.1 (git+https://github.com/servo/webrender)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -618,6 +618,30 @@ dependencies = [
|
||||
"winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "dwrite-sys"
|
||||
version = "0.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "dwrote"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/vvuk/dwrote-rs#2bf7d4792d15fccb50f1e247e4be9c2c7b893f2b"
|
||||
dependencies = [
|
||||
"dwrite-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"gdi32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"lazy_static 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde 0.8.17 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde_codegen 0.8.17 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "encoding"
|
||||
version = "0.2.33"
|
||||
@ -845,11 +869,11 @@ dependencies = [
|
||||
"core-foundation 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"core-graphics 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"core-text 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"dwrote 0.1.0 (git+https://github.com/vvuk/dwrote-rs)",
|
||||
"euclid 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"fnv 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"fontsan 0.3.2 (git+https://github.com/servo/fontsan)",
|
||||
"freetype 0.1.1 (git+https://github.com/servo/rust-freetype)",
|
||||
"gdi32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"gfx_traits 0.0.1",
|
||||
"harfbuzz-sys 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"heapsize 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
@ -876,8 +900,7 @@ dependencies = [
|
||||
"unicode-script 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"util 0.0.1",
|
||||
"webrender_traits 0.8.0 (git+https://github.com/servo/webrender)",
|
||||
"winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"webrender_traits 0.8.1 (git+https://github.com/servo/webrender)",
|
||||
"xi-unicode 0.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
@ -1256,7 +1279,7 @@ dependencies = [
|
||||
"unicode-script 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"util 0.0.1",
|
||||
"webrender_traits 0.8.0 (git+https://github.com/servo/webrender)",
|
||||
"webrender_traits 0.8.1 (git+https://github.com/servo/webrender)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -1296,7 +1319,7 @@ dependencies = [
|
||||
"style 0.0.1",
|
||||
"url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"util 0.0.1",
|
||||
"webrender_traits 0.8.0 (git+https://github.com/servo/webrender)",
|
||||
"webrender_traits 0.8.1 (git+https://github.com/servo/webrender)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -1310,7 +1333,7 @@ dependencies = [
|
||||
"profile_traits 0.0.1",
|
||||
"script_traits 0.0.1",
|
||||
"url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"webrender_traits 0.8.0 (git+https://github.com/servo/webrender)",
|
||||
"webrender_traits 0.8.1 (git+https://github.com/servo/webrender)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -1506,7 +1529,7 @@ dependencies = [
|
||||
"plugins 0.0.1",
|
||||
"serde 0.8.17 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde_derive 0.8.17 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"webrender_traits 0.8.0 (git+https://github.com/servo/webrender)",
|
||||
"webrender_traits 0.8.1 (git+https://github.com/servo/webrender)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -1544,7 +1567,7 @@ dependencies = [
|
||||
"url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"util 0.0.1",
|
||||
"uuid 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"webrender_traits 0.8.0 (git+https://github.com/servo/webrender)",
|
||||
"webrender_traits 0.8.1 (git+https://github.com/servo/webrender)",
|
||||
"websocket 0.17.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
@ -1603,7 +1626,7 @@ dependencies = [
|
||||
"url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"util 0.0.1",
|
||||
"uuid 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"webrender_traits 0.8.0 (git+https://github.com/servo/webrender)",
|
||||
"webrender_traits 0.8.1 (git+https://github.com/servo/webrender)",
|
||||
"websocket 0.17.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
@ -2136,7 +2159,7 @@ dependencies = [
|
||||
"url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"util 0.0.1",
|
||||
"uuid 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"webrender_traits 0.8.0 (git+https://github.com/servo/webrender)",
|
||||
"webrender_traits 0.8.1 (git+https://github.com/servo/webrender)",
|
||||
"websocket 0.17.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"xml5ever 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
@ -2247,6 +2270,8 @@ dependencies = [
|
||||
"quote 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde_codegen_internals 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"syn 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"syntex 0.48.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"syntex_syntax 0.48.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -2548,6 +2573,51 @@ dependencies = [
|
||||
"syn 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "syntex"
|
||||
version = "0.48.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"syntex_errors 0.48.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"syntex_syntax 0.48.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "syntex_errors"
|
||||
version = "0.48.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"libc 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"syntex_pos 0.48.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"term 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"unicode-xid 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "syntex_pos"
|
||||
version = "0.48.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "syntex_syntax"
|
||||
version = "0.48.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"syntex_errors 0.48.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"syntex_pos 0.48.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"term 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"unicode-xid 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "target_build_utils"
|
||||
version = "0.1.1"
|
||||
@ -2594,6 +2664,15 @@ dependencies = [
|
||||
"utf-8 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "term"
|
||||
version = "0.4.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "thread-id"
|
||||
version = "2.0.0"
|
||||
@ -2875,8 +2954,8 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "webrender"
|
||||
version = "0.8.0"
|
||||
source = "git+https://github.com/servo/webrender#a0b6ea0b51a170caf591fb281f5aba25e566158f"
|
||||
version = "0.8.1"
|
||||
source = "git+https://github.com/servo/webrender#0f79d9dc449e324ca8bee0b8f82bc1459ba2dba6"
|
||||
dependencies = [
|
||||
"app_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"bincode 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
@ -2885,6 +2964,7 @@ dependencies = [
|
||||
"byteorder 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"core-graphics 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"core-text 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"dwrote 0.1.0 (git+https://github.com/vvuk/dwrote-rs)",
|
||||
"euclid 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"fnv 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"freetype 0.1.1 (git+https://github.com/servo/rust-freetype)",
|
||||
@ -2896,17 +2976,18 @@ dependencies = [
|
||||
"offscreen_gl_context 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"rayon 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"webrender_traits 0.8.0 (git+https://github.com/servo/webrender)",
|
||||
"webrender_traits 0.8.1 (git+https://github.com/servo/webrender)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "webrender_traits"
|
||||
version = "0.8.0"
|
||||
source = "git+https://github.com/servo/webrender#a0b6ea0b51a170caf591fb281f5aba25e566158f"
|
||||
version = "0.8.1"
|
||||
source = "git+https://github.com/servo/webrender#0f79d9dc449e324ca8bee0b8f82bc1459ba2dba6"
|
||||
dependencies = [
|
||||
"app_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"byteorder 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"core-graphics 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"dwrote 0.1.0 (git+https://github.com/vvuk/dwrote-rs)",
|
||||
"euclid 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"gleam 0.2.24 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"heapsize 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
@ -3064,6 +3145,8 @@ dependencies = [
|
||||
"checksum dlib 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8bd015f00d33d7e4ff66f1589fb824ccf3ccb10209b66c7b756f26ba9aa90215"
|
||||
"checksum dtoa 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0dd841b58510c9618291ffa448da2e4e0f699d984d436122372f446dae62263d"
|
||||
"checksum dwmapi-sys 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "07c4c7cc7b396419bc0a4d90371d0cee16cb5053b53647d287c0b728000c41fe"
|
||||
"checksum dwrite-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a7918280f33862bc8542212d74f2149b1a87ab402fd15f4ce9a1c56582958d6e"
|
||||
"checksum dwrote 0.1.0 (git+https://github.com/vvuk/dwrote-rs)" = "<none>"
|
||||
"checksum encoding 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "6b0d943856b990d12d3b55b359144ff341533e516d94098b1d3fc1ac666d36ec"
|
||||
"checksum encoding-index-japanese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "04e8b2ff42e9a05335dbf8b5c6f7567e5591d0d916ccef4e0b1710d32a0d0c91"
|
||||
"checksum encoding-index-korean 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "4dc33fb8e6bcba213fe2f14275f0963fd16f0a02c878e3095ecfdf5bee529d81"
|
||||
@ -3217,10 +3300,15 @@ dependencies = [
|
||||
"checksum string_cache_shared 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b1884d1bc09741d466d9b14e6d37ac89d6909cbcac41dd9ae982d4d063bbedfc"
|
||||
"checksum syn 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)" = "76c2db66dc579998854d84ff0ff4a81cb73e69596764d144ce7cece4d04ce6b5"
|
||||
"checksum synstructure 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c93b5595e44343867746223dd8de40c15e53e89f5fb252e3d20e0187a698647c"
|
||||
"checksum syntex 0.48.0 (registry+https://github.com/rust-lang/crates.io-index)" = "17e2e2ad78f4942d011750c304e9a9874717b6986c8fa2f6072f58fbd0835dcb"
|
||||
"checksum syntex_errors 0.48.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0b2784ff2ca385a451f1f835dcb3926e5c61461c6468aac1e35edcbc4cd33808"
|
||||
"checksum syntex_pos 0.48.0 (registry+https://github.com/rust-lang/crates.io-index)" = "25fadff25e4db9336cd715dea4bc7d4bf51d08cc39a1463b689661f1dea6893c"
|
||||
"checksum syntex_syntax 0.48.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0c3c7d1082d30f7042d1e7b00bd2ab0466daa84529fa13891e9312d8a32fd97e"
|
||||
"checksum target_build_utils 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7a1be18d4d908e4e5697908de04fdd5099505463fc8eaf1ceb8133ae486936aa"
|
||||
"checksum tempdir 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "87974a6f5c1dfb344d733055601650059a3363de2a6104819293baff662132d6"
|
||||
"checksum tempfile 2.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "9270837a93bad1b1dac18fe67e786b3c960513af86231f6f4f57fddd594ff0c8"
|
||||
"checksum tendril 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "cebf864c2d90394a1b66d6fe45963f9a177f2af81a0edea5060f77627f9c4587"
|
||||
"checksum term 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "3deff8a2b3b6607d6d7cc32ac25c0b33709453ca9cceac006caac51e963cf94a"
|
||||
"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03"
|
||||
"checksum thread_local 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "55dd963dbaeadc08aa7266bf7f91c3154a7805e32bb94b820b769d2ef3b4744d"
|
||||
"checksum threadpool 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "59f6d3eff89920113dac9db44dde461d71d01e88a5b57b258a0466c32b5d7fe1"
|
||||
@ -3249,8 +3337,8 @@ dependencies = [
|
||||
"checksum wayland-sys 0.5.11 (registry+https://github.com/rust-lang/crates.io-index)" = "9633f7fe5de56544215f82eaf1b76bf1b584becf7f08b58cbef4c2c7d10e803a"
|
||||
"checksum wayland-window 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "309b69d3a863c9c21422d889fb7d98cf02f8a2ca054960a49243ce5b67ad884c"
|
||||
"checksum webdriver 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee2d66e90672022ced375134329c57be4db228b19b120b97b744a469c381be06"
|
||||
"checksum webrender 0.8.0 (git+https://github.com/servo/webrender)" = "<none>"
|
||||
"checksum webrender_traits 0.8.0 (git+https://github.com/servo/webrender)" = "<none>"
|
||||
"checksum webrender 0.8.1 (git+https://github.com/servo/webrender)" = "<none>"
|
||||
"checksum webrender_traits 0.8.1 (git+https://github.com/servo/webrender)" = "<none>"
|
||||
"checksum websocket 0.17.1 (registry+https://github.com/rust-lang/crates.io-index)" = "bb4a1a6ea5ed0367f32eb3d94dcc58859ef4294b5f75ba983dbf56ac314af45d"
|
||||
"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
|
||||
"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
|
||||
|
136
servo/ports/cef/Cargo.lock
generated
136
servo/ports/cef/Cargo.lock
generated
@ -248,7 +248,7 @@ dependencies = [
|
||||
"offscreen_gl_context 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"plugins 0.0.1",
|
||||
"util 0.0.1",
|
||||
"webrender_traits 0.8.0 (git+https://github.com/servo/webrender)",
|
||||
"webrender_traits 0.8.1 (git+https://github.com/servo/webrender)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -264,7 +264,7 @@ dependencies = [
|
||||
"plugins 0.0.1",
|
||||
"serde 0.8.17 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde_derive 0.8.17 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"webrender_traits 0.8.0 (git+https://github.com/servo/webrender)",
|
||||
"webrender_traits 0.8.1 (git+https://github.com/servo/webrender)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -336,8 +336,8 @@ dependencies = [
|
||||
"time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"util 0.0.1",
|
||||
"webrender 0.8.0 (git+https://github.com/servo/webrender)",
|
||||
"webrender_traits 0.8.0 (git+https://github.com/servo/webrender)",
|
||||
"webrender 0.8.1 (git+https://github.com/servo/webrender)",
|
||||
"webrender_traits 0.8.1 (git+https://github.com/servo/webrender)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -370,7 +370,7 @@ dependencies = [
|
||||
"style_traits 0.0.1",
|
||||
"url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"util 0.0.1",
|
||||
"webrender_traits 0.8.0 (git+https://github.com/servo/webrender)",
|
||||
"webrender_traits 0.8.1 (git+https://github.com/servo/webrender)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -558,6 +558,30 @@ dependencies = [
|
||||
"winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "dwrite-sys"
|
||||
version = "0.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "dwrote"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/vvuk/dwrote-rs#2bf7d4792d15fccb50f1e247e4be9c2c7b893f2b"
|
||||
dependencies = [
|
||||
"dwrite-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"gdi32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"lazy_static 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde 0.8.17 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde_codegen 0.8.17 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "encoding"
|
||||
version = "0.2.33"
|
||||
@ -744,11 +768,11 @@ dependencies = [
|
||||
"core-foundation 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"core-graphics 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"core-text 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"dwrote 0.1.0 (git+https://github.com/vvuk/dwrote-rs)",
|
||||
"euclid 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"fnv 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"fontsan 0.3.2 (git+https://github.com/servo/fontsan)",
|
||||
"freetype 0.1.1 (git+https://github.com/servo/rust-freetype)",
|
||||
"gdi32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"gfx_traits 0.0.1",
|
||||
"harfbuzz-sys 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"heapsize 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
@ -775,8 +799,7 @@ dependencies = [
|
||||
"unicode-script 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"util 0.0.1",
|
||||
"webrender_traits 0.8.0 (git+https://github.com/servo/webrender)",
|
||||
"winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"webrender_traits 0.8.1 (git+https://github.com/servo/webrender)",
|
||||
"xi-unicode 0.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
@ -1146,7 +1169,7 @@ dependencies = [
|
||||
"unicode-script 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"util 0.0.1",
|
||||
"webrender_traits 0.8.0 (git+https://github.com/servo/webrender)",
|
||||
"webrender_traits 0.8.1 (git+https://github.com/servo/webrender)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -1179,7 +1202,7 @@ dependencies = [
|
||||
"style 0.0.1",
|
||||
"url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"util 0.0.1",
|
||||
"webrender_traits 0.8.0 (git+https://github.com/servo/webrender)",
|
||||
"webrender_traits 0.8.1 (git+https://github.com/servo/webrender)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -1193,7 +1216,7 @@ dependencies = [
|
||||
"profile_traits 0.0.1",
|
||||
"script_traits 0.0.1",
|
||||
"url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"webrender_traits 0.8.0 (git+https://github.com/servo/webrender)",
|
||||
"webrender_traits 0.8.1 (git+https://github.com/servo/webrender)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -1389,7 +1412,7 @@ dependencies = [
|
||||
"plugins 0.0.1",
|
||||
"serde 0.8.17 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde_derive 0.8.17 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"webrender_traits 0.8.0 (git+https://github.com/servo/webrender)",
|
||||
"webrender_traits 0.8.1 (git+https://github.com/servo/webrender)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -1427,7 +1450,7 @@ dependencies = [
|
||||
"url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"util 0.0.1",
|
||||
"uuid 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"webrender_traits 0.8.0 (git+https://github.com/servo/webrender)",
|
||||
"webrender_traits 0.8.1 (git+https://github.com/servo/webrender)",
|
||||
"websocket 0.17.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
@ -1464,7 +1487,7 @@ dependencies = [
|
||||
"url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"util 0.0.1",
|
||||
"uuid 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"webrender_traits 0.8.0 (git+https://github.com/servo/webrender)",
|
||||
"webrender_traits 0.8.1 (git+https://github.com/servo/webrender)",
|
||||
"websocket 0.17.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
@ -1957,7 +1980,7 @@ dependencies = [
|
||||
"url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"util 0.0.1",
|
||||
"uuid 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"webrender_traits 0.8.0 (git+https://github.com/servo/webrender)",
|
||||
"webrender_traits 0.8.1 (git+https://github.com/servo/webrender)",
|
||||
"websocket 0.17.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"xml5ever 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
@ -2050,6 +2073,8 @@ dependencies = [
|
||||
"quote 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde_codegen_internals 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"syn 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"syntex 0.48.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"syntex_syntax 0.48.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -2120,8 +2145,8 @@ dependencies = [
|
||||
"url 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"util 0.0.1",
|
||||
"webdriver_server 0.0.1",
|
||||
"webrender 0.8.0 (git+https://github.com/servo/webrender)",
|
||||
"webrender_traits 0.8.0 (git+https://github.com/servo/webrender)",
|
||||
"webrender 0.8.1 (git+https://github.com/servo/webrender)",
|
||||
"webrender_traits 0.8.1 (git+https://github.com/servo/webrender)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -2377,6 +2402,51 @@ dependencies = [
|
||||
"syn 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "syntex"
|
||||
version = "0.48.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"syntex_errors 0.48.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"syntex_syntax 0.48.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "syntex_errors"
|
||||
version = "0.48.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"libc 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"syntex_pos 0.48.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"term 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"unicode-xid 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "syntex_pos"
|
||||
version = "0.48.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "syntex_syntax"
|
||||
version = "0.48.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"bitflags 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"syntex_errors 0.48.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"syntex_pos 0.48.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"term 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"unicode-xid 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "target_build_utils"
|
||||
version = "0.1.1"
|
||||
@ -2423,6 +2493,15 @@ dependencies = [
|
||||
"utf-8 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "term"
|
||||
version = "0.4.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "thread-id"
|
||||
version = "2.0.0"
|
||||
@ -2689,8 +2768,8 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "webrender"
|
||||
version = "0.8.0"
|
||||
source = "git+https://github.com/servo/webrender#a0b6ea0b51a170caf591fb281f5aba25e566158f"
|
||||
version = "0.8.1"
|
||||
source = "git+https://github.com/servo/webrender#0f79d9dc449e324ca8bee0b8f82bc1459ba2dba6"
|
||||
dependencies = [
|
||||
"app_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"bincode 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
@ -2699,6 +2778,7 @@ dependencies = [
|
||||
"byteorder 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"core-graphics 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"core-text 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"dwrote 0.1.0 (git+https://github.com/vvuk/dwrote-rs)",
|
||||
"euclid 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"fnv 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"freetype 0.1.1 (git+https://github.com/servo/rust-freetype)",
|
||||
@ -2710,17 +2790,18 @@ dependencies = [
|
||||
"offscreen_gl_context 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"rayon 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"webrender_traits 0.8.0 (git+https://github.com/servo/webrender)",
|
||||
"webrender_traits 0.8.1 (git+https://github.com/servo/webrender)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "webrender_traits"
|
||||
version = "0.8.0"
|
||||
source = "git+https://github.com/servo/webrender#a0b6ea0b51a170caf591fb281f5aba25e566158f"
|
||||
version = "0.8.1"
|
||||
source = "git+https://github.com/servo/webrender#0f79d9dc449e324ca8bee0b8f82bc1459ba2dba6"
|
||||
dependencies = [
|
||||
"app_units 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"byteorder 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"core-graphics 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"dwrote 0.1.0 (git+https://github.com/vvuk/dwrote-rs)",
|
||||
"euclid 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"gleam 0.2.24 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"heapsize 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
@ -2876,6 +2957,8 @@ dependencies = [
|
||||
"checksum dlib 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8bd015f00d33d7e4ff66f1589fb824ccf3ccb10209b66c7b756f26ba9aa90215"
|
||||
"checksum dtoa 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0dd841b58510c9618291ffa448da2e4e0f699d984d436122372f446dae62263d"
|
||||
"checksum dwmapi-sys 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "07c4c7cc7b396419bc0a4d90371d0cee16cb5053b53647d287c0b728000c41fe"
|
||||
"checksum dwrite-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a7918280f33862bc8542212d74f2149b1a87ab402fd15f4ce9a1c56582958d6e"
|
||||
"checksum dwrote 0.1.0 (git+https://github.com/vvuk/dwrote-rs)" = "<none>"
|
||||
"checksum encoding 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "6b0d943856b990d12d3b55b359144ff341533e516d94098b1d3fc1ac666d36ec"
|
||||
"checksum encoding-index-japanese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "04e8b2ff42e9a05335dbf8b5c6f7567e5591d0d916ccef4e0b1710d32a0d0c91"
|
||||
"checksum encoding-index-korean 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "4dc33fb8e6bcba213fe2f14275f0963fd16f0a02c878e3095ecfdf5bee529d81"
|
||||
@ -3021,10 +3104,15 @@ dependencies = [
|
||||
"checksum string_cache_shared 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b1884d1bc09741d466d9b14e6d37ac89d6909cbcac41dd9ae982d4d063bbedfc"
|
||||
"checksum syn 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)" = "76c2db66dc579998854d84ff0ff4a81cb73e69596764d144ce7cece4d04ce6b5"
|
||||
"checksum synstructure 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c93b5595e44343867746223dd8de40c15e53e89f5fb252e3d20e0187a698647c"
|
||||
"checksum syntex 0.48.0 (registry+https://github.com/rust-lang/crates.io-index)" = "17e2e2ad78f4942d011750c304e9a9874717b6986c8fa2f6072f58fbd0835dcb"
|
||||
"checksum syntex_errors 0.48.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0b2784ff2ca385a451f1f835dcb3926e5c61461c6468aac1e35edcbc4cd33808"
|
||||
"checksum syntex_pos 0.48.0 (registry+https://github.com/rust-lang/crates.io-index)" = "25fadff25e4db9336cd715dea4bc7d4bf51d08cc39a1463b689661f1dea6893c"
|
||||
"checksum syntex_syntax 0.48.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0c3c7d1082d30f7042d1e7b00bd2ab0466daa84529fa13891e9312d8a32fd97e"
|
||||
"checksum target_build_utils 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7a1be18d4d908e4e5697908de04fdd5099505463fc8eaf1ceb8133ae486936aa"
|
||||
"checksum tempdir 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "87974a6f5c1dfb344d733055601650059a3363de2a6104819293baff662132d6"
|
||||
"checksum tempfile 2.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "9270837a93bad1b1dac18fe67e786b3c960513af86231f6f4f57fddd594ff0c8"
|
||||
"checksum tendril 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "cebf864c2d90394a1b66d6fe45963f9a177f2af81a0edea5060f77627f9c4587"
|
||||
"checksum term 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "3deff8a2b3b6607d6d7cc32ac25c0b33709453ca9cceac006caac51e963cf94a"
|
||||
"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03"
|
||||
"checksum thread_local 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "55dd963dbaeadc08aa7266bf7f91c3154a7805e32bb94b820b769d2ef3b4744d"
|
||||
"checksum threadpool 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "59f6d3eff89920113dac9db44dde461d71d01e88a5b57b258a0466c32b5d7fe1"
|
||||
@ -3052,8 +3140,8 @@ dependencies = [
|
||||
"checksum wayland-sys 0.5.11 (registry+https://github.com/rust-lang/crates.io-index)" = "9633f7fe5de56544215f82eaf1b76bf1b584becf7f08b58cbef4c2c7d10e803a"
|
||||
"checksum wayland-window 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "309b69d3a863c9c21422d889fb7d98cf02f8a2ca054960a49243ce5b67ad884c"
|
||||
"checksum webdriver 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee2d66e90672022ced375134329c57be4db228b19b120b97b744a469c381be06"
|
||||
"checksum webrender 0.8.0 (git+https://github.com/servo/webrender)" = "<none>"
|
||||
"checksum webrender_traits 0.8.0 (git+https://github.com/servo/webrender)" = "<none>"
|
||||
"checksum webrender 0.8.1 (git+https://github.com/servo/webrender)" = "<none>"
|
||||
"checksum webrender_traits 0.8.1 (git+https://github.com/servo/webrender)" = "<none>"
|
||||
"checksum websocket 0.17.1 (registry+https://github.com/rust-lang/crates.io-index)" = "bb4a1a6ea5ed0367f32eb3d94dcc58859ef4294b5f75ba983dbf56ac314af45d"
|
||||
"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
|
||||
"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
|
||||
|
@ -1,44 +0,0 @@
|
||||
/* 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/. */
|
||||
|
||||
// `vBorderPosition` is the position of the source texture in the atlas.
|
||||
|
||||
float gauss(float x, float sigma) {
|
||||
return (1.0 / sqrt(6.283185307179586 * sigma * sigma)) * exp(-(x * x) / (2.0 * sigma * sigma));
|
||||
}
|
||||
|
||||
void main(void) {
|
||||
#ifdef SERVO_ES2
|
||||
// TODO(gw): for loops have to be unrollable on es2.
|
||||
SetFragColor(vec4(1.0, 0.0, 0.0, 1.0));
|
||||
#else
|
||||
vec2 sideOffsets = (vDestTextureSize - vSourceTextureSize) / 2.0;
|
||||
int range = int(vBlurRadius) * 3;
|
||||
float sigma = vBlurRadius / 2.0;
|
||||
vec4 value = vec4(0.0);
|
||||
vec2 sourceTextureUvOrigin = vBorderPosition.xy;
|
||||
vec2 sourceTextureUvSize = vBorderPosition.zw - sourceTextureUvOrigin;
|
||||
for (int offset = -range; offset <= range; offset++) {
|
||||
float offsetF = float(offset);
|
||||
vec2 lColorTexCoord = (vColorTexCoord.xy * vDestTextureSize - sideOffsets) /
|
||||
vSourceTextureSize;
|
||||
lColorTexCoord += vec2(offsetF) / vSourceTextureSize * uDirection;
|
||||
vec4 x = lColorTexCoord.x >= 0.0 &&
|
||||
lColorTexCoord.x <= 1.0 &&
|
||||
lColorTexCoord.y >= 0.0 &&
|
||||
lColorTexCoord.y <= 1.0 ?
|
||||
texture(sDiffuse, lColorTexCoord * sourceTextureUvSize + sourceTextureUvOrigin) :
|
||||
vec4(0.0);
|
||||
|
||||
// Alpha must be premultiplied in order to properly blur the alpha channel.
|
||||
value += vec4(x.rgb * x.a, x.a) * gauss(offsetF, sigma);
|
||||
}
|
||||
|
||||
// Unpremultiply the alpha.
|
||||
value = vec4(value.rgb / value.a, value.a);
|
||||
|
||||
SetFragColor(value);
|
||||
#endif
|
||||
}
|
||||
|
@ -1,14 +0,0 @@
|
||||
/* 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/. */
|
||||
|
||||
void main(void)
|
||||
{
|
||||
vColorTexCoord = aColorTexCoordRectTop.xy;
|
||||
vBorderPosition = aBorderPosition;
|
||||
vBlurRadius = aBlurRadius;
|
||||
vDestTextureSize = aDestTextureSize;
|
||||
vSourceTextureSize = aSourceTextureSize;
|
||||
gl_Position = uTransform * vec4(aPosition, 1.0);
|
||||
}
|
||||
|
40
servo/resources/shaders/cs_blur.fs.glsl
Normal file
40
servo/resources/shaders/cs_blur.fs.glsl
Normal file
@ -0,0 +1,40 @@
|
||||
#line 1
|
||||
/* 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/. */
|
||||
|
||||
// TODO(gw): Write a fast path blur that handles smaller blur radii
|
||||
// with a offset / weight uniform table and a constant
|
||||
// loop iteration count!
|
||||
|
||||
// TODO(gw): Make use of the bilinear sampling trick to reduce
|
||||
// the number of texture fetches needed for a gaussian blur.
|
||||
|
||||
float gauss(float x, float sigma) {
|
||||
return (1.0 / sqrt(6.283185307179586 * sigma * sigma)) * exp(-(x * x) / (2.0 * sigma * sigma));
|
||||
}
|
||||
|
||||
void main(void) {
|
||||
vec4 sample = texture(sCache, vUv);
|
||||
vec4 color = vec4(sample.rgb * sample.a, sample.a) * gauss(0.0, vSigma);
|
||||
|
||||
for (int i=1 ; i < vBlurRadius ; ++i) {
|
||||
vec2 offset = vec2(float(i)) * vOffsetScale;
|
||||
|
||||
vec2 st0 = clamp(vUv.xy + offset, vUvRect.xy, vUvRect.zw);
|
||||
vec4 color0 = texture(sCache, vec3(st0, vUv.z));
|
||||
|
||||
vec2 st1 = clamp(vUv.xy - offset, vUvRect.xy, vUvRect.zw);
|
||||
vec4 color1 = texture(sCache, vec3(st1, vUv.z));
|
||||
|
||||
// Alpha must be premultiplied in order to properly blur the alpha channel.
|
||||
float weight = gauss(float(i), vSigma);
|
||||
color += vec4(color0.rgb * color0.a, color0.a) * weight;
|
||||
color += vec4(color1.rgb * color1.a, color1.a) * weight;
|
||||
}
|
||||
|
||||
// Unpremultiply the alpha.
|
||||
color.rgb /= color.a;
|
||||
|
||||
oFragColor = color;
|
||||
}
|
10
servo/resources/shaders/cs_blur.glsl
Normal file
10
servo/resources/shaders/cs_blur.glsl
Normal file
@ -0,0 +1,10 @@
|
||||
#line 1
|
||||
/* 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/. */
|
||||
|
||||
varying vec3 vUv;
|
||||
flat varying vec4 vUvRect;
|
||||
flat varying vec2 vOffsetScale;
|
||||
flat varying float vSigma;
|
||||
flat varying int vBlurRadius;
|
45
servo/resources/shaders/cs_blur.vs.glsl
Normal file
45
servo/resources/shaders/cs_blur.vs.glsl
Normal file
@ -0,0 +1,45 @@
|
||||
#line 1
|
||||
/* 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/. */
|
||||
|
||||
// Applies a separable gaussian blur in one direction, as specified
|
||||
// by the dir field in the blur command.
|
||||
|
||||
#define DIR_HORIZONTAL 0
|
||||
#define DIR_VERTICAL 1
|
||||
|
||||
void main(void) {
|
||||
BlurCommand cmd = fetch_blur(gl_InstanceID);
|
||||
RenderTaskData task = fetch_render_task(cmd.task_id);
|
||||
RenderTaskData src_task = fetch_render_task(cmd.src_task_id);
|
||||
|
||||
vec4 local_rect = task.data0;
|
||||
|
||||
vec2 pos = mix(local_rect.xy,
|
||||
local_rect.xy + local_rect.zw,
|
||||
aPosition.xy);
|
||||
|
||||
vec2 texture_size = textureSize(sCache, 0).xy;
|
||||
vUv.z = src_task.data1.x;
|
||||
vBlurRadius = int(task.data1.y);
|
||||
vSigma = task.data1.y * 0.5;
|
||||
|
||||
switch (cmd.dir) {
|
||||
case DIR_HORIZONTAL:
|
||||
vOffsetScale = vec2(1.0 / texture_size.x, 0.0);
|
||||
break;
|
||||
case DIR_VERTICAL:
|
||||
vOffsetScale = vec2(0.0, 1.0 / texture_size.y);
|
||||
break;
|
||||
}
|
||||
|
||||
vUvRect = vec4(src_task.data0.xy, src_task.data0.xy + src_task.data0.zw);
|
||||
vUvRect /= texture_size.xyxy;
|
||||
|
||||
vec2 uv0 = src_task.data0.xy / texture_size;
|
||||
vec2 uv1 = (src_task.data0.xy + src_task.data0.zw) / texture_size;
|
||||
vUv.xy = mix(uv0, uv1, aPosition.xy);
|
||||
|
||||
gl_Position = uTransform * vec4(pos, 0.0, 1.0);
|
||||
}
|
9
servo/resources/shaders/cs_text_run.fs.glsl
Normal file
9
servo/resources/shaders/cs_text_run.fs.glsl
Normal file
@ -0,0 +1,9 @@
|
||||
#line 1
|
||||
/* 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/. */
|
||||
|
||||
void main(void) {
|
||||
float a = texture(sColor0, vUv).a;
|
||||
oFragColor = vec4(vColor.rgb, vColor.a * a);
|
||||
}
|
7
servo/resources/shaders/cs_text_run.glsl
Normal file
7
servo/resources/shaders/cs_text_run.glsl
Normal file
@ -0,0 +1,7 @@
|
||||
#line 1
|
||||
/* 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/. */
|
||||
|
||||
varying vec2 vUv;
|
||||
flat varying vec4 vColor;
|
35
servo/resources/shaders/cs_text_run.vs.glsl
Normal file
35
servo/resources/shaders/cs_text_run.vs.glsl
Normal file
@ -0,0 +1,35 @@
|
||||
#line 1
|
||||
/* 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/. */
|
||||
|
||||
// Draw a text run to a cache target. These are always
|
||||
// drawn un-transformed. These are used for effects such
|
||||
// as text-shadow.
|
||||
|
||||
void main(void) {
|
||||
CachePrimitiveInstance cpi = fetch_cache_instance(gl_InstanceID);
|
||||
RenderTaskData task = fetch_render_task(cpi.render_task_index);
|
||||
TextRun text = fetch_text_run(cpi.specific_prim_index);
|
||||
Glyph glyph = fetch_glyph(cpi.sub_index);
|
||||
PrimitiveGeometry pg = fetch_prim_geometry(cpi.global_prim_index);
|
||||
|
||||
// Glyphs size is already in device-pixels.
|
||||
// The render task origin is in device-pixels. Offset that by
|
||||
// the glyph offset, relative to its primitive bounding rect.
|
||||
vec2 size = glyph.uv_rect.zw - glyph.uv_rect.xy;
|
||||
vec2 origin = task.data0.xy + uDevicePixelRatio * (glyph.offset.xy - pg.local_rect.xy);
|
||||
vec4 local_rect = vec4(origin, size);
|
||||
|
||||
vec2 texture_size = vec2(textureSize(sColor0, 0));
|
||||
vec2 st0 = glyph.uv_rect.xy / texture_size;
|
||||
vec2 st1 = glyph.uv_rect.zw / texture_size;
|
||||
|
||||
vec2 pos = mix(local_rect.xy,
|
||||
local_rect.xy + local_rect.zw,
|
||||
aPosition.xy);
|
||||
vUv = mix(st0, st1, aPosition.xy);
|
||||
vColor = text.color;
|
||||
|
||||
gl_Position = uTransform * vec4(pos, 0.0, 1.0);
|
||||
}
|
@ -5,9 +5,9 @@
|
||||
void main(void)
|
||||
{
|
||||
#ifdef SERVO_ES2
|
||||
float alpha = texture(sDiffuse, vColorTexCoord.xy).a;
|
||||
float alpha = texture(sColor0, vColorTexCoord.xy).a;
|
||||
#else
|
||||
float alpha = texture(sDiffuse, vColorTexCoord.xy).r;
|
||||
float alpha = texture(sColor0, vColorTexCoord.xy).r;
|
||||
#endif
|
||||
oFragColor = vec4(vColor.xyz, vColor.w * alpha);
|
||||
}
|
||||
|
@ -277,10 +277,31 @@ PrimitiveInstance fetch_instance(int index) {
|
||||
return pi;
|
||||
}
|
||||
|
||||
struct BlurCommand {
|
||||
int task_id;
|
||||
int src_task_id;
|
||||
int dir;
|
||||
};
|
||||
|
||||
BlurCommand fetch_blur(int index) {
|
||||
BlurCommand blur;
|
||||
|
||||
int offset = index * 1;
|
||||
|
||||
ivec4 data0 = int_data[offset + 0];
|
||||
|
||||
blur.task_id = data0.x;
|
||||
blur.src_task_id = data0.y;
|
||||
blur.dir = data0.z;
|
||||
|
||||
return blur;
|
||||
}
|
||||
|
||||
struct CachePrimitiveInstance {
|
||||
int global_prim_index;
|
||||
int specific_prim_index;
|
||||
int render_task_index;
|
||||
int sub_index;
|
||||
};
|
||||
|
||||
CachePrimitiveInstance fetch_cache_instance(int index) {
|
||||
@ -293,6 +314,7 @@ CachePrimitiveInstance fetch_cache_instance(int index) {
|
||||
cpi.global_prim_index = data0.x;
|
||||
cpi.specific_prim_index = data0.y;
|
||||
cpi.render_task_index = data0.z;
|
||||
cpi.sub_index = data0.w;
|
||||
|
||||
return cpi;
|
||||
}
|
||||
|
7
servo/resources/shaders/ps_cache_image.fs.glsl
Normal file
7
servo/resources/shaders/ps_cache_image.fs.glsl
Normal file
@ -0,0 +1,7 @@
|
||||
/* 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/. */
|
||||
|
||||
void main(void) {
|
||||
oFragColor = texture(sCache, vUv);
|
||||
}
|
5
servo/resources/shaders/ps_cache_image.glsl
Normal file
5
servo/resources/shaders/ps_cache_image.glsl
Normal file
@ -0,0 +1,5 @@
|
||||
/* 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/. */
|
||||
|
||||
varying vec3 vUv;
|
27
servo/resources/shaders/ps_cache_image.vs.glsl
Normal file
27
servo/resources/shaders/ps_cache_image.vs.glsl
Normal file
@ -0,0 +1,27 @@
|
||||
#line 1
|
||||
/* 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/. */
|
||||
|
||||
// Draw a cached primitive (e.g. a blurred text run) from the
|
||||
// target cache to the framebuffer, applying tile clip boundaries.
|
||||
|
||||
void main(void) {
|
||||
Primitive prim = load_primitive(gl_InstanceID);
|
||||
|
||||
VertexInfo vi = write_vertex(prim.local_rect,
|
||||
prim.local_clip_rect,
|
||||
prim.layer,
|
||||
prim.tile);
|
||||
|
||||
RenderTaskData child_task = fetch_render_task(prim.user_data.x);
|
||||
vUv.z = child_task.data1.x;
|
||||
|
||||
vec2 texture_size = vec2(textureSize(sCache, 0));
|
||||
vec2 uv0 = child_task.data0.xy / texture_size;
|
||||
vec2 uv1 = (child_task.data0.xy + child_task.data0.zw) / texture_size;
|
||||
|
||||
vec2 f = (vi.local_clamped_pos - prim.local_rect.xy) / prim.local_rect.zw;
|
||||
|
||||
vUv.xy = mix(uv0, uv1, f);
|
||||
}
|
@ -25,5 +25,5 @@ void main(void) {
|
||||
vec2 st = vTextureOffset + ((position_in_tile / vStretchSize) * vTextureSize);
|
||||
alpha = alpha * float(all(bvec2(step(position_in_tile, vStretchSize))));
|
||||
|
||||
oFragColor = vec4(1, 1, 1, alpha) * texture(sDiffuse, st);
|
||||
oFragColor = vec4(1, 1, 1, alpha) * texture(sColor0, st);
|
||||
}
|
||||
|
@ -23,7 +23,7 @@ void main(void) {
|
||||
#endif
|
||||
|
||||
// vUv will contain how many times this image has wrapped around the image size.
|
||||
vec2 texture_size = vec2(textureSize(sDiffuse, 0));
|
||||
vec2 texture_size = vec2(textureSize(sColor0, 0));
|
||||
vec2 st0 = image.st_rect.xy / texture_size;
|
||||
vec2 st1 = image.st_rect.zw / texture_size;
|
||||
|
||||
|
@ -28,5 +28,5 @@ void main(void) {
|
||||
vec2 st = vTextureOffset + ((position_in_tile / vStretchSize) * vTextureSize);
|
||||
alpha = alpha * float(all(bvec2(step(position_in_tile, vStretchSize))));
|
||||
|
||||
oFragColor = texture(sDiffuse, st) * vec4(1, 1, 1, alpha);
|
||||
oFragColor = texture(sColor0, st) * vec4(1, 1, 1, alpha);
|
||||
}
|
||||
|
@ -27,7 +27,7 @@ void main(void) {
|
||||
write_clip(clip);
|
||||
|
||||
// vUv will contain how many times this image has wrapped around the image size.
|
||||
vec2 texture_size = vec2(textureSize(sDiffuse, 0));
|
||||
vec2 texture_size = vec2(textureSize(sColor0, 0));
|
||||
vec2 st0 = image.st_rect.xy / texture_size;
|
||||
vec2 st1 = image.st_rect.zw / texture_size;
|
||||
|
||||
|
@ -4,9 +4,9 @@
|
||||
|
||||
void main(void) {
|
||||
#ifdef WR_FEATURE_SUBPIXEL_AA
|
||||
oFragColor = texture(sDiffuse, vUv);
|
||||
oFragColor = texture(sColor0, vUv);
|
||||
#else
|
||||
float a = texture(sDiffuse, vUv).a;
|
||||
float a = texture(sColor0, vUv).a;
|
||||
#ifdef WR_FEATURE_TRANSFORM
|
||||
float alpha = 0.0;
|
||||
init_transform_fs(vLocalPos, vLocalRect, alpha);
|
||||
|
@ -25,7 +25,7 @@ void main(void) {
|
||||
vec2 f = (vi.local_clamped_pos - vi.local_rect.p0) / (vi.local_rect.p1 - vi.local_rect.p0);
|
||||
#endif
|
||||
|
||||
vec2 texture_size = vec2(textureSize(sDiffuse, 0));
|
||||
vec2 texture_size = vec2(textureSize(sColor0, 0));
|
||||
vec2 st0 = glyph.uv_rect.xy / texture_size;
|
||||
vec2 st1 = glyph.uv_rect.zw / texture_size;
|
||||
|
||||
|
@ -33,7 +33,9 @@
|
||||
//======================================================================================
|
||||
// Shared shader uniforms
|
||||
//======================================================================================
|
||||
uniform sampler2D sDiffuse;
|
||||
uniform sampler2D sColor0;
|
||||
uniform sampler2D sColor1;
|
||||
uniform sampler2D sColor2;
|
||||
uniform sampler2D sMask;
|
||||
|
||||
//======================================================================================
|
||||
|
Loading…
Reference in New Issue
Block a user