mirror of
https://github.com/servo/servo.git
synced 2025-08-07 06:25:32 +01:00
Rename one of the two modules called "shaper"
This commit is contained in:
parent
bbf1582f8e
commit
a535f22146
5 changed files with 72 additions and 86 deletions
|
@ -7,7 +7,7 @@ use platform::font_context::FontContextHandle;
|
||||||
use platform::font::{FontHandle, FontTable};
|
use platform::font::{FontHandle, FontTable};
|
||||||
use render_context::RenderContext;
|
use render_context::RenderContext;
|
||||||
use text::glyph::{GlyphStore, GlyphIndex};
|
use text::glyph::{GlyphStore, GlyphIndex};
|
||||||
use text::shaper::ShaperMethods;
|
use text::shaping::ShaperMethods;
|
||||||
use text::{Shaper, TextRun};
|
use text::{Shaper, TextRun};
|
||||||
use util::range::Range;
|
use util::range::Range;
|
||||||
|
|
||||||
|
|
|
@ -1,19 +1,12 @@
|
||||||
/* This file exists just to make it easier to import things inside of
|
//! This file exists just to make it easier to import things inside of
|
||||||
./text/ without specifying the file they came out of imports.
|
/// ./text/ without specifying the file they came out of imports.
|
||||||
|
|
||||||
Note that you still must define each of the files as a module in
|
|
||||||
servo.rc. This is not ideal and may be changed in the future. */
|
|
||||||
|
|
||||||
pub use text::shaper::Shaper;
|
pub use text::shaping::Shaper;
|
||||||
pub use text::text_run::TextRun;
|
|
||||||
pub use text::text_run::SendableTextRun;
|
pub use text::text_run::SendableTextRun;
|
||||||
|
pub use text::text_run::TextRun;
|
||||||
|
|
||||||
pub mod glyph;
|
pub mod glyph;
|
||||||
|
#[path="shaping/mod.rs"] pub mod shaping;
|
||||||
pub mod text_run;
|
pub mod text_run;
|
||||||
pub mod util;
|
pub mod util;
|
||||||
pub mod shaper;
|
|
||||||
|
|
||||||
// Below are the actual platform-specific parts.
|
|
||||||
pub mod harfbuzz {
|
|
||||||
pub mod shaper;
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,22 +0,0 @@
|
||||||
//! Shaper encapsulates a specific shaper, such as Harfbuzz,
|
|
||||||
/// Uniscribe, Pango, or Coretext.
|
|
||||||
///
|
|
||||||
/// Currently, only harfbuzz bindings are implemented.
|
|
||||||
|
|
||||||
use font::Font;
|
|
||||||
use text::glyph::GlyphStore;
|
|
||||||
use text::harfbuzz;
|
|
||||||
|
|
||||||
pub type Shaper = harfbuzz::shaper::HarfbuzzShaper;
|
|
||||||
|
|
||||||
pub trait ShaperMethods {
|
|
||||||
fn shape_text(&self, text: &str, glyphs: &mut GlyphStore);
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO(Issue #163): this is a workaround for static methods and
|
|
||||||
// typedefs not working well together. It should be removed.
|
|
||||||
pub impl Shaper {
|
|
||||||
pub fn new(font: @mut Font) -> Shaper {
|
|
||||||
harfbuzz::shaper::HarfbuzzShaper::new(font)
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -6,7 +6,7 @@ use font::{Font, FontHandleMethods, FontTableMethods, FontTableTag};
|
||||||
use geometry::Au;
|
use geometry::Au;
|
||||||
use platform::font::FontTable;
|
use platform::font::FontTable;
|
||||||
use text::glyph::{GlyphStore, GlyphIndex, GlyphData};
|
use text::glyph::{GlyphStore, GlyphIndex, GlyphData};
|
||||||
use text::shaper::ShaperMethods;
|
use text::shaping::ShaperMethods;
|
||||||
use text::util::{float_to_fixed, fixed_to_float, fixed_to_rounded_int};
|
use text::util::{float_to_fixed, fixed_to_float, fixed_to_rounded_int};
|
||||||
use util::range::Range;
|
use util::range::Range;
|
||||||
|
|
||||||
|
@ -15,42 +15,42 @@ use core::libc::{c_uint, c_int, c_void, c_char};
|
||||||
use core::ptr::null;
|
use core::ptr::null;
|
||||||
use core::util::ignore;
|
use core::util::ignore;
|
||||||
use geom::Point2D;
|
use geom::Point2D;
|
||||||
use text::harfbuzz::shaper::harfbuzz::bindgen::{hb_blob_create, hb_face_create_for_tables};
|
use text::shaping::harfbuzz::harfbuzz::bindgen::{hb_blob_create, hb_face_create_for_tables};
|
||||||
use text::harfbuzz::shaper::harfbuzz::bindgen::{hb_buffer_add_utf8, hb_shape};
|
use text::shaping::harfbuzz::harfbuzz::bindgen::{hb_buffer_add_utf8, hb_shape};
|
||||||
use text::harfbuzz::shaper::harfbuzz::bindgen::{hb_buffer_create};
|
use text::shaping::harfbuzz::harfbuzz::bindgen::{hb_buffer_create};
|
||||||
use text::harfbuzz::shaper::harfbuzz::bindgen::{hb_buffer_destroy, hb_buffer_add_utf8};
|
use text::shaping::harfbuzz::harfbuzz::bindgen::{hb_buffer_destroy, hb_buffer_add_utf8};
|
||||||
use text::harfbuzz::shaper::harfbuzz::bindgen::{hb_buffer_get_glyph_infos};
|
use text::shaping::harfbuzz::harfbuzz::bindgen::{hb_buffer_get_glyph_infos};
|
||||||
use text::harfbuzz::shaper::harfbuzz::bindgen::{hb_buffer_get_glyph_positions};
|
use text::shaping::harfbuzz::harfbuzz::bindgen::{hb_buffer_get_glyph_positions};
|
||||||
use text::harfbuzz::shaper::harfbuzz::bindgen::{hb_buffer_get_glyph_positions};
|
use text::shaping::harfbuzz::harfbuzz::bindgen::{hb_buffer_get_glyph_positions};
|
||||||
use text::harfbuzz::shaper::harfbuzz::bindgen::{hb_buffer_set_direction};
|
use text::shaping::harfbuzz::harfbuzz::bindgen::{hb_buffer_set_direction};
|
||||||
use text::harfbuzz::shaper::harfbuzz::bindgen::{hb_buffer_set_direction};
|
use text::shaping::harfbuzz::harfbuzz::bindgen::{hb_buffer_set_direction};
|
||||||
use text::harfbuzz::shaper::harfbuzz::bindgen::{hb_face_destroy, hb_font_create};
|
use text::shaping::harfbuzz::harfbuzz::bindgen::{hb_face_destroy, hb_font_create};
|
||||||
use text::harfbuzz::shaper::harfbuzz::bindgen::{hb_face_destroy};
|
use text::shaping::harfbuzz::harfbuzz::bindgen::{hb_face_destroy};
|
||||||
use text::harfbuzz::shaper::harfbuzz::bindgen::{hb_font_create, hb_font_destroy};
|
use text::shaping::harfbuzz::harfbuzz::bindgen::{hb_font_create, hb_font_destroy};
|
||||||
use text::harfbuzz::shaper::harfbuzz::bindgen::{hb_font_destroy, hb_buffer_create};
|
use text::shaping::harfbuzz::harfbuzz::bindgen::{hb_font_destroy, hb_buffer_create};
|
||||||
use text::harfbuzz::shaper::harfbuzz::bindgen::{hb_font_funcs_create, hb_font_funcs_destroy};
|
use text::shaping::harfbuzz::harfbuzz::bindgen::{hb_font_funcs_create, hb_font_funcs_destroy};
|
||||||
use text::harfbuzz::shaper::harfbuzz::bindgen::{hb_font_funcs_create};
|
use text::shaping::harfbuzz::harfbuzz::bindgen::{hb_font_funcs_create};
|
||||||
use text::harfbuzz::shaper::harfbuzz::bindgen::{hb_font_funcs_destroy};
|
use text::shaping::harfbuzz::harfbuzz::bindgen::{hb_font_funcs_destroy};
|
||||||
use text::harfbuzz::shaper::harfbuzz::bindgen::{hb_font_funcs_set_glyph_func};
|
use text::shaping::harfbuzz::harfbuzz::bindgen::{hb_font_funcs_set_glyph_func};
|
||||||
use text::harfbuzz::shaper::harfbuzz::bindgen::{hb_font_funcs_set_glyph_func};
|
use text::shaping::harfbuzz::harfbuzz::bindgen::{hb_font_funcs_set_glyph_func};
|
||||||
use text::harfbuzz::shaper::harfbuzz::bindgen::{hb_font_funcs_set_glyph_h_advance_func};
|
use text::shaping::harfbuzz::harfbuzz::bindgen::{hb_font_funcs_set_glyph_h_advance_func};
|
||||||
use text::harfbuzz::shaper::harfbuzz::bindgen::{hb_font_funcs_set_glyph_h_advance_func};
|
use text::shaping::harfbuzz::harfbuzz::bindgen::{hb_font_funcs_set_glyph_h_advance_func};
|
||||||
use text::harfbuzz::shaper::harfbuzz::bindgen::{hb_font_set_funcs};
|
use text::shaping::harfbuzz::harfbuzz::bindgen::{hb_font_set_funcs};
|
||||||
use text::harfbuzz::shaper::harfbuzz::bindgen::{hb_font_set_funcs};
|
use text::shaping::harfbuzz::harfbuzz::bindgen::{hb_font_set_funcs};
|
||||||
use text::harfbuzz::shaper::harfbuzz::bindgen::{hb_font_set_ppem, hb_font_set_scale};
|
use text::shaping::harfbuzz::harfbuzz::bindgen::{hb_font_set_ppem, hb_font_set_scale};
|
||||||
use text::harfbuzz::shaper::harfbuzz::bindgen::{hb_font_set_ppem};
|
use text::shaping::harfbuzz::harfbuzz::bindgen::{hb_font_set_ppem};
|
||||||
use text::harfbuzz::shaper::harfbuzz::bindgen::{hb_font_set_scale};
|
use text::shaping::harfbuzz::harfbuzz::bindgen::{hb_font_set_scale};
|
||||||
use text::harfbuzz::shaper::harfbuzz::bindgen::{hb_shape, hb_buffer_get_glyph_infos};
|
use text::shaping::harfbuzz::harfbuzz::bindgen::{hb_shape, hb_buffer_get_glyph_infos};
|
||||||
use text::harfbuzz::shaper::harfbuzz::{HB_MEMORY_MODE_READONLY, HB_DIRECTION_LTR, hb_blob_t};
|
use text::shaping::harfbuzz::harfbuzz::{HB_MEMORY_MODE_READONLY, HB_DIRECTION_LTR, hb_blob_t};
|
||||||
use text::harfbuzz::shaper::harfbuzz::{HB_MEMORY_MODE_READONLY, HB_DIRECTION_LTR};
|
use text::shaping::harfbuzz::harfbuzz::{HB_MEMORY_MODE_READONLY, HB_DIRECTION_LTR};
|
||||||
use text::harfbuzz::shaper::harfbuzz::{hb_blob_t, hb_face_t, hb_font_t, hb_font_funcs_t};
|
use text::shaping::harfbuzz::harfbuzz::{hb_blob_t, hb_face_t, hb_font_t, hb_font_funcs_t};
|
||||||
use text::harfbuzz::shaper::harfbuzz::{hb_buffer_t, hb_codepoint_t, hb_bool_t};
|
use text::shaping::harfbuzz::harfbuzz::{hb_buffer_t, hb_codepoint_t, hb_bool_t};
|
||||||
use text::harfbuzz::shaper::harfbuzz::{hb_face_t, hb_font_t};
|
use text::shaping::harfbuzz::harfbuzz::{hb_face_t, hb_font_t};
|
||||||
use text::harfbuzz::shaper::harfbuzz::{hb_font_funcs_t, hb_buffer_t, hb_codepoint_t, hb_bool_t};
|
use text::shaping::harfbuzz::harfbuzz::{hb_font_funcs_t, hb_buffer_t, hb_codepoint_t};
|
||||||
use text::harfbuzz::shaper::harfbuzz::{hb_glyph_info_t, hb_position_t};
|
use text::shaping::harfbuzz::harfbuzz::{hb_glyph_info_t, hb_position_t};
|
||||||
use text::harfbuzz::shaper::harfbuzz::{hb_glyph_position_t, hb_glyph_info_t};
|
use text::shaping::harfbuzz::harfbuzz::{hb_glyph_position_t, hb_glyph_info_t};
|
||||||
use text::harfbuzz::shaper::harfbuzz::{hb_glyph_position_t};
|
use text::shaping::harfbuzz::harfbuzz::{hb_glyph_position_t};
|
||||||
use text::harfbuzz::shaper::harfbuzz::{hb_position_t, hb_tag_t};
|
use text::shaping::harfbuzz::harfbuzz::{hb_position_t, hb_tag_t};
|
||||||
|
|
||||||
static NO_GLYPH: i32 = -1;
|
static NO_GLYPH: i32 = -1;
|
||||||
static CONTINUATION_BYTE: i32 = -2;
|
static CONTINUATION_BYTE: i32 = -2;
|
||||||
|
@ -109,10 +109,10 @@ impl ShapedGlyphData {
|
||||||
unsafe {
|
unsafe {
|
||||||
let glyph_info_i = ptr::offset(self.glyph_infos, i);
|
let glyph_info_i = ptr::offset(self.glyph_infos, i);
|
||||||
let pos_info_i = ptr::offset(self.pos_infos, i);
|
let pos_info_i = ptr::offset(self.pos_infos, i);
|
||||||
let x_offset = HarfbuzzShaper::fixed_to_float((*pos_info_i).x_offset);
|
let x_offset = Shaper::fixed_to_float((*pos_info_i).x_offset);
|
||||||
let y_offset = HarfbuzzShaper::fixed_to_float((*pos_info_i).y_offset);
|
let y_offset = Shaper::fixed_to_float((*pos_info_i).y_offset);
|
||||||
let x_advance = HarfbuzzShaper::fixed_to_float((*pos_info_i).x_advance);
|
let x_advance = Shaper::fixed_to_float((*pos_info_i).x_advance);
|
||||||
let y_advance = HarfbuzzShaper::fixed_to_float((*pos_info_i).y_advance);
|
let y_advance = Shaper::fixed_to_float((*pos_info_i).y_advance);
|
||||||
|
|
||||||
let x_offset = Au::from_frac_px(x_offset);
|
let x_offset = Au::from_frac_px(x_offset);
|
||||||
let y_offset = Au::from_frac_px(y_offset);
|
let y_offset = Au::from_frac_px(y_offset);
|
||||||
|
@ -140,7 +140,7 @@ impl ShapedGlyphData {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct HarfbuzzShaper {
|
pub struct Shaper {
|
||||||
font: @mut Font,
|
font: @mut Font,
|
||||||
priv hb_face: *hb_face_t,
|
priv hb_face: *hb_face_t,
|
||||||
priv hb_font: *hb_font_t,
|
priv hb_font: *hb_font_t,
|
||||||
|
@ -148,7 +148,7 @@ pub struct HarfbuzzShaper {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[unsafe_destructor]
|
#[unsafe_destructor]
|
||||||
impl Drop for HarfbuzzShaper {
|
impl Drop for Shaper {
|
||||||
fn finalize(&self) {
|
fn finalize(&self) {
|
||||||
assert!(self.hb_face.is_not_null());
|
assert!(self.hb_face.is_not_null());
|
||||||
hb_face_destroy(self.hb_face);
|
hb_face_destroy(self.hb_face);
|
||||||
|
@ -161,8 +161,8 @@ impl Drop for HarfbuzzShaper {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl HarfbuzzShaper {
|
impl Shaper {
|
||||||
pub fn new(font: @mut Font) -> HarfbuzzShaper {
|
pub fn new(font: @mut Font) -> Shaper {
|
||||||
unsafe {
|
unsafe {
|
||||||
let font_ptr: *mut Font = &mut *font;
|
let font_ptr: *mut Font = &mut *font;
|
||||||
let hb_face: *hb_face_t = hb_face_create_for_tables(get_font_table_func,
|
let hb_face: *hb_face_t = hb_face_create_for_tables(get_font_table_func,
|
||||||
|
@ -176,8 +176,8 @@ impl HarfbuzzShaper {
|
||||||
|
|
||||||
// Set scaling. Note that this takes 16.16 fixed point.
|
// Set scaling. Note that this takes 16.16 fixed point.
|
||||||
hb_font_set_scale(hb_font,
|
hb_font_set_scale(hb_font,
|
||||||
HarfbuzzShaper::float_to_fixed(pt_size) as c_int,
|
Shaper::float_to_fixed(pt_size) as c_int,
|
||||||
HarfbuzzShaper::float_to_fixed(pt_size) as c_int);
|
Shaper::float_to_fixed(pt_size) as c_int);
|
||||||
|
|
||||||
// configure static function callbacks.
|
// configure static function callbacks.
|
||||||
// NB. This funcs structure could be reused globally, as it never changes.
|
// NB. This funcs structure could be reused globally, as it never changes.
|
||||||
|
@ -186,7 +186,7 @@ impl HarfbuzzShaper {
|
||||||
hb_font_funcs_set_glyph_h_advance_func(hb_funcs, glyph_h_advance_func, null(), null());
|
hb_font_funcs_set_glyph_h_advance_func(hb_funcs, glyph_h_advance_func, null(), null());
|
||||||
hb_font_set_funcs(hb_font, hb_funcs, font_ptr as *c_void, null());
|
hb_font_set_funcs(hb_font, hb_funcs, font_ptr as *c_void, null());
|
||||||
|
|
||||||
HarfbuzzShaper {
|
Shaper {
|
||||||
font: font,
|
font: font,
|
||||||
hb_face: hb_face,
|
hb_face: hb_face,
|
||||||
hb_font: hb_font,
|
hb_font: hb_font,
|
||||||
|
@ -208,7 +208,7 @@ impl HarfbuzzShaper {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ShaperMethods for HarfbuzzShaper {
|
impl ShaperMethods for Shaper {
|
||||||
/// Calculate the layout metrics associated with the given text when rendered in a specific
|
/// Calculate the layout metrics associated with the given text when rendered in a specific
|
||||||
/// font.
|
/// font.
|
||||||
fn shape_text(&self, text: &str, glyphs: &mut GlyphStore) {
|
fn shape_text(&self, text: &str, glyphs: &mut GlyphStore) {
|
||||||
|
@ -230,7 +230,7 @@ impl ShaperMethods for HarfbuzzShaper {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl HarfbuzzShaper {
|
impl Shaper {
|
||||||
fn save_glyph_results(&self, text: &str, glyphs: &mut GlyphStore, buffer: *hb_buffer_t) {
|
fn save_glyph_results(&self, text: &str, glyphs: &mut GlyphStore, buffer: *hb_buffer_t) {
|
||||||
let glyph_data = ShapedGlyphData::new(buffer);
|
let glyph_data = ShapedGlyphData::new(buffer);
|
||||||
let glyph_count = glyph_data.len();
|
let glyph_count = glyph_data.len();
|
||||||
|
@ -501,7 +501,7 @@ extern fn glyph_h_advance_func(_: *hb_font_t,
|
||||||
|
|
||||||
unsafe {
|
unsafe {
|
||||||
let advance = (*font).glyph_h_advance(glyph as GlyphIndex);
|
let advance = (*font).glyph_h_advance(glyph as GlyphIndex);
|
||||||
HarfbuzzShaper::float_to_fixed(advance)
|
Shaper::float_to_fixed(advance)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
15
src/servo-gfx/text/shaping/mod.rs
Normal file
15
src/servo-gfx/text/shaping/mod.rs
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
//! Shaper encapsulates a specific shaper, such as Harfbuzz,
|
||||||
|
/// Uniscribe, Pango, or Coretext.
|
||||||
|
///
|
||||||
|
/// Currently, only harfbuzz bindings are implemented.
|
||||||
|
|
||||||
|
use text::glyph::GlyphStore;
|
||||||
|
|
||||||
|
pub use Shaper = text::shaping::harfbuzz::Shaper;
|
||||||
|
|
||||||
|
pub mod harfbuzz;
|
||||||
|
|
||||||
|
pub trait ShaperMethods {
|
||||||
|
fn shape_text(&self, text: &str, glyphs: &mut GlyphStore);
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue