servo: Render some text
authorBrian Anderson <banderson@mozilla.com>
Thu, 17 May 2012 22:55:42 -0700
changeset 470751 659da69befda4101eab3d98a9db9e84cdea6759b
parent 470750 b058752bdaf9c05c985d59be8cc76561f5778301
child 470752 0680bcd9efbfb44ba7b86b598820f832a58cc492
push id44079
push userbmo:gps@mozilla.com
push dateSat, 04 Feb 2017 00:14:49 +0000
servo: Render some text Source-Repo: https://github.com/servo/servo Source-Revision: a5c43231678559b31780215095a9ff1946e27804
servo/src/servo/gfx/JosefinSans-SemiBold.ttf
servo/src/servo/gfx/OFL.txt
servo/src/servo/gfx/renderer.rs
servo/src/servo/layout/base.rs
servo/src/servo/layout/inline.rs
servo/src/servo/platform/osmain.rs
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..f58d378543eca14f50144728ea8eb183c1dca1e0
GIT binary patch
literal 33004
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
new file mode 100644
--- /dev/null
+++ b/servo/src/servo/gfx/OFL.txt
@@ -0,0 +1,93 @@
+Copyright (c) 2009, 2010, 2011 Daniel Johnson (<il.basso.buffo@gmail.com>).
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded, 
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
--- a/servo/src/servo/gfx/renderer.rs
+++ b/servo/src/servo/gfx/renderer.rs
@@ -27,17 +27,19 @@ fn renderer<S: sink send copy>(sink: S) 
             sink.begin_drawing(draw_target_ch);
 
             loop {
                 alt po.recv() {
                   render(display_list) {
                     #debug("renderer: got render request");
                     let draw_target = draw_target_ch.recv();
                     #debug("renderer: rendering");
+                    clear(draw_target);
                     draw_display_list(draw_target, display_list);
+                    draw_some_text(draw_target);
                     #debug("renderer: returning surface");
                     sink.draw(draw_target_ch, draw_target);
                   }
                   exit(response_ch) {
                     response_ch.send(());
                     break;
                   }
                 }
@@ -122,18 +124,16 @@ fn draw_image(draw_target: AzDrawTargetR
         }
     }
 }
 
 fn draw_display_list(
     draw_target: AzDrawTargetRef,
     display_list: dl::display_list
 ) {
-    clear(draw_target);
-
     for display_list.each {|item|
         #debug["drawing %?", item];
 
         alt item.item_type {
             dl::display_item_solid_color(r, g, b) {
                 draw_solid_color(draw_target, item, r, g, b);
             }
             dl::display_item_image(image) {
@@ -141,16 +141,145 @@ fn draw_display_list(
             }
             dl::padding(*) {
                 fail "should never see padding";
             }
         }
     }
 }
 
+fn draw_some_text(draw_target: AzDrawTargetRef) {
+
+    import az = azure;
+    import azbg = azure::bindgen;
+    import ft = azure::freetype;
+    import ftbg = azure::freetype::bindgen;
+    import cairo = azure::cairo;
+    import cairobg = azure::cairo::bindgen;
+    import cairoftbg = azure::cairo_ft::bindgen;
+    import libc::types::common::c99::uint16_t;
+    import libc::types::common::c99::uint32_t;
+
+    impl methods for ft::FT_Error {
+        fn for_sure() { assert self == 0 as ft::FT_Error }
+    }
+
+    let library: ft::FT_Library = ptr::null();
+    ftbg::FT_Init_FreeType(ptr::addr_of(library)).for_sure();
+
+    let fontbin = #include_bin("JosefinSans-SemiBold.ttf");
+
+    let face: ft::FT_Face = ptr::null();
+    vec::as_buf(fontbin) {|buf|
+        ftbg::FT_New_Memory_Face(library, buf, fontbin.len() as ft::FT_Long,
+                                 0, ptr::addr_of(face)).for_sure();
+    }
+
+    unsafe {
+        #debug("num_glyphs %?", (*face).num_glyphs);
+        #debug("family_name %?",
+               str::unsafe::from_c_str((*face).family_name));
+        #debug("style_name %?",
+               str::unsafe::from_c_str((*face).style_name));
+    }
+
+    let cface = cairoftbg::cairo_ft_font_face_create_for_ft_face(
+        face, 0 as libc::c_int);
+    assert cface.is_not_null();
+
+    let fontmatrix: cairo::cairo_matrix_t = {
+        xx: 0 as libc::c_double,
+        yx: 0 as libc::c_double,
+        xy: 0 as libc::c_double,
+        yy: 0 as libc::c_double,
+        x0: 0 as libc::c_double,
+        y0: 0 as libc::c_double
+    };
+    cairobg::cairo_matrix_init_identity(ptr::addr_of(fontmatrix));
+    cairobg::cairo_matrix_scale(ptr::addr_of(fontmatrix), 300f as libc::c_double, 400f as libc::c_double);
+
+    let idmatrix: cairo::cairo_matrix_t = {
+        xx: 0 as libc::c_double,
+        yx: 0 as libc::c_double,
+        xy: 0 as libc::c_double,
+        yy: 0 as libc::c_double,
+        x0: 0 as libc::c_double,
+        y0: 0 as libc::c_double
+    };
+    cairobg::cairo_matrix_init_identity(ptr::addr_of(idmatrix));
+
+    let options = cairobg::cairo_font_options_create();
+
+    let cfont = cairobg::cairo_scaled_font_create(
+        cface, ptr::addr_of(fontmatrix), ptr::addr_of(idmatrix), options);
+    assert cfont.is_not_null();
+    assert cairobg::cairo_scaled_font_status(cfont) == 0 as cairo::cairo_status_t;
+    cairobg::cairo_font_face_destroy(cface);
+    cairobg::cairo_font_options_destroy(options);
+
+    let nfont: az::AzNativeFont = {
+        mType: az::AZ_NATIVE_FONT_CAIRO_FONT_FACE,
+        mFont: ptr::null()
+    };
+
+    let azfont = azbg::AzCreateScaledFontWithCairo(
+        ptr::addr_of(nfont),
+        20f as az::AzFloat,
+        cfont);
+    assert azfont.is_not_null();
+    cairobg::cairo_scaled_font_destroy(cfont);
+
+    let color = {
+        r: 1f as AzFloat,
+        g: 0f as AzFloat,
+        b: 0.5f as AzFloat,
+        a: 1f as AzFloat
+    };
+    let pattern = AzCreateColorPattern(ptr::addr_of(color));
+    assert pattern.is_not_null();
+
+    let options: az::AzDrawOptions = {
+        mAlpha: 1f as az::AzFloat,
+        fields: 0 as uint16_t
+    };
+
+    let glyphidx = ftbg::FT_Get_Char_Index(face, 'w' as ft::FT_ULong);
+
+    #debug("glyph: %?", glyphidx);
+
+    for int::range(0, 3) {|i|
+        let glyphs: [az::AzGlyph] = [
+            {
+                mIndex: glyphidx,
+                mPosition: {
+                    x: (100 + 250 * i) as az::AzFloat,
+                    y: 600 as az::AzFloat
+                }
+            }
+        ];
+
+        let glyphbuf: az::AzGlyphBuffer = unsafe {{
+            mGlyphs: vec::unsafe::to_ptr(glyphs),
+            mNumGlyphs: 1 as uint32_t
+        }};
+
+        AzDrawTargetFillGlyphs(draw_target,
+                               azfont,
+                               ptr::addr_of(glyphbuf),
+                               pattern,
+                               ptr::addr_of(options),
+                               ptr::null());
+    }
+
+    azbg::AzReleaseColorPattern(pattern);
+    azbg::AzReleaseScaledFont(azfont);
+    ftbg::FT_Done_Face(face).for_sure();
+    ftbg::FT_Done_FreeType(library).for_sure();
+}
+
 fn clear(draw_target: AzDrawTargetRef) {
 
     let black_color = {
         r: 0f as AzFloat,
         g: 0f as AzFloat,
         b: 0f as AzFloat,
         a: 1f as AzFloat
     };
--- a/servo/src/servo/layout/base.rs
+++ b/servo/src/servo/layout/base.rs
@@ -4,17 +4,17 @@ import dom::base::{element, es_div, es_i
 import dom::rcu;
 import dom::rcu::reader_methods;
 import gfx::geom;
 import gfx::geom::{size, rect, point, au, zero_size_au};
 import image::base::image;
 import /*layout::*/block::block_layout_methods;
 import /*layout::*/inline::inline_layout_methods;
 import /*layout::*/style::style::*;
-import /*layout::*/text::{text_box, text_layout_methods};
+import /*layout::*/text::*;
 import util::tree;
 
 enum box_kind {
     bk_block,
     bk_inline,
     bk_intrinsic(@geom::size<au>),
     bk_text(@text_box)
 }
--- a/servo/src/servo/layout/inline.rs
+++ b/servo/src/servo/layout/inline.rs
@@ -1,15 +1,15 @@
 #[doc="Inline layout."]
 
 import dom::rcu;
 import dom::rcu::reader_methods;
 import gfx::geom::au;
 import /*layout::*/base::*; // FIXME: Can't get around import *; resolve bug.
-import /*layout::*/style::style::*;
+import /*layout::*/style::style::*; // ditto
 import util::tree;
 
 #[doc="The main reflow routine for inline layout."]
 impl inline_layout_methods for @box {
     fn reflow_inline(available_width: au) {
         assert self.kind == bk_inline;
 
         // FIXME: This is clownshoes inline layout and is not even close to
--- a/servo/src/servo/platform/osmain.rs
+++ b/servo/src/servo/platform/osmain.rs
@@ -64,16 +64,17 @@ fn mainloop(po: port<msg>) {
               draw(sender, dt) {
                 return_surface(surfaces, dt);
                 lend_surface(surfaces, sender);
 
                 #debug("osmain: drawing to screen");
                 assert surfaces.s1.surf.az_target == dt;
                 let sdl_surf = surfaces.s1.surf.sdl_surf;
 
+                cairo_surface_flush(surfaces.s1.surf.cairo_surf);
                 sdl::video::unlock_surface(sdl_surf);
                 sdl::video::blit_surface(sdl_surf, ptr::null(),
                                          screen, ptr::null());
                 sdl::video::lock_surface(sdl_surf);
                 sdl::video::flip(screen);
               }
               exit { break; }
             }