-Matthew Willis
-Slava Pestov
+Anton Gorenko
\ No newline at end of file
-! Copyright (C) 2008 Matthew Willis.
-! Copyright (C) 2009 Slava Pestov.
-! See http://factorcode.org/license.txt for BSD license
-USING: alien alien.c-types alien.syntax alien.destructors
-combinators system alien.libraries ;
-IN: glib
+! Copyright (C) 2009 Anton Gorenko.
+! See http://factorcode.org/license.txt for BSD license.
+USING: alien.c-types alien.libraries alien.syntax combinators gir
+kernel system vocabs.parser words ;
<<
-
-{
- { [ os winnt? ] [ "glib" "libglib-2.0-0.dll" cdecl add-library ] }
- { [ os macosx? ] [ "glib" "/opt/local/lib/libglib-2.0.0.dylib" cdecl add-library ] }
- { [ os unix? ] [ ] }
+"glib" {
+ { [ os winnt? ] [ "libglib-2.0-0.dll" "cdecl" add-library ] }
+ { [ os macosx? ] [ "/opt/local/lib/libglib-2.0.0.dylib" "cdecl" add-library ] }
+ { [ os unix? ] [ drop ] }
} cond
+>>
-{
- { [ os winnt? ] [ "gobject" "libgobject-2.0-0.dll" cdecl add-library ] }
- { [ os macosx? ] [ "gobject" "/opt/local/lib/libgobject-2.0.0.dylib" cdecl add-library ] }
- { [ os unix? ] [ ] }
-} cond
+IN: glib.ffi
->>
+<< double "long double" current-vocab create typedef >>
-LIBRARY: glib
+TYPEDEF: char gchar
+TYPEDEF: uchar guchar
+TYPEDEF: short gshort
+TYPEDEF: ushort gushort
+TYPEDEF: long glong
+TYPEDEF: ulong gulong
+TYPEDEF: int gint
+TYPEDEF: uint guint
+TYPEDEF: gint gboolean
+
+TYPEDEF: char gint8
+TYPEDEF: uchar guint8
+TYPEDEF: short gint16
+TYPEDEF: ushort guint16
+TYPEDEF: int gint32
+TYPEDEF: uint guint32
+TYPEDEF: longlong gint64
+TYPEDEF: ulonglong guint64
+
+TYPEDEF: float gfloat
+TYPEDEF: double gdouble
+
+TYPEDEF: long ssize_t
+TYPEDEF: long time_t
+TYPEDEF: size_t gsize
+TYPEDEF: ssize_t gssize
+TYPEDEF: size_t GType
TYPEDEF: void* gpointer
-TYPEDEF: int gint
-TYPEDEF: bool gboolean
+TYPEDEF: void* gconstpointer
-FUNCTION: void g_free ( gpointer mem ) ;
+TYPEDEF: guint8 GDateDay
+TYPEDEF: guint16 GDateYear
+TYPEDEF: gint GPid
+TYPEDEF: guint32 GQuark
+TYPEDEF: gint32 GTime
+TYPEDEF: glong gintptr
+TYPEDEF: gint64 goffset
+TYPEDEF: gulong guintptr
+TYPEDEF: guint32 gunichar
+TYPEDEF: guint16 gunichar2
-LIBRARY: gobject
+! Разобраться, почему в .gir есть такие типы
+TYPEDEF: void any
-FUNCTION: void g_object_unref ( gpointer object ) ;
+IN-GIR: glib vocab:glib/GLib-2.0.gir
-DESTRUCTOR: g_object_unref
+++ /dev/null
-Binding for GLib
-Matthew Willis
-Slava Pestov
+Anton Gorenko
\ No newline at end of file
-! Copyright (C) 2008 Matthew Willis.
-! Copyright (C) 2009 Slava Pestov.
+! Copyright (C) 2010 Anton Gorenko.
! See http://factorcode.org/license.txt for BSD license.
-!
-! pangocairo bindings, from pango/pangocairo.h
-USING: arrays sequences alien alien.c-types alien.destructors
-alien.libraries alien.syntax math math.functions math.vectors
-destructors combinators colors fonts accessors assocs namespaces
-kernel pango pango.fonts pango.layouts glib unicode.data images
+USING: alien alien.c-types alien.destructors
+alien.libraries alien.syntax alien.strings arrays math math.functions
+math.vectors destructors combinators colors fonts accessors assocs
+namespaces kernel unicode.data images sequences
cache init system math.rectangles fry memoize io.encodings.utf8
-classes.struct cairo cairo.ffi ;
-IN: pango.cairo
-
-<< {
- { [ os winnt? ] [ "pangocairo" "libpangocairo-1.0-0.dll" cdecl add-library ] }
- { [ os macosx? ] [ "pangocairo" "/opt/local/lib/libpangocairo-1.0.0.dylib" cdecl add-library ] }
- { [ os unix? ] [ ] }
-} cond >>
-
-LIBRARY: pangocairo
-
-C-TYPE: PangoCairoFontMap
-C-TYPE: PangoCairoFont
-
-FUNCTION: PangoFontMap*
-pango_cairo_font_map_new ( ) ;
-
-FUNCTION: PangoFontMap*
-pango_cairo_font_map_new_for_font_type ( cairo_font_type_t fonttype ) ;
-
-FUNCTION: PangoFontMap*
-pango_cairo_font_map_get_default ( ) ;
-
-FUNCTION: cairo_font_type_t
-pango_cairo_font_map_get_font_type ( PangoCairoFontMap* fontmap ) ;
-
-FUNCTION: void
-pango_cairo_font_map_set_resolution ( PangoCairoFontMap* fontmap, double dpi ) ;
+classes.struct cairo cairo.ffi
+gir pango pango.ffi gobject gobject.ffi ;
-FUNCTION: double
-pango_cairo_font_map_get_resolution ( PangoCairoFontMap* fontmap ) ;
+<<
+"pango.cairo" {
+ { [ os winnt? ] [ "libpangocairo-1.0-0.dll" cdecl add-library ] }
+ { [ os macosx? ] [ "/opt/local/lib/libpangocairo-1.0.0.dylib" cdecl add-library ] }
+ { [ os unix? ] [ drop ] }
+} cond
+>>
-FUNCTION: PangoContext*
-pango_cairo_font_map_create_context ( PangoCairoFontMap* fontmap ) ;
+IN-GIR: pango.cairo vocab:pango/cairo/PangoCairo-1.0.gir
-FUNCTION: cairo_scaled_font_t*
-pango_cairo_font_get_scaled_font ( PangoCairoFont* font ) ;
-! Update a Pango context for the current state of a cairo context
-FUNCTION: void
-pango_cairo_update_context ( cairo_t* cr, PangoContext* context ) ;
-FUNCTION: void
-pango_cairo_context_set_font_options ( PangoContext* context, cairo_font_options_t* options ) ;
-
-FUNCTION: cairo_font_options_t*
-pango_cairo_context_get_font_options ( PangoContext* context ) ;
-
-FUNCTION: void
-pango_cairo_context_set_resolution ( PangoContext* context, double dpi ) ;
-
-FUNCTION: double
-pango_cairo_context_get_resolution ( PangoContext* context ) ;
-
-! Convenience
-FUNCTION: PangoLayout*
-pango_cairo_create_layout ( cairo_t* cr ) ;
+IN: pango.cairo.ffi
FUNCTION: void
pango_cairo_update_layout ( cairo_t* cr, PangoLayout* layout ) ;
-! Rendering
-FUNCTION: void
-pango_cairo_show_glyph_string ( cairo_t* cr, PangoFont* font, PangoGlyphString* glyphs ) ;
-
-FUNCTION: void
-pango_cairo_show_layout_line ( cairo_t* cr, PangoLayoutLine* line ) ;
-
FUNCTION: void
pango_cairo_show_layout ( cairo_t* cr, PangoLayout* layout ) ;
-FUNCTION: void
-pango_cairo_show_error_underline ( cairo_t* cr, double x, double y, double width, double height ) ;
-
-! Rendering to a path
-FUNCTION: void
-pango_cairo_glyph_string_path ( cairo_t* cr, PangoFont* font, PangoGlyphString* glyphs ) ;
-
-FUNCTION: void
-pango_cairo_layout_line_path ( cairo_t* cr, PangoLayoutLine* line ) ;
-
-FUNCTION: void
-pango_cairo_layout_path ( cairo_t* cr, PangoLayout* layout ) ;
+FUNCTION: PangoLayout*
+pango_cairo_create_layout ( cairo_t* cr ) ;
-FUNCTION: void
-pango_cairo_error_underline_path ( cairo_t* cr, double x, double y, double width, double height ) ;
+IN: pango.cairo
TUPLE: layout < disposable font string selection layout metrics ink-rect logical-rect image ;
: set-layout-text ( str layout -- )
#! Replace nulls with something else since Pango uses null-terminated
#! strings
- swap -1 pango_layout_set_text ;
+ swap utf8 string>alien -1 pango_layout_set_text ;
: layout-extents ( layout -- ink-rect logical-rect )
PangoRectangle <struct>
cached-layout layout>> first-line ;
[ <cache-assoc> cached-layouts set-global ] "pango.cairo" add-startup-hook
+
+++ /dev/null
-Matthew Willis
-Slava Pestov
+++ /dev/null
-! Copyright (C) 2008 Matthew Willis.
-! Copyright (C) 2009 Slava Pestov.
-! See http://factorcode.org/license.txt for BSD license
-USING: pango alien.syntax alien.c-types alien.destructors
-kernel glib accessors combinators destructors init fonts
-memoize math ;
-IN: pango.fonts
-
-LIBRARY: pango
-
-ENUM: PangoStyle
-PANGO_STYLE_NORMAL
-PANGO_STYLE_OBLIQUE
-PANGO_STYLE_ITALIC ;
-
-TYPEDEF: int PangoWeight
-C-TYPE: PangoFont
-C-TYPE: PangoFontFamily
-C-TYPE: PangoFontFace
-C-TYPE: PangoFontMap
-C-TYPE: PangoFontMetrics
-C-TYPE: PangoFontDescription
-C-TYPE: PangoGlyphString
-C-TYPE: PangoLanguage
-
-CONSTANT: PANGO_WEIGHT_THIN 100
-CONSTANT: PANGO_WEIGHT_ULTRALIGHT 200
-CONSTANT: PANGO_WEIGHT_LIGHT 300
-CONSTANT: PANGO_WEIGHT_BOOK 380
-CONSTANT: PANGO_WEIGHT_NORMAL 400
-CONSTANT: PANGO_WEIGHT_MEDIUM 500
-CONSTANT: PANGO_WEIGHT_SEMIBOLD 600
-CONSTANT: PANGO_WEIGHT_BOLD 700
-CONSTANT: PANGO_WEIGHT_ULTRABOLD 800
-CONSTANT: PANGO_WEIGHT_HEAVY 900
-CONSTANT: PANGO_WEIGHT_ULTRAHEAVY 1000
-
-FUNCTION: PangoFontDescription*
-pango_font_description_new ( ) ;
-
-FUNCTION: void
-pango_font_description_free ( PangoFontDescription* desc ) ;
-
-DESTRUCTOR: pango_font_description_free
-
-FUNCTION: PangoFontDescription*
-pango_font_description_from_string ( c-string str ) ;
-
-FUNCTION: c-string
-pango_font_description_to_string ( PangoFontDescription* desc ) ;
-
-FUNCTION: c-string
-pango_font_description_to_filename ( PangoFontDescription* desc ) ;
-
-FUNCTION: void
-pango_font_description_set_family ( PangoFontDescription* desc, c-string family ) ;
-
-FUNCTION: void
-pango_font_description_set_style ( PangoFontDescription* desc, PangoStyle style ) ;
-
-FUNCTION: void
-pango_font_description_set_weight ( PangoFontDescription* desc, PangoWeight weight ) ;
-
-FUNCTION: void
-pango_font_description_set_size ( PangoFontDescription* desc, gint size ) ;
-
-FUNCTION: void
-pango_font_map_list_families ( PangoFontMap* fontmap, PangoFontFamily*** families, int* n_families ) ;
-
-FUNCTION: c-string
-pango_font_family_get_name ( PangoFontFamily* family ) ;
-
-FUNCTION: int
-pango_font_family_is_monospace ( PangoFontFamily* family ) ;
-
-FUNCTION: void
-pango_font_family_list_faces ( PangoFontFamily* family, PangoFontFace*** faces, int* n_faces ) ;
-
-FUNCTION: c-string
-pango_font_face_get_face_name ( PangoFontFace* face ) ;
-
-FUNCTION: void
-pango_font_face_list_sizes ( PangoFontFace* face, int** sizes, int* n_sizes ) ;
-
-FUNCTION: void pango_font_metrics_unref ( PangoFontMetrics* metrics ) ;
-
-DESTRUCTOR: pango_font_metrics_unref
-
-FUNCTION: int pango_font_metrics_get_ascent ( PangoFontMetrics* metrics ) ;
-
-FUNCTION: int pango_font_metrics_get_descent ( PangoFontMetrics* metrics ) ;
-
-FUNCTION: PangoFont* pango_font_map_load_font ( PangoFontMap* fontmap, PangoContext* context, PangoFontDescription* desc ) ;
-
-FUNCTION: PangoFontMetrics* pango_context_get_metrics ( PangoContext* context, PangoFontDescription* desc, PangoLanguage* language ) ;
-
-FUNCTION: PangoFontMetrics* pango_font_get_metrics ( PangoFont* font, PangoLanguage* language ) ;
-
-MEMO: (cache-font-description) ( font -- description )
- [
- [ pango_font_description_new |pango_font_description_free ] dip {
- [ name>> pango_font_description_set_family ]
- [ size>> float>pango pango_font_description_set_size ]
- [ bold?>> PANGO_WEIGHT_BOLD PANGO_WEIGHT_NORMAL ? pango_font_description_set_weight ]
- [ italic?>> PANGO_STYLE_ITALIC PANGO_STYLE_NORMAL ? pango_font_description_set_style ]
- [ drop ]
- } 2cleave
- ] with-destructors ;
-
-: cache-font-description ( font -- description )
- strip-font-colors (cache-font-description) ;
-
-[ \ (cache-font-description) reset-memoized ] "pango.fonts" add-startup-hook
+++ /dev/null
-IN: pango.layouts.tests
-USING: pango.layouts pango.cairo tools.test glib fonts accessors
-sequences combinators.short-circuit math destructors ;
-
-[ t ] [
- [
- <font> "Helvetica" >>name 12 >>size
- "OH, HAI"
- cached-layout ink-rect>> dim>>
- ] with-destructors [ 0 > ] all?
-] unit-test
\ No newline at end of file
+++ /dev/null
-! Copyright (C) 2008 Matthew Willis.
-! Copyright (C) 2009 Slava Pestov.
-! See http://factorcode.org/license.txt for BSD license.
-USING: arrays sequences alien alien.c-types alien.destructors
-alien.syntax math math.functions math.vectors destructors combinators
-colors fonts accessors assocs namespaces kernel pango pango.fonts
-glib unicode.data images cache init
-math.rectangles fry memoize io.encodings.utf8 classes.struct ;
-IN: pango.layouts
-
-LIBRARY: pango
-
-C-TYPE: PangoLayout
-C-TYPE: PangoLayoutIter
-C-TYPE: PangoLayoutLine
-
-FUNCTION: PangoLayout*
-pango_layout_new ( PangoContext* context ) ;
-
-FUNCTION: PangoContext*
-pango_layout_get_context ( PangoLayout* layout ) ;
-
-FUNCTION: void
-pango_layout_set_text ( PangoLayout* layout, c-string text, int length ) ;
-
-FUNCTION: c-string
-pango_layout_get_text ( PangoLayout* layout ) ;
-
-FUNCTION: void
-pango_layout_get_size ( PangoLayout* layout, int* width, int* height ) ;
-
-FUNCTION: void
-pango_layout_set_font_description ( PangoLayout* layout, PangoFontDescription* desc ) ;
-
-FUNCTION: PangoFontDescription*
-pango_layout_get_font_description ( PangoLayout* layout ) ;
-
-FUNCTION: void
-pango_layout_get_pixel_size ( PangoLayout* layout, int* width, int* height ) ;
-
-FUNCTION: void
-pango_layout_get_extents ( PangoLayout* layout, PangoRectangle* ink_rect, PangoRectangle* logical_rect ) ;
-
-FUNCTION: void
-pango_layout_get_pixel_extents ( PangoLayout* layout, PangoRectangle* ink_rect, PangoRectangle* logical_rect ) ;
-
-FUNCTION: PangoLayoutLine*
-pango_layout_get_line_readonly ( PangoLayout* layout, int line ) ;
-
-FUNCTION: void
-pango_layout_line_index_to_x ( PangoLayoutLine* line, int index_, uint trailing, int* x_pos ) ;
-
-FUNCTION: gboolean
-pango_layout_line_x_to_index ( PangoLayoutLine* line, int x_pos, int* index_, int* trailing ) ;
-
-FUNCTION: PangoLayoutIter*
-pango_layout_get_iter ( PangoLayout* layout ) ;
-
-FUNCTION: int
-pango_layout_iter_get_baseline ( PangoLayoutIter* iter ) ;
-
-FUNCTION: void
-pango_layout_iter_free ( PangoLayoutIter* iter ) ;
-
-DESTRUCTOR: pango_layout_iter_free
-
-! Copyright (C) 2008 Matthew Willis.
-! Copyright (C) 2009 Slava Pestov.
-! See http://factorcode.org/license.txt for BSD license
-USING: arrays system alien.destructors alien.c-types alien.syntax alien
-combinators math.rectangles kernel math alien.libraries classes.struct
-accessors ;
-IN: pango
-
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-! Helpful functions from other parts of pango
-! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+! Copyright (C) 2009 Anton Gorenko.
+! See http://factorcode.org/license.txt for BSD license.
+USING: accessors alien.syntax alien.c-types alien.destructors
+alien.strings alien.libraries arrays classes.struct combinators
+destructors fonts init kernel math math.rectangles memoize
+io.encodings.utf8 system
+gir glib glib.ffi ;
-<< {
- { [ os winnt? ] [ "pango" "libpango-1.0-0.dll" cdecl add-library ] }
- { [ os macosx? ] [ "pango" "/opt/local/lib/libpango-1.0.0.dylib" cdecl add-library ] }
- { [ os unix? ] [ ] }
-} cond >>
+<<
+"pango" {
+ { [ os winnt? ] [ "libpango-1.0-0.dll" cdecl add-library ] }
+ { [ os macosx? ] [ "/opt/local/lib/libpango-1.0.0.dylib" cdecl add-library ] }
+ { [ os unix? ] [ drop ] }
+} cond
+>>
-LIBRARY: pango
+IN: pango.ffi
-CONSTANT: PANGO_SCALE 1024
+TYPEDEF: void PangoLayoutRun ! не совсем верно
+TYPEDEF: guint32 PangoGlyph
-: pango>float ( n -- x ) PANGO_SCALE /f ; inline
-: float>pango ( x -- n ) PANGO_SCALE * >integer ; inline
+IN-GIR: pango vocab:pango/Pango-1.0.gir
-C-TYPE: PangoContext
+IN: pango.ffi
-FUNCTION: PangoContext* pango_context_new ( ) ;
+FORGET: PangoRectangle
STRUCT: PangoRectangle
{ x int }
{ width int }
{ height int } ;
+IN: pango
+
+CONSTANT: PANGO_SCALE 1024
+
+: pango>float ( n -- x ) PANGO_SCALE /f ; inline
+: float>pango ( x -- n ) PANGO_SCALE * >integer ; inline
+
: PangoRectangle>rect ( PangoRectangle -- rect )
[ [ x>> pango>float ] [ y>> pango>float ] bi 2array ]
[ [ width>> pango>float ] [ height>> pango>float ] bi 2array ] bi
<rect> ;
+
+DESTRUCTOR: pango_font_description_free
+
+DESTRUCTOR: pango_layout_iter_free
+
+! перенести в ui.*?
+MEMO: (cache-font-description) ( font -- description )
+ [
+ [ pango_font_description_new |pango_font_description_free ] dip {
+ [ name>> utf8 string>alien pango_font_description_set_family ]
+ [ size>> float>pango pango_font_description_set_size ]
+ [ bold?>> PANGO_WEIGHT_BOLD PANGO_WEIGHT_NORMAL ? pango_font_description_set_weight ]
+ [ italic?>> PANGO_STYLE_ITALIC PANGO_STYLE_NORMAL ? pango_font_description_set_style ]
+ [ drop ]
+ } 2cleave
+ ] with-destructors ;
+
+: cache-font-description ( font -- description )
+ strip-font-colors (cache-font-description) ;
+
+[ \ (cache-font-description) reset-memoized ] "pango" add-startup-hook
+
! Copyright (C) 2009, 2010 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
USING: accessors assocs cache kernel math math.vectors
-namespaces pango.cairo pango.layouts ui.text ui.text.private
-pango sequences ;
+namespaces pango pango.cairo ui.text ui.text.private
+sequences ;
IN: ui.text.pango
SINGLETON: pango-renderer
[ cached-layout metrics>> ]
if-empty ;
-pango-renderer font-renderer set-global
\ No newline at end of file
+pango-renderer font-renderer set-global