Merge branch 'master' of git://github.com/slavapestov/factor
commit
73f5fb866f
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,5 @@
|
||||||
|
! Copyright (C) 2009 Anton Gorenko.
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
|
USING: atk.ffi ;
|
||||||
|
IN: atk
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Anton Gorenko
|
|
@ -0,0 +1,20 @@
|
||||||
|
! Copyright (C) 2010 Anton Gorenko.
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
|
USING: alien alien.libraries alien.syntax combinators
|
||||||
|
gobject-introspection kernel system vocabs.loader ;
|
||||||
|
IN: atk.ffi
|
||||||
|
|
||||||
|
<<
|
||||||
|
"gobject.ffi" require
|
||||||
|
>>
|
||||||
|
|
||||||
|
LIBRARY: atk
|
||||||
|
|
||||||
|
<<
|
||||||
|
"atk" {
|
||||||
|
{ [ os winnt? ] [ "libatk-1.0-0.dll" cdecl add-library ] }
|
||||||
|
{ [ os unix? ] [ drop ] }
|
||||||
|
} cond
|
||||||
|
>>
|
||||||
|
|
||||||
|
GIR: vocab:atk/Atk-1.0.gir
|
|
@ -0,0 +1 @@
|
||||||
|
Atk binding
|
|
@ -2,10 +2,11 @@ USING: system vocabs vocabs.loader kernel combinators
|
||||||
namespaces sequences io.backend accessors ;
|
namespaces sequences io.backend accessors ;
|
||||||
IN: bootstrap.io
|
IN: bootstrap.io
|
||||||
|
|
||||||
"bootstrap.compiler" vocab [
|
"bootstrap.compiler" require
|
||||||
"io.backend." {
|
"bootstrap.threads" require
|
||||||
|
|
||||||
|
"io.backend." {
|
||||||
{ [ "io-backend" get ] [ "io-backend" get ] }
|
{ [ "io-backend" get ] [ "io-backend" get ] }
|
||||||
{ [ os unix? ] [ "unix." os name>> append ] }
|
{ [ os unix? ] [ "unix." os name>> append ] }
|
||||||
{ [ os windows? ] [ "windows" ] }
|
{ [ os windows? ] [ "windows" ] }
|
||||||
} cond append require
|
} cond append require
|
||||||
] when
|
|
||||||
|
|
|
@ -2,12 +2,14 @@ USING: alien namespaces system combinators kernel sequences
|
||||||
vocabs vocabs.loader ;
|
vocabs vocabs.loader ;
|
||||||
IN: bootstrap.ui
|
IN: bootstrap.ui
|
||||||
|
|
||||||
"bootstrap.compiler" vocab [
|
"bootstrap.math" require
|
||||||
"ui-backend" get [
|
"bootstrap.compiler" require
|
||||||
|
"bootstrap.threads" require
|
||||||
|
|
||||||
|
"ui-backend" get [
|
||||||
{
|
{
|
||||||
{ [ os macosx? ] [ "cocoa" ] }
|
{ [ os macosx? ] [ "cocoa" ] }
|
||||||
{ [ os windows? ] [ "windows" ] }
|
{ [ os windows? ] [ "windows" ] }
|
||||||
{ [ os unix? ] [ "x11" ] }
|
{ [ os unix? ] [ "gtk" ] }
|
||||||
} cond
|
} cond
|
||||||
] unless* "ui.backend." prepend require
|
] unless* "ui.backend." prepend require
|
||||||
] when
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: accessors arrays classes.tuple combinators
|
USING: accessors arrays classes.tuple combinators
|
||||||
combinators.short-circuit kernel locals math math.functions
|
combinators.short-circuit kernel locals math math.functions
|
||||||
math.order sequences summary system threads vocabs.loader ;
|
math.order sequences summary system vocabs.loader ;
|
||||||
IN: calendar
|
IN: calendar
|
||||||
|
|
||||||
HOOK: gmt-offset os ( -- hours minutes seconds )
|
HOOK: gmt-offset os ( -- hours minutes seconds )
|
||||||
|
@ -540,10 +540,9 @@ M: integer end-of-year 12 31 <date> ;
|
||||||
: unix-time>timestamp ( seconds -- timestamp )
|
: unix-time>timestamp ( seconds -- timestamp )
|
||||||
seconds unix-1970 time+ ;
|
seconds unix-1970 time+ ;
|
||||||
|
|
||||||
M: duration sleep
|
|
||||||
duration>nanoseconds >integer nano-count + sleep-until ;
|
|
||||||
|
|
||||||
{
|
{
|
||||||
{ [ os unix? ] [ "calendar.unix" ] }
|
{ [ os unix? ] [ "calendar.unix" ] }
|
||||||
{ [ os windows? ] [ "calendar.windows" ] }
|
{ [ os windows? ] [ "calendar.windows" ] }
|
||||||
} cond require
|
} cond require
|
||||||
|
|
||||||
|
{ "threads" "calendar" } "calendar.threads" require-when
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
! Copyright (C) 2011 Slava Pestov.
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
|
USING: calendar math system threads ;
|
||||||
|
IN: calendar.threads
|
||||||
|
|
||||||
|
M: duration sleep
|
||||||
|
duration>nanoseconds >integer nano-count + sleep-until ;
|
|
@ -1,19 +1,20 @@
|
||||||
! Copyright (C) 2009, 2010 Doug Coleman, Slava Pestov.
|
! Copyright (C) 2009, 2011 Doug Coleman, Slava Pestov.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: accessors combinators combinators.short-circuit kernel
|
USING: arrays accessors assocs combinators combinators.short-circuit
|
||||||
locals math math.order sequences assocs namespaces vectors fry
|
dlists deques kernel locals math math.order sequences
|
||||||
arrays splitting compiler.cfg.def-use compiler.cfg
|
sets vectors fry splitting compiler.cfg.def-use compiler.cfg
|
||||||
compiler.cfg.rpo compiler.cfg.predecessors compiler.cfg.renaming
|
compiler.cfg.rpo compiler.cfg.predecessors compiler.cfg.renaming
|
||||||
compiler.cfg.instructions compiler.cfg.utilities ;
|
compiler.cfg.instructions compiler.cfg.utilities ;
|
||||||
|
FROM: namespaces => get set ;
|
||||||
IN: compiler.cfg.branch-splitting
|
IN: compiler.cfg.branch-splitting
|
||||||
|
|
||||||
: clone-instructions ( insns -- insns' )
|
: clone-instructions ( insns -- insns' )
|
||||||
[ clone dup rename-insn-temps ] map ;
|
[ clone dup rename-insn-temps ] map ;
|
||||||
|
|
||||||
: clone-basic-block ( bb -- bb' )
|
: clone-basic-block ( bb -- bb' )
|
||||||
! The new block temporarily gets the same RPO number as the old one,
|
! The new block temporarily gets the same RPO number as the
|
||||||
! until the next time RPO is computed. This is just to make
|
! old one, until the next time RPO is computed. This is just
|
||||||
! 'back-edge?' work.
|
! to make 'back-edge?' work.
|
||||||
<basic-block>
|
<basic-block>
|
||||||
swap
|
swap
|
||||||
{
|
{
|
||||||
|
@ -25,18 +26,21 @@ IN: compiler.cfg.branch-splitting
|
||||||
|
|
||||||
: new-blocks ( bb -- copies )
|
: new-blocks ( bb -- copies )
|
||||||
dup predecessors>> [
|
dup predecessors>> [
|
||||||
[ clone-basic-block ] dip
|
[ clone-basic-block ] [ 1vector ] bi*
|
||||||
1vector >>predecessors
|
>>predecessors
|
||||||
] with map ;
|
] with map ;
|
||||||
|
|
||||||
: update-predecessor-successors ( copies old-bb -- )
|
: update-predecessor-successors ( copies old-bb -- )
|
||||||
[ predecessors>> swap ] keep
|
[ predecessors>> swap ] keep
|
||||||
'[ [ _ ] 2dip update-predecessors ] 2each ;
|
'[ [ _ ] dip update-successors ] 2each ;
|
||||||
|
|
||||||
:: update-successor-predecessor ( copies old-bb succ -- )
|
:: update-successor-predecessor ( copies old-bb succ -- )
|
||||||
succ
|
succ predecessors>> dup >array :> ( preds preds' )
|
||||||
[ { old-bb } split copies join V{ } like ] change-predecessors
|
preds delete-all
|
||||||
drop ;
|
preds' [
|
||||||
|
dup old-bb eq?
|
||||||
|
[ drop copies preds push-all ] [ preds push ] if
|
||||||
|
] each ;
|
||||||
|
|
||||||
: update-successor-predecessors ( copies old-bb -- )
|
: update-successor-predecessors ( copies old-bb -- )
|
||||||
dup successors>>
|
dup successors>>
|
||||||
|
@ -77,11 +81,29 @@ UNION: irrelevant ##peek ##replace ##inc-d ##inc-r ;
|
||||||
] if
|
] if
|
||||||
] if ;
|
] if ;
|
||||||
|
|
||||||
|
SYMBOL: worklist
|
||||||
|
SYMBOL: visited
|
||||||
|
|
||||||
|
: add-to-worklist ( bb -- )
|
||||||
|
dup visited get in? [ drop ] [
|
||||||
|
[ visited get adjoin ]
|
||||||
|
[ worklist get push-front ] bi
|
||||||
|
] if ;
|
||||||
|
|
||||||
|
: init-worklist ( cfg -- )
|
||||||
|
<dlist> worklist set
|
||||||
|
HS{ } clone visited set
|
||||||
|
entry>> add-to-worklist ;
|
||||||
|
|
||||||
: split-branches ( cfg -- cfg' )
|
: split-branches ( cfg -- cfg' )
|
||||||
needs-predecessors
|
needs-predecessors
|
||||||
|
dup init-worklist
|
||||||
|
! For back-edge?
|
||||||
|
dup post-order drop
|
||||||
|
|
||||||
dup [
|
worklist get [
|
||||||
dup split-branch? [ split-branch ] [ drop ] if
|
dup split-branch? [ dup split-branch ] when
|
||||||
] each-basic-block
|
successors>> [ add-to-worklist ] each
|
||||||
|
] slurp-deque
|
||||||
|
|
||||||
cfg-changed ;
|
cfg-changed ;
|
||||||
|
|
|
@ -221,3 +221,6 @@ IN: compiler.cfg.builder.tests
|
||||||
|
|
||||||
! Regression. Make sure everything is inlined correctly
|
! Regression. Make sure everything is inlined correctly
|
||||||
[ f ] [ M\ hashtable set-at [ { [ ##call? ] [ word>> \ set-slot eq? ] } 1&& ] contains-insn? ] unit-test
|
[ f ] [ M\ hashtable set-at [ { [ ##call? ] [ word>> \ set-slot eq? ] } 1&& ] contains-insn? ] unit-test
|
||||||
|
|
||||||
|
! Regression. Make sure branch splitting works.
|
||||||
|
[ 2 ] [ [ 1 2 ? ] [ ##return? ] count-insns ] unit-test
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1 @@
|
||||||
|
Anton Gorenko
|
|
@ -0,0 +1,103 @@
|
||||||
|
! Copyright (C) 2010 Anton Gorenko.
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
|
USING: alien alien.c-types alien.destructors alien.libraries
|
||||||
|
alien.syntax cairo.ffi classes.struct combinators
|
||||||
|
gobject-introspection gobject-introspection.standard-types
|
||||||
|
kernel system vocabs.loader ;
|
||||||
|
IN: gdk.ffi
|
||||||
|
|
||||||
|
<<
|
||||||
|
"pango.ffi" require
|
||||||
|
"gdk.pixbuf.ffi" require
|
||||||
|
>>
|
||||||
|
|
||||||
|
LIBRARY: gdk
|
||||||
|
|
||||||
|
<<
|
||||||
|
"gdk" {
|
||||||
|
{ [ os winnt? ] [ "libgdk-win32-2.0-0.dll" cdecl add-library ] }
|
||||||
|
{ [ os unix? ] [ drop ] }
|
||||||
|
} cond
|
||||||
|
>>
|
||||||
|
|
||||||
|
! <workaround these types are from cairo 1.10
|
||||||
|
STRUCT: cairo_rectangle_int_t
|
||||||
|
{ x int } { y int } { width int } { height int } ;
|
||||||
|
|
||||||
|
C-TYPE: cairo_region_t
|
||||||
|
! workaround>
|
||||||
|
|
||||||
|
FOREIGN-RECORD-TYPE: cairo.RectangleInt cairo_rectangle_int_t
|
||||||
|
FOREIGN-RECORD-TYPE: cairo.Region cairo_region_t
|
||||||
|
FOREIGN-RECORD-TYPE: cairo.FontOptions cairo_font_options_t
|
||||||
|
FOREIGN-RECORD-TYPE: cairo.Surface cairo_surface_t
|
||||||
|
FOREIGN-RECORD-TYPE: cairo.Pattern cairo_pattern_t
|
||||||
|
FOREIGN-RECORD-TYPE: cairo.Context cairo_t
|
||||||
|
FOREIGN-ENUM-TYPE: cairo.Content cairo_content_t
|
||||||
|
|
||||||
|
GIR: vocab:gdk/Gdk-3.0.gir
|
||||||
|
|
||||||
|
DESTRUCTOR: gdk_cursor_unref
|
||||||
|
|
||||||
|
STRUCT: GdkEventButton
|
||||||
|
{ type GdkEventType }
|
||||||
|
{ window GdkWindow* }
|
||||||
|
{ send_event gint8 }
|
||||||
|
{ time guint32 }
|
||||||
|
{ x gdouble }
|
||||||
|
{ y gdouble }
|
||||||
|
{ axes gdouble* }
|
||||||
|
{ state guint }
|
||||||
|
{ button guint }
|
||||||
|
{ device GdkDevice* }
|
||||||
|
{ x_root gdouble }
|
||||||
|
{ y_root gdouble } ;
|
||||||
|
|
||||||
|
STRUCT: GdkEventConfigure
|
||||||
|
{ type GdkEventType }
|
||||||
|
{ window GdkWindow* }
|
||||||
|
{ send_event gint8 }
|
||||||
|
{ x gint }
|
||||||
|
{ y gint }
|
||||||
|
{ width gint }
|
||||||
|
{ height gint } ;
|
||||||
|
|
||||||
|
STRUCT: GdkEventKey
|
||||||
|
{ type GdkEventType }
|
||||||
|
{ window GdkWindow* }
|
||||||
|
{ send_event gint8 }
|
||||||
|
{ time guint32 }
|
||||||
|
{ state guint }
|
||||||
|
{ keyval guint }
|
||||||
|
{ length gint }
|
||||||
|
{ string gchar* }
|
||||||
|
{ hardware_keycode guint16 }
|
||||||
|
{ group guint8 }
|
||||||
|
{ is_modifier uint bits: 1 } ;
|
||||||
|
|
||||||
|
STRUCT: GdkEventMotion
|
||||||
|
{ type GdkEventType }
|
||||||
|
{ window GdkWindow* }
|
||||||
|
{ send_event gint8 }
|
||||||
|
{ time guint32 }
|
||||||
|
{ x gdouble }
|
||||||
|
{ y gdouble }
|
||||||
|
{ axes gdouble* }
|
||||||
|
{ state guint }
|
||||||
|
{ is_hint gint16 }
|
||||||
|
{ device GdkDevice* }
|
||||||
|
{ x_root gdouble }
|
||||||
|
{ y_root gdouble } ;
|
||||||
|
|
||||||
|
STRUCT: GdkEventScroll
|
||||||
|
{ type GdkEventType }
|
||||||
|
{ window GdkWindow* }
|
||||||
|
{ send_event gint8 }
|
||||||
|
{ time guint32 }
|
||||||
|
{ x gdouble }
|
||||||
|
{ y gdouble }
|
||||||
|
{ state guint }
|
||||||
|
{ direction GdkScrollDirection }
|
||||||
|
{ device GdkDevice* }
|
||||||
|
{ x_root gdouble }
|
||||||
|
{ y_root gdouble } ;
|
|
@ -0,0 +1,5 @@
|
||||||
|
! Copyright (C) 2009 Anton Gorenko.
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
|
USING: gdk.ffi ;
|
||||||
|
IN: gdk
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1 @@
|
||||||
|
Anton Gorenko
|
|
@ -0,0 +1,13 @@
|
||||||
|
! Copyright (C) 2010 Anton Gorenko.
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
|
USING: alien alien.libraries alien.syntax combinators
|
||||||
|
gobject-introspection kernel system vocabs.loader ;
|
||||||
|
IN: gdk.gl.ffi
|
||||||
|
|
||||||
|
<<
|
||||||
|
"gdk.ffi" require
|
||||||
|
>>
|
||||||
|
|
||||||
|
LIBRARY: gdk.gl
|
||||||
|
|
||||||
|
GIR: vocab:gdk/gl/GdkGLExt-1.0.gir
|
|
@ -0,0 +1,5 @@
|
||||||
|
! Copyright (C) 2010 Anton Gorenko.
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
|
USING: gdk.gl.ffi ;
|
||||||
|
IN: gdk.gl
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
GdkGLExt binding
|
|
@ -0,0 +1 @@
|
||||||
|
bindings
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1 @@
|
||||||
|
Anton Gorenko
|
|
@ -0,0 +1,20 @@
|
||||||
|
! Copyright (C) 2010 Anton Gorenko.
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
|
USING: alien alien.libraries alien.syntax combinators
|
||||||
|
gobject-introspection kernel system vocabs.loader ;
|
||||||
|
IN: gdk.pixbuf.ffi
|
||||||
|
|
||||||
|
<<
|
||||||
|
"gio.ffi" require
|
||||||
|
>>
|
||||||
|
|
||||||
|
LIBRARY: gdk.pixbuf
|
||||||
|
|
||||||
|
<<
|
||||||
|
"gdk.pixbuf" {
|
||||||
|
{ [ os winnt? ] [ "libgdk_pixbuf-2.0-0.dll" cdecl add-library ] }
|
||||||
|
{ [ os unix? ] [ drop ] }
|
||||||
|
} cond
|
||||||
|
>>
|
||||||
|
|
||||||
|
GIR: vocab:gdk/pixbuf/GdkPixbuf-2.0.gir
|
|
@ -0,0 +1,5 @@
|
||||||
|
! Copyright (C) 2009 Anton Gorenko.
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
|
USING: gdk.pixbuf.ffi ;
|
||||||
|
IN: gdk.pixbuf
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
GdkPixbuf binding
|
|
@ -0,0 +1 @@
|
||||||
|
bindings
|
|
@ -0,0 +1 @@
|
||||||
|
Gdk binding
|
|
@ -0,0 +1 @@
|
||||||
|
bindings
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1 @@
|
||||||
|
Anton Gorenko
|
|
@ -0,0 +1,20 @@
|
||||||
|
! Copyright (C) 2010 Anton Gorenko.
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
|
USING: alien alien.libraries alien.syntax combinators
|
||||||
|
gobject-introspection kernel system vocabs.loader ;
|
||||||
|
IN: gio.ffi
|
||||||
|
|
||||||
|
<<
|
||||||
|
"gobject.ffi" require
|
||||||
|
>>
|
||||||
|
|
||||||
|
LIBRARY: gio
|
||||||
|
|
||||||
|
<<
|
||||||
|
"gio" {
|
||||||
|
{ [ os winnt? ] [ "libgio-2.0-0.dll" cdecl add-library ] }
|
||||||
|
{ [ os unix? ] [ drop ] }
|
||||||
|
} cond
|
||||||
|
>>
|
||||||
|
|
||||||
|
GIR: vocab:gio/Gio-2.0.gir
|
|
@ -0,0 +1,5 @@
|
||||||
|
! Copyright (C) 2009 Anton Gorenko.
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
|
USING: gio.ffi ;
|
||||||
|
IN: gio
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
GIO binding
|
|
@ -0,0 +1 @@
|
||||||
|
bindings
|
File diff suppressed because it is too large
Load Diff
|
@ -1,2 +1 @@
|
||||||
Matthew Willis
|
Anton Gorenko
|
||||||
Slava Pestov
|
|
|
@ -0,0 +1,40 @@
|
||||||
|
! Copyright (C) 2010 Anton Gorenko.
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
|
USING: alien alien.destructors alien.libraries alien.syntax
|
||||||
|
combinators kernel gobject-introspection
|
||||||
|
gobject-introspection.standard-types system ;
|
||||||
|
IN: glib.ffi
|
||||||
|
|
||||||
|
LIBRARY: glib
|
||||||
|
|
||||||
|
<<
|
||||||
|
"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
|
||||||
|
>>
|
||||||
|
|
||||||
|
IMPLEMENT-STRUCTS: GPollFD GSource GSourceFuncs ;
|
||||||
|
|
||||||
|
CONSTANT: G_MININT8 HEX: -80
|
||||||
|
CONSTANT: G_MAXINT8 HEX: 7f
|
||||||
|
CONSTANT: G_MAXUINT8 HEX: ff
|
||||||
|
CONSTANT: G_MININT16 HEX: -8000
|
||||||
|
CONSTANT: G_MAXINT16 HEX: 7fff
|
||||||
|
CONSTANT: G_MAXUINT16 HEX: ffff
|
||||||
|
CONSTANT: G_MININT32 HEX: -80000000
|
||||||
|
CONSTANT: G_MAXINT32 HEX: 7fffffff
|
||||||
|
CONSTANT: G_MAXUINT32 HEX: ffffffff
|
||||||
|
CONSTANT: G_MININT64 HEX: -8000000000000000
|
||||||
|
CONSTANT: G_MAXINT64 HEX: 7fffffffffffffff
|
||||||
|
CONSTANT: G_MAXUINT64 HEX: ffffffffffffffff
|
||||||
|
|
||||||
|
GIR: vocab:glib/GLib-2.0.gir
|
||||||
|
|
||||||
|
DESTRUCTOR: g_source_unref
|
||||||
|
DESTRUCTOR: g_free
|
||||||
|
|
||||||
|
CALLBACK: gboolean GSourceFuncsPrepareFunc ( GSource* source, gint* timeout_ ) ;
|
||||||
|
CALLBACK: gboolean GSourceFuncsCheckFunc ( GSource* source ) ;
|
||||||
|
CALLBACK: gboolean GSourceFuncsDispatchFunc ( GSource* source, GSourceFunc callback, gpointer user_data ) ;
|
|
@ -1,36 +1,5 @@
|
||||||
! Copyright (C) 2008 Matthew Willis.
|
! Copyright (C) 2009 Anton Gorenko.
|
||||||
! Copyright (C) 2009 Slava Pestov.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
! See http://factorcode.org/license.txt for BSD license
|
USING: glib.ffi ;
|
||||||
USING: alien alien.c-types alien.syntax alien.destructors
|
|
||||||
combinators system alien.libraries ;
|
|
||||||
IN: glib
|
IN: glib
|
||||||
|
|
||||||
<<
|
|
||||||
|
|
||||||
{
|
|
||||||
{ [ 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? ] [ ] }
|
|
||||||
} 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
|
|
||||||
|
|
||||||
>>
|
|
||||||
|
|
||||||
LIBRARY: glib
|
|
||||||
|
|
||||||
TYPEDEF: void* gpointer
|
|
||||||
TYPEDEF: int gint
|
|
||||||
TYPEDEF: bool gboolean
|
|
||||||
|
|
||||||
FUNCTION: void g_free ( gpointer mem ) ;
|
|
||||||
|
|
||||||
LIBRARY: gobject
|
|
||||||
|
|
||||||
FUNCTION: void g_object_unref ( gpointer object ) ;
|
|
||||||
|
|
||||||
DESTRUCTOR: g_object_unref
|
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Binding for GLib
|
GLib binding
|
||||||
|
|
|
@ -0,0 +1,111 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<!-- This file was automatically generated from C sources - DO NOT EDIT!
|
||||||
|
To affect the contents of this file, edit the original C definitions,
|
||||||
|
and/or use gtk-doc annotations. -->
|
||||||
|
<repository version="1.2"
|
||||||
|
xmlns="http://www.gtk.org/introspection/core/1.0"
|
||||||
|
xmlns:c="http://www.gtk.org/introspection/c/1.0"
|
||||||
|
xmlns:glib="http://www.gtk.org/introspection/glib/1.0">
|
||||||
|
<include name="GLib" version="2.0"/>
|
||||||
|
<package name="gmodule-2.0"/>
|
||||||
|
<c:include name="gmodule.h"/>
|
||||||
|
<namespace name="GModule"
|
||||||
|
version="2.0"
|
||||||
|
shared-library="libgmodule-2.0.so.0"
|
||||||
|
c:identifier-prefixes="G"
|
||||||
|
c:symbol-prefixes="g">
|
||||||
|
<record name="Module" c:type="GModule" disguised="1">
|
||||||
|
<method name="close" c:identifier="g_module_close">
|
||||||
|
<return-value transfer-ownership="none">
|
||||||
|
<type name="gboolean" c:type="gboolean"/>
|
||||||
|
</return-value>
|
||||||
|
</method>
|
||||||
|
<method name="make_resident" c:identifier="g_module_make_resident">
|
||||||
|
<return-value transfer-ownership="none">
|
||||||
|
<type name="none" c:type="void"/>
|
||||||
|
</return-value>
|
||||||
|
</method>
|
||||||
|
<method name="name" c:identifier="g_module_name">
|
||||||
|
<return-value transfer-ownership="none">
|
||||||
|
<type name="utf8" c:type="gchar*"/>
|
||||||
|
</return-value>
|
||||||
|
</method>
|
||||||
|
<method name="symbol" c:identifier="g_module_symbol">
|
||||||
|
<return-value transfer-ownership="none">
|
||||||
|
<type name="gboolean" c:type="gboolean"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<parameter name="symbol_name" transfer-ownership="none">
|
||||||
|
<type name="utf8" c:type="gchar*"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="symbol" transfer-ownership="none">
|
||||||
|
<type name="gpointer" c:type="gpointer*"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</method>
|
||||||
|
</record>
|
||||||
|
<callback name="ModuleCheckInit" c:type="GModuleCheckInit">
|
||||||
|
<return-value transfer-ownership="none">
|
||||||
|
<type name="utf8" c:type="gchar*"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<parameter name="module" transfer-ownership="none">
|
||||||
|
<type name="Module" c:type="GModule*"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</callback>
|
||||||
|
<bitfield name="ModuleFlags" c:type="GModuleFlags">
|
||||||
|
<member name="lazy" value="1" c:identifier="G_MODULE_BIND_LAZY"/>
|
||||||
|
<member name="local" value="2" c:identifier="G_MODULE_BIND_LOCAL"/>
|
||||||
|
<member name="mask" value="3" c:identifier="G_MODULE_BIND_MASK"/>
|
||||||
|
</bitfield>
|
||||||
|
<callback name="ModuleUnload" c:type="GModuleUnload">
|
||||||
|
<return-value transfer-ownership="none">
|
||||||
|
<type name="none" c:type="void"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<parameter name="module" transfer-ownership="none">
|
||||||
|
<type name="Module" c:type="GModule*"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</callback>
|
||||||
|
<function name="module_build_path" c:identifier="g_module_build_path">
|
||||||
|
<return-value transfer-ownership="full">
|
||||||
|
<type name="utf8" c:type="gchar*"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<parameter name="directory" transfer-ownership="none">
|
||||||
|
<type name="utf8" c:type="gchar*"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="module_name" transfer-ownership="none">
|
||||||
|
<type name="utf8" c:type="gchar*"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function>
|
||||||
|
<function name="module_error" c:identifier="g_module_error">
|
||||||
|
<return-value transfer-ownership="none">
|
||||||
|
<type name="utf8" c:type="gchar*"/>
|
||||||
|
</return-value>
|
||||||
|
</function>
|
||||||
|
<function name="module_open"
|
||||||
|
c:identifier="g_module_open"
|
||||||
|
introspectable="0">
|
||||||
|
<return-value>
|
||||||
|
<type name="Module" c:type="GModule*"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<parameter name="file_name" transfer-ownership="none">
|
||||||
|
<type name="utf8" c:type="gchar*"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="flags" transfer-ownership="none">
|
||||||
|
<type name="ModuleFlags" c:type="GModuleFlags"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function>
|
||||||
|
<function name="module_supported" c:identifier="g_module_supported">
|
||||||
|
<return-value transfer-ownership="none">
|
||||||
|
<type name="gboolean" c:type="gboolean"/>
|
||||||
|
</return-value>
|
||||||
|
</function>
|
||||||
|
</namespace>
|
||||||
|
</repository>
|
|
@ -0,0 +1 @@
|
||||||
|
Anton Gorenko
|
|
@ -0,0 +1,21 @@
|
||||||
|
! Copyright (C) 2010 Anton Gorenko.
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
|
USING: alien alien.libraries alien.syntax combinators
|
||||||
|
gobject-introspection kernel system vocabs.loader ;
|
||||||
|
IN: gmodule.ffi
|
||||||
|
|
||||||
|
<<
|
||||||
|
"glib.ffi" require
|
||||||
|
>>
|
||||||
|
|
||||||
|
LIBRARY: gmodule
|
||||||
|
|
||||||
|
<<
|
||||||
|
"gmodule" {
|
||||||
|
{ [ os winnt? ] [ "libgmodule-2.0-0.dll" cdecl add-library ] }
|
||||||
|
{ [ os macosx? ] [ drop ] }
|
||||||
|
{ [ os unix? ] [ "libgmodule-2.0.so" cdecl add-library ] }
|
||||||
|
} cond
|
||||||
|
>>
|
||||||
|
|
||||||
|
GIR: vocab:gmodule/GModule-2.0.gir
|
|
@ -0,0 +1,5 @@
|
||||||
|
! Copyright (C) 2009 Anton Gorenko.
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
|
USING: gmodule.ffi ;
|
||||||
|
IN: gmodule
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
GModule binding
|
|
@ -0,0 +1 @@
|
||||||
|
bindings
|
|
@ -0,0 +1 @@
|
||||||
|
Anton Gorenko
|
|
@ -0,0 +1,9 @@
|
||||||
|
! Copyright (C) 2010 Anton Gorenko.
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
|
USING: namespaces ;
|
||||||
|
IN: gobject-introspection.common
|
||||||
|
|
||||||
|
SYMBOL: current-namespace-name
|
||||||
|
|
||||||
|
SYMBOL: implement-structs
|
||||||
|
implement-structs [ V{ } ] initialize
|
|
@ -0,0 +1,352 @@
|
||||||
|
! Copyright (C) 2010 Anton Gorenko.
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
|
USING: accessors alien.c-types alien.parser arrays ascii
|
||||||
|
classes.parser classes.struct combinators combinators.short-circuit
|
||||||
|
gobject-introspection.common gobject-introspection.repository
|
||||||
|
gobject-introspection.types kernel locals make math.parser namespaces
|
||||||
|
parser sequences splitting.monotonic vocabs.parser words
|
||||||
|
words.constant ;
|
||||||
|
IN: gobject-introspection.ffi
|
||||||
|
|
||||||
|
SYMBOL: constant-prefix
|
||||||
|
|
||||||
|
: def-c-type ( c-type-name base-c-type -- )
|
||||||
|
swap (CREATE-C-TYPE) typedef ;
|
||||||
|
|
||||||
|
: defer-c-type ( c-type-name -- c-type )
|
||||||
|
deferred-type swap (CREATE-C-TYPE) [ typedef ] keep ;
|
||||||
|
! create-in dup
|
||||||
|
! [ fake-definition ] [ undefined-def define ] bi ;
|
||||||
|
|
||||||
|
:: defer-types ( types type-info-class -- )
|
||||||
|
types [
|
||||||
|
[ c-type>> defer-c-type ]
|
||||||
|
[ name>> qualified-name ] bi
|
||||||
|
type-info-class new swap register-type
|
||||||
|
] each ;
|
||||||
|
|
||||||
|
: def-alias-c-type ( base-c-type c-type-name -- c-type )
|
||||||
|
(CREATE-C-TYPE) [ typedef ] keep ;
|
||||||
|
|
||||||
|
: alias-c-type-name ( alias -- c-type-name )
|
||||||
|
! <workaround for alises w/o c:type (Atk)
|
||||||
|
[ c-type>> ] [ name>> ] bi or ;
|
||||||
|
! workaround>
|
||||||
|
! c-type>> ;
|
||||||
|
|
||||||
|
:: def-alias ( alias -- )
|
||||||
|
alias type>> get-type-info
|
||||||
|
[ c-type>> alias alias-c-type-name def-alias-c-type ]
|
||||||
|
[ clone ] bi alias name>> qualified-name register-type ;
|
||||||
|
|
||||||
|
: def-aliases ( aliases -- )
|
||||||
|
[ def-alias ] each ;
|
||||||
|
|
||||||
|
GENERIC: type>c-type ( type -- c-type )
|
||||||
|
|
||||||
|
M: atomic-type type>c-type get-type-info c-type>> ;
|
||||||
|
M: enum-type type>c-type get-type-info c-type>> ;
|
||||||
|
M: bitfield-type type>c-type get-type-info c-type>> ;
|
||||||
|
M: record-type type>c-type get-type-info c-type>> <pointer> ;
|
||||||
|
M: union-type type>c-type get-type-info c-type>> <pointer> ;
|
||||||
|
M: boxed-type type>c-type get-type-info c-type>> <pointer> ;
|
||||||
|
M: callback-type type>c-type get-type-info c-type>> ;
|
||||||
|
M: class-type type>c-type get-type-info c-type>> <pointer> ;
|
||||||
|
M: interface-type type>c-type get-type-info c-type>> <pointer> ;
|
||||||
|
|
||||||
|
M: boxed-array-type type>c-type
|
||||||
|
name>> simple-type new swap >>name type>c-type ;
|
||||||
|
|
||||||
|
M: c-array-type type>c-type
|
||||||
|
element-type>> type>c-type <pointer> ;
|
||||||
|
|
||||||
|
M: fixed-size-array-type type>c-type
|
||||||
|
[ element-type>> type>c-type ] [ fixed-size>> ] bi 2array ;
|
||||||
|
|
||||||
|
! <workaround for <type/> (in some signals and properties)
|
||||||
|
PREDICATE: incorrect-type < simple-type name>> not ;
|
||||||
|
M: incorrect-type type>c-type drop void* ;
|
||||||
|
! workaround>
|
||||||
|
|
||||||
|
GENERIC: parse-const-value ( str data-type -- value )
|
||||||
|
|
||||||
|
M: atomic-type parse-const-value
|
||||||
|
name>> {
|
||||||
|
{ "gint" [ string>number ] }
|
||||||
|
{ "gdouble" [ string>number ] }
|
||||||
|
} case ;
|
||||||
|
|
||||||
|
M: utf8-type parse-const-value drop ;
|
||||||
|
|
||||||
|
: const-value ( const -- value )
|
||||||
|
[ value>> ] [ type>> ] bi parse-const-value ;
|
||||||
|
|
||||||
|
: const-name ( const -- name )
|
||||||
|
name>> constant-prefix get swap "_" glue ;
|
||||||
|
|
||||||
|
: def-const ( const -- )
|
||||||
|
[ const-name create-in dup reset-generic ]
|
||||||
|
[ const-value ] bi define-constant ;
|
||||||
|
|
||||||
|
: def-consts ( consts -- )
|
||||||
|
[ def-const ] each ;
|
||||||
|
|
||||||
|
: define-enum-member ( member -- )
|
||||||
|
[ c-identifier>> create-in dup reset-generic ]
|
||||||
|
[ value>> ] bi define-constant ;
|
||||||
|
|
||||||
|
: def-enum-type ( enum -- )
|
||||||
|
[ members>> [ define-enum-member ] each ]
|
||||||
|
[ c-type>> int def-c-type ] bi ;
|
||||||
|
|
||||||
|
: def-bitfield-type ( bitfield -- )
|
||||||
|
def-enum-type ;
|
||||||
|
|
||||||
|
GENERIC: parameter-type>c-type ( data-type -- c-type )
|
||||||
|
|
||||||
|
M: data-type parameter-type>c-type type>c-type ;
|
||||||
|
M: varargs-type parameter-type>c-type drop void* ;
|
||||||
|
|
||||||
|
: parameter-c-type ( parameter -- c-type )
|
||||||
|
[ type>> parameter-type>c-type ] keep
|
||||||
|
direction>> "in" = [ <pointer> ] unless ;
|
||||||
|
|
||||||
|
GENERIC: return-type>c-type ( data-type -- c-type )
|
||||||
|
|
||||||
|
M: data-type return-type>c-type type>c-type ;
|
||||||
|
M: none-type return-type>c-type drop void ;
|
||||||
|
|
||||||
|
: return-c-type ( return -- c-type )
|
||||||
|
type>> return-type>c-type ;
|
||||||
|
|
||||||
|
: parameter-name ( parameter -- name )
|
||||||
|
dup type>> varargs-type?
|
||||||
|
[ drop "varargs" ] [ name>> "!incorrect-name!" or ] if ;
|
||||||
|
|
||||||
|
: error-parameter ( -- parameter )
|
||||||
|
parameter new
|
||||||
|
"error" >>name
|
||||||
|
"in" >>direction
|
||||||
|
"none" >>transfer-ownership
|
||||||
|
simple-type new "GLib.Error" >>name >>type ;
|
||||||
|
|
||||||
|
: ?suffix-parameters-with-error ( callable -- parameters )
|
||||||
|
[ parameters>> ] [ throws?>> ] bi
|
||||||
|
[ error-parameter suffix ] when ;
|
||||||
|
|
||||||
|
: parameter-names&types ( callable -- names types )
|
||||||
|
[ [ parameter-c-type ] map ] [ [ parameter-name ] map ] bi ;
|
||||||
|
|
||||||
|
: def-function ( function -- )
|
||||||
|
{
|
||||||
|
[ return>> return-c-type ]
|
||||||
|
[ identifier>> ]
|
||||||
|
[ drop current-library get ]
|
||||||
|
[ ?suffix-parameters-with-error parameter-names&types ]
|
||||||
|
} cleave make-function define-inline ;
|
||||||
|
|
||||||
|
: def-functions ( functions -- )
|
||||||
|
[ def-function ] each ;
|
||||||
|
|
||||||
|
GENERIC: type>data-type ( type -- data-type )
|
||||||
|
|
||||||
|
M: type type>data-type
|
||||||
|
[ simple-type new ] dip name>> >>name ;
|
||||||
|
|
||||||
|
: word-started? ( word letter -- ? )
|
||||||
|
[ letter? ] [ LETTER? ] bi* and ; inline
|
||||||
|
|
||||||
|
: camel-case>underscore-separated ( str -- str' )
|
||||||
|
[ word-started? not ] monotonic-split "_" join >lower ;
|
||||||
|
|
||||||
|
: type>parameter-name ( type -- name )
|
||||||
|
name>> camel-case>underscore-separated ;
|
||||||
|
|
||||||
|
: type>parameter ( type -- parameter )
|
||||||
|
[ parameter new ] dip {
|
||||||
|
[ type>parameter-name >>name ]
|
||||||
|
[ type>data-type >>type ]
|
||||||
|
[ drop "in" >>direction "none" >>transfer-ownership ]
|
||||||
|
} cleave ;
|
||||||
|
|
||||||
|
:: def-method ( method type -- )
|
||||||
|
method {
|
||||||
|
[ return>> return-c-type ]
|
||||||
|
[ identifier>> ]
|
||||||
|
[ drop current-library get ]
|
||||||
|
[
|
||||||
|
?suffix-parameters-with-error
|
||||||
|
type type>parameter prefix
|
||||||
|
parameter-names&types
|
||||||
|
]
|
||||||
|
} cleave make-function define-inline ;
|
||||||
|
|
||||||
|
: def-methods ( methods type -- )
|
||||||
|
[ def-method ] curry each ;
|
||||||
|
|
||||||
|
: def-callback-type ( callback -- )
|
||||||
|
{
|
||||||
|
[ drop current-library get ]
|
||||||
|
[ return>> return-c-type ]
|
||||||
|
[ c-type>> ]
|
||||||
|
[ ?suffix-parameters-with-error parameter-names&types ]
|
||||||
|
} cleave make-callback-type define-inline ;
|
||||||
|
|
||||||
|
GENERIC: field-type>c-type ( data-type -- c-type )
|
||||||
|
|
||||||
|
M: simple-type field-type>c-type type>c-type ;
|
||||||
|
M: inner-callback-type field-type>c-type drop void* ;
|
||||||
|
M: array-type field-type>c-type type>c-type ;
|
||||||
|
|
||||||
|
: field>struct-slot ( field -- slot )
|
||||||
|
[ name>> ]
|
||||||
|
[ dup bits>> [ drop uint ] [ type>> field-type>c-type ] if ]
|
||||||
|
[
|
||||||
|
[
|
||||||
|
[ drop ] ! [ writable?>> [ read-only , ] unless ]
|
||||||
|
[ bits>> [ bits: , , ] when* ] bi
|
||||||
|
] V{ } make
|
||||||
|
] tri <struct-slot-spec> ;
|
||||||
|
|
||||||
|
: def-record-type ( record -- )
|
||||||
|
dup c-type>> implement-structs get-global member?
|
||||||
|
[
|
||||||
|
[ c-type>> create-class-in ]
|
||||||
|
[ fields>> [ field>struct-slot ] map ] bi
|
||||||
|
define-struct-class
|
||||||
|
] [ c-type>> void def-c-type ] if ;
|
||||||
|
|
||||||
|
: def-record ( record -- )
|
||||||
|
{
|
||||||
|
[ def-record-type ]
|
||||||
|
[ constructors>> def-functions ]
|
||||||
|
[ functions>> def-functions ]
|
||||||
|
[ [ methods>> ] keep def-methods ]
|
||||||
|
} cleave ;
|
||||||
|
|
||||||
|
: def-union-type ( union -- )
|
||||||
|
c-type>> void def-c-type ;
|
||||||
|
|
||||||
|
: private-record? ( record -- ? )
|
||||||
|
{
|
||||||
|
[ struct-for>> ]
|
||||||
|
[ name>> "Class" tail? ]
|
||||||
|
[ name>> "Private" tail? ]
|
||||||
|
[ name>> "Iface" tail? ]
|
||||||
|
} 1|| ;
|
||||||
|
|
||||||
|
: def-union ( union -- )
|
||||||
|
{
|
||||||
|
[ def-union-type ]
|
||||||
|
[ constructors>> def-functions ]
|
||||||
|
[ functions>> def-functions ]
|
||||||
|
[ [ methods>> ] keep def-methods ]
|
||||||
|
} cleave ;
|
||||||
|
|
||||||
|
: def-boxed-type ( boxed -- )
|
||||||
|
c-type>> void def-c-type ;
|
||||||
|
|
||||||
|
: signal-name ( signal type -- name )
|
||||||
|
swap [ c-type>> ] [ name>> ] bi* ":" glue ;
|
||||||
|
|
||||||
|
: user-data-parameter ( -- parameter )
|
||||||
|
parameter new
|
||||||
|
"user_data" >>name
|
||||||
|
"in" >>direction
|
||||||
|
"none" >>transfer-ownership
|
||||||
|
simple-type new "gpointer" >>name >>type ;
|
||||||
|
|
||||||
|
:: def-signal ( signal type -- )
|
||||||
|
signal {
|
||||||
|
[ drop current-library get ]
|
||||||
|
[ return>> return-c-type ]
|
||||||
|
[ type signal-name ]
|
||||||
|
[
|
||||||
|
parameters>> type type>parameter prefix
|
||||||
|
user-data-parameter suffix parameter-names&types
|
||||||
|
]
|
||||||
|
} cleave make-callback-type define-inline ;
|
||||||
|
|
||||||
|
: def-signals ( signals type -- )
|
||||||
|
[ def-signal ] curry each ;
|
||||||
|
|
||||||
|
: def-class-type ( class -- )
|
||||||
|
c-type>> void def-c-type ;
|
||||||
|
|
||||||
|
: def-class ( class -- )
|
||||||
|
{
|
||||||
|
[ def-class-type ]
|
||||||
|
[ constructors>> def-functions ]
|
||||||
|
[ functions>> def-functions ]
|
||||||
|
[ [ methods>> ] keep def-methods ]
|
||||||
|
[ [ signals>> ] keep def-signals ]
|
||||||
|
} cleave ;
|
||||||
|
|
||||||
|
: def-interface-type ( interface -- )
|
||||||
|
c-type>> void def-c-type ;
|
||||||
|
|
||||||
|
: def-interface ( class -- )
|
||||||
|
{
|
||||||
|
[ def-interface-type ]
|
||||||
|
[ functions>> def-functions ]
|
||||||
|
[ [ methods>> ] keep def-methods ]
|
||||||
|
[ [ signals>> ] keep def-signals ]
|
||||||
|
} cleave ;
|
||||||
|
|
||||||
|
: defer-enums ( enums -- ) enum-info defer-types ;
|
||||||
|
: defer-bitfields ( bitfields -- ) bitfield-info defer-types ;
|
||||||
|
: defer-unions ( unions -- ) union-info defer-types ;
|
||||||
|
: defer-boxeds ( boxeds -- ) boxed-info defer-types ;
|
||||||
|
: defer-callbacks ( callbacks -- ) callback-info defer-types ;
|
||||||
|
: defer-interfaces ( interfaces -- ) interface-info defer-types ;
|
||||||
|
: defer-classes ( class -- ) class-info defer-types ;
|
||||||
|
|
||||||
|
: defer-records ( records -- )
|
||||||
|
[ private-record? ] partition
|
||||||
|
[ begin-private record-info defer-types end-private ]
|
||||||
|
[ record-info defer-types ] bi* ;
|
||||||
|
|
||||||
|
: def-enums ( enums -- ) [ def-enum-type ] each ;
|
||||||
|
: def-bitfields ( bitfields -- ) [ def-bitfield-type ] each ;
|
||||||
|
: def-unions ( unions -- ) [ def-union ] each ;
|
||||||
|
: def-boxeds ( boxeds -- ) [ def-boxed-type ] each ;
|
||||||
|
: def-callbacks ( callbacks -- ) [ def-callback-type ] each ;
|
||||||
|
: def-interfaces ( interfaces -- ) [ def-interface ] each ;
|
||||||
|
: def-classes ( classes -- ) [ def-class ] each ;
|
||||||
|
|
||||||
|
: def-records ( records -- )
|
||||||
|
[ private-record? ] partition
|
||||||
|
[ begin-private [ def-record ] each end-private ]
|
||||||
|
[ [ def-record ] each ] bi* ;
|
||||||
|
|
||||||
|
: def-namespace ( namespace -- )
|
||||||
|
{
|
||||||
|
[ symbol-prefixes>> first >upper constant-prefix set ]
|
||||||
|
[ consts>> def-consts ]
|
||||||
|
|
||||||
|
[ enums>> defer-enums ]
|
||||||
|
[ bitfields>> defer-bitfields ]
|
||||||
|
[ records>> defer-records ]
|
||||||
|
[ unions>> defer-unions ]
|
||||||
|
[ boxeds>> defer-boxeds ]
|
||||||
|
[ callbacks>> defer-callbacks ]
|
||||||
|
[ interfaces>> defer-interfaces ]
|
||||||
|
[ classes>> defer-classes ]
|
||||||
|
|
||||||
|
[ aliases>> def-aliases ]
|
||||||
|
|
||||||
|
[ enums>> def-enums ]
|
||||||
|
[ bitfields>> def-bitfields ]
|
||||||
|
[ records>> def-records ]
|
||||||
|
[ unions>> def-unions ]
|
||||||
|
[ boxeds>> def-boxeds ]
|
||||||
|
[ callbacks>> def-callbacks ]
|
||||||
|
[ interfaces>> def-interfaces ]
|
||||||
|
[ classes>> def-classes ]
|
||||||
|
|
||||||
|
[ functions>> def-functions ]
|
||||||
|
} cleave ;
|
||||||
|
|
||||||
|
: def-ffi-repository ( repository -- )
|
||||||
|
namespace>> def-namespace ;
|
||||||
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
! Copyright (C) 2010 Anton Gorenko.
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
|
USING: accessors combinators gobject-introspection.common
|
||||||
|
gobject-introspection.ffi gobject-introspection.loader
|
||||||
|
gobject-introspection.types kernel lexer locals namespaces parser
|
||||||
|
sequences xml ;
|
||||||
|
IN: gobject-introspection
|
||||||
|
|
||||||
|
<PRIVATE
|
||||||
|
|
||||||
|
:: define-gir-vocab ( file-name -- )
|
||||||
|
file-name file>xml xml>repository
|
||||||
|
{
|
||||||
|
[ namespace>> name>> current-namespace-name set-global ]
|
||||||
|
[ def-ffi-repository ]
|
||||||
|
} cleave
|
||||||
|
V{ } clone implement-structs set-global ;
|
||||||
|
|
||||||
|
PRIVATE>
|
||||||
|
|
||||||
|
SYNTAX: GIR: scan define-gir-vocab ;
|
||||||
|
|
||||||
|
SYNTAX: IMPLEMENT-STRUCTS:
|
||||||
|
";" parse-tokens
|
||||||
|
implement-structs [ swap append! ] change-global ;
|
||||||
|
|
||||||
|
SYNTAX: FOREIGN-ATOMIC-TYPE:
|
||||||
|
scan-token scan-object swap register-atomic-type ;
|
||||||
|
|
||||||
|
SYNTAX: FOREIGN-ENUM-TYPE:
|
||||||
|
scan-token scan-object swap register-enum-type ;
|
||||||
|
|
||||||
|
SYNTAX: FOREIGN-RECORD-TYPE:
|
||||||
|
scan-token scan-object swap register-record-type ;
|
|
@ -0,0 +1,215 @@
|
||||||
|
! Copyright (C) 2010 Anton Gorenko.
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
|
USING: accessors combinators gobject-introspection.repository kernel
|
||||||
|
literals math.parser sequences splitting xml.data xml.traversal ;
|
||||||
|
IN: gobject-introspection.loader
|
||||||
|
|
||||||
|
: xml>simple-type ( xml -- type )
|
||||||
|
[ simple-type new ] dip {
|
||||||
|
[ "name" attr >>name ]
|
||||||
|
[
|
||||||
|
"type" tags-named
|
||||||
|
[ xml>simple-type ] map f like >>element-types
|
||||||
|
]
|
||||||
|
} cleave ;
|
||||||
|
|
||||||
|
: xml>varargs-type ( xml -- type )
|
||||||
|
drop varargs-type new ;
|
||||||
|
|
||||||
|
: xml>array-type ( xml -- type )
|
||||||
|
[ array-type new ] dip {
|
||||||
|
[ "name" attr >>name ]
|
||||||
|
[ "zero-terminated" attr "0" = not >>zero-terminated? ]
|
||||||
|
[ "length" attr string>number >>length ]
|
||||||
|
[ "fixed-size" attr string>number >>fixed-size ]
|
||||||
|
[ "type" tag-named xml>simple-type >>element-type ]
|
||||||
|
} cleave ;
|
||||||
|
|
||||||
|
: xml>inner-callback-type ( xml -- type )
|
||||||
|
[ inner-callback-type new ] dip {
|
||||||
|
[ "name" attr >>name ]
|
||||||
|
} cleave ;
|
||||||
|
|
||||||
|
: xml>type ( xml -- type )
|
||||||
|
dup name>> main>> {
|
||||||
|
{ "type" [ xml>simple-type ] }
|
||||||
|
{ "array"[ xml>array-type ] }
|
||||||
|
{ "callback" [ xml>inner-callback-type ] }
|
||||||
|
{ "varargs" [ xml>varargs-type ] }
|
||||||
|
} case ;
|
||||||
|
|
||||||
|
CONSTANT: type-tags
|
||||||
|
$[ { "array" "type" "callback" "varargs" } [ <null-name> ] map ]
|
||||||
|
|
||||||
|
: child-type-tag ( xml -- type-tag )
|
||||||
|
children-tags [
|
||||||
|
type-tags [ swap tag-named? ] with any?
|
||||||
|
] find nip ;
|
||||||
|
|
||||||
|
: xml>alias ( xml -- alias )
|
||||||
|
[ alias new ] dip {
|
||||||
|
[ "name" attr >>name ]
|
||||||
|
[ "type" attr >>c-type ]
|
||||||
|
[ child-type-tag xml>type >>type ]
|
||||||
|
} cleave ;
|
||||||
|
|
||||||
|
: xml>const ( xml -- const )
|
||||||
|
[ const new ] dip {
|
||||||
|
[ "name" attr >>name ]
|
||||||
|
[ "value" attr >>value ]
|
||||||
|
[ child-type-tag xml>type >>type ]
|
||||||
|
} cleave ;
|
||||||
|
|
||||||
|
: load-type ( type xml -- type )
|
||||||
|
{
|
||||||
|
[ "name" attr >>name ]
|
||||||
|
[ [ "type" attr ] [ "type-name" attr ] bi or >>c-type ]
|
||||||
|
[ "get-type" attr >>get-type ]
|
||||||
|
} cleave ;
|
||||||
|
|
||||||
|
: xml>member ( xml -- member )
|
||||||
|
[ enum-member new ] dip {
|
||||||
|
[ "name" attr >>name ]
|
||||||
|
[ "identifier" attr >>c-identifier ]
|
||||||
|
[ "value" attr string>number >>value ]
|
||||||
|
} cleave ;
|
||||||
|
|
||||||
|
: xml>enum ( xml -- enum )
|
||||||
|
[ enum new ] dip {
|
||||||
|
[ load-type ]
|
||||||
|
[ "member" tags-named [ xml>member ] map >>members ]
|
||||||
|
} cleave ;
|
||||||
|
|
||||||
|
: load-parameter ( param xml -- param )
|
||||||
|
[ child-type-tag xml>type >>type ]
|
||||||
|
[ "transfer-ownership" attr >>transfer-ownership ] bi ;
|
||||||
|
|
||||||
|
: xml>parameter ( xml -- parameter )
|
||||||
|
[ parameter new ] dip {
|
||||||
|
[ "name" attr >>name ]
|
||||||
|
[ "direction" attr dup "in" ? >>direction ]
|
||||||
|
[ "allow-none" attr "1" = >>allow-none? ]
|
||||||
|
[ child-type-tag xml>type >>type ]
|
||||||
|
[ "transfer-ownership" attr >>transfer-ownership ]
|
||||||
|
} cleave ;
|
||||||
|
|
||||||
|
: xml>return ( xml -- return )
|
||||||
|
[ return new ] dip {
|
||||||
|
[ child-type-tag xml>type >>type ]
|
||||||
|
[ "transfer-ownership" attr >>transfer-ownership ]
|
||||||
|
} cleave ;
|
||||||
|
|
||||||
|
: load-callable ( callable xml -- callable )
|
||||||
|
[ "return-value" tag-named xml>return >>return ]
|
||||||
|
[
|
||||||
|
"parameters" tag-named "parameter" tags-named
|
||||||
|
[ xml>parameter ] map >>parameters
|
||||||
|
] bi ;
|
||||||
|
|
||||||
|
: xml>function ( xml -- function )
|
||||||
|
[ function new ] dip {
|
||||||
|
[ "name" attr >>name ]
|
||||||
|
[ "identifier" attr >>identifier ]
|
||||||
|
[ load-callable ]
|
||||||
|
[ "throws" attr "1" = >>throws? ]
|
||||||
|
} cleave ;
|
||||||
|
|
||||||
|
: load-functions ( xml tag-name -- functions )
|
||||||
|
tags-named [ xml>function ] map ;
|
||||||
|
|
||||||
|
: xml>field ( xml -- field )
|
||||||
|
[ field new ] dip {
|
||||||
|
[ "name" attr >>name ]
|
||||||
|
[ "writable" attr "1" = >>writable? ]
|
||||||
|
[ "bits" attr string>number >>bits ]
|
||||||
|
[ child-type-tag xml>type >>type ]
|
||||||
|
} cleave ;
|
||||||
|
|
||||||
|
: xml>record ( xml -- record )
|
||||||
|
[ record new ] dip {
|
||||||
|
[ load-type ]
|
||||||
|
[ "field" tags-named [ xml>field ] map >>fields ]
|
||||||
|
[ "constructor" load-functions >>constructors ]
|
||||||
|
[ "method" load-functions >>methods ]
|
||||||
|
[ "function" load-functions >>functions ]
|
||||||
|
[ "disguised" attr "1" = >>disguised? ]
|
||||||
|
[ "is-gtype-struct-for" attr >>struct-for ]
|
||||||
|
} cleave ;
|
||||||
|
|
||||||
|
: xml>union ( xml -- union )
|
||||||
|
[ union new ] dip {
|
||||||
|
[ load-type ]
|
||||||
|
[ "field" tags-named [ xml>field ] map >>fields ]
|
||||||
|
[ "constructor" load-functions >>constructors ]
|
||||||
|
[ "method" load-functions >>methods ]
|
||||||
|
[ "function" load-functions >>functions ]
|
||||||
|
} cleave ;
|
||||||
|
|
||||||
|
: xml>callback ( xml -- callback )
|
||||||
|
[ callback new ] dip {
|
||||||
|
[ load-type ]
|
||||||
|
[ load-callable ]
|
||||||
|
[ "throws" attr "1" = >>throws? ]
|
||||||
|
} cleave ;
|
||||||
|
|
||||||
|
: xml>signal ( xml -- signal )
|
||||||
|
[ signal new ] dip {
|
||||||
|
[ "name" attr >>name ]
|
||||||
|
[ load-callable ]
|
||||||
|
} cleave ;
|
||||||
|
|
||||||
|
: xml>property ( xml -- property )
|
||||||
|
[ property new ] dip {
|
||||||
|
[ "name" attr >>name ]
|
||||||
|
[ "writable" attr "1" = >>writable? ]
|
||||||
|
[ "readable" attr "0" = not >>readable? ]
|
||||||
|
[ "construct" attr "1" = >>construct? ]
|
||||||
|
[ "construct-only" attr "1" = >>construct-only? ]
|
||||||
|
[ child-type-tag xml>type >>type ]
|
||||||
|
} cleave ;
|
||||||
|
|
||||||
|
: xml>class ( xml -- class )
|
||||||
|
[ class new ] dip {
|
||||||
|
[ load-type ]
|
||||||
|
[ "abstract" attr "1" = >>abstract? ]
|
||||||
|
[ "parent" attr >>parent ]
|
||||||
|
[ "type-struct" attr >>type-struct ]
|
||||||
|
[ "constructor" load-functions >>constructors ]
|
||||||
|
[ "method" load-functions >>methods ]
|
||||||
|
[ "function" load-functions >>functions ]
|
||||||
|
[ "signal" tags-named [ xml>signal ] map >>signals ]
|
||||||
|
} cleave ;
|
||||||
|
|
||||||
|
: xml>interface ( xml -- interface )
|
||||||
|
[ interface new ] dip {
|
||||||
|
[ load-type ]
|
||||||
|
[ "method" load-functions >>methods ]
|
||||||
|
[ "function" load-functions >>functions ]
|
||||||
|
[ "signal" tags-named [ xml>signal ] map >>signals ]
|
||||||
|
} cleave ;
|
||||||
|
|
||||||
|
: xml>boxed ( xml -- boxed )
|
||||||
|
[ boxed new ] dip
|
||||||
|
load-type ;
|
||||||
|
|
||||||
|
: xml>namespace ( xml -- namespace )
|
||||||
|
[ namespace new ] dip {
|
||||||
|
[ "name" attr >>name ]
|
||||||
|
[ "identifier-prefixes" attr "," split >>identifier-prefixes ]
|
||||||
|
[ "symbol-prefixes" attr "," split >>symbol-prefixes ]
|
||||||
|
[ "alias" tags-named [ xml>alias ] map >>aliases ]
|
||||||
|
[ "constant" tags-named [ xml>const ] map >>consts ]
|
||||||
|
[ "enumeration" tags-named [ xml>enum ] map >>enums ]
|
||||||
|
[ "bitfield" tags-named [ xml>enum ] map >>bitfields ]
|
||||||
|
[ "record" tags-named [ xml>record ] map >>records ]
|
||||||
|
[ "union" tags-named [ xml>union ] map >>unions ]
|
||||||
|
[ "boxed" tags-named [ xml>boxed ] map >>boxeds ]
|
||||||
|
[ "callback" tags-named [ xml>callback ] map >>callbacks ]
|
||||||
|
[ "class" tags-named [ xml>class ] map >>classes ]
|
||||||
|
[ "interface" tags-named [ xml>interface ] map >>interfaces ]
|
||||||
|
[ "function" load-functions >>functions ]
|
||||||
|
} cleave ;
|
||||||
|
|
||||||
|
: xml>repository ( xml -- repository )
|
||||||
|
[ repository new ] dip
|
||||||
|
"namespace" tag-named xml>namespace >>namespace ;
|
|
@ -0,0 +1,135 @@
|
||||||
|
! Copyright (C) 2010 Anton Gorenko.
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
|
USING: ;
|
||||||
|
IN: gobject-introspection.repository
|
||||||
|
|
||||||
|
TUPLE: repository
|
||||||
|
namespace ;
|
||||||
|
|
||||||
|
TUPLE: namespace
|
||||||
|
name
|
||||||
|
identifier-prefixes
|
||||||
|
symbol-prefixes
|
||||||
|
aliases
|
||||||
|
consts
|
||||||
|
enums
|
||||||
|
bitfields
|
||||||
|
records
|
||||||
|
unions
|
||||||
|
boxeds
|
||||||
|
callbacks
|
||||||
|
classes
|
||||||
|
interfaces
|
||||||
|
functions ;
|
||||||
|
|
||||||
|
TUPLE: data-type
|
||||||
|
name ;
|
||||||
|
|
||||||
|
TUPLE: simple-type < data-type
|
||||||
|
element-types ;
|
||||||
|
|
||||||
|
TUPLE: array-type < data-type
|
||||||
|
zero-terminated?
|
||||||
|
fixed-size
|
||||||
|
length
|
||||||
|
element-type ;
|
||||||
|
|
||||||
|
TUPLE: inner-callback-type < data-type ;
|
||||||
|
|
||||||
|
TUPLE: varargs-type < data-type ;
|
||||||
|
|
||||||
|
TUPLE: alias
|
||||||
|
name
|
||||||
|
c-type
|
||||||
|
type ;
|
||||||
|
|
||||||
|
TUPLE: const
|
||||||
|
name
|
||||||
|
value
|
||||||
|
type ;
|
||||||
|
|
||||||
|
TUPLE: type
|
||||||
|
name
|
||||||
|
c-type
|
||||||
|
get-type ;
|
||||||
|
|
||||||
|
TUPLE: enum-member
|
||||||
|
name
|
||||||
|
value
|
||||||
|
c-identifier ;
|
||||||
|
|
||||||
|
TUPLE: enum < type
|
||||||
|
members ;
|
||||||
|
|
||||||
|
TUPLE: record < type
|
||||||
|
fields
|
||||||
|
constructors
|
||||||
|
methods
|
||||||
|
functions
|
||||||
|
disguised?
|
||||||
|
struct-for ;
|
||||||
|
|
||||||
|
TUPLE: field
|
||||||
|
name
|
||||||
|
writable?
|
||||||
|
bits
|
||||||
|
type ;
|
||||||
|
|
||||||
|
TUPLE: union < type
|
||||||
|
fields
|
||||||
|
constructors
|
||||||
|
methods
|
||||||
|
functions ;
|
||||||
|
|
||||||
|
TUPLE: return
|
||||||
|
type
|
||||||
|
transfer-ownership ;
|
||||||
|
|
||||||
|
TUPLE: parameter
|
||||||
|
name
|
||||||
|
type
|
||||||
|
direction
|
||||||
|
allow-none?
|
||||||
|
transfer-ownership ;
|
||||||
|
|
||||||
|
TUPLE: function
|
||||||
|
name
|
||||||
|
identifier
|
||||||
|
return
|
||||||
|
parameters
|
||||||
|
throws? ;
|
||||||
|
|
||||||
|
TUPLE: callback < type
|
||||||
|
return
|
||||||
|
parameters
|
||||||
|
throws? ;
|
||||||
|
|
||||||
|
TUPLE: class < type
|
||||||
|
abstract?
|
||||||
|
parent
|
||||||
|
type-struct
|
||||||
|
constructors
|
||||||
|
methods
|
||||||
|
functions
|
||||||
|
signals ;
|
||||||
|
|
||||||
|
TUPLE: interface < type
|
||||||
|
constructors
|
||||||
|
methods
|
||||||
|
functions
|
||||||
|
signals ;
|
||||||
|
|
||||||
|
TUPLE: boxed < type ;
|
||||||
|
|
||||||
|
TUPLE: signal
|
||||||
|
name
|
||||||
|
return
|
||||||
|
parameters ;
|
||||||
|
|
||||||
|
TUPLE: property
|
||||||
|
name
|
||||||
|
readable?
|
||||||
|
writable?
|
||||||
|
construct?
|
||||||
|
construct-only?
|
||||||
|
type ;
|
|
@ -0,0 +1,71 @@
|
||||||
|
! Copyright (C) 2010 Anton Gorenko.
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
|
USING: accessors alien.c-types alien.syntax
|
||||||
|
classes.struct gobject-introspection.types kernel parser ;
|
||||||
|
IN: gobject-introspection.standard-types
|
||||||
|
|
||||||
|
<<
|
||||||
|
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: 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: gulong GType
|
||||||
|
TYPEDEF: void* gpointer
|
||||||
|
TYPEDEF: guint32 gunichar
|
||||||
|
TYPEDEF: void* va_list
|
||||||
|
|
||||||
|
int c-type clone
|
||||||
|
[ >c-bool ] >>unboxer-quot
|
||||||
|
[ c-bool> ] >>boxer-quot
|
||||||
|
object >>boxed-class
|
||||||
|
"gboolean" create-in typedef
|
||||||
|
|
||||||
|
STRUCT: longdouble { data char[10] } ;
|
||||||
|
>>
|
||||||
|
|
||||||
|
gchar "gchar" register-standard-type
|
||||||
|
guchar "guchar" register-standard-type
|
||||||
|
gshort "gshort" register-standard-type
|
||||||
|
gushort "gushort" register-standard-type
|
||||||
|
glong "glong" register-standard-type
|
||||||
|
gulong "gulong" register-standard-type
|
||||||
|
gint "gint" register-standard-type
|
||||||
|
guint "guint" register-standard-type
|
||||||
|
|
||||||
|
gint8 "gint8" register-standard-type
|
||||||
|
guint8 "guint8" register-standard-type
|
||||||
|
gint16 "gint16" register-standard-type
|
||||||
|
guint16 "guint16" register-standard-type
|
||||||
|
gint32 "gint32" register-standard-type
|
||||||
|
guint32 "guint32" register-standard-type
|
||||||
|
gint64 "gint64" register-standard-type
|
||||||
|
guint64 "guint64" register-standard-type
|
||||||
|
|
||||||
|
gfloat "gfloat" register-standard-type
|
||||||
|
gdouble "gdouble" register-standard-type
|
||||||
|
|
||||||
|
GType "GType" register-standard-type
|
||||||
|
gpointer "gpointer" register-standard-type
|
||||||
|
gunichar "gunichar" register-standard-type
|
||||||
|
va_list "va_list" register-standard-type
|
||||||
|
|
||||||
|
gboolean "gboolean" register-standard-type
|
||||||
|
pointer: gchar "utf8" register-standard-type
|
||||||
|
longdouble "long double" register-standard-type
|
|
@ -0,0 +1 @@
|
||||||
|
GObjectIntrospection support
|
|
@ -0,0 +1,112 @@
|
||||||
|
! Copyright (C) 2010 Anton Gorenko.
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
|
USING: accessors alien.c-types assocs combinators.short-circuit
|
||||||
|
gobject-introspection.common gobject-introspection.repository kernel
|
||||||
|
locals namespaces parser sequences sets ;
|
||||||
|
IN: gobject-introspection.types
|
||||||
|
|
||||||
|
SYMBOL: type-infos
|
||||||
|
type-infos [ H{ } ] initialize
|
||||||
|
|
||||||
|
SYMBOL: standard-types
|
||||||
|
standard-types [ V{ } ] initialize
|
||||||
|
|
||||||
|
TUPLE: type-info c-type ;
|
||||||
|
|
||||||
|
TUPLE: atomic-info < type-info ;
|
||||||
|
TUPLE: enum-info < type-info ;
|
||||||
|
TUPLE: bitfield-info < type-info ;
|
||||||
|
TUPLE: record-info < type-info ;
|
||||||
|
TUPLE: union-info < type-info ;
|
||||||
|
TUPLE: boxed-info < type-info ;
|
||||||
|
TUPLE: callback-info < type-info ;
|
||||||
|
TUPLE: class-info < type-info ;
|
||||||
|
TUPLE: interface-info < type-info ;
|
||||||
|
|
||||||
|
DEFER: find-type-info
|
||||||
|
|
||||||
|
PREDICATE: none-type < simple-type
|
||||||
|
name>> "none" = ;
|
||||||
|
|
||||||
|
PREDICATE: atomic-type < simple-type
|
||||||
|
find-type-info atomic-info? ;
|
||||||
|
|
||||||
|
PREDICATE: utf8-type < atomic-type
|
||||||
|
name>> "utf8" = ;
|
||||||
|
|
||||||
|
PREDICATE: enum-type < simple-type
|
||||||
|
find-type-info enum-info? ;
|
||||||
|
|
||||||
|
PREDICATE: bitfield-type < simple-type
|
||||||
|
find-type-info bitfield-info? ;
|
||||||
|
|
||||||
|
PREDICATE: record-type < simple-type
|
||||||
|
find-type-info record-info? ;
|
||||||
|
|
||||||
|
PREDICATE: union-type < simple-type
|
||||||
|
find-type-info union-info? ;
|
||||||
|
|
||||||
|
PREDICATE: boxed-type < simple-type
|
||||||
|
find-type-info boxed-info? ;
|
||||||
|
|
||||||
|
PREDICATE: callback-type < simple-type
|
||||||
|
find-type-info callback-info? ;
|
||||||
|
|
||||||
|
PREDICATE: class-type < simple-type
|
||||||
|
find-type-info class-info? ;
|
||||||
|
|
||||||
|
PREDICATE: interface-type < simple-type
|
||||||
|
find-type-info interface-info? ;
|
||||||
|
|
||||||
|
PREDICATE: boxed-array-type < array-type name>> >boolean ;
|
||||||
|
PREDICATE: c-array-type < array-type name>> not ;
|
||||||
|
PREDICATE: fixed-size-array-type < c-array-type fixed-size>> >boolean ;
|
||||||
|
|
||||||
|
: standard-type? ( data-type -- ? )
|
||||||
|
name>> standard-types get-global in? ;
|
||||||
|
|
||||||
|
: qualified-name ( name -- qualified-name )
|
||||||
|
current-namespace-name get-global swap "." glue ;
|
||||||
|
|
||||||
|
: qualified-type-name ( data-type -- name )
|
||||||
|
[ name>> ] keep {
|
||||||
|
[ name>> CHAR: . swap member? ]
|
||||||
|
[ none-type? ]
|
||||||
|
[ standard-type? ]
|
||||||
|
} 1|| [ qualified-name ] unless ;
|
||||||
|
|
||||||
|
ERROR: unknown-type-error type ;
|
||||||
|
|
||||||
|
: get-type-info ( data-type -- info )
|
||||||
|
qualified-type-name dup type-infos get-global at
|
||||||
|
[ ] [ unknown-type-error ] ?if ;
|
||||||
|
|
||||||
|
: find-type-info ( data-type -- info/f )
|
||||||
|
qualified-type-name type-infos get-global at ;
|
||||||
|
|
||||||
|
:: register-type ( c-type type-info name -- )
|
||||||
|
type-info c-type >>c-type name
|
||||||
|
type-infos get-global set-at ;
|
||||||
|
|
||||||
|
: register-standard-type ( c-type name -- )
|
||||||
|
dup standard-types get-global adjoin
|
||||||
|
atomic-info new swap register-type ;
|
||||||
|
|
||||||
|
: register-atomic-type ( c-type name -- )
|
||||||
|
atomic-info new swap register-type ;
|
||||||
|
|
||||||
|
: register-enum-type ( c-type name -- )
|
||||||
|
enum-info new swap register-type ;
|
||||||
|
|
||||||
|
: register-record-type ( c-type name -- )
|
||||||
|
record-info new swap register-type ;
|
||||||
|
|
||||||
|
ERROR: deferred-type-error ;
|
||||||
|
|
||||||
|
<<
|
||||||
|
void* c-type clone
|
||||||
|
[ drop deferred-type-error ] >>unboxer-quot
|
||||||
|
[ drop deferred-type-error ] >>boxer-quot
|
||||||
|
object >>boxed-class
|
||||||
|
"deferred-type" create-in typedef
|
||||||
|
>>
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1 @@
|
||||||
|
Anton Gorenko
|
|
@ -0,0 +1,67 @@
|
||||||
|
! Copyright (C) 2010 Anton Gorenko.
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
|
USING: alien alien.destructors alien.libraries alien.syntax kernel
|
||||||
|
combinators gobject-introspection literals math system vocabs.loader ;
|
||||||
|
IN: gobject.ffi
|
||||||
|
|
||||||
|
<<
|
||||||
|
"glib.ffi" require
|
||||||
|
>>
|
||||||
|
|
||||||
|
LIBRARY: gobject
|
||||||
|
|
||||||
|
<<
|
||||||
|
"gobject" {
|
||||||
|
{ [ os winnt? ] [ "libobject-2.0-0.dll" cdecl add-library ] }
|
||||||
|
{ [ os unix? ] [ drop ] }
|
||||||
|
} cond
|
||||||
|
>>
|
||||||
|
|
||||||
|
IMPLEMENT-STRUCTS: GValue GParamSpecVariant ;
|
||||||
|
|
||||||
|
GIR: vocab:gobject/GObject-2.0.gir
|
||||||
|
|
||||||
|
IN: gobject.ffi
|
||||||
|
|
||||||
|
FORGET: GIOCondition
|
||||||
|
FORGET: G_IO_IN
|
||||||
|
FORGET: G_IO_OUT
|
||||||
|
FORGET: G_IO_PRI
|
||||||
|
FORGET: G_IO_ERR
|
||||||
|
FORGET: G_IO_HUP
|
||||||
|
FORGET: G_IO_NVAL
|
||||||
|
|
||||||
|
DESTRUCTOR: g_object_unref
|
||||||
|
|
||||||
|
CONSTANT: G_TYPE_INVALID $[ 0 2 shift ]
|
||||||
|
CONSTANT: G_TYPE_NONE $[ 1 2 shift ]
|
||||||
|
CONSTANT: G_TYPE_INTERFACE $[ 2 2 shift ]
|
||||||
|
CONSTANT: G_TYPE_CHAR $[ 3 2 shift ]
|
||||||
|
CONSTANT: G_TYPE_UCHAR $[ 4 2 shift ]
|
||||||
|
CONSTANT: G_TYPE_BOOLEAN $[ 5 2 shift ]
|
||||||
|
CONSTANT: G_TYPE_INT $[ 6 2 shift ]
|
||||||
|
CONSTANT: G_TYPE_UINT $[ 7 2 shift ]
|
||||||
|
CONSTANT: G_TYPE_LONG $[ 8 2 shift ]
|
||||||
|
CONSTANT: G_TYPE_ULONG $[ 9 2 shift ]
|
||||||
|
CONSTANT: G_TYPE_INT64 $[ 10 2 shift ]
|
||||||
|
CONSTANT: G_TYPE_UINT64 $[ 11 2 shift ]
|
||||||
|
CONSTANT: G_TYPE_ENUM $[ 12 2 shift ]
|
||||||
|
CONSTANT: G_TYPE_FLAGS $[ 13 2 shift ]
|
||||||
|
CONSTANT: G_TYPE_FLOAT $[ 14 2 shift ]
|
||||||
|
CONSTANT: G_TYPE_DOUBLE $[ 15 2 shift ]
|
||||||
|
CONSTANT: G_TYPE_STRING $[ 16 2 shift ]
|
||||||
|
CONSTANT: G_TYPE_POINTER $[ 17 2 shift ]
|
||||||
|
CONSTANT: G_TYPE_BOXED $[ 18 2 shift ]
|
||||||
|
CONSTANT: G_TYPE_PARAM $[ 19 2 shift ]
|
||||||
|
CONSTANT: G_TYPE_OBJECT $[ 20 2 shift ]
|
||||||
|
|
||||||
|
! Macros
|
||||||
|
|
||||||
|
: g_signal_connect ( instance detailed_signal c_handler data -- result )
|
||||||
|
f 0 g_signal_connect_data ;
|
||||||
|
|
||||||
|
: g_signal_connect_after ( instance detailed_signal c_handler data -- result )
|
||||||
|
f G_CONNECT_AFTER g_signal_connect_data ;
|
||||||
|
|
||||||
|
: g_signal_connect_swapped ( instance detailed_signal c_handler data -- result )
|
||||||
|
f G_CONNECT_SWAPPED g_signal_connect_data ;
|
|
@ -0,0 +1,5 @@
|
||||||
|
! Copyright (C) 2009 Anton Gorenko.
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
|
USING: gobject.ffi ;
|
||||||
|
IN: gobject
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
GObject binding
|
|
@ -0,0 +1 @@
|
||||||
|
bindings
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1 @@
|
||||||
|
Anton Gorenko
|
|
@ -0,0 +1,33 @@
|
||||||
|
! Copyright (C) 2010 Anton Gorenko.
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
|
USING: alien alien.c-types alien.destructors alien.libraries
|
||||||
|
alien.syntax combinators gobject-introspection
|
||||||
|
gobject-introspection.standard-types kernel pango.ffi system
|
||||||
|
vocabs.loader ;
|
||||||
|
IN: gtk.ffi
|
||||||
|
|
||||||
|
<<
|
||||||
|
"atk.ffi" require
|
||||||
|
"gdk.ffi" require
|
||||||
|
>>
|
||||||
|
|
||||||
|
LIBRARY: gtk
|
||||||
|
|
||||||
|
<<
|
||||||
|
"gtk" {
|
||||||
|
{ [ os winnt? ] [ "libgtk-win32-2.0-0.dll" cdecl add-library ] }
|
||||||
|
{ [ os unix? ] [ drop ] }
|
||||||
|
} cond
|
||||||
|
>>
|
||||||
|
|
||||||
|
IMPLEMENT-STRUCTS: GtkTreeIter ;
|
||||||
|
|
||||||
|
GIR: vocab:gtk/Gtk-3.0.gir
|
||||||
|
|
||||||
|
DESTRUCTOR: gtk_widget_destroy
|
||||||
|
|
||||||
|
! <workaround
|
||||||
|
FORGET: gtk_im_context_get_preedit_string
|
||||||
|
FUNCTION: void
|
||||||
|
gtk_im_context_get_preedit_string ( GtkIMContext* imcontext, gchar** str, PangoAttrList** attrs, gint* cursor_pos ) ;
|
||||||
|
! workaround>
|
|
@ -0,0 +1,213 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<!-- This file was automatically generated from C sources - DO NOT EDIT!
|
||||||
|
To affect the contents of this file, edit the original C definitions,
|
||||||
|
and/or use gtk-doc annotations. -->
|
||||||
|
<repository version="1.2"
|
||||||
|
xmlns="http://www.gtk.org/introspection/core/1.0"
|
||||||
|
xmlns:c="http://www.gtk.org/introspection/c/1.0"
|
||||||
|
xmlns:glib="http://www.gtk.org/introspection/glib/1.0">
|
||||||
|
<include name="Atk" version="1.0"/>
|
||||||
|
<include name="GLib" version="2.0"/>
|
||||||
|
<include name="GModule" version="2.0"/>
|
||||||
|
<include name="GObject" version="2.0"/>
|
||||||
|
<include name="Gdk" version="3.0"/>
|
||||||
|
<include name="GdkGLExt" version="1.0"/>
|
||||||
|
<include name="GdkPixbuf" version="2.0"/>
|
||||||
|
<include name="Gio" version="2.0"/>
|
||||||
|
<include name="Gtk" version="3.0"/>
|
||||||
|
<include name="Pango" version="1.0"/>
|
||||||
|
<include name="cairo" version="1.0"/>
|
||||||
|
<package name="gtkglext-1.0"/>
|
||||||
|
<namespace name="GtkGL"
|
||||||
|
version="1.0"
|
||||||
|
shared-library="libgtkglext-x11-1.0.so.0"
|
||||||
|
c:identifier-prefixes="GtkGL,Gtk"
|
||||||
|
c:symbol-prefixes="gtk_gl,gtk">
|
||||||
|
<bitfield name="DebugFlag" c:type="GtkGLDebugFlag">
|
||||||
|
<member name="misc" value="1" c:identifier="GTK_GL_DEBUG_MISC"/>
|
||||||
|
<member name="func" value="2" c:identifier="GTK_GL_DEBUG_FUNC"/>
|
||||||
|
</bitfield>
|
||||||
|
<function name="init" c:identifier="gtk_gl_init">
|
||||||
|
<doc xml:whitespace="preserve">Call this function before using any other GtkGLExt functions in your
|
||||||
|
applications. It will initialize everything needed to operate the library
|
||||||
|
and parses some standard command line options. @argc and
|
||||||
|
never see those standard arguments.
|
||||||
|
<note><para>
|
||||||
|
This function will terminate your program if it was unable to initialize
|
||||||
|
the library for some reason. If you want your program to fall back to a
|
||||||
|
textual interface you want to call gtk_gl_init_check() instead.
|
||||||
|
</para></note></doc>
|
||||||
|
<return-value transfer-ownership="none">
|
||||||
|
<type name="none" c:type="void"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<parameter name="argc"
|
||||||
|
direction="inout"
|
||||||
|
caller-allocates="0"
|
||||||
|
transfer-ownership="full">
|
||||||
|
<doc xml:whitespace="preserve">Address of the <parameter>argc</parameter> parameter of your <function>main()</function> function. Changed if any arguments were handled.</doc>
|
||||||
|
<type name="gint" c:type="int*"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="argv"
|
||||||
|
direction="inout"
|
||||||
|
caller-allocates="0"
|
||||||
|
transfer-ownership="full"
|
||||||
|
allow-none="1">
|
||||||
|
<doc xml:whitespace="preserve">Address of the <parameter>argv</parameter> parameter of <function>main()</function>. Any parameters understood by gtk_gl_init() are stripped before return.</doc>
|
||||||
|
<array length="0" c:type="char***">
|
||||||
|
<type name="utf8"/>
|
||||||
|
</array>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function>
|
||||||
|
<function name="init_check" c:identifier="gtk_gl_init_check">
|
||||||
|
<doc xml:whitespace="preserve">This function does the same work as gtk_gl_init() with only
|
||||||
|
initialized. Instead it returns %FALSE on failure.
|
||||||
|
This way the application can fall back to some other means of communication
|
||||||
|
with the user - for example a curses or command line interface.
|
||||||
|
%FALSE otherwise.</doc>
|
||||||
|
<return-value transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">%TRUE if the GUI has been successfully initialized,</doc>
|
||||||
|
<type name="gboolean" c:type="gboolean"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<parameter name="argc"
|
||||||
|
direction="inout"
|
||||||
|
caller-allocates="0"
|
||||||
|
transfer-ownership="full">
|
||||||
|
<doc xml:whitespace="preserve">Address of the <parameter>argc</parameter> parameter of your <function>main()</function> function. Changed if any arguments were handled.</doc>
|
||||||
|
<type name="gint" c:type="int*"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="argv"
|
||||||
|
direction="inout"
|
||||||
|
caller-allocates="0"
|
||||||
|
transfer-ownership="full"
|
||||||
|
allow-none="1">
|
||||||
|
<doc xml:whitespace="preserve">Address of the <parameter>argv</parameter> parameter of <function>main()</function>. Any parameters understood by gtk_gl_init() are stripped before return.</doc>
|
||||||
|
<array length="0" c:type="char***">
|
||||||
|
<type name="utf8"/>
|
||||||
|
</array>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function>
|
||||||
|
<function name="widget_create_gl_context"
|
||||||
|
c:identifier="gtk_widget_create_gl_context">
|
||||||
|
<doc xml:whitespace="preserve">Creates a new #GdkGLContext with the appropriate #GdkGLDrawable
|
||||||
|
for this widget. The GL context must be freed when you're
|
||||||
|
finished with it. See also gtk_widget_get_gl_context().</doc>
|
||||||
|
<return-value transfer-ownership="full">
|
||||||
|
<doc xml:whitespace="preserve">the new #GdkGLContext.</doc>
|
||||||
|
<type name="GdkGL.Context" c:type="GdkGLContext*"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<parameter name="widget" transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">a #GtkWidget.</doc>
|
||||||
|
<type name="Gtk.Widget" c:type="GtkWidget*"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="share_list" transfer-ownership="none" allow-none="1">
|
||||||
|
<doc xml:whitespace="preserve">the #GdkGLContext with which to share display lists and texture objects. NULL indicates that no sharing is to take place.</doc>
|
||||||
|
<type name="GdkGL.Context" c:type="GdkGLContext*"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="direct" transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">whether rendering is to be done with a direct connection to the graphics system.</doc>
|
||||||
|
<type name="gboolean" c:type="gboolean"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="render_type" transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">GDK_GL_RGBA_TYPE or GDK_GL_COLOR_INDEX_TYPE (currently not used).</doc>
|
||||||
|
<type name="gint" c:type="int"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function>
|
||||||
|
<function name="widget_get_gl_config"
|
||||||
|
c:identifier="gtk_widget_get_gl_config">
|
||||||
|
<doc xml:whitespace="preserve">Returns the #GdkGLConfig referred by the @widget.</doc>
|
||||||
|
<return-value transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">the #GdkGLConfig.</doc>
|
||||||
|
<type name="GdkGL.Config" c:type="GdkGLConfig*"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<parameter name="widget" transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">a #GtkWidget.</doc>
|
||||||
|
<type name="Gtk.Widget" c:type="GtkWidget*"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function>
|
||||||
|
<function name="widget_get_gl_context"
|
||||||
|
c:identifier="gtk_widget_get_gl_context">
|
||||||
|
<doc xml:whitespace="preserve">Returns the #GdkGLContext with the appropriate #GdkGLDrawable
|
||||||
|
for this widget. Unlike the GL context returned by
|
||||||
|
gtk_widget_create_gl_context(), this context is owned by the widget.
|
||||||
|
#GdkGLContext is needed for the function gdk_gl_drawable_begin,
|
||||||
|
or for sharing display lists (see gtk_widget_set_gl_capability()).</doc>
|
||||||
|
<return-value transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">the #GdkGLContext.</doc>
|
||||||
|
<type name="GdkGL.Context" c:type="GdkGLContext*"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<parameter name="widget" transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">a #GtkWidget.</doc>
|
||||||
|
<type name="Gtk.Widget" c:type="GtkWidget*"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function>
|
||||||
|
<function name="widget_get_gl_window"
|
||||||
|
c:identifier="gtk_widget_get_gl_window">
|
||||||
|
<doc xml:whitespace="preserve">Returns the #GdkGLWindow owned by the @widget.</doc>
|
||||||
|
<return-value transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">the #GdkGLWindow.</doc>
|
||||||
|
<type name="GdkGL.Window" c:type="GdkGLWindow*"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<parameter name="widget" transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">a #GtkWidget.</doc>
|
||||||
|
<type name="Gtk.Widget" c:type="GtkWidget*"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function>
|
||||||
|
<function name="widget_is_gl_capable"
|
||||||
|
c:identifier="gtk_widget_is_gl_capable">
|
||||||
|
<doc xml:whitespace="preserve">Returns whether the @widget is OpenGL-capable.</doc>
|
||||||
|
<return-value transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">TRUE if the @widget is OpenGL-capable, FALSE otherwise.</doc>
|
||||||
|
<type name="gboolean" c:type="gboolean"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<parameter name="widget" transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">a #GtkWidget.</doc>
|
||||||
|
<type name="Gtk.Widget" c:type="GtkWidget*"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function>
|
||||||
|
<function name="widget_set_gl_capability"
|
||||||
|
c:identifier="gtk_widget_set_gl_capability">
|
||||||
|
<doc xml:whitespace="preserve">Set the OpenGL-capability to the @widget.
|
||||||
|
This function prepares the widget for its use with OpenGL.</doc>
|
||||||
|
<return-value transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">TRUE if it is successful, FALSE otherwise.</doc>
|
||||||
|
<type name="gboolean" c:type="gboolean"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<parameter name="widget" transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">the #GtkWidget to be used as the rendering area.</doc>
|
||||||
|
<type name="Gtk.Widget" c:type="GtkWidget*"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="glconfig" transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">a #GdkGLConfig.</doc>
|
||||||
|
<type name="GdkGL.Config" c:type="GdkGLConfig*"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="share_list" transfer-ownership="none" allow-none="1">
|
||||||
|
<doc xml:whitespace="preserve">the #GdkGLContext with which to share display lists and texture objects. NULL indicates that no sharing is to take place.</doc>
|
||||||
|
<type name="GdkGL.Context" c:type="GdkGLContext*"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="direct" transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">whether rendering is to be done with a direct connection to the graphics system.</doc>
|
||||||
|
<type name="gboolean" c:type="gboolean"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="render_type" transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">GDK_GL_RGBA_TYPE or GDK_GL_COLOR_INDEX_TYPE (currently not used).</doc>
|
||||||
|
<type name="gint" c:type="int"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function>
|
||||||
|
</namespace>
|
||||||
|
</repository>
|
|
@ -0,0 +1 @@
|
||||||
|
Anton Gorenko
|
|
@ -0,0 +1,22 @@
|
||||||
|
! Copyright (C) 2010 Anton Gorenko.
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
|
USING: alien alien.libraries alien.syntax combinators
|
||||||
|
gobject-introspection kernel system vocabs.loader ;
|
||||||
|
IN: gtk.gl.ffi
|
||||||
|
|
||||||
|
<<
|
||||||
|
"gtk.ffi" require
|
||||||
|
"gdk.gl.ffi" require
|
||||||
|
>>
|
||||||
|
|
||||||
|
LIBRARY: gtk.gl
|
||||||
|
|
||||||
|
<<
|
||||||
|
"gtk.gl" {
|
||||||
|
{ [ os winnt? ] [ drop ] }
|
||||||
|
{ [ os macosx? ] [ drop ] }
|
||||||
|
{ [ os unix? ] [ "libgtkglext-x11-1.0.so" cdecl add-library ] }
|
||||||
|
} cond
|
||||||
|
>>
|
||||||
|
|
||||||
|
GIR: vocab:gtk/gl/GtkGLExt-1.0.gir
|
|
@ -0,0 +1,5 @@
|
||||||
|
! Copyright (C) 2010 Anton Gorenko.
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
|
USING: gtk.gl.ffi ;
|
||||||
|
IN: gtk.gl
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
GtkGLExt binding
|
|
@ -0,0 +1 @@
|
||||||
|
bindings
|
|
@ -0,0 +1,5 @@
|
||||||
|
! Copyright (C) 2009 Anton Gorenko.
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
|
USING: gtk.ffi ;
|
||||||
|
IN: gtk
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Gtk binding
|
|
@ -0,0 +1 @@
|
||||||
|
bindings
|
|
@ -1,10 +1,13 @@
|
||||||
USING: io.sockets io.sockets.private sequences math tools.test
|
USING: io.sockets io.sockets.private sequences math tools.test
|
||||||
namespaces accessors kernel destructors calendar io.timeouts
|
namespaces accessors kernel destructors calendar io.timeouts
|
||||||
io.encodings.utf8 io concurrency.promises threads
|
io.encodings.utf8 io concurrency.promises threads
|
||||||
io.streams.string present ;
|
io.streams.string present system ;
|
||||||
IN: io.sockets.tests
|
IN: io.sockets.tests
|
||||||
|
|
||||||
[ T{ local f "/tmp/foo" } ] [ "/tmp/foo" <local> ] unit-test
|
os unix? [
|
||||||
|
[ T{ local f "/tmp/foo" } ] [ "/tmp/foo" <local> ] unit-test
|
||||||
|
] when
|
||||||
|
|
||||||
[ T{ inet4 f f 0 } ] [ f 0 <inet4> ] unit-test
|
[ T{ inet4 f f 0 } ] [ f 0 <inet4> ] unit-test
|
||||||
[ T{ inet6 f f 0 1 } ] [ f 1 <inet6> ] unit-test
|
[ T{ inet6 f f 0 1 } ] [ f 1 <inet6> ] unit-test
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
! Copyright (C) 2007, 2010 Slava Pestov, Doug Coleman,
|
! Copyright (C) 2007, 2011 Slava Pestov, Doug Coleman,
|
||||||
! Daniel Ehrenberg.
|
! Daniel Ehrenberg.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: accessors alien.c-types alien.data alien.strings arrays
|
USING: accessors alien.c-types alien.data alien.strings arrays
|
||||||
assocs byte-arrays classes classes.struct combinators
|
assocs byte-arrays classes classes.struct combinators
|
||||||
combinators.short-circuit continuations destructors fry generic
|
combinators.short-circuit continuations destructors fry generic
|
||||||
grouping init io.backend io.binary io.encodings
|
grouping init io.backend io.pathnames io.binary io.encodings
|
||||||
io.encodings.ascii io.encodings.binary io.ports
|
io.encodings.ascii io.encodings.binary io.ports
|
||||||
io.streams.duplex kernel math math.parser memoize namespaces
|
io.streams.duplex kernel math math.parser memoize namespaces
|
||||||
parser present sequences splitting strings summary system
|
parser present sequences splitting strings summary system
|
||||||
|
@ -55,10 +55,10 @@ HOOK: addrspec-of-family os ( af -- addrspec )
|
||||||
|
|
||||||
PRIVATE>
|
PRIVATE>
|
||||||
|
|
||||||
TUPLE: local { path read-only } ;
|
TUPLE: local { path string read-only } ;
|
||||||
|
|
||||||
: <local> ( path -- addrspec )
|
: <local> ( path -- addrspec )
|
||||||
normalize-path local boa ;
|
absolute-path local boa ;
|
||||||
|
|
||||||
M: local present path>> "Unix domain socket: " prepend ;
|
M: local present path>> "Unix domain socket: " prepend ;
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@ ERROR: unknown-gl-platform ;
|
||||||
<< {
|
<< {
|
||||||
{ [ os windows? ] [ "opengl.gl.windows" ] }
|
{ [ os windows? ] [ "opengl.gl.windows" ] }
|
||||||
{ [ os macosx? ] [ "opengl.gl.macosx" ] }
|
{ [ os macosx? ] [ "opengl.gl.macosx" ] }
|
||||||
{ [ os unix? ] [ "opengl.gl.x11" ] }
|
{ [ os unix? ] [ "opengl.gl.gtk" ] }
|
||||||
[ unknown-gl-platform ]
|
[ unknown-gl-platform ]
|
||||||
} cond use-vocab >>
|
} cond use-vocab >>
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Anton Gorenko
|
|
@ -0,0 +1,14 @@
|
||||||
|
! Copyright (C) 2010 Anton Gorenko.
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
|
USING: alien alien.strings io.encodings.ascii
|
||||||
|
gdk.gl.ffi ;
|
||||||
|
IN: opengl.gl.gtk
|
||||||
|
|
||||||
|
: gl-function-context ( -- context )
|
||||||
|
gdk_gl_context_get_current ; inline
|
||||||
|
|
||||||
|
: gl-function-address ( name -- address )
|
||||||
|
ascii string>alien gdk_gl_get_proc_address ; inline
|
||||||
|
|
||||||
|
: gl-function-calling-convention ( -- str ) cdecl ; inline
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1 @@
|
||||||
|
Anton Gorenko
|
|
@ -0,0 +1,658 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<!-- This file was automatically generated from C sources - DO NOT EDIT!
|
||||||
|
To affect the contents of this file, edit the original C definitions,
|
||||||
|
and/or use gtk-doc annotations. -->
|
||||||
|
<repository version="1.2"
|
||||||
|
xmlns="http://www.gtk.org/introspection/core/1.0"
|
||||||
|
xmlns:c="http://www.gtk.org/introspection/c/1.0"
|
||||||
|
xmlns:glib="http://www.gtk.org/introspection/glib/1.0">
|
||||||
|
<include name="GLib" version="2.0"/>
|
||||||
|
<include name="GObject" version="2.0"/>
|
||||||
|
<include name="Pango" version="1.0"/>
|
||||||
|
<include name="PangoFT2" version="1.0"/>
|
||||||
|
<include name="cairo" version="1.0"/>
|
||||||
|
<include name="fontconfig" version="2.0"/>
|
||||||
|
<include name="freetype2" version="2.0"/>
|
||||||
|
<package name="cairo"/>
|
||||||
|
<package name="gobject-2.0"/>
|
||||||
|
<namespace name="PangoCairo"
|
||||||
|
version="1.0"
|
||||||
|
shared-library="libpangocairo-1.0.so.0"
|
||||||
|
c:identifier-prefixes="PangoCairo"
|
||||||
|
c:symbol-prefixes="pango_cairo">
|
||||||
|
<class name="FcFontMap"
|
||||||
|
c:symbol-prefix="fc_font_map"
|
||||||
|
c:type="PangoCairoFcFontMap"
|
||||||
|
parent="Pango.FontMap"
|
||||||
|
glib:type-name="PangoCairoFcFontMap"
|
||||||
|
glib:get-type="pango_cairo_fc_font_map_get_type">
|
||||||
|
<implements name="FontMap"/>
|
||||||
|
<field name="parent_instance" introspectable="0">
|
||||||
|
<type c:type="PangoFcFontMap"/>
|
||||||
|
</field>
|
||||||
|
<field name="dpi">
|
||||||
|
<type name="gdouble" c:type="double"/>
|
||||||
|
</field>
|
||||||
|
<field name="library">
|
||||||
|
<type name="freetype2.Library" c:type="FT_Library"/>
|
||||||
|
</field>
|
||||||
|
</class>
|
||||||
|
<interface name="Font"
|
||||||
|
c:symbol-prefix="font"
|
||||||
|
c:type="PangoCairoFont"
|
||||||
|
version="1.18"
|
||||||
|
glib:type-name="PangoCairoFont"
|
||||||
|
glib:get-type="pango_cairo_font_get_type">
|
||||||
|
<doc xml:whitespace="preserve">#PangoCairoFont is an interface exported by fonts for
|
||||||
|
use with Cairo. The actual type of the font will depend
|
||||||
|
on the particular font technology Cairo was compiled to use.</doc>
|
||||||
|
<prerequisite name="Pango.Font"/>
|
||||||
|
<method name="get_scaled_font"
|
||||||
|
c:identifier="pango_cairo_font_get_scaled_font"
|
||||||
|
version="1.18">
|
||||||
|
<doc xml:whitespace="preserve">Gets the #cairo_scaled_font_t used by @font.
|
||||||
|
The scaled font can be referenced and kept using
|
||||||
|
cairo_scaled_font_reference().
|
||||||
|
or %NULL if @font is %NULL.</doc>
|
||||||
|
<return-value transfer-ownership="full">
|
||||||
|
<doc xml:whitespace="preserve">the #cairo_scaled_font_t used by @font,</doc>
|
||||||
|
<type name="cairo.ScaledFont" c:type="cairo_scaled_font_t*"/>
|
||||||
|
</return-value>
|
||||||
|
</method>
|
||||||
|
</interface>
|
||||||
|
<interface name="FontMap"
|
||||||
|
c:symbol-prefix="font_map"
|
||||||
|
c:type="PangoCairoFontMap"
|
||||||
|
version="1.10"
|
||||||
|
glib:type-name="PangoCairoFontMap"
|
||||||
|
glib:get-type="pango_cairo_font_map_get_type">
|
||||||
|
<doc xml:whitespace="preserve">#PangoCairoFontMap is an interface exported by font maps for
|
||||||
|
use with Cairo. The actual type of the font map will depend
|
||||||
|
on the particular font technology Cairo was compiled to use.</doc>
|
||||||
|
<prerequisite name="Pango.FontMap"/>
|
||||||
|
<method name="create_context"
|
||||||
|
c:identifier="pango_cairo_font_map_create_context"
|
||||||
|
version="1.10"
|
||||||
|
introspectable="0"
|
||||||
|
deprecated="Use pango_font_map_create_context() instead."
|
||||||
|
deprecated-version="1.22">
|
||||||
|
<doc xml:whitespace="preserve">Create a #PangoContext for the given fontmap.</doc>
|
||||||
|
<return-value>
|
||||||
|
<doc xml:whitespace="preserve">the newly created context; free with g_object_unref().</doc>
|
||||||
|
<type name="Pango.Context" c:type="PangoContext*"/>
|
||||||
|
</return-value>
|
||||||
|
</method>
|
||||||
|
<method name="get_font_type"
|
||||||
|
c:identifier="pango_cairo_font_map_get_font_type"
|
||||||
|
version="1.18">
|
||||||
|
<doc xml:whitespace="preserve">Gets the type of Cairo font backend that @fontmap uses.</doc>
|
||||||
|
<return-value transfer-ownership="full">
|
||||||
|
<doc xml:whitespace="preserve">the #cairo_font_type_t cairo font backend type</doc>
|
||||||
|
<type name="cairo.FontType" c:type="cairo_font_type_t"/>
|
||||||
|
</return-value>
|
||||||
|
</method>
|
||||||
|
<method name="get_resolution"
|
||||||
|
c:identifier="pango_cairo_font_map_get_resolution"
|
||||||
|
version="1.10">
|
||||||
|
<doc xml:whitespace="preserve">Gets the resolution for the fontmap. See pango_cairo_font_map_set_resolution()</doc>
|
||||||
|
<return-value transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">the resolution in "dots per inch"</doc>
|
||||||
|
<type name="gdouble" c:type="double"/>
|
||||||
|
</return-value>
|
||||||
|
</method>
|
||||||
|
<method name="set_default"
|
||||||
|
c:identifier="pango_cairo_font_map_set_default"
|
||||||
|
version="1.22">
|
||||||
|
<doc xml:whitespace="preserve">Sets a default #PangoCairoFontMap to use with Cairo.
|
||||||
|
This can be used to change the Cairo font backend that the
|
||||||
|
default fontmap uses for example. The old default font map
|
||||||
|
is unreffed and the new font map referenced.
|
||||||
|
A value of %NULL for @fontmap will cause the current default
|
||||||
|
font map to be released and a new default font
|
||||||
|
map to be created on demand, using pango_cairo_font_map_new().</doc>
|
||||||
|
<return-value transfer-ownership="none">
|
||||||
|
<type name="none" c:type="void"/>
|
||||||
|
</return-value>
|
||||||
|
</method>
|
||||||
|
<method name="set_resolution"
|
||||||
|
c:identifier="pango_cairo_font_map_set_resolution"
|
||||||
|
version="1.10">
|
||||||
|
<doc xml:whitespace="preserve">Sets the resolution for the fontmap. This is a scale factor between
|
||||||
|
points specified in a #PangoFontDescription and Cairo units. The
|
||||||
|
default value is 96, meaning that a 10 point font will be 13
|
||||||
|
units high. (10 * 96. / 72. = 13.3).</doc>
|
||||||
|
<return-value transfer-ownership="none">
|
||||||
|
<type name="none" c:type="void"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<parameter name="dpi" transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">the resolution in "dots per inch". (Physical inches aren't actually involved; the terminology is conventional.)</doc>
|
||||||
|
<type name="gdouble" c:type="double"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</method>
|
||||||
|
</interface>
|
||||||
|
<callback name="ShapeRendererFunc" c:type="PangoCairoShapeRendererFunc">
|
||||||
|
<return-value transfer-ownership="none">
|
||||||
|
<type name="none" c:type="void"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<parameter name="cr" transfer-ownership="none">
|
||||||
|
<type name="cairo.Context" c:type="cairo_t*"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="attr" transfer-ownership="none">
|
||||||
|
<type name="Pango.AttrShape" c:type="PangoAttrShape*"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="do_path" transfer-ownership="none">
|
||||||
|
<type name="gboolean" c:type="gboolean"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="data" transfer-ownership="none">
|
||||||
|
<type name="gpointer" c:type="gpointer"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</callback>
|
||||||
|
<function name="context_get_font_options"
|
||||||
|
c:identifier="pango_cairo_context_get_font_options"
|
||||||
|
version="1.10">
|
||||||
|
<doc xml:whitespace="preserve">Retrieves any font rendering options previously set with
|
||||||
|
pango_cairo_font_map_set_font_options(). This function does not report options
|
||||||
|
that are derived from the target surface by pango_cairo_update_context()
|
||||||
|
if no options have been set. This value is owned by the context
|
||||||
|
and must not be modified or freed.</doc>
|
||||||
|
<return-value transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">the font options previously set on the context, or %NULL</doc>
|
||||||
|
<type name="cairo.FontOptions" c:type="cairo_font_options_t*"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<parameter name="context" transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">a #PangoContext, from a pangocairo font map</doc>
|
||||||
|
<type name="Pango.Context" c:type="PangoContext*"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function>
|
||||||
|
<function name="context_get_resolution"
|
||||||
|
c:identifier="pango_cairo_context_get_resolution"
|
||||||
|
version="1.10">
|
||||||
|
<doc xml:whitespace="preserve">Gets the resolution for the context. See pango_cairo_context_set_resolution()
|
||||||
|
be returned if no resolution has previously been set.</doc>
|
||||||
|
<return-value transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">the resolution in "dots per inch". A negative value will</doc>
|
||||||
|
<type name="gdouble" c:type="double"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<parameter name="context" transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">a #PangoContext, from a pangocairo font map</doc>
|
||||||
|
<type name="Pango.Context" c:type="PangoContext*"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function>
|
||||||
|
<function name="context_get_shape_renderer"
|
||||||
|
c:identifier="pango_cairo_context_get_shape_renderer"
|
||||||
|
version="1.18"
|
||||||
|
introspectable="0">
|
||||||
|
<doc xml:whitespace="preserve">Sets callback function for context to use for rendering attributes
|
||||||
|
of type %PANGO_ATTR_SHAPE. See #PangoCairoShapeRendererFunc for
|
||||||
|
details.
|
||||||
|
Retrieves callback function and associated user data for rendering
|
||||||
|
attributes of type %PANGO_ATTR_SHAPE as set by
|
||||||
|
pango_cairo_context_set_shape_renderer(), if any.
|
||||||
|
if no shape rendering callback have been set.</doc>
|
||||||
|
<return-value>
|
||||||
|
<doc xml:whitespace="preserve">the shape rendering callback previously set on the context, or %NULL</doc>
|
||||||
|
<type name="ShapeRendererFunc" c:type="PangoCairoShapeRendererFunc"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<parameter name="context" transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">a #PangoContext, from a pangocairo font map</doc>
|
||||||
|
<type name="Pango.Context" c:type="PangoContext*"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="data" transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">Pointer to #gpointer to return user data</doc>
|
||||||
|
<type name="gpointer" c:type="gpointer*"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function>
|
||||||
|
<function name="context_set_font_options"
|
||||||
|
c:identifier="pango_cairo_context_set_font_options"
|
||||||
|
version="1.10">
|
||||||
|
<doc xml:whitespace="preserve">Sets the font options used when rendering text with this context.
|
||||||
|
These options override any options that pango_cairo_update_context()
|
||||||
|
derives from the target surface.</doc>
|
||||||
|
<return-value transfer-ownership="none">
|
||||||
|
<type name="none" c:type="void"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<parameter name="context" transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">a #PangoContext, from a pangocairo font map</doc>
|
||||||
|
<type name="Pango.Context" c:type="PangoContext*"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="options" transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">a #cairo_font_options_t, or %NULL to unset any previously set options. A copy is made.</doc>
|
||||||
|
<type name="cairo.FontOptions" c:type="cairo_font_options_t*"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function>
|
||||||
|
<function name="context_set_resolution"
|
||||||
|
c:identifier="pango_cairo_context_set_resolution"
|
||||||
|
version="1.10">
|
||||||
|
<doc xml:whitespace="preserve">Sets the resolution for the context. This is a scale factor between
|
||||||
|
points specified in a #PangoFontDescription and Cairo units. The
|
||||||
|
default value is 96, meaning that a 10 point font will be 13
|
||||||
|
units high. (10 * 96. / 72. = 13.3).</doc>
|
||||||
|
<return-value transfer-ownership="none">
|
||||||
|
<type name="none" c:type="void"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<parameter name="context" transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">a #PangoContext, from a pangocairo font map</doc>
|
||||||
|
<type name="Pango.Context" c:type="PangoContext*"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="dpi" transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">the resolution in "dots per inch". (Physical inches aren't actually involved; the terminology is conventional.) A 0 or negative value means to use the resolution from the font map.</doc>
|
||||||
|
<type name="gdouble" c:type="double"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function>
|
||||||
|
<function name="context_set_shape_renderer"
|
||||||
|
c:identifier="pango_cairo_context_set_shape_renderer"
|
||||||
|
version="1.18">
|
||||||
|
<doc xml:whitespace="preserve">Sets callback function for context to use for rendering attributes
|
||||||
|
of type %PANGO_ATTR_SHAPE. See #PangoCairoShapeRendererFunc for
|
||||||
|
details.</doc>
|
||||||
|
<return-value transfer-ownership="none">
|
||||||
|
<type name="none" c:type="void"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<parameter name="context" transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">a #PangoContext, from a pangocairo font map</doc>
|
||||||
|
<type name="Pango.Context" c:type="PangoContext*"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="func"
|
||||||
|
transfer-ownership="none"
|
||||||
|
scope="notified"
|
||||||
|
closure="2"
|
||||||
|
destroy="3">
|
||||||
|
<doc xml:whitespace="preserve">Callback function for rendering attributes of type %PANGO_ATTR_SHAPE, or %NULL to disable shape rendering.</doc>
|
||||||
|
<type name="ShapeRendererFunc" c:type="PangoCairoShapeRendererFunc"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="data" transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">User data that will be passed to @func.</doc>
|
||||||
|
<type name="gpointer" c:type="gpointer"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="dnotify" transfer-ownership="none" scope="async">
|
||||||
|
<doc xml:whitespace="preserve">Callback that will be called when the context is freed to release @data, or %NULL.</doc>
|
||||||
|
<type name="GLib.DestroyNotify" c:type="GDestroyNotify"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function>
|
||||||
|
<function name="create_context"
|
||||||
|
c:identifier="pango_cairo_create_context"
|
||||||
|
version="1.22"
|
||||||
|
introspectable="0">
|
||||||
|
<doc xml:whitespace="preserve">Creates a context object set up to match the current transformation
|
||||||
|
and target surface of the Cairo context. This context can then be
|
||||||
|
used to create a layout using pango_layout_new().
|
||||||
|
This function is a convenience function that creates a context using
|
||||||
|
the default font map, then updates it to @cr. If you just need to
|
||||||
|
create a layout for use with @cr and do not need to access #PangoContext
|
||||||
|
directly, you can use pango_cairo_create_layout() instead.
|
||||||
|
g_object_unref().</doc>
|
||||||
|
<return-value>
|
||||||
|
<doc xml:whitespace="preserve">the newly created #PangoContext. Free with</doc>
|
||||||
|
<type name="Pango.Context" c:type="PangoContext*"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<parameter name="cr" transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">a Cairo context</doc>
|
||||||
|
<type name="cairo.Context" c:type="cairo_t*"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function>
|
||||||
|
<function name="create_layout"
|
||||||
|
c:identifier="pango_cairo_create_layout"
|
||||||
|
version="1.10"
|
||||||
|
introspectable="0">
|
||||||
|
<doc xml:whitespace="preserve">Creates a layout object set up to match the current transformation
|
||||||
|
and target surface of the Cairo context. This layout can then be
|
||||||
|
used for text measurement with functions like
|
||||||
|
pango_layout_get_size() or drawing with functions like
|
||||||
|
pango_cairo_show_layout(). If you change the transformation
|
||||||
|
or target surface for @cr, you need to call pango_cairo_update_layout()
|
||||||
|
This function is the most convenient way to use Cairo with Pango,
|
||||||
|
however it is slightly inefficient since it creates a separate
|
||||||
|
#PangoContext object for each layout. This might matter in an
|
||||||
|
application that was laying out large amounts of text.
|
||||||
|
g_object_unref().</doc>
|
||||||
|
<return-value>
|
||||||
|
<doc xml:whitespace="preserve">the newly created #PangoLayout. Free with</doc>
|
||||||
|
<type name="Pango.Layout" c:type="PangoLayout*"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<parameter name="cr" transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">a Cairo context</doc>
|
||||||
|
<type name="cairo.Context" c:type="cairo_t*"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function>
|
||||||
|
<function name="error_underline_path"
|
||||||
|
c:identifier="pango_cairo_error_underline_path"
|
||||||
|
version="1.14">
|
||||||
|
<doc xml:whitespace="preserve">Add a squiggly line to the current path in the specified cairo context that
|
||||||
|
approximately covers the given rectangle in the style of an underline used
|
||||||
|
to indicate a spelling error. (The width of the underline is rounded to an
|
||||||
|
integer number of up/down segments and the resulting rectangle is centered
|
||||||
|
in the original rectangle)</doc>
|
||||||
|
<return-value transfer-ownership="none">
|
||||||
|
<type name="none" c:type="void"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<parameter name="cr" transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">a Cairo context</doc>
|
||||||
|
<type name="cairo.Context" c:type="cairo_t*"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="x" transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">The X coordinate of one corner of the rectangle</doc>
|
||||||
|
<type name="gdouble" c:type="double"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="y" transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">The Y coordinate of one corner of the rectangle</doc>
|
||||||
|
<type name="gdouble" c:type="double"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="width" transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">Non-negative width of the rectangle</doc>
|
||||||
|
<type name="gdouble" c:type="double"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="height" transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">Non-negative height of the rectangle</doc>
|
||||||
|
<type name="gdouble" c:type="double"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function>
|
||||||
|
<function name="font_map_get_default"
|
||||||
|
c:identifier="pango_cairo_font_map_get_default"
|
||||||
|
version="1.10"
|
||||||
|
introspectable="0">
|
||||||
|
<doc xml:whitespace="preserve">Gets a default #PangoCairoFontMap to use with Cairo.
|
||||||
|
Note that the type of the returned object will depend
|
||||||
|
on the particular font backend Cairo was compiled to use;
|
||||||
|
You generally should only use the #PangoFontMap and
|
||||||
|
#PangoCairoFontMap interfaces on the returned object.
|
||||||
|
The default Cairo fontmap can be changed by using
|
||||||
|
pango_cairo_font_map_set_default(). This can be used to
|
||||||
|
change the Cairo font backend that the default fontmap
|
||||||
|
uses for example.
|
||||||
|
object is owned by Pango and must not be freed.</doc>
|
||||||
|
<return-value>
|
||||||
|
<doc xml:whitespace="preserve">the default Cairo fontmap for Pango. This</doc>
|
||||||
|
<type name="Pango.FontMap" c:type="PangoFontMap*"/>
|
||||||
|
</return-value>
|
||||||
|
</function>
|
||||||
|
<function name="font_map_new"
|
||||||
|
c:identifier="pango_cairo_font_map_new"
|
||||||
|
version="1.10"
|
||||||
|
introspectable="0">
|
||||||
|
<doc xml:whitespace="preserve">Creates a new #PangoCairoFontMap object; a fontmap is used
|
||||||
|
to cache information about available fonts, and holds
|
||||||
|
certain global parameters such as the resolution.
|
||||||
|
In most cases, you can use pango_cairo_font_map_get_default()
|
||||||
|
instead.
|
||||||
|
Note that the type of the returned object will depend
|
||||||
|
on the particular font backend Cairo was compiled to use;
|
||||||
|
You generally should only use the #PangoFontMap and
|
||||||
|
#PangoCairoFontMap interfaces on the returned object.
|
||||||
|
be freed with g_object_unref().</doc>
|
||||||
|
<return-value>
|
||||||
|
<doc xml:whitespace="preserve">the newly allocated #PangoFontMap, which should</doc>
|
||||||
|
<type name="Pango.FontMap" c:type="PangoFontMap*"/>
|
||||||
|
</return-value>
|
||||||
|
</function>
|
||||||
|
<function name="font_map_new_for_font_type"
|
||||||
|
c:identifier="pango_cairo_font_map_new_for_font_type"
|
||||||
|
version="1.18"
|
||||||
|
introspectable="0">
|
||||||
|
<doc xml:whitespace="preserve">Creates a new #PangoCairoFontMap object of the type suitable
|
||||||
|
to be used with cairo font backend of type @fonttype.
|
||||||
|
In most cases one should simply use @pango_cairo_font_map_new(),
|
||||||
|
or in fact in most of those cases, just use
|
||||||
|
which should be freed with g_object_unref(),
|
||||||
|
or %NULL if the requested cairo font backend is
|
||||||
|
not supported / compiled in.</doc>
|
||||||
|
<return-value>
|
||||||
|
<doc xml:whitespace="preserve">the newly allocated #PangoFontMap of suitable type</doc>
|
||||||
|
<type name="Pango.FontMap" c:type="PangoFontMap*"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<parameter name="fonttype" transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">desired #cairo_font_type_t</doc>
|
||||||
|
<type name="cairo.FontType" c:type="cairo_font_type_t"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function>
|
||||||
|
<function name="glyph_string_path"
|
||||||
|
c:identifier="pango_cairo_glyph_string_path">
|
||||||
|
<return-value transfer-ownership="none">
|
||||||
|
<type name="none" c:type="void"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<parameter name="cr" transfer-ownership="none">
|
||||||
|
<type name="cairo.Context" c:type="cairo_t*"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="font" transfer-ownership="none">
|
||||||
|
<type name="Pango.Font" c:type="PangoFont*"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="glyphs" transfer-ownership="none">
|
||||||
|
<type name="Pango.GlyphString" c:type="PangoGlyphString*"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function>
|
||||||
|
<function name="layout_line_path"
|
||||||
|
c:identifier="pango_cairo_layout_line_path"
|
||||||
|
version="1.10">
|
||||||
|
<doc xml:whitespace="preserve">Adds the text in #PangoLayoutLine to the current path in the
|
||||||
|
specified cairo context. The origin of the glyphs (the left edge
|
||||||
|
of the line) will be at the current point of the cairo context.</doc>
|
||||||
|
<return-value transfer-ownership="none">
|
||||||
|
<type name="none" c:type="void"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<parameter name="cr" transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">a Cairo context</doc>
|
||||||
|
<type name="cairo.Context" c:type="cairo_t*"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="line" transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">a #PangoLayoutLine</doc>
|
||||||
|
<type name="Pango.LayoutLine" c:type="PangoLayoutLine*"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function>
|
||||||
|
<function name="layout_path"
|
||||||
|
c:identifier="pango_cairo_layout_path"
|
||||||
|
version="1.10">
|
||||||
|
<doc xml:whitespace="preserve">Adds the text in a #PangoLayout to the current path in the
|
||||||
|
specified cairo context. The top-left corner of the #PangoLayout
|
||||||
|
will be at the current point of the cairo context.</doc>
|
||||||
|
<return-value transfer-ownership="none">
|
||||||
|
<type name="none" c:type="void"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<parameter name="cr" transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">a Cairo context</doc>
|
||||||
|
<type name="cairo.Context" c:type="cairo_t*"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="layout" transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">a Pango layout</doc>
|
||||||
|
<type name="Pango.Layout" c:type="PangoLayout*"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function>
|
||||||
|
<function name="show_error_underline"
|
||||||
|
c:identifier="pango_cairo_show_error_underline"
|
||||||
|
version="1.14">
|
||||||
|
<doc xml:whitespace="preserve">Draw a squiggly line in the specified cairo context that approximately
|
||||||
|
covers the given rectangle in the style of an underline used to indicate a
|
||||||
|
spelling error. (The width of the underline is rounded to an integer
|
||||||
|
number of up/down segments and the resulting rectangle is centered in the
|
||||||
|
original rectangle)</doc>
|
||||||
|
<return-value transfer-ownership="none">
|
||||||
|
<type name="none" c:type="void"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<parameter name="cr" transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">a Cairo context</doc>
|
||||||
|
<type name="cairo.Context" c:type="cairo_t*"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="x" transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">The X coordinate of one corner of the rectangle</doc>
|
||||||
|
<type name="gdouble" c:type="double"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="y" transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">The Y coordinate of one corner of the rectangle</doc>
|
||||||
|
<type name="gdouble" c:type="double"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="width" transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">Non-negative width of the rectangle</doc>
|
||||||
|
<type name="gdouble" c:type="double"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="height" transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">Non-negative height of the rectangle</doc>
|
||||||
|
<type name="gdouble" c:type="double"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function>
|
||||||
|
<function name="show_glyph_item"
|
||||||
|
c:identifier="pango_cairo_show_glyph_item"
|
||||||
|
version="1.22">
|
||||||
|
<doc xml:whitespace="preserve">Draws the glyphs in @glyph_item in the specified cairo context,
|
||||||
|
embedding the text associated with the glyphs in the output if the
|
||||||
|
output format supports it (PDF for example), otherwise it acts
|
||||||
|
similar to pango_cairo_show_glyph_string().
|
||||||
|
The origin of the glyphs (the left edge of the baseline) will
|
||||||
|
be drawn at the current point of the cairo context.
|
||||||
|
Note that @text is the start of the text for layout, which is then
|
||||||
|
indexed by <literal>@glyph_item->item->offset</literal>.</doc>
|
||||||
|
<return-value transfer-ownership="none">
|
||||||
|
<type name="none" c:type="void"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<parameter name="cr" transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">a Cairo context</doc>
|
||||||
|
<type name="cairo.Context" c:type="cairo_t*"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="text" transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">the UTF-8 text that @glyph_item refers to</doc>
|
||||||
|
<type name="utf8" c:type="char*"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="glyph_item" transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">a #PangoGlyphItem</doc>
|
||||||
|
<type name="Pango.GlyphItem" c:type="PangoGlyphItem*"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function>
|
||||||
|
<function name="show_glyph_string"
|
||||||
|
c:identifier="pango_cairo_show_glyph_string"
|
||||||
|
version="1.10">
|
||||||
|
<doc xml:whitespace="preserve">Draws the glyphs in @glyphs in the specified cairo context.
|
||||||
|
The origin of the glyphs (the left edge of the baseline) will
|
||||||
|
be drawn at the current point of the cairo context.</doc>
|
||||||
|
<return-value transfer-ownership="none">
|
||||||
|
<type name="none" c:type="void"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<parameter name="cr" transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">a Cairo context</doc>
|
||||||
|
<type name="cairo.Context" c:type="cairo_t*"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="font" transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">a #PangoFont from a #PangoCairoFontMap</doc>
|
||||||
|
<type name="Pango.Font" c:type="PangoFont*"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="glyphs" transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">a #PangoGlyphString</doc>
|
||||||
|
<type name="Pango.GlyphString" c:type="PangoGlyphString*"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function>
|
||||||
|
<function name="show_layout"
|
||||||
|
c:identifier="pango_cairo_show_layout"
|
||||||
|
version="1.10">
|
||||||
|
<doc xml:whitespace="preserve">Draws a #PangoLayout in the specified cairo context.
|
||||||
|
The top-left corner of the #PangoLayout will be drawn
|
||||||
|
at the current point of the cairo context.</doc>
|
||||||
|
<return-value transfer-ownership="none">
|
||||||
|
<type name="none" c:type="void"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<parameter name="cr" transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">a Cairo context</doc>
|
||||||
|
<type name="cairo.Context" c:type="cairo_t*"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="layout" transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">a Pango layout</doc>
|
||||||
|
<type name="Pango.Layout" c:type="PangoLayout*"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function>
|
||||||
|
<function name="show_layout_line"
|
||||||
|
c:identifier="pango_cairo_show_layout_line"
|
||||||
|
version="1.10">
|
||||||
|
<doc xml:whitespace="preserve">Draws a #PangoLayoutLine in the specified cairo context.
|
||||||
|
The origin of the glyphs (the left edge of the line) will
|
||||||
|
be drawn at the current point of the cairo context.</doc>
|
||||||
|
<return-value transfer-ownership="none">
|
||||||
|
<type name="none" c:type="void"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<parameter name="cr" transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">a Cairo context</doc>
|
||||||
|
<type name="cairo.Context" c:type="cairo_t*"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="line" transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">a #PangoLayoutLine</doc>
|
||||||
|
<type name="Pango.LayoutLine" c:type="PangoLayoutLine*"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function>
|
||||||
|
<function name="update_context"
|
||||||
|
c:identifier="pango_cairo_update_context"
|
||||||
|
version="1.10">
|
||||||
|
<doc xml:whitespace="preserve">Updates a #PangoContext previously created for use with Cairo to
|
||||||
|
match the current transformation and target surface of a Cairo
|
||||||
|
context. If any layouts have been created for the context,
|
||||||
|
it's necessary to call pango_layout_context_changed() on those
|
||||||
|
layouts.</doc>
|
||||||
|
<return-value transfer-ownership="none">
|
||||||
|
<type name="none" c:type="void"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<parameter name="cr" transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">a Cairo context</doc>
|
||||||
|
<type name="cairo.Context" c:type="cairo_t*"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="context" transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">a #PangoContext, from a pangocairo font map</doc>
|
||||||
|
<type name="Pango.Context" c:type="PangoContext*"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function>
|
||||||
|
<function name="update_layout"
|
||||||
|
c:identifier="pango_cairo_update_layout"
|
||||||
|
version="1.10">
|
||||||
|
<doc xml:whitespace="preserve">Updates the private #PangoContext of a #PangoLayout created with
|
||||||
|
pango_cairo_create_layout() to match the current transformation
|
||||||
|
and target surface of a Cairo context.</doc>
|
||||||
|
<return-value transfer-ownership="none">
|
||||||
|
<type name="none" c:type="void"/>
|
||||||
|
</return-value>
|
||||||
|
<parameters>
|
||||||
|
<parameter name="cr" transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">a Cairo context</doc>
|
||||||
|
<type name="cairo.Context" c:type="cairo_t*"/>
|
||||||
|
</parameter>
|
||||||
|
<parameter name="layout" transfer-ownership="none">
|
||||||
|
<doc xml:whitespace="preserve">a #PangoLayout, from pango_cairo_create_layout()</doc>
|
||||||
|
<type name="Pango.Layout" c:type="PangoLayout*"/>
|
||||||
|
</parameter>
|
||||||
|
</parameters>
|
||||||
|
</function>
|
||||||
|
</namespace>
|
||||||
|
</repository>
|
|
@ -1,2 +1 @@
|
||||||
Matthew Willis
|
Anton Gorenko
|
||||||
Slava Pestov
|
|
|
@ -1,243 +1,5 @@
|
||||||
! Copyright (C) 2008 Matthew Willis.
|
! Copyright (C) 2010 Anton Gorenko.
|
||||||
! Copyright (C) 2009 Slava Pestov.
|
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
!
|
USING: pango.cairo.ffi ;
|
||||||
! pangocairo bindings, from pango/pangocairo.h
|
|
||||||
USING: arrays sequences alien alien.c-types alien.data
|
|
||||||
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 cache init system
|
|
||||||
math.rectangles fry memoize io.encodings.utf8 classes.struct
|
|
||||||
cairo cairo.ffi ;
|
|
||||||
IN: pango.cairo
|
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 ) ;
|
|
||||||
|
|
||||||
FUNCTION: double
|
|
||||||
pango_cairo_font_map_get_resolution ( PangoCairoFontMap* fontmap ) ;
|
|
||||||
|
|
||||||
FUNCTION: PangoContext*
|
|
||||||
pango_cairo_font_map_create_context ( PangoCairoFontMap* fontmap ) ;
|
|
||||||
|
|
||||||
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 ) ;
|
|
||||||
|
|
||||||
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: void
|
|
||||||
pango_cairo_error_underline_path ( cairo_t* cr, double x, double y, double width, double height ) ;
|
|
||||||
|
|
||||||
TUPLE: layout < disposable font string selection layout metrics ink-rect logical-rect image ;
|
|
||||||
|
|
||||||
SYMBOL: dpi
|
|
||||||
|
|
||||||
72 dpi set-global
|
|
||||||
|
|
||||||
: set-layout-font ( font layout -- )
|
|
||||||
swap cache-font-description pango_layout_set_font_description ;
|
|
||||||
|
|
||||||
: set-layout-text ( str layout -- )
|
|
||||||
swap -1 pango_layout_set_text ;
|
|
||||||
|
|
||||||
: layout-extents ( layout -- ink-rect logical-rect )
|
|
||||||
PangoRectangle <struct>
|
|
||||||
PangoRectangle <struct>
|
|
||||||
[ pango_layout_get_extents ] 2keep
|
|
||||||
[ PangoRectangle>rect ] bi@ ;
|
|
||||||
|
|
||||||
: layout-baseline ( layout -- baseline )
|
|
||||||
pango_layout_get_iter &pango_layout_iter_free
|
|
||||||
pango_layout_iter_get_baseline
|
|
||||||
pango>float ;
|
|
||||||
|
|
||||||
: set-foreground ( cr font -- )
|
|
||||||
foreground>> set-source-color ;
|
|
||||||
|
|
||||||
: fill-background ( cr font dim -- )
|
|
||||||
[ background>> set-source-color ]
|
|
||||||
[ [ { 0 0 } ] dip <rect> fill-rect ] bi-curry* bi ;
|
|
||||||
|
|
||||||
: rect-translate-x ( rect x -- rect' )
|
|
||||||
'[ _ 0 2array v- ] change-loc ;
|
|
||||||
|
|
||||||
: first-line ( layout -- line )
|
|
||||||
layout>> 0 pango_layout_get_line_readonly ;
|
|
||||||
|
|
||||||
: line-offset>x ( layout n -- x )
|
|
||||||
#! n is an index into the UTF8 encoding of the text
|
|
||||||
[ drop first-line ] [ swap string>> >utf8-index ] 2bi
|
|
||||||
0 { int } [ pango_layout_line_index_to_x ] with-out-parameters
|
|
||||||
pango>float ;
|
|
||||||
|
|
||||||
: x>line-offset ( layout x -- n )
|
|
||||||
#! n is an index into the UTF8 encoding of the text
|
|
||||||
[
|
|
||||||
[ first-line ] dip
|
|
||||||
float>pango
|
|
||||||
{ int int }
|
|
||||||
[ pango_layout_line_x_to_index drop ] with-out-parameters
|
|
||||||
swap
|
|
||||||
] [ drop string>> ] 2bi utf8-index> + ;
|
|
||||||
|
|
||||||
: selection-start/end ( selection -- start end )
|
|
||||||
selection>> [ start>> ] [ end>> ] bi ;
|
|
||||||
|
|
||||||
: selection-rect ( layout -- rect )
|
|
||||||
[ ink-rect>> dim>> ] [ ] [ selection-start/end ] tri [ line-offset>x ] bi-curry@ bi
|
|
||||||
[ drop nip 0 2array ] [ swap - swap second 2array ] 3bi <rect> ;
|
|
||||||
|
|
||||||
: fill-selection-background ( cr layout -- )
|
|
||||||
dup selection>> [
|
|
||||||
[ selection>> color>> set-source-color ]
|
|
||||||
[
|
|
||||||
[ selection-rect ] [ ink-rect>> loc>> first ] bi
|
|
||||||
rect-translate-x
|
|
||||||
fill-rect
|
|
||||||
] 2bi
|
|
||||||
] [ 2drop ] if ;
|
|
||||||
|
|
||||||
: text-position ( layout -- loc )
|
|
||||||
[ logical-rect>> ] [ ink-rect>> ] bi [ loc>> ] bi@ v- ;
|
|
||||||
|
|
||||||
: set-text-position ( cr loc -- )
|
|
||||||
first2 cairo_move_to ;
|
|
||||||
|
|
||||||
: draw-layout ( layout -- image )
|
|
||||||
dup ink-rect>> dim>> [ >fixnum ] map [
|
|
||||||
swap {
|
|
||||||
[ layout>> pango_cairo_update_layout ]
|
|
||||||
[ [ font>> ] [ ink-rect>> dim>> ] bi fill-background ]
|
|
||||||
[ fill-selection-background ]
|
|
||||||
[ text-position set-text-position ]
|
|
||||||
[ font>> set-foreground ]
|
|
||||||
[ layout>> pango_cairo_show_layout ]
|
|
||||||
} 2cleave
|
|
||||||
] make-bitmap-image ;
|
|
||||||
|
|
||||||
: escape-nulls ( str -- str' )
|
|
||||||
{ { 0 CHAR: zero-width-no-break-space } } substitute ;
|
|
||||||
|
|
||||||
: unpack-selection ( layout string/selection -- layout )
|
|
||||||
dup selection? [
|
|
||||||
[ string>> escape-nulls >>string ] [ >>selection ] bi
|
|
||||||
] [ escape-nulls >>string ] if ; inline
|
|
||||||
|
|
||||||
: set-layout-resolution ( layout -- )
|
|
||||||
pango_layout_get_context dpi get pango_cairo_context_set_resolution ;
|
|
||||||
|
|
||||||
: <PangoLayout> ( text font -- layout )
|
|
||||||
dummy-cairo pango_cairo_create_layout |g_object_unref
|
|
||||||
[ set-layout-resolution ] keep
|
|
||||||
[ set-layout-font ] keep
|
|
||||||
[ set-layout-text ] keep ;
|
|
||||||
|
|
||||||
: glyph-height ( font string -- y )
|
|
||||||
swap <PangoLayout> &g_object_unref layout-extents drop dim>> second ;
|
|
||||||
|
|
||||||
MEMO: missing-font-metrics ( font -- metrics )
|
|
||||||
#! Pango doesn't provide x-height and cap-height but Core Text does, so we
|
|
||||||
#! simulate them on Pango.
|
|
||||||
[
|
|
||||||
[ metrics new ] dip
|
|
||||||
[ "x" glyph-height >>x-height ]
|
|
||||||
[ "Y" glyph-height >>cap-height ] bi
|
|
||||||
] with-destructors ;
|
|
||||||
|
|
||||||
: layout-metrics ( layout -- metrics )
|
|
||||||
dup font>> missing-font-metrics clone
|
|
||||||
swap
|
|
||||||
[ layout>> layout-baseline >>ascent ]
|
|
||||||
[ logical-rect>> dim>> [ first >>width ] [ second >>height ] bi ] bi
|
|
||||||
dup [ height>> ] [ ascent>> ] bi - >>descent ;
|
|
||||||
|
|
||||||
: <layout> ( font string -- line )
|
|
||||||
[
|
|
||||||
layout new-disposable
|
|
||||||
swap unpack-selection
|
|
||||||
swap >>font
|
|
||||||
dup [ string>> ] [ font>> ] bi <PangoLayout> >>layout
|
|
||||||
dup layout>> layout-extents [ >>ink-rect ] [ >>logical-rect ] bi*
|
|
||||||
dup layout-metrics >>metrics
|
|
||||||
dup draw-layout >>image
|
|
||||||
] with-destructors ;
|
|
||||||
|
|
||||||
M: layout dispose* layout>> g_object_unref ;
|
|
||||||
|
|
||||||
SYMBOL: cached-layouts
|
|
||||||
|
|
||||||
: cached-layout ( font string -- layout )
|
|
||||||
cached-layouts get [ <layout> ] 2cache ;
|
|
||||||
|
|
||||||
: cached-line ( font string -- line )
|
|
||||||
cached-layout layout>> first-line ;
|
|
||||||
|
|
||||||
[ <cache-assoc> cached-layouts set-global ] "pango.cairo" add-startup-hook
|
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
! Copyright (C) 2010 Anton Gorenko.
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
|
USING: alien alien.libraries alien.syntax cairo.ffi combinators
|
||||||
|
kernel gobject-introspection system vocabs.loader ;
|
||||||
|
IN: pango.cairo.ffi
|
||||||
|
|
||||||
|
<<
|
||||||
|
"pango.ffi" require
|
||||||
|
>>
|
||||||
|
|
||||||
|
LIBRARY: pango.cairo
|
||||||
|
|
||||||
|
<<
|
||||||
|
"pango.cairo" {
|
||||||
|
{ [ os winnt? ] [ "libpangocairo-1.0-0.dll" cdecl add-library ] }
|
||||||
|
{ [ os macosx? ] [ drop ] }
|
||||||
|
{ [ os unix? ] [ drop ] }
|
||||||
|
} cond
|
||||||
|
>>
|
||||||
|
|
||||||
|
FOREIGN-RECORD-TYPE: cairo.Context cairo_t
|
||||||
|
FOREIGN-RECORD-TYPE: cairo.ScaledFont cairo_scaled_font_t
|
||||||
|
FOREIGN-ENUM-TYPE: cairo.FontType cairo_font_type_t
|
||||||
|
FOREIGN-RECORD-TYPE: cairo.FontOptions cairo_font_options_t
|
||||||
|
|
||||||
|
GIR: vocab:pango/cairo/PangoCairo-1.0.gir
|
|
@ -0,0 +1 @@
|
||||||
|
PangoCairo binding
|
|
@ -0,0 +1 @@
|
||||||
|
bindings
|
|
@ -0,0 +1,38 @@
|
||||||
|
! Copyright (C) 2010 Anton Gorenko.
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
|
USING: alien alien.c-types alien.destructors alien.libraries
|
||||||
|
alien.syntax combinators kernel gobject-introspection
|
||||||
|
gobject-introspection.standard-types system vocabs.loader ;
|
||||||
|
IN: pango.ffi
|
||||||
|
|
||||||
|
<<
|
||||||
|
"gobject.ffi" require
|
||||||
|
>>
|
||||||
|
|
||||||
|
LIBRARY: pango
|
||||||
|
|
||||||
|
<<
|
||||||
|
"pango" {
|
||||||
|
{ [ os winnt? ] [ "libpango-1.0-0.dll" cdecl add-library ] }
|
||||||
|
{ [ os unix? ] [ drop ] }
|
||||||
|
} cond
|
||||||
|
>>
|
||||||
|
|
||||||
|
IMPLEMENT-STRUCTS: PangoRectangle ;
|
||||||
|
|
||||||
|
GIR: vocab:pango/Pango-1.0.gir
|
||||||
|
|
||||||
|
DESTRUCTOR: pango_font_description_free
|
||||||
|
DESTRUCTOR: pango_layout_iter_free
|
||||||
|
|
||||||
|
! <workaround
|
||||||
|
|
||||||
|
FORGET: pango_layout_line_index_to_x
|
||||||
|
FUNCTION: void
|
||||||
|
pango_layout_line_index_to_x ( PangoLayoutLine* line, gint index_, gboolean trailing, gint* x_pos ) ;
|
||||||
|
|
||||||
|
FORGET: pango_layout_line_x_to_index
|
||||||
|
FUNCTION: gboolean
|
||||||
|
pango_layout_line_x_to_index ( PangoLayoutLine* line, gint x_pos, gint* index_, gint* trailing ) ;
|
||||||
|
|
||||||
|
! workaround>
|
|
@ -1,2 +0,0 @@
|
||||||
Matthew Willis
|
|
||||||
Slava Pestov
|
|
|
@ -1,113 +0,0 @@
|
||||||
! 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
|
|
|
@ -1,11 +0,0 @@
|
||||||
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
|
|
|
@ -1,63 +0,0 @@
|
||||||
! Copyright (C) 2008 Matthew Willis.
|
|
||||||
! Copyright (C) 2009 Slava Pestov.
|
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
|
||||||
USING: alien.c-types alien.destructors alien.syntax glib pango
|
|
||||||
pango.fonts ;
|
|
||||||
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
|
|
||||||
|
|
|
@ -1,39 +1,5 @@
|
||||||
! Copyright (C) 2008 Matthew Willis.
|
! Copyright (C) 2009 Anton Gorenko.
|
||||||
! Copyright (C) 2009 Slava Pestov.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
! See http://factorcode.org/license.txt for BSD license
|
USING: pango.ffi ;
|
||||||
USING: arrays system alien.destructors alien.c-types alien.syntax alien
|
|
||||||
combinators math.rectangles kernel math alien.libraries classes.struct
|
|
||||||
accessors ;
|
|
||||||
IN: pango
|
IN: pango
|
||||||
|
|
||||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
||||||
! Helpful functions from other parts of pango
|
|
||||||
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
||||||
|
|
||||||
<< {
|
|
||||||
{ [ 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 >>
|
|
||||||
|
|
||||||
LIBRARY: pango
|
|
||||||
|
|
||||||
CONSTANT: PANGO_SCALE 1024
|
|
||||||
|
|
||||||
: pango>float ( n -- x ) PANGO_SCALE /f ; inline
|
|
||||||
: float>pango ( x -- n ) PANGO_SCALE * >integer ; inline
|
|
||||||
|
|
||||||
C-TYPE: PangoContext
|
|
||||||
|
|
||||||
FUNCTION: PangoContext* pango_context_new ( ) ;
|
|
||||||
|
|
||||||
STRUCT: PangoRectangle
|
|
||||||
{ x int }
|
|
||||||
{ y int }
|
|
||||||
{ width int }
|
|
||||||
{ height int } ;
|
|
||||||
|
|
||||||
: PangoRectangle>rect ( PangoRectangle -- rect )
|
|
||||||
[ [ x>> pango>float ] [ y>> pango>float ] bi 2array ]
|
|
||||||
[ [ width>> pango>float ] [ height>> pango>float ] bi 2array ] bi
|
|
||||||
<rect> ;
|
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Pango binding
|
|
@ -0,0 +1 @@
|
||||||
|
bindings
|
|
@ -140,13 +140,13 @@ os macosx? [
|
||||||
[ "<?xml version=\"1.0\" encoding=\"UTF-8\"?><foo>Factor</foo>" ]
|
[ "<?xml version=\"1.0\" encoding=\"UTF-8\"?><foo>Factor</foo>" ]
|
||||||
[ deploy-test-command ascii [ readln ] with-process-reader ] unit-test
|
[ deploy-test-command ascii [ readln ] with-process-reader ] unit-test
|
||||||
|
|
||||||
[ ] [ 800000 small-enough? ] unit-test
|
[ ] [ 850000 small-enough? ] unit-test
|
||||||
|
|
||||||
[ ] [ "tools.deploy.test.21" shake-and-bake ] unit-test
|
[ ] [ "tools.deploy.test.21" shake-and-bake ] unit-test
|
||||||
|
|
||||||
[ "1 2 3" ]
|
[ "1 2 3" ]
|
||||||
[ deploy-test-command ascii [ readln ] with-process-reader ] unit-test
|
[ deploy-test-command ascii [ readln ] with-process-reader ] unit-test
|
||||||
|
|
||||||
[ ] [ 600000 small-enough? ] unit-test
|
[ ] [ 800000 small-enough? ] unit-test
|
||||||
|
|
||||||
[ ] [ "benchmark.ui-panes" shake-and-bake run-temp-image ] unit-test
|
[ ] [ "benchmark.ui-panes" shake-and-bake run-temp-image ] unit-test
|
||||||
|
|
|
@ -93,6 +93,13 @@ IN: tools.deploy.shaker
|
||||||
run-file
|
run-file
|
||||||
] when ;
|
] when ;
|
||||||
|
|
||||||
|
: strip-gobject ( -- )
|
||||||
|
"gobject-introspection.types" vocab [
|
||||||
|
"Stripping GObject type info" show
|
||||||
|
"vocab:tools/deploy/shaker/strip-gobject.factor"
|
||||||
|
run-file
|
||||||
|
] when ;
|
||||||
|
|
||||||
: strip-specialized-arrays ( -- )
|
: strip-specialized-arrays ( -- )
|
||||||
strip-dictionary? "specialized-arrays" vocab and [
|
strip-dictionary? "specialized-arrays" vocab and [
|
||||||
"Stripping specialized arrays" show
|
"Stripping specialized arrays" show
|
||||||
|
@ -534,6 +541,7 @@ SYMBOL: deploy-vocab
|
||||||
strip-destructors
|
strip-destructors
|
||||||
strip-call
|
strip-call
|
||||||
strip-cocoa
|
strip-cocoa
|
||||||
|
strip-gobject
|
||||||
strip-debugger
|
strip-debugger
|
||||||
strip-ui-error-hook
|
strip-ui-error-hook
|
||||||
strip-specialized-arrays
|
strip-specialized-arrays
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
USING: namespaces assocs gobject-introspection.types ;
|
||||||
|
|
||||||
|
type-infos global delete-at
|
|
@ -10,6 +10,6 @@ H{
|
||||||
{ deploy-reflection 1 }
|
{ deploy-reflection 1 }
|
||||||
{ deploy-word-props? f }
|
{ deploy-word-props? f }
|
||||||
{ deploy-math? t }
|
{ deploy-math? t }
|
||||||
{ deploy-threads? t }
|
{ deploy-threads? f }
|
||||||
{ deploy-word-defs? f }
|
{ deploy-word-defs? f }
|
||||||
}
|
}
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue