aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2012-06-08 18:14:04 -0700
committerBrian Anderson <banderson@mozilla.com>2012-06-08 18:14:04 -0700
commita0b200d35a736400b200032d06999d4def171bce (patch)
tree2054d01d80fb48945799760fc468d6ccd251065c /src
parente3d965019684c4c24382c2380898d37871d5638d (diff)
downloadservo-a0b200d35a736400b200032d06999d4def171bce.tar.gz
servo-a0b200d35a736400b200032d06999d4def171bce.zip
More work on text shaping
Diffstat (limited to 'src')
-rw-r--r--src/servo/text/shaper.rs28
1 files changed, 25 insertions, 3 deletions
diff --git a/src/servo/text/shaper.rs b/src/servo/text/shaper.rs
index 592343f8e7f..dd96f41cfda 100644
--- a/src/servo/text/shaper.rs
+++ b/src/servo/text/shaper.rs
@@ -1,5 +1,5 @@
import libc::types::common::c99::int32_t;
-import libc::{c_uint, c_int};
+import libc::{c_uint, c_int, c_void};
import font::font;
import glyph::{glyph, glyph_pos};
import ptr::{null, addr_of, offset};
@@ -7,7 +7,8 @@ import ptr::{null, addr_of, offset};
import unsafe::reinterpret_cast;
import harfbuzz::{HB_MEMORY_MODE_READONLY,
HB_DIRECTION_LTR};
-import harfbuzz::{hb_blob_t, hb_face_t, hb_font_t, hb_buffer_t};
+import harfbuzz::{hb_blob_t, hb_face_t, hb_font_t, hb_buffer_t,
+ hb_codepoint_t, hb_bool_t};
import harfbuzz::bindgen::{hb_blob_create, hb_blob_destroy,
hb_face_create, hb_face_destroy,
hb_font_create, hb_font_destroy,
@@ -16,7 +17,12 @@ import harfbuzz::bindgen::{hb_blob_create, hb_blob_destroy,
hb_buffer_get_glyph_infos,
hb_buffer_get_glyph_positions,
hb_font_set_ppem, hb_font_set_scale,
- hb_buffer_set_direction};
+ hb_buffer_set_direction,
+ hb_font_funcs_create, hb_font_funcs_destroy,
+ hb_font_set_funcs,
+ hb_font_funcs_set_glyph_h_advance_func,
+ hb_font_funcs_set_glyph_func,
+ hb_font_funcs_set_glyph_h_kerning_func};
#[doc = "
Calculate the layout metrics associated with a some given text
@@ -60,6 +66,10 @@ fn shape_text2(font: &font, text: str) -> [glyph] unsafe {
hb_font_set_ppem(font, 10 as c_uint, 10 as c_uint);
hb_font_set_scale(font, 10 as c_int, 10 as c_int);
+ let funcs = hb_font_funcs_create();
+ hb_font_funcs_set_glyph_func(funcs, glyph_func, null(), null());
+ hb_font_set_funcs(font, funcs, addr_of(*font), null());
+
let buffer = hb_buffer_create();
hb_buffer_set_direction(buffer, HB_DIRECTION_LTR);
@@ -93,6 +103,7 @@ fn shape_text2(font: &font, text: str) -> [glyph] unsafe {
}
hb_buffer_destroy(buffer);
+ hb_font_funcs_destroy(funcs);
hb_font_destroy(font);
hb_face_destroy(face);
hb_blob_destroy(face_blob);
@@ -100,6 +111,17 @@ fn shape_text2(font: &font, text: str) -> [glyph] unsafe {
ret [];
}
+crust fn glyph_func(_font: *hb_font_t,
+ _font_data: *c_void,
+ _unicode: hb_codepoint_t,
+ _variant_selector: hb_codepoint_t,
+ glyph: *mut hb_codepoint_t,
+ _user_data: *c_void) -> hb_bool_t unsafe {
+
+ *glyph = 40 as hb_codepoint_t;
+ ret true as hb_bool_t;
+}
+
#[test]
fn test_shape_basic() {
let font = font::create();