1 ! Copyright (C) 2008 Matthew Willis.
2 ! See http://factorcode.org/license.txt for BSD license.
4 ! pangocairo bindings, from pango/pangocairo.h
5 USING: cairo.ffi alien.c-types math
6 alien.syntax system combinators alien
7 arrays pango pango.fonts ;
11 ! { [ os winnt? ] [ "libpangocairo-1.dll" ] }
12 ! { [ os macosx? ] [ "libpangocairo.dylib" ] }
13 { [ os unix? ] [ "libpangocairo-1.0.so" ] }
14 } cond "cdecl" add-library >>
18 FUNCTION: PangoFontMap*
19 pango_cairo_font_map_new ( ) ;
21 FUNCTION: PangoFontMap*
22 pango_cairo_font_map_new_for_font_type ( cairo_font_type_t fonttype ) ;
24 FUNCTION: PangoFontMap*
25 pango_cairo_font_map_get_default ( ) ;
27 FUNCTION: cairo_font_type_t
28 pango_cairo_font_map_get_font_type ( PangoCairoFontMap* fontmap ) ;
31 pango_cairo_font_map_set_resolution ( PangoCairoFontMap* fontmap, double dpi ) ;
34 pango_cairo_font_map_get_resolution ( PangoCairoFontMap* fontmap ) ;
36 FUNCTION: PangoContext*
37 pango_cairo_font_map_create_context ( PangoCairoFontMap* fontmap ) ;
39 FUNCTION: cairo_scaled_font_t*
40 pango_cairo_font_get_scaled_font ( PangoCairoFont* font ) ;
42 ! Update a Pango context for the current state of a cairo context
44 pango_cairo_update_context ( cairo_t* cr, PangoContext* context ) ;
47 pango_cairo_context_set_font_options ( PangoContext* context, cairo_font_options_t* options ) ;
49 FUNCTION: cairo_font_options_t*
50 pango_cairo_context_get_font_options ( PangoContext* context ) ;
53 pango_cairo_context_set_resolution ( PangoContext* context, double dpi ) ;
56 pango_cairo_context_get_resolution ( PangoContext* context ) ;
59 FUNCTION: PangoLayout*
60 pango_cairo_create_layout ( cairo_t* cr ) ;
63 pango_cairo_update_layout ( cairo_t* cr, PangoLayout* layout ) ;
67 pango_cairo_show_glyph_string ( cairo_t* cr, PangoFont* font, PangoGlyphString* glyphs ) ;
70 pango_cairo_show_layout_line ( cairo_t* cr, PangoLayoutLine* line ) ;
73 pango_cairo_show_layout ( cairo_t* cr, PangoLayout* layout ) ;
76 pango_cairo_show_error_underline ( cairo_t* cr, double x, double y, double width, double height ) ;
80 pango_cairo_glyph_string_path ( cairo_t* cr, PangoFont* font, PangoGlyphString* glyphs ) ;
83 pango_cairo_layout_line_path ( cairo_t* cr, PangoLayoutLine* line ) ;
86 pango_cairo_layout_path ( cairo_t* cr, PangoLayout* layout ) ;
89 pango_cairo_error_underline_path ( cairo_t* cr, double x, double y, double width, double height ) ;
91 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
92 ! Higher level words and combinators
93 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
95 USING: destructors accessors namespaces kernel cairo ;
97 TUPLE: pango-layout alien ;
98 C: <pango-layout> pango-layout
99 M: pango-layout dispose ( alien -- ) alien>> g_object_unref ;
101 : layout ( -- pango-layout ) pango-layout get ;
103 : (with-pango) ( layout quot -- )
104 >r alien>> pango-layout r> with-variable ; inline
106 : with-pango ( quot -- )
107 cr pango_cairo_create_layout <pango-layout> swap
108 [ (with-pango) ] curry with-disposal ; inline
110 : pango-layout-get-pixel-size ( layout -- width height )
111 0 <int> 0 <int> [ pango_layout_get_pixel_size ] 2keep
114 : dummy-pango ( quot -- )
115 >r CAIRO_FORMAT_ARGB32 0 0 cairo_image_surface_create
116 r> [ with-pango ] curry with-cairo-from-surface ; inline
118 : layout-size ( quot -- dim )
119 [ layout pango-layout-get-pixel-size 2array ] compose dummy-pango ; inline
121 : layout-font ( str -- )
122 pango_font_description_from_string
123 dup zero? [ "pango: not a valid font." throw ] when
124 layout over pango_layout_set_font_description
125 pango_font_description_free ;
127 : layout-text ( str -- )
128 layout swap -1 pango_layout_set_text ;
130 : families ( -- families )
131 pango_cairo_font_map_get_default list-families ;