]> gitweb.factorcode.org Git - factor.git/commitdiff
Merge branch 'master' of factorcode.org:/git/factor
authorJoe Groff <arcata@gmail.com>
Sun, 28 Aug 2011 00:04:43 +0000 (17:04 -0700)
committerJoe Groff <arcata@gmail.com>
Sun, 28 Aug 2011 00:04:43 +0000 (17:04 -0700)
69 files changed:
basis/alien/enums/enums-tests.factor
basis/alien/enums/enums.factor
basis/alien/parser/parser.factor
basis/alien/syntax/syntax.factor
basis/cocoa/cocoa.factor
basis/cocoa/messages/messages.factor
basis/gdk/pixbuf/ffi/ffi.factor
basis/glib/ffi/ffi.factor
basis/images/cocoa/authors.txt [new file with mode: 0644]
basis/images/cocoa/cocoa.factor [new file with mode: 0644]
basis/images/cocoa/platforms.txt [new file with mode: 0644]
basis/images/cocoa/summary.txt [new file with mode: 0644]
basis/images/gdiplus/gdiplus.factor [new file with mode: 0644]
basis/images/gdiplus/platforms.txt [new file with mode: 0644]
basis/images/gtk/authors.txt [new file with mode: 0644]
basis/images/gtk/gtk.factor [new file with mode: 0644]
basis/images/gtk/platforms.txt [new file with mode: 0644]
basis/images/gtk/summary.txt [new file with mode: 0644]
basis/images/images-tests.factor
basis/images/images.factor
basis/images/tesselation/tesselation-tests.factor
basis/opengl/textures/textures.factor
basis/tools/deploy/shaker/shaker.factor
basis/tools/deploy/shaker/strip-gtk-icon.factor [new file with mode: 0644]
basis/tools/deploy/unix/unix.factor
basis/ui/backend/gtk/gtk.factor
basis/ui/images/images.factor
basis/windows/com/com.factor
basis/windows/gdiplus/gdiplus.factor [new file with mode: 0644]
basis/windows/gdiplus/platforms.txt [new file with mode: 0644]
basis/windows/ole32/ole32.factor
basis/windows/streams/platforms.txt [new file with mode: 0644]
basis/windows/streams/streams.factor [new file with mode: 0644]
basis/windows/streams/summary.txt [new file with mode: 0644]
basis/windows/types/types.factor
basis/windows/windows.factor
core/vocabs/loader/loader-docs.factor
extra/gpu/textures/textures.factor
extra/images/testing/bmp/42red_24bit.fig
extra/images/testing/bmp/rgb_8bit.fig
extra/images/testing/gif/alpha.fig
extra/images/testing/gif/astronaut_animation.fig
extra/images/testing/gif/checkmark.fig
extra/images/testing/gif/circle.fig
extra/images/testing/gif/monochrome.fig
extra/images/testing/gif/noise.fig
extra/images/testing/pbm/test.ascii.fig
extra/images/testing/pbm/test.binary.fig
extra/images/testing/pgm/radial.ascii.fig
extra/images/testing/pgm/radial.binary.fig
extra/images/testing/png/basn2c08.fig
extra/images/testing/png/basn6a08.fig
extra/images/testing/png/f00n2c08.fig
extra/images/testing/png/f01n2c08.fig
extra/images/testing/png/f02n2c08.fig
extra/images/testing/png/f03n2c08.fig
extra/images/testing/png/f04n2c08.fig
extra/images/testing/png/z00n2c08.fig
extra/images/testing/png/z03n2c08.fig
extra/images/testing/png/z06n2c08.fig
extra/images/testing/png/z09n2c08.fig
extra/images/testing/ppm/ascii.fig
extra/images/testing/ppm/binary.fig
extra/images/testing/tiff/alpha.fig
extra/images/testing/tiff/color_spectrum.fig
extra/images/testing/tiff/noise.fig
extra/images/testing/tiff/octagon.fig
extra/images/testing/tiff/rgb.fig
extra/model-viewer/model-viewer.factor

index f0c665830d25296c1c4c8d17f410b87eb47af403..a7fd665e1374b688ab242b5faadfff266166c684 100644 (file)
@@ -33,3 +33,19 @@ ENUM: instrument_t < ushort trombone trumpet ;
 
 { V{ { red 0 } { green 3 } { blue 4 } } }
 [ color_t "c-type" word-prop members>> ] unit-test
+
+ENUM: colores { rojo red } { verde green } { azul blue } { colorado rojo } ;
+
+[ { 0 3 4 0 } ] [ { rojo verde azul colorado } [ enum>number ] map ] unit-test
+
+SYMBOLS: couleurs rouge vert bleu jaune azure ;
+
+<< \ couleurs int {
+    { rouge red }
+    { vert green }
+    { bleu blue }
+    { jaune 14 }
+    { azure bleu }
+} define-enum >>
+
+[ { 0 3 4 14 4 } ] [ { rouge vert bleu jaune azure } [ enum>number ] map ] unit-test
index b0755c130b249076b404c081b6d9a414caff0db5..5634805f5d33e75bbd250b988b85da875c47a3ac 100644 (file)
@@ -30,16 +30,13 @@ M: enum-c-type c-type-unboxer-quot drop [ enum>number ] ;
 M: enum-c-type c-type-setter
    [ enum>number ] swap base-type>> c-type-setter '[ _ 2dip @ ] ;
 
-<PRIVATE
-
 : define-enum-value ( class value -- )
-    "enum-value" set-word-prop ;
+    enum>number "enum-value" set-word-prop ;
+
+<PRIVATE
 
 : define-enum-members ( members -- )
-    [
-        [ drop define-singleton-class ]
-        [ define-enum-value ] 2bi
-    ] assoc-each ;
+    [ first define-singleton-class ] each ;
 
 : define-enum-constructor ( word -- )
     [ name>> "<" ">" surround create-in ] keep
@@ -47,10 +44,14 @@ M: enum-c-type c-type-setter
 
 PRIVATE>
 
-: define-enum ( word base-type members -- )
+: (define-enum) ( word base-type members -- )
     [ dup define-enum-constructor ] 2dip
     [ define-enum-members ]
     [ <enum-c-type> swap typedef ] bi ;
+
+: define-enum ( word base-type members -- )
+    [ (define-enum) ]
+    [ [ define-enum-value ] assoc-each ] bi ;
     
 PREDICATE: enum-c-type-word < c-type-word
     "c-type" word-prop enum-c-type? ;
index 6d0cbb79cc7f23d099939e500f3b5fcc638fcfa1..09fedc5e3cca13e8bcb6736b518722ab584f4eb4 100755 (executable)
@@ -4,7 +4,7 @@ USING: accessors alien alien.c-types alien.libraries arrays
 assocs classes combinators combinators.short-circuit
 compiler.units effects grouping kernel parser sequences
 splitting words fry locals lexer namespaces summary math
-vocabs.parser words.constant classes.parser ;
+vocabs.parser words.constant classes.parser alien.enums ;
 IN: alien.parser
 
 SYMBOL: current-library
@@ -84,7 +84,8 @@ M: pointer return-type-name to>> return-type-name CHAR: * suffix ;
     [ [ <pointer> ] dip parse-pointers ] when ;
 
 : next-enum-member ( members name value -- members value' )
-    [ 2array suffix! ] [ 1 + ] bi ;
+    [ define-enum-value ]
+    [ [ 2array suffix! ] [ enum>number 1 + ] bi ] 2bi ;
 
 : parse-enum-name ( -- name )
     scan (CREATE-C-TYPE) dup save-location ;
index 259f99a833ba7faa16d43198fedf727442c002b6..fe5a6dcadc5de992e8d3d58b44e59f496d61aacf 100755 (executable)
@@ -29,7 +29,7 @@ SYNTAX: TYPEDEF:
     scan-c-type CREATE-C-TYPE dup save-location typedef ;
 
 SYNTAX: ENUM:
-    parse-enum define-enum ;
+    parse-enum (define-enum) ;
 
 SYNTAX: C-TYPE:
     void CREATE-C-TYPE typedef ;
index fb21843c0f6f4e396dd6723e19073dc7779eb8dd..53f22addcb2aa9ada3c9b5812b1c8fb43731ecaf 100644 (file)
@@ -43,7 +43,9 @@ SYNTAX: IMPORT: scan [ ] import-objc-class ;
         "NSApplication"
         "NSArray"
         "NSAutoreleasePool"
+        "NSBitmapImageRep"
         "NSBundle"
+        "NSColorSpace"
         "NSData"
         "NSDictionary"
         "NSError"
index 4d786aaf720f68b395b510e2a516b9513443db46..b607682e761f4756b10bb8d1762c68d58f9915e4 100644 (file)
@@ -109,7 +109,7 @@ H{
     { "d" c:double }
     { "B" c:bool }
     { "v" c:void }
-    { "*" c:c-string }
+    { "*" c:void* }
     { "?" unknown_type }
     { "@" id }
     { "#" Class }
index 113cf8d0c860cfae358c600ac9473c490afca31c..2a4f64f042284557ee9e94e9ce5d16f5240bd6d4 100644 (file)
@@ -1,12 +1,12 @@
 ! 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 ;
+USING: alien alien.data alien.libraries alien.syntax
+combinators gio.ffi glib.ffi gmodule.ffi gobject-introspection
+gobject.ffi kernel libc sequences system ;
+EXCLUDE: alien.c-types => pointer ;
 IN: gdk.pixbuf.ffi
 
-<<
 "gio.ffi" require
->>
 
 LIBRARY: gdk.pixbuf
 
@@ -18,3 +18,12 @@ LIBRARY: gdk.pixbuf
 >>
 
 GIR: vocab:gdk/pixbuf/GdkPixbuf-2.0.gir
+
+: data>GInputStream ( data -- GInputStream )
+    [ malloc-byte-array &free ] [ length ] bi
+    f g_memory_input_stream_new_from_data ;
+
+: GInputStream>GdkPixbuf ( GInputStream -- GdkPixbuf )
+    f { { pointer: GError initial: f } }
+    [ gdk_pixbuf_new_from_stream ] with-out-parameters
+    handle-GError ;
index 860d34bb8d2277b6a89b9e5ce53ff043795bc81b..5eefe08cd0e7288cb421d5faaba34933701e4ac0 100644 (file)
@@ -1,8 +1,9 @@
 ! 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 ;
+USING: accessors alien alien.c-types alien.destructors
+alien.libraries alien.strings alien.syntax combinators
+gobject-introspection gobject-introspection.standard-types
+io.encodings.utf8 kernel system vocabs.parser words ;
 IN: glib.ffi
 
 LIBRARY: glib
@@ -15,7 +16,62 @@ LIBRARY: glib
 } cond
 >>
 
-IMPLEMENT-STRUCTS: GPollFD GSource GSourceFuncs ;
+
+TYPEDEF: char gchar
+TYPEDEF: uchar guchar
+TYPEDEF: short gshort
+TYPEDEF: ushort gushort
+TYPEDEF: long glong
+TYPEDEF: ulong gulong
+TYPEDEF: int gint
+TYPEDEF: uint guint
+
+<<
+int c-type clone
+    [ >c-bool ] >>unboxer-quot
+    [ c-bool> ] >>boxer-quot
+    object >>boxed-class
+"gboolean" current-vocab create typedef
+>>
+
+TYPEDEF: char gint8
+TYPEDEF: uchar guint8
+TYPEDEF: short gint16
+TYPEDEF: ushort guint16
+TYPEDEF: int gint32
+TYPEDEF: uint guint32
+TYPEDEF: longlong gint64
+TYPEDEF: ulonglong guint64
+
+TYPEDEF: float gfloat
+TYPEDEF: double gdouble
+
+TYPEDEF: long ssize_t
+TYPEDEF: long time_t
+TYPEDEF: size_t gsize
+TYPEDEF: ssize_t gssize
+TYPEDEF: size_t GType
+
+TYPEDEF: void* gpointer
+TYPEDEF: void* gconstpointer
+
+TYPEDEF: guint8 GDateDay
+TYPEDEF: guint16 GDateYear
+TYPEDEF: gint GPid
+TYPEDEF: guint32 GQuark
+TYPEDEF: gint32 GTime
+TYPEDEF: glong gintptr
+TYPEDEF: gint64 goffset
+TYPEDEF: gulong guintptr
+TYPEDEF: guint32 gunichar
+TYPEDEF: guint16 gunichar2
+
+TYPEDEF: gpointer pointer
+
+REPLACE-C-TYPE: long\sdouble double
+REPLACE-C-TYPE: any gpointer
+
+IMPLEMENT-STRUCTS: GError GPollFD GSource GSourceFuncs ;
 
 CONSTANT: G_MININT8   HEX: -80
 CONSTANT: G_MAXINT8   HEX:  7f
@@ -38,3 +94,18 @@ 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 ) ;
+
+ERROR: g-error domain code message ;
+
+: GError>g-error ( GError -- g-error )
+    [ domain>> g_quark_to_string utf8 alien>string ]
+    [ code>> ]
+    [ message>> utf8 alien>string ] tri
+    \ g-error boa ;
+
+: handle-GError ( GError/f -- )
+    [
+        [ GError>g-error ]
+        [ g_error_free ] bi
+        throw
+    ] when* ;
diff --git a/basis/images/cocoa/authors.txt b/basis/images/cocoa/authors.txt
new file mode 100644 (file)
index 0000000..f13c9c1
--- /dev/null
@@ -0,0 +1 @@
+Joe Groff
diff --git a/basis/images/cocoa/cocoa.factor b/basis/images/cocoa/cocoa.factor
new file mode 100644 (file)
index 0000000..115315a
--- /dev/null
@@ -0,0 +1,66 @@
+! (c)2010 Joe Groff bsd license
+USING: accessors alien.data cocoa cocoa.classes cocoa.messages
+combinators core-foundation.data core-graphics.types fry images
+images.loader io kernel literals math sequences ;
+IN: images.cocoa
+
+SINGLETON: ns-image
+"png" ns-image register-image-class
+"tif" ns-image register-image-class
+"tiff" ns-image register-image-class
+"gif" ns-image register-image-class
+"jpg" ns-image register-image-class
+"jpeg" ns-image register-image-class
+"bmp" ns-image register-image-class
+"ico" ns-image register-image-class
+
+CONSTANT: NSImageRepLoadStatusUnknownType     -1
+CONSTANT: NSImageRepLoadStatusReadingHeader   -2
+CONSTANT: NSImageRepLoadStatusWillNeedAllData -3
+CONSTANT: NSImageRepLoadStatusInvalidData     -4
+CONSTANT: NSImageRepLoadStatusUnexpectedEOF   -5
+CONSTANT: NSImageRepLoadStatusCompleted       -6
+
+CONSTANT: NSColorRenderingIntentDefault                 0
+CONSTANT: NSColorRenderingIntentAbsoluteColorimetric    1
+CONSTANT: NSColorRenderingIntentRelativeColorimetric    2
+CONSTANT: NSColorRenderingIntentPerceptual              3
+CONSTANT: NSColorRenderingIntentSaturation              4
+
+ERROR: ns-image-unknown-type ;
+ERROR: ns-image-invalid-data ;
+ERROR: ns-image-unexpected-eof ;
+ERROR: ns-image-planar-images-not-supported ;
+
+<PRIVATE
+
+: check-return ( n -- )
+    {
+        { $ NSImageRepLoadStatusUnknownType   [ ns-image-unknown-type   ] }
+        { $ NSImageRepLoadStatusInvalidData   [ ns-image-invalid-data   ] }
+        { $ NSImageRepLoadStatusUnexpectedEOF [ ns-image-unexpected-eof ] }
+        [ drop ]
+    } case ;
+
+PRIVATE>
+
+: load-image-rep ( -- image-rep )
+    NSBitmapImageRep contents <CFData> -> autorelease -> imageRepWithData:
+    NSColorSpace -> genericRGBColorSpace
+    NSColorRenderingIntentDefault
+    -> bitmapImageRepByConvertingToColorSpace:renderingIntent: ;
+
+: image-rep>image ( image-rep -- image )
+    image new swap {
+        [ -> size CGSize>dim [ >integer ] map >>dim ]
+        [ -> bitmapData ]
+        [ -> bytesPerPlane memory>byte-array >>bitmap ]
+    } cleave
+        RGBA >>component-order
+        ubyte-components >>component-type
+        t >>premultiplied-alpha?
+        f >>upside-down? ;
+
+M: ns-image stream>image
+    drop
+    [ load-image-rep ] with-input-stream image-rep>image ;
diff --git a/basis/images/cocoa/platforms.txt b/basis/images/cocoa/platforms.txt
new file mode 100644 (file)
index 0000000..6e806f4
--- /dev/null
@@ -0,0 +1 @@
+macosx
diff --git a/basis/images/cocoa/summary.txt b/basis/images/cocoa/summary.txt
new file mode 100644 (file)
index 0000000..628cce9
--- /dev/null
@@ -0,0 +1 @@
+Image loading using MacOS X's native Cocoa APIs
diff --git a/basis/images/gdiplus/gdiplus.factor b/basis/images/gdiplus/gdiplus.factor
new file mode 100644 (file)
index 0000000..97bc523
--- /dev/null
@@ -0,0 +1,63 @@
+! (c)2010 Joe Groff bsd license\r
+USING: accessors alien.c-types alien.data alien.enums\r
+classes.struct destructors images images.loader\r
+io.streams.limited kernel locals math windows.com\r
+windows.gdiplus windows.streams windows.types typed\r
+byte-arrays grouping sequences ;\r
+IN: images.gdiplus\r
+\r
+SINGLETON: gdi+-image\r
+"png" gdi+-image register-image-class\r
+"tif" gdi+-image register-image-class\r
+"tiff" gdi+-image register-image-class\r
+"gif" gdi+-image register-image-class\r
+"jpg" gdi+-image register-image-class\r
+"jpeg" gdi+-image register-image-class\r
+"bmp" gdi+-image register-image-class\r
+"ico" gdi+-image register-image-class\r
+\r
+<PRIVATE\r
+: <GpRect> ( x y w h -- rect )\r
+    GpRect <struct-boa> ; inline\r
+\r
+: stream>gdi+-bitmap ( stream -- bitmap )\r
+    stream>IStream &com-release\r
+    { void* } [ GdipCreateBitmapFromStream check-gdi+-status ]\r
+    [ ] with-out-parameters &GdipFree ;\r
+\r
+: gdi+-bitmap-width ( bitmap -- w )\r
+    { UINT } [ GdipGetImageWidth check-gdi+-status ]\r
+    [ ] with-out-parameters ;\r
+: gdi+-bitmap-height ( bitmap -- w )\r
+    { UINT } [ GdipGetImageHeight check-gdi+-status ]\r
+    [ ] with-out-parameters ;\r
+: gdi+-lock-bitmap ( bitmap rect mode format -- data )\r
+    { BitmapData } [ GdipBitmapLockBits check-gdi+-status ]\r
+    [ clone ] with-out-parameters ;\r
+\r
+:: gdi+-bitmap>data ( bitmap -- w h pixels )\r
+    bitmap [ gdi+-bitmap-width ] [ gdi+-bitmap-height ] bi :> ( w h )\r
+    bitmap 0 0 w h <GpRect> ImageLockModeRead enum>number\r
+    PixelFormat32bppARGB gdi+-lock-bitmap :> bitmap-data\r
+    bitmap-data [ Scan0>> ] [ Stride>> ] [ Height>> * ] tri\r
+    memory>byte-array :> pixels\r
+    bitmap bitmap-data GdipBitmapUnlockBits check-gdi+-status\r
+    w h pixels ;\r
+    \r
+:: data>image ( w h pixels -- image )\r
+    image new\r
+        { w h } >>dim\r
+        pixels >>bitmap\r
+        BGRA >>component-order\r
+        ubyte-components >>component-type\r
+        f >>upside-down? ;\r
+\r
+PRIVATE>\r
+\r
+M: gdi+-image stream>image\r
+    drop [\r
+        start-gdi+ &stop-gdi+ drop\r
+        stream>gdi+-bitmap\r
+        gdi+-bitmap>data\r
+        data>image\r
+    ] with-destructors ;\r
diff --git a/basis/images/gdiplus/platforms.txt b/basis/images/gdiplus/platforms.txt
new file mode 100644 (file)
index 0000000..8e1a559
--- /dev/null
@@ -0,0 +1 @@
+windows
diff --git a/basis/images/gtk/authors.txt b/basis/images/gtk/authors.txt
new file mode 100644 (file)
index 0000000..156a81a
--- /dev/null
@@ -0,0 +1 @@
+Philipp Brüschweiler
diff --git a/basis/images/gtk/gtk.factor b/basis/images/gtk/gtk.factor
new file mode 100644 (file)
index 0000000..4957a4d
--- /dev/null
@@ -0,0 +1,68 @@
+! Copyright (C) 2010 Philipp Brüschweiler.
+! See http://factorcode.org/license.txt for BSD license.
+USING: accessors alien.c-types alien.data arrays combinators
+destructors gdk.pixbuf.ffi gobject.ffi grouping images
+images.loader io kernel locals math sequences
+specialized-arrays ;
+IN: images.gtk
+SPECIALIZED-ARRAY: uchar
+
+SINGLETON: gtk-image
+"png"  gtk-image register-image-class
+"tif"  gtk-image register-image-class
+"tiff" gtk-image register-image-class
+"gif"  gtk-image register-image-class
+"jpg"  gtk-image register-image-class
+"jpeg" gtk-image register-image-class
+"bmp"  gtk-image register-image-class
+"ico"  gtk-image register-image-class
+
+<PRIVATE
+
+: image-data ( GdkPixbuf -- data )
+    {
+        [ gdk_pixbuf_get_pixels ]
+        [ gdk_pixbuf_get_width ]
+        [ gdk_pixbuf_get_height ]
+        [ gdk_pixbuf_get_rowstride ]
+        [ gdk_pixbuf_get_n_channels ]
+        [ gdk_pixbuf_get_bits_per_sample ]
+    } cleave
+    [let :> ( pixels w h rowstride channels bps )
+        bps channels * 7 + 8 /i w * :> bytes-per-row
+
+        bytes-per-row rowstride =
+        [ pixels h rowstride * memory>byte-array ]
+        [
+            pixels rowstride h * <direct-uchar-array>
+            rowstride <sliced-groups>
+            [ bytes-per-row head-slice ] map concat
+        ] if
+    ] ;
+
+: component-type ( GdkPixbuf -- component-type )
+    gdk_pixbuf_get_bits_per_sample {
+        {  8 [ ubyte-components ] }
+        { 16 [ ushort-components ] }
+        { 32 [ uint-components ] }
+    } case ;
+
+: GdkPixbuf>image ( GdkPixbuf -- image )
+    [ image new ] dip
+        {
+            [ [ gdk_pixbuf_get_width ] [ gdk_pixbuf_get_height ] bi 2array >>dim ]
+            [ image-data >>bitmap ]
+            [ gdk_pixbuf_get_has_alpha RGBA RGB ? >>component-order ]
+            [ component-type >>component-type ]
+        } cleave
+        f >>premultiplied-alpha?
+        f >>upside-down? ;
+
+PRIVATE>
+
+M: gtk-image stream>image
+    drop [
+        stream-contents data>GInputStream &g_object_unref
+        GInputStream>GdkPixbuf &g_object_unref
+        GdkPixbuf>image
+    ] with-destructors ;
diff --git a/basis/images/gtk/platforms.txt b/basis/images/gtk/platforms.txt
new file mode 100644 (file)
index 0000000..a26481a
--- /dev/null
@@ -0,0 +1,2 @@
+linux
+bsd
diff --git a/basis/images/gtk/summary.txt b/basis/images/gtk/summary.txt
new file mode 100644 (file)
index 0000000..7813e56
--- /dev/null
@@ -0,0 +1 @@
+Image loading using GTK's GdkPixbuf API
index ff49834a65a9dcb0eec8179a5d7946cd2b892ce0..1fda9b3b813af067296c52279f3802ef2dd51b21 100644 (file)
@@ -3,7 +3,7 @@
 USING: images tools.test kernel accessors ;
 IN: images.tests
 
-[ B{ 57 57 57 255 } ] [ 1 1 T{ image f { 2 3 } RGBA ubyte-components f B{
+[ B{ 57 57 57 255 } ] [ 1 1 T{ image f { 2 3 } RGBA ubyte-components f B{
     0 0 0 0 
     0 0 0 0 
     0 0 0 0 
@@ -19,7 +19,7 @@ IN: images.tests
     57 57 57 255
     0 0 0 0 
     0 0 0 0 
-} ] [ B{ 57 57 57 255 } 1 1 T{ image f { 2 3 } RGBA ubyte-components f B{
+} ] [ B{ 57 57 57 255 } 1 1 T{ image f { 2 3 } RGBA ubyte-components f B{
     0 0 0 0 
     0 0 0 0 
     0 0 0 0 
index 99f0bb91b9167d530c361b60ae0e283bd80642e0..d033186fc0239fc6f538fe2a31b7950f5c021de8 100644 (file)
@@ -62,7 +62,10 @@ UNION: alpha-channel BGRA RGBA ABGR ARGB LA A INTENSITY ;
 
 UNION: alpha-channel-precedes-colors ABGR ARGB XBGR XRGB ;
 
-TUPLE: image dim component-order component-type upside-down? bitmap ;
+TUPLE: image
+    dim component-order component-type
+    upside-down? premultiplied-alpha?
+    bitmap ;
 
 : <image> ( -- image ) image new ; inline
 
index 9db58649a0c42062bf92e6a96bc617facc2ca45c..5999c15d5cb9589f6630146008daeb0c877e46b4 100644 (file)
@@ -10,12 +10,12 @@ IN: images.tesselation
 [
     {
         {
-            T{ image f { 2 2 } L ubyte-components f B{ 1 2 5 6 } }
-            T{ image f { 2 2 } L ubyte-components f B{ 3 4 7 8 } }
+            T{ image f { 2 2 } L ubyte-components f B{ 1 2 5 6 } }
+            T{ image f { 2 2 } L ubyte-components f B{ 3 4 7 8 } }
         }
         {
-            T{ image f { 2 2 } L ubyte-components f B{ 9 10 13 14 } }
-            T{ image f { 2 2 } L ubyte-components f B{ 11 12 15 16 } }
+            T{ image f { 2 2 } L ubyte-components f B{ 9 10 13 14 } }
+            T{ image f { 2 2 } L ubyte-components f B{ 11 12 15 16 } }
         }
     }
 ] [
@@ -30,12 +30,12 @@ IN: images.tesselation
 [
     {
         {
-            T{ image f { 2 2 } L ubyte-components f B{ 1 2 4 5 } }
-            T{ image f { 1 2 } L ubyte-components f B{ 3 6 } }
+            T{ image f { 2 2 } L ubyte-components f B{ 1 2 4 5 } }
+            T{ image f { 1 2 } L ubyte-components f B{ 3 6 } }
         }
         {
-            T{ image f { 2 1 } L ubyte-components f B{ 7 8 } }
-            T{ image f { 1 1 } L ubyte-components f B{ 9 } }
+            T{ image f { 2 1 } L ubyte-components f B{ 7 8 } }
+            T{ image f { 1 1 } L ubyte-components f B{ 9 } }
         }
     }
 ] [
index f33ea9e47db26812d600a72b753d4d92cead9af4..0aaa9dcf9bc786f3b0fb0c0f63325142ffa68faf 100644 (file)
@@ -312,12 +312,21 @@ TUPLE: single-texture < disposable image dim loc texture-coords texture display-
     [ init-texture texture-coords>> gl-texture-coord-pointer ] tri
     swap gl-fill-rect ;
 
+: set-blend-mode ( texture -- )
+    image>> dup has-alpha?
+    [ premultiplied-alpha?>> [ GL_ONE GL_ONE_MINUS_SRC_ALPHA glBlendFunc ] when ]
+    [ drop GL_BLEND glDisable ] if ;
+
+: reset-blend-mode ( texture -- )
+    image>> dup has-alpha?
+    [ premultiplied-alpha?>> [ GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA glBlendFunc ] when ]
+    [ drop GL_BLEND glEnable ] if ;
+
 : draw-textured-rect ( dim texture -- )
     [
-        [ image>> has-alpha? [ GL_BLEND glDisable ] unless ]
+        [ set-blend-mode ]
         [ (draw-textured-rect) GL_TEXTURE_2D 0 glBindTexture ]
-        [ image>> has-alpha? [ GL_BLEND glEnable ] unless ]
-        tri
+        [ reset-blend-mode ] tri
     ] with-texturing ;
 
 : texture-coords ( texture -- coords )
index 2329b06b1304839fb8d7d34478415ff9bcd3daec..dca9345cd1b6e73afb4e6a02e3b460420501a552 100755 (executable)
@@ -100,6 +100,13 @@ IN: tools.deploy.shaker
         run-file
     ] when ;
 
+: strip-gtk-icon ( -- )
+    "ui.backend.gtk" vocab [
+        "Stripping GTK icon loading code" show
+        "vocab:tools/deploy/shaker/strip-gtk-icon.factor"
+        run-file
+    ] when ;
+
 : strip-specialized-arrays ( -- )
     strip-dictionary? "specialized-arrays" vocab and [
         "Stripping specialized arrays" show
@@ -542,6 +549,7 @@ SYMBOL: deploy-vocab
     strip-call
     strip-cocoa
     strip-gobject
+    strip-gtk-icon
     strip-debugger
     strip-ui-error-hook
     strip-specialized-arrays
diff --git a/basis/tools/deploy/shaker/strip-gtk-icon.factor b/basis/tools/deploy/shaker/strip-gtk-icon.factor
new file mode 100644 (file)
index 0000000..c472b3e
--- /dev/null
@@ -0,0 +1,13 @@
+! Copyright (C) 2010 Philipp Brüschweiler
+! See http://factorcode.org/license.txt for BSD license.
+USING: kernel tools.deploy.shaker literals namespaces
+vocabs.loader io.pathnames io.files io.encodings.binary ;
+IN: ui.backend.gtk
+
+CONSTANT: get-icon-data
+    $[
+        deploy-vocab get
+        dup vocab-dir "icon.png" append-path vocab-append-path
+        [ exists? ] keep "resource:misc/icons/Factor_48x48.png" ?
+        binary file-contents
+    ]
index 1b6b8596e2b691cda181a488de1199cba6f23e0a..95abb0d875569c56110fdc82820715d2a3067167 100644 (file)
@@ -1,9 +1,8 @@
 ! Copyright (C) 2008 James Cash
 ! See http://factorcode.org/license.txt for BSD license.
-USING: io io.pathnames io.directories io.files
-io.files.info.unix io.backend kernel namespaces make sequences
-system tools.deploy.backend tools.deploy.config
-tools.deploy.config.editor assocs hashtables prettyprint ;
+USING: io io.backend io.directories io.files.info.unix kernel
+namespaces sequences system tools.deploy.backend
+tools.deploy.config tools.deploy.config.editor ;
 IN: tools.deploy.unix
 
 : create-app-dir ( vocab bundle-name -- vm )
@@ -14,12 +13,12 @@ IN: tools.deploy.unix
     deploy-name get ;
 
 M: unix deploy* ( vocab -- )
-    "." resource-path [
+    "resource:" [
         dup deploy-config [
             [ bundle-name create-app-dir ] keep
             [ bundle-name image-name ] keep
             namespace make-deploy-image
             bundle-name "" [ copy-resources ] [ copy-libraries ] 3bi
-            bundle-name normalize-path [ "Binary deployed to " % % "." % ] "" make print
+            bundle-name normalize-path "Binary deployed to " "." surround print
         ] bind
     ] with-directory ;
index fba30fc15a5a01ffca2eecb0ae4388606efb36ce..db316120c46c0d0c94cd25f0a7e97f4e6e6156dc 100644 (file)
@@ -3,14 +3,18 @@
 USING: accessors alien.accessors alien.c-types alien.data
 alien.strings arrays assocs classes.struct command-line
 continuations destructors environment gdk.ffi gdk.gl.ffi
-glib.ffi gobject-introspection.standard-types gobject.ffi
-gtk.ffi gtk.gl.ffi io.encodings.utf8 kernel libc literals locals
-math math.bitwise math.order math.vectors namespaces sequences
-strings system threads ui ui.backend ui.backend.gtk.input-methods
-ui.backend.gtk.io ui.clipboards ui.event-loop ui.gadgets
-ui.gadgets.private ui.gadgets.worlds ui.gestures
-ui.pixel-formats ui.pixel-formats.private ui.private
-vocabs.loader combinators prettyprint io ;
+gdk.pixbuf.ffi glib.ffi
+gobject-introspection.standard-types
+gobject.ffi gtk.ffi gtk.gl.ffi io.backend
+io.backend.unix.multiplexers io.encodings.binary
+io.encodings.utf8 io.files io.thread kernel libc literals
+locals math math.bitwise math.order math.vectors namespaces
+sequences strings system threads ui ui.backend ui.backend.gtk.input-methods
+ui.backend.gtk.io ui.clipboards
+ui.commands ui.event-loop ui.gadgets ui.gadgets.editors
+ui.gadgets.menus ui.gadgets.private ui.gadgets.worlds
+ui.gestures ui.pixel-formats ui.pixel-formats.private
+ui.private vocabs.loader combinators io ;
 IN: ui.backend.gtk
 
 SINGLETON: gtk-ui-backend
@@ -213,6 +217,17 @@ CONSTANT: action-key-codes
 : on-focus-out ( win event user-data -- ? )
     2drop window unfocus-world t ;
 
+! This word gets replaced when deploying. See 'Vocabulary icons'
+! in the docs and tools.deploy.shaker.gtk-icon
+: get-icon-data ( -- byte-array )
+    "resource:misc/icons/Factor_48x48.png" binary file-contents ;
+
+: load-icon ( -- )
+    get-icon-data [
+        data>GInputStream &g_object_unref
+        GInputStream>GdkPixbuf gtk_window_set_default_icon
+    ] with-destructors ;
+
 :: connect-user-input-signals ( win -- )
     win events-mask gtk_widget_add_events
     win "motion-notify-event" [ on-motion yield ]
@@ -502,6 +517,7 @@ M: gtk-ui-backend (with-ui)
     [
         0 gint <ref> f void* <ref> gtk_init
         0 gint <ref> f void* <ref> gtk_gl_init
+        load-icon
         init-clipboard
         start-ui
         [
index b97a5c14fe94ebc3683bac75aab5255ef925ea0b..e5d81b8cccd2f1614c28a616c20aa3a24790b3af 100644 (file)
@@ -1,8 +1,8 @@
 ! Copyright (C) 2009 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: namespaces cache images images.loader accessors assocs
-kernel opengl opengl.gl opengl.textures ui.gadgets.worlds
-memoize images.png images.tiff ;
+USING: accessors assocs cache combinators images images.loader
+kernel memoize namespaces opengl opengl.gl opengl.textures system
+ui.gadgets.worlds vocabs.loader ;
 IN: ui.images
 
 TUPLE: image-name path ;
@@ -30,3 +30,11 @@ PRIVATE>
 
 : image-dim ( image-name -- dim )
     cached-image dim>> ;
+
+<<
+{
+    { [ os macosx? ] [ "images.cocoa"   require ] }
+    { [ os winnt?  ] [ "images.gdiplus" require ] }
+    [ "images.gtk" require ]
+} cond
+>>
index e4b6d1e85a9f559023fd99924c033fbf72a5100d..7bdf8d1a9fead752b03ef0b6bd0761adab675a55 100644 (file)
@@ -1,6 +1,6 @@
 USING: alien alien.c-types alien.destructors windows.com.syntax
 windows.ole32 windows.types continuations kernel alien.syntax
-libc destructors accessors alien.data ;
+libc destructors accessors alien.data classes.struct windows.kernel32 ;
 IN: windows.com
 
 LIBRARY: ole32
@@ -31,6 +31,55 @@ COM-INTERFACE: IDropTarget IUnknown {00000122-0000-0000-C000-000000000046}
     HRESULT DragLeave ( )
     HRESULT Drop ( IDataObject* pDataObject, DWORD grfKeyState, POINTL pt, DWORD* pdwEffect ) ;
 
+COM-INTERFACE: ISequentialStream IUnknown {0C733A30-2A1C-11CE-ADE5-00AA0044773D}
+    HRESULT Read ( void* pv, ULONG cb, ULONG* pcbRead )
+    HRESULT Write ( void* pv, ULONG cb, ULONG* pcbWritten ) ;
+
+STRUCT: STATSTG
+    { pwcsName LPOLESTR }
+    { type DWORD }
+    { cbSize ULARGE_INTEGER }
+    { mtime FILETIME }
+    { ctime FILETIME }
+    { atime FILETIME }
+    { grfMode DWORD }
+    { grfLocksSupported DWORD }
+    { clsid CLSID }
+    { grfStateBits DWORD }
+    { reserved DWORD } ;
+
+CONSTANT: STGM_READ 0
+CONSTANT: STGM_WRITE 1
+CONSTANT: STGM_READWRITE 2
+
+CONSTANT: STG_E_INVALIDFUNCTION HEX: 80030001
+
+CONSTANT: STGTY_STORAGE   1
+CONSTANT: STGTY_STREAM    2
+CONSTANT: STGTY_LOCKBYTES 3
+CONSTANT: STGTY_PROPERTY  4
+
+CONSTANT: STREAM_SEEK_SET 0
+CONSTANT: STREAM_SEEK_CUR 1
+CONSTANT: STREAM_SEEK_END 2
+
+CONSTANT: LOCK_WRITE     1
+CONSTANT: LOCK_EXCLUSIVE 2
+CONSTANT: LOCK_ONLYONCE  4
+
+CONSTANT: GUID_NULL GUID: {00000000-0000-0000-0000-000000000000}
+
+COM-INTERFACE: IStream ISequentialStream {0000000C-0000-0000-C000-000000000046}
+    HRESULT Seek ( LARGE_INTEGER dlibMove, DWORD dwOrigin, ULARGE_INTEGER* plibNewPosition )
+    HRESULT SetSize ( ULARGE_INTEGER* libNewSize )
+    HRESULT CopyTo ( IStream* pstm, ULARGE_INTEGER cb, ULARGE_INTEGER* pcbRead, ULARGE_INTEGER* pcbWritten )
+    HRESULT Commit ( DWORD grfCommitFlags )
+    HRESULT Revert ( )
+    HRESULT LockRegion ( ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType )
+    HRESULT UnlockRegion ( ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType )
+    HRESULT Stat ( STATSTG* pstatstg, DWORD grfStatFlag )
+    HRESULT Clone ( IStream** ppstm ) ;
+
 FUNCTION: HRESULT RegisterDragDrop ( HWND hWnd, IDropTarget* pDropTarget ) ;
 FUNCTION: HRESULT RevokeDragDrop ( HWND hWnd ) ;
 FUNCTION: void ReleaseStgMedium ( LPSTGMEDIUM pmedium ) ;
@@ -50,3 +99,5 @@ FUNCTION: void ReleaseStgMedium ( LPSTGMEDIUM pmedium ) ;
     over [ com-release ] curry [ ] cleanup ; inline
 
 DESTRUCTOR: com-release
+
+
diff --git a/basis/windows/gdiplus/gdiplus.factor b/basis/windows/gdiplus/gdiplus.factor
new file mode 100644 (file)
index 0000000..66300f9
--- /dev/null
@@ -0,0 +1,1649 @@
+! (c)2010 Joe Groff bsd license
+USING: alien.c-types alien.data alien.destructors alien.syntax
+classes.struct kernel math windows.com windows.com.syntax
+windows.kernel32 windows.ole32 windows.types ;
+FROM: alien.c-types => float ;
+IN: windows.gdiplus
+
+LIBRARY: gdiplus
+
+FUNCTION: void* GdipAlloc ( SIZE_T size ) ;
+FUNCTION: void GdipFree ( void* mem ) ;
+
+DESTRUCTOR: GdipFree
+
+TYPEDEF: float REAL
+
+ENUM: GpStatus
+    { Ok                          0 }
+    { GenericError                1 }
+    { InvalidParameter            2 }
+    { OutOfMemory                 3 }
+    { ObjectBusy                  4 }
+    { InsufficientBuffer          5 }
+    { NotImplemented              6 }
+    { Win32Error                  7 }
+    { WrongState                  8 }
+    { Aborted                     9 }
+    { FileNotFound               10 }
+    { ValueOverflow              11 }
+    { AccessDenied               12 }
+    { UnknownImageFormat         13 }
+    { FontFamilyNotFound         14 }
+    { FontStyleNotFound          15 }
+    { NotTrueTypeFont            16 }
+    { UnsupportedGdiplusVersion  17 }
+    { GdiplusNotInitialized      18 }
+    { PropertyNotFound           19 }
+    { PropertyNotSupported       20 }
+    { ProfileNotFound            21 } ;
+
+CALLBACK: BOOL ImageAbort ( void* data ) ;
+TYPEDEF: ImageAbort DrawImageAbort
+TYPEDEF: ImageAbort GetThumbnailImageAbort
+
+STRUCT: GpPoint
+    { X INT }
+    { Y INT } ;
+
+STRUCT: GpPointF
+    { X REAL }
+    { Y REAL } ;
+
+STRUCT: GpPathData
+    { Count INT }
+    { Points GpPointF* }
+    { Types BYTE* } ;
+
+STRUCT: GpRectF
+    { X REAL }
+    { Y REAL }
+    { Width REAL }
+    { Height REAL } ;
+
+STRUCT: GpRect
+    { X INT }
+    { Y INT }
+    { Width INT }
+    { Height INT } ;
+
+STRUCT: CharacterRange
+    { First INT }
+    { Length INT } ;
+
+TYPEDEF: UINT GraphicsState
+TYPEDEF: UINT GraphicsContainer
+
+ENUM: GpUnit
+    { UnitWorld       0 }
+    { UnitDisplay     1 }
+    { UnitPixel       2 }
+    { UnitPoint       3 }
+    { UnitInch        4 }
+    { UnitDocument    5 }
+    { UnitMillimeter  6 } ;
+
+ENUM: GpBrushType
+    { BrushTypeSolidColor       0 }
+    { BrushTypeHatchFill        1 }
+    { BrushTypeTextureFill      2 }
+    { BrushTypePathGradient     3 }
+    { BrushTypeLinearGradient   4 } ;
+
+ENUM: GpFillMode
+    { FillModeAlternate   0 }
+    { FillModeWinding     1 } ;
+
+ENUM: GpLineCap
+    { LineCapFlat             HEX: 00 }
+    { LineCapSquare           HEX: 01 }
+    { LineCapRound            HEX: 02 }
+    { LineCapTriangle         HEX: 03 }
+
+    { LineCapNoAnchor         HEX: 10 }
+    { LineCapSquareAnchor     HEX: 11 }
+    { LineCapRoundAnchor      HEX: 12 }
+    { LineCapDiamondAnchor    HEX: 13 }
+    { LineCapArrowAnchor      HEX: 14 }
+
+    { LineCapCustom           HEX: ff }
+    { LineCapAnchorMask       HEX: f0 } ;
+
+ENUM: PathPointType
+    { PathPointTypeStart            0 }
+    { PathPointTypeLine             1 }
+    { PathPointTypeBezier           3 }
+    { PathPointTypePathTypeMask     7 }
+    { PathPointTypePathDashMode    16 }
+    { PathPointTypePathMarker      32 }
+    { PathPointTypeCloseSubpath   128 }
+    { PathPointTypeBezier3          3 } ;
+
+ENUM: GpPenType
+    { PenTypeSolidColor         BrushTypeSolidColor }
+    { PenTypeHatchFill          BrushTypeHatchFill }
+    { PenTypeTextureFill        BrushTypeTextureFill }
+    { PenTypePathGradient       BrushTypePathGradient }
+    { PenTypeLinearGradient     BrushTypeLinearGradient }
+    { PenTypeUnknown            -1 } ;
+
+ENUM: GpLineJoin
+    { LineJoinMiter             0 }
+    { LineJoinBevel             1 }
+    { LineJoinRound             2 }
+    { LineJoinMiterClipped      3 } ;
+
+ENUM: QualityMode
+    { QualityModeInvalid    -1 }
+    { QualityModeDefault    0 }
+    { QualityModeLow        1 }
+    { QualityModeHigh       2 } ;
+
+ENUM: SmoothingMode
+    { SmoothingModeInvalid       QualityModeInvalid }
+    { SmoothingModeDefault       QualityModeDefault }
+    { SmoothingModeHighSpeed     QualityModeLow }
+    { SmoothingModeHighQuality   QualityModeHigh }
+    SmoothingModeNone
+    SmoothingModeAntiAlias ;
+
+ENUM: CompositingQuality
+    { CompositingQualityInvalid            QualityModeInvalid }
+    { CompositingQualityDefault            QualityModeDefault }
+    { CompositingQualityHighSpeed          QualityModeLow }
+    { CompositingQualityHighQuality        QualityModeHigh }
+    CompositingQualityGammaCorrected
+    CompositingQualityAssumeLinear ;
+
+ENUM: InterpolationMode
+    { InterpolationModeInvalid          QualityModeInvalid }
+    { InterpolationModeDefault          QualityModeDefault }
+    { InterpolationModeLowQuality       QualityModeLow }
+    { InterpolationModeHighQuality      QualityModeHigh }
+    InterpolationModeBilinear
+    InterpolationModeBicubic
+    InterpolationModeNearestNeighbor
+    InterpolationModeHighQualityBilinear
+    InterpolationModeHighQualityBicubic ;
+
+ENUM: GpPenAlignment
+    { PenAlignmentCenter     0 }
+    { PenAlignmentInset      1 } ;
+
+ENUM: PixelOffsetMode
+    { PixelOffsetModeInvalid       QualityModeInvalid }
+    { PixelOffsetModeDefault       QualityModeDefault }
+    { PixelOffsetModeHighSpeed     QualityModeLow }
+    { PixelOffsetModeHighQuality   QualityModeHigh }
+    PixelOffsetModeNone
+    PixelOffsetModeHalf ;
+
+ENUM: GpDashCap
+    { DashCapFlat       0 }
+    { DashCapRound      2 }
+    { DashCapTriangle   3 } ;
+
+ENUM: GpDashStyle
+    DashStyleSolid
+    DashStyleDash
+    DashStyleDot
+    DashStyleDashDot
+    DashStyleDashDotDot
+    DashStyleCustom ;
+
+ENUM: GpMatrixOrder
+    { MatrixOrderPrepend   0 }
+    { MatrixOrderAppend    1 } ;
+
+ENUM: ImageType
+    ImageTypeUnknown
+    ImageTypeBitmap
+    ImageTypeMetafile ;
+
+ENUM: WarpMode
+    WarpModePerspective
+    WarpModeBilinear ;
+
+ENUM: GpWrapMode
+    WrapModeTile
+    WrapModeTileFlipX
+    WrapModeTileFlipY
+    WrapModeTileFlipXY
+    WrapModeClamp ;
+
+ENUM: MetafileType
+    MetafileTypeInvalid
+    MetafileTypeWmf
+    MetafileTypeWmfPlaceable
+    MetafileTypeEmf
+    MetafileTypeEmfPlusOnly
+    MetafileTypeEmfPlusDual ;
+
+ENUM: LinearGradientMode
+    LinearGradientModeHorizontal
+    LinearGradientModeVertical
+    LinearGradientModeForwardDiagonal
+    LinearGradientModeBackwardDiagonal ;
+
+ENUM: EmfType
+    { EmfTypeEmfOnly       MetafileTypeEmf }
+    { EmfTypeEmfPlusOnly   MetafileTypeEmfPlusOnly }
+    { EmfTypeEmfPlusDual   MetafileTypeEmfPlusDual } ;
+
+ENUM: CompositingMode
+    CompositingModeSourceOver
+    CompositingModeSourceCopy ;
+
+ENUM: TextRenderingHint
+    { TextRenderingHintSystemDefault   0 }
+    TextRenderingHintSingleBitPerPixelGridFit
+    TextRenderingHintSingleBitPerPixel
+    TextRenderingHintAntiAliasGridFit
+    TextRenderingHintAntiAlias
+    TextRenderingHintClearTypeGridFit ;
+
+ENUM: StringAlignment
+    { StringAlignmentNear      0 }
+    { StringAlignmentCenter    1 }
+    { StringAlignmentFar       2 } ;
+
+ENUM:  StringDigitSubstitute
+    { StringDigitSubstituteUser          0 }
+    { StringDigitSubstituteNone          1 }
+    { StringDigitSubstituteNational      2 }
+    { StringDigitSubstituteTraditional   3 } ;
+
+ENUM: StringFormatFlags
+    { StringFormatFlagsDirectionRightToLeft    HEX: 00000001 }
+    { StringFormatFlagsDirectionVertical       HEX: 00000002 }
+    { StringFormatFlagsNoFitBlackBox           HEX: 00000004 }
+    { StringFormatFlagsDisplayFormatControl    HEX: 00000020 }
+    { StringFormatFlagsNoFontFallback          HEX: 00000400 }
+    { StringFormatFlagsMeasureTrailingSpaces   HEX: 00000800 }
+    { StringFormatFlagsNoWrap                  HEX: 00001000 }
+    { StringFormatFlagsLineLimit               HEX: 00002000 }
+    { StringFormatFlagsNoClip                  HEX: 00004000 } ;
+
+ENUM: StringTrimming
+    { StringTrimmingNone                   0 }
+    { StringTrimmingCharacter              1 }
+    { StringTrimmingWord                   2 }
+    { StringTrimmingEllipsisCharacter      3 }
+    { StringTrimmingEllipsisWord           4 }
+    { StringTrimmingEllipsisPath           5 } ;
+
+ENUM: FontStyle
+    { FontStyleRegular      0 }
+    { FontStyleBold         1 }
+    { FontStyleItalic       2 }
+    { FontStyleBoldItalic   3 }
+    { FontStyleUnderline    4 }
+    { FontStyleStrikeout    8 } ;
+
+ENUM: HotkeyPrefix
+    { HotkeyPrefixNone     0 }
+    { HotkeyPrefixShow     1 }
+    { HotkeyPrefixHide     2 } ;
+
+ENUM: PaletteFlags
+    { PaletteFlagsHasAlpha          1 }
+    { PaletteFlagsGrayScale         2 }
+    { PaletteFlagsHalftone          4 } ;
+
+ENUM: ImageCodecFlags
+    { ImageCodecFlagsEncoder            1 }
+    { ImageCodecFlagsDecoder            2 }
+    { ImageCodecFlagsSupportBitmap      4 }
+    { ImageCodecFlagsSupportVector      8 }
+    { ImageCodecFlagsSeekableEncode     16 }
+    { ImageCodecFlagsBlockingDecode     32 }
+    { ImageCodecFlagsBuiltin            65536 }
+    { ImageCodecFlagsSystem             131072 }
+    { ImageCodecFlagsUser               262144 } ;
+
+ENUM: ImageFlags
+    { ImageFlagsNone                0 }
+    { ImageFlagsScalable            HEX: 0001 }
+    { ImageFlagsHasAlpha            HEX: 0002 }
+    { ImageFlagsHasTranslucent      HEX: 0004 }
+    { ImageFlagsPartiallyScalable   HEX: 0008 }
+    { ImageFlagsColorSpaceRGB       HEX: 0010 }
+    { ImageFlagsColorSpaceCMYK      HEX: 0020 }
+    { ImageFlagsColorSpaceGRAY      HEX: 0040 }
+    { ImageFlagsColorSpaceYCBCR     HEX: 0080 }
+    { ImageFlagsColorSpaceYCCK      HEX: 0100 }
+    { ImageFlagsHasRealDPI          HEX: 1000 }
+    { ImageFlagsHasRealPixelSize    HEX: 2000 }
+    { ImageFlagsReadOnly            HEX: 00010000 }
+    { ImageFlagsCaching             HEX: 00020000 } ;
+
+ENUM: CombineMode
+    CombineModeReplace
+    CombineModeIntersect
+    CombineModeUnion
+    CombineModeXor
+    CombineModeExclude
+    CombineModeComplement ;
+
+ENUM: GpFlushIntention
+    { FlushIntentionFlush   0 }
+    { FlushIntentionSync    1 } ;
+
+ENUM: GpCoordinateSpace
+    CoordinateSpaceWorld
+    CoordinateSpacePage
+    CoordinateSpaceDevice ;
+
+ENUM: GpTestControlEnum
+    { TestControlForceBilinear    0 }
+    { TestControlNoICM            1 }
+    { TestControlGetBuildNumber   2 } ;
+
+ENUM: MetafileFrameUnit
+    { MetafileFrameUnitPixel        UnitPixel }
+    { MetafileFrameUnitPoint        UnitPoint }
+    { MetafileFrameUnitInch         UnitInch }
+    { MetafileFrameUnitDocument     UnitDocument }
+    { MetafileFrameUnitMillimeter   UnitMillimeter }
+    MetafileFrameUnitGdi ;
+
+ENUM: HatchStyle
+    { HatchStyleHorizontal   0 }
+    { HatchStyleVertical   1 }
+    { HatchStyleForwardDiagonal   2 }
+    { HatchStyleBackwardDiagonal   3 }
+    { HatchStyleCross   4 }
+    { HatchStyleDiagonalCross   5 }
+    { HatchStyle05Percent   6 }
+    { HatchStyle10Percent   7 }
+    { HatchStyle20Percent   8 }
+    { HatchStyle25Percent   9 }
+    { HatchStyle30Percent   10 }
+    { HatchStyle40Percent   11 }
+    { HatchStyle50Percent   12 }
+    { HatchStyle60Percent   13 }
+    { HatchStyle70Percent   14 }
+    { HatchStyle75Percent   15 }
+    { HatchStyle80Percent   16 }
+    { HatchStyle90Percent   17 }
+    { HatchStyleLightDownwardDiagonal   18 }
+    { HatchStyleLightUpwardDiagonal   19 }
+    { HatchStyleDarkDownwardDiagonal   20 }
+    { HatchStyleDarkUpwardDiagonal   21 }
+    { HatchStyleWideDownwardDiagonal   22 }
+    { HatchStyleWideUpwardDiagonal   23 }
+    { HatchStyleLightVertical   24 }
+    { HatchStyleLightHorizontal   25 }
+    { HatchStyleNarrowVertical   26 }
+    { HatchStyleNarrowHorizontal   27 }
+    { HatchStyleDarkVertical   28 }
+    { HatchStyleDarkHorizontal   29 }
+    { HatchStyleDashedDownwardDiagonal   30 }
+    { HatchStyleDashedUpwardDiagonal   31 }
+    { HatchStyleDashedHorizontal   32 }
+    { HatchStyleDashedVertical   33 }
+    { HatchStyleSmallConfetti   34 }
+    { HatchStyleLargeConfetti   35 }
+    { HatchStyleZigZag   36 }
+    { HatchStyleWave   37 }
+    { HatchStyleDiagonalBrick   38 }
+    { HatchStyleHorizontalBrick   39 }
+    { HatchStyleWeave   40 }
+    { HatchStylePlaid   41 }
+    { HatchStyleDivot   42 }
+    { HatchStyleDottedGrid   43 }
+    { HatchStyleDottedDiamond   44 }
+    { HatchStyleShingle   45 }
+    { HatchStyleTrellis   46 }
+    { HatchStyleSphere   47 }
+    { HatchStyleSmallGrid   48 }
+    { HatchStyleSmallCheckerBoard   49 }
+    { HatchStyleLargeCheckerBoard   50 }
+    { HatchStyleOutlinedDiamond   51 }
+    { HatchStyleSolidDiamond   52 }
+    { HatchStyleTotal   53 }
+    { HatchStyleLargeGrid   4 }
+    { HatchStyleMin   0 }
+    { HatchStyleMax   52 } ;
+
+ENUM: DebugEventLevel
+    DebugEventLevelFatal
+    DebugEventLevelWarning ;
+
+CALLBACK: void DebugEventProc ( DebugEventLevel level, c-string msg ) ;
+CALLBACK: GpStatus NotificationHookProc ( ULONG_PTR* x ) ;
+CALLBACK: void NotificationUnhookProc ( ULONG_PTR x ) ;
+
+STRUCT: GdiplusStartupInput
+    { GdiplusVersion UINT32 }
+    { DebugEventCallback DebugEventProc }
+    { SuppressBackgroundThread BOOL }
+    { SuppressExternalCodecs BOOL } ;
+
+STRUCT: GdiplusStartupOutput
+    { NotificationHook NotificationHookProc }
+    { NotificationUnhook NotificationUnhookProc } ;
+
+FUNCTION: GpStatus GdiplusStartup ( ULONG_PTR* x, GdiplusStartupInput* in, GdiplusStartupOutput* out ) ;
+FUNCTION: void GdiplusShutdown ( ULONG_PTR x ) ;
+
+TYPEDEF: DWORD ARGB
+TYPEDEF: INT PixelFormat
+
+<PRIVATE
+: pixel-format-constant ( n m l -- format )
+    [ ] [ 8 shift ] [ ] tri* bitor bitor ; inline
+PRIVATE>
+
+CONSTANT: PixelFormatIndexed   HEX: 00010000
+CONSTANT: PixelFormatGDI       HEX: 00020000
+CONSTANT: PixelFormatAlpha     HEX: 00040000
+CONSTANT: PixelFormatPAlpha    HEX: 00080000
+CONSTANT: PixelFormatExtended  HEX: 00100000
+CONSTANT: PixelFormatCanonical HEX: 00200000
+
+CONSTANT: PixelFormatUndefined 0
+CONSTANT: PixelFormatDontCare  0
+CONSTANT: PixelFormatMax               15
+
+: PixelFormat1bppIndexed ( -- x )
+    1  1 PixelFormatIndexed PixelFormatGDI bitor pixel-format-constant ; inline
+: PixelFormat4bppIndexed ( -- x )
+    2  4 PixelFormatIndexed PixelFormatGDI bitor pixel-format-constant ; inline
+: PixelFormat8bppIndexed ( -- x )
+    3  8 PixelFormatIndexed PixelFormatGDI bitor pixel-format-constant ; inline
+: PixelFormat16bppGrayScale ( -- x )
+    4 16 PixelFormatExtended pixel-format-constant ; inline
+: PixelFormat16bppRGB555 ( -- x )
+    5 16 PixelFormatGDI pixel-format-constant ; inline
+: PixelFormat16bppRGB565 ( -- x )
+    6 16 PixelFormatGDI pixel-format-constant ; inline
+: PixelFormat16bppARGB1555 ( -- x )
+    7 16 PixelFormatAlpha PixelFormatGDI bitor pixel-format-constant ; inline
+: PixelFormat24bppRGB ( -- x )
+    8 24 PixelFormatGDI pixel-format-constant ; inline
+: PixelFormat32bppRGB ( -- x )
+    9 32 PixelFormatGDI pixel-format-constant ; inline
+: PixelFormat32bppARGB ( -- x )
+    10 32 PixelFormatAlpha PixelFormatGDI PixelFormatCanonical bitor bitor pixel-format-constant ; inline
+: PixelFormat32bppPARGB ( -- x )
+    11 32 PixelFormatAlpha PixelFormatPAlpha PixelFormatGDI bitor bitor pixel-format-constant ; inline
+: PixelFormat48bppRGB ( -- x )
+    12 48 PixelFormatExtended pixel-format-constant ; inline
+: PixelFormat64bppARGB ( -- x )
+    13 64 PixelFormatAlpha PixelFormatCanonical PixelFormatExtended bitor bitor pixel-format-constant ; inline
+: PixelFormat64bppPARGB ( -- x )
+    14 64 PixelFormatAlpha PixelFormatPAlpha PixelFormatExtended bitor bitor pixel-format-constant ; inline
+
+STRUCT: ColorPalette
+    { Flags UINT }
+    { Count UINT }
+    { Entries ARGB[1] } ;
+
+! XXX RECTL and SIZEL should go with other metafile definitions if we add them
+STRUCT: RECTL
+    { left   LONG }
+    { top    LONG }
+    { right  LONG }
+    { bottom LONG } ;
+
+STRUCT: SIZEL
+    { width LONG }
+    { height LONG } ;
+
+STRUCT: ENHMETAHEADER3
+    { iType DWORD }
+    { nSize DWORD }
+    { rclBounds RECTL }
+    { rclFrame RECTL }
+    { dSignature DWORD }
+    { nVersion DWORD }
+    { nBytes DWORD }
+    { nRecords DWORD }
+    { nHandles WORD }
+    { sReserved WORD }
+    { nDescription DWORD }
+    { offDescription DWORD }
+    { nPalEntries DWORD }
+    { szlDevice SIZEL }
+    { szlMillimeters SIZEL } ;
+
+STRUCT: PWMFRect16
+    { Left INT16 }
+    { Top INT16 }
+    { Right INT16 }
+    { Bottom INT16 } ;
+
+STRUCT: WmfPlaceableFileHeader
+    { Key UINT32 }
+    { Hmf INT16 }
+    { BoundingBox PWMFRect16 }
+    { Inch INT16 }
+    { Reserved INT16[2] }
+    { Checksum INT16 } ;
+
+CONSTANT: GDIP_EMFPLUSFLAGS_DISPLAY 1
+
+! XXX we don't have a METAHEADER struct defined
+! UNION-STRUCT: MetafileHeader-union
+!     { WmfHeader METAHEADER }
+!     { EmfHeader ENHMETAHEADER3 } ;
+
+UNION-STRUCT: MetafileHeader-union
+    { EmfHeader ENHMETAHEADER3 } ;
+
+STRUCT: MetafileHeader
+    { Type MetafileType }
+    { Size UINT }
+    { Version UINT }
+    { EmfPlusFlags UINT }
+    { DpiX REAL }
+    { DpiY REAL }
+    { X INT }
+    { Y INT }
+    { Width INT }
+    { Height INT }
+    { Header-union MetafileHeader-union }
+    { EmfPlusHeaderSize INT }
+    { LogicalDpiX INT }
+    { LogicalDpiY INT } ;
+
+CONSTANT: ImageFormatUndefined      GUID: {b96b3ca9-0728-11d3-9d7b-0000f81ef32e}
+CONSTANT: ImageFormatMemoryBMP      GUID: {b96b3caa-0728-11d3-9d7b-0000f81ef32e}
+CONSTANT: ImageFormatBMP            GUID: {b96b3cab-0728-11d3-9d7b-0000f81ef32e}
+CONSTANT: ImageFormatEMF            GUID: {b96b3cac-0728-11d3-9d7b-0000f81ef32e}
+CONSTANT: ImageFormatWMF            GUID: {b96b3cad-0728-11d3-9d7b-0000f81ef32e}
+CONSTANT: ImageFormatJPEG           GUID: {b96b3cae-0728-11d3-9d7b-0000f81ef32e}
+CONSTANT: ImageFormatPNG            GUID: {b96b3caf-0728-11d3-9d7b-0000f81ef32e}
+CONSTANT: ImageFormatGIF            GUID: {b96b3cb0-0728-11d3-9d7b-0000f81ef32e}
+CONSTANT: ImageFormatTIFF           GUID: {b96b3cb1-0728-11d3-9d7b-0000f81ef32e}
+CONSTANT: ImageFormatEXIF           GUID: {b96b3cb2-0728-11d3-9d7b-0000f81ef32e}
+CONSTANT: ImageFormatIcon           GUID: {b96b3cb5-0728-11d3-9d7b-0000f81ef32e}
+
+CONSTANT: FrameDimensionTime        GUID: {6aedbd6d-3fb5-418a-83a6-7f45229dc872}
+CONSTANT: FrameDimensionPage        GUID: {7462dc86-6180-4c7e-8e3f-ee7333a7a483}
+CONSTANT: FrameDimensionResolution  GUID: {84236f7b-3bd3-428f-8dab-4ea1439ca315}
+
+ENUM: ImageLockMode
+    { ImageLockModeRead           1 }
+    { ImageLockModeWrite          2 }
+    { ImageLockModeUserInputBuf   4 } ;
+
+ENUM: RotateFlipType
+    { RotateNoneFlipNone 0 }
+    { Rotate180FlipXY    RotateNoneFlipNone }
+
+    { Rotate90FlipNone   1 }
+    { Rotate270FlipXY    Rotate90FlipNone }
+
+    { Rotate180FlipNone  2 }
+    { RotateNoneFlipXY   Rotate180FlipNone }
+
+    { Rotate270FlipNone  3 }
+    { Rotate90FlipXY     Rotate270FlipNone }
+
+    { RotateNoneFlipX    4 }
+    { Rotate180FlipY     RotateNoneFlipX }
+
+    { Rotate90FlipX      5 }
+    { Rotate270FlipY     Rotate90FlipX }
+
+    { Rotate180FlipX     6 }
+    { RotateNoneFlipY    Rotate180FlipX }
+
+    { Rotate270FlipX     7 }
+    { Rotate90FlipY      Rotate270FlipX } ;
+
+STRUCT: EncoderParameter
+    { Guid GUID }
+    { NumberOfValues ULONG }
+    { Type ULONG }
+    { Value void* } ;
+
+STRUCT: EncoderParameters
+    { Count UINT }
+    { Parameter EncoderParameter[1] } ;
+
+STRUCT: ImageCodecInfo
+    { Clsid CLSID }
+    { FormatID GUID }
+    { CodecName WCHAR* }
+    { DllName WCHAR* }
+    { FormatDescription WCHAR* }
+    { FilenameExtension WCHAR* }
+    { MimeType WCHAR* }
+    { Flags DWORD }
+    { Version DWORD }
+    { SigCount DWORD }
+    { SigSize DWORD }
+    { SigPattern BYTE* }
+    { SigMask BYTE* } ;
+
+STRUCT: BitmapData
+    { Width UINT }
+    { Height UINT }
+    { Stride INT }
+    { PixelFormat PixelFormat }
+    { Scan0 void* }
+    { Reserved UINT_PTR } ;
+
+STRUCT: ImageItemData
+    { Size UINT }
+    { Position UINT }
+    { Desc void* }
+    { DescSize UINT }
+    { Data void* }
+    { DataSize UINT }
+    { Cookie UINT } ;
+
+STRUCT: PropertyItem
+    { id PROPID }
+    { length ULONG }
+    { type WORD }
+    { value void* } ;
+
+CONSTANT: PropertyTagTypeByte       1
+CONSTANT: PropertyTagTypeASCII      2
+CONSTANT: PropertyTagTypeShort      3
+CONSTANT: PropertyTagTypeLong       4
+CONSTANT: PropertyTagTypeRational   5
+CONSTANT: PropertyTagTypeUndefined  7
+CONSTANT: PropertyTagTypeSLONG      9
+CONSTANT: PropertyTagTypeSRational 10
+
+CONSTANT: PropertyTagExifIFD                HEX: 8769
+CONSTANT: PropertyTagGpsIFD                 HEX: 8825
+
+CONSTANT: PropertyTagNewSubfileType         HEX: 00FE
+CONSTANT: PropertyTagSubfileType            HEX: 00FF
+CONSTANT: PropertyTagImageWidth             HEX: 0100
+CONSTANT: PropertyTagImageHeight            HEX: 0101
+CONSTANT: PropertyTagBitsPerSample          HEX: 0102
+CONSTANT: PropertyTagCompression            HEX: 0103
+CONSTANT: PropertyTagPhotometricInterp      HEX: 0106
+CONSTANT: PropertyTagThreshHolding          HEX: 0107
+CONSTANT: PropertyTagCellWidth              HEX: 0108
+CONSTANT: PropertyTagCellHeight             HEX: 0109
+CONSTANT: PropertyTagFillOrder              HEX: 010A
+CONSTANT: PropertyTagDocumentName           HEX: 010D
+CONSTANT: PropertyTagImageDescription       HEX: 010E
+CONSTANT: PropertyTagEquipMake              HEX: 010F
+CONSTANT: PropertyTagEquipModel             HEX: 0110
+CONSTANT: PropertyTagStripOffsets           HEX: 0111
+CONSTANT: PropertyTagOrientation            HEX: 0112
+CONSTANT: PropertyTagSamplesPerPixel        HEX: 0115
+CONSTANT: PropertyTagRowsPerStrip           HEX: 0116
+CONSTANT: PropertyTagStripBytesCount        HEX: 0117
+CONSTANT: PropertyTagMinSampleValue         HEX: 0118
+CONSTANT: PropertyTagMaxSampleValue         HEX: 0119
+CONSTANT: PropertyTagXResolution            HEX: 011A
+CONSTANT: PropertyTagYResolution            HEX: 011B
+CONSTANT: PropertyTagPlanarConfig           HEX: 011C
+CONSTANT: PropertyTagPageName               HEX: 011D
+CONSTANT: PropertyTagXPosition              HEX: 011E
+CONSTANT: PropertyTagYPosition              HEX: 011F
+CONSTANT: PropertyTagFreeOffset             HEX: 0120
+CONSTANT: PropertyTagFreeByteCounts         HEX: 0121
+CONSTANT: PropertyTagGrayResponseUnit       HEX: 0122
+CONSTANT: PropertyTagGrayResponseCurve      HEX: 0123
+CONSTANT: PropertyTagT4Option               HEX: 0124
+CONSTANT: PropertyTagT6Option               HEX: 0125
+CONSTANT: PropertyTagResolutionUnit         HEX: 0128
+CONSTANT: PropertyTagPageNumber             HEX: 0129
+CONSTANT: PropertyTagTransferFuncition      HEX: 012D
+CONSTANT: PropertyTagSoftwareUsed           HEX: 0131
+CONSTANT: PropertyTagDateTime               HEX: 0132
+CONSTANT: PropertyTagArtist                 HEX: 013B
+CONSTANT: PropertyTagHostComputer           HEX: 013C
+CONSTANT: PropertyTagPredictor              HEX: 013D
+CONSTANT: PropertyTagWhitePoint             HEX: 013E
+CONSTANT: PropertyTagPrimaryChromaticities  HEX: 013F
+CONSTANT: PropertyTagColorMap               HEX: 0140
+CONSTANT: PropertyTagHalftoneHints          HEX: 0141
+CONSTANT: PropertyTagTileWidth              HEX: 0142
+CONSTANT: PropertyTagTileLength             HEX: 0143
+CONSTANT: PropertyTagTileOffset             HEX: 0144
+CONSTANT: PropertyTagTileByteCounts         HEX: 0145
+CONSTANT: PropertyTagInkSet                 HEX: 014C
+CONSTANT: PropertyTagInkNames               HEX: 014D
+CONSTANT: PropertyTagNumberOfInks           HEX: 014E
+CONSTANT: PropertyTagDotRange               HEX: 0150
+CONSTANT: PropertyTagTargetPrinter          HEX: 0151
+CONSTANT: PropertyTagExtraSamples           HEX: 0152
+CONSTANT: PropertyTagSampleFormat           HEX: 0153
+CONSTANT: PropertyTagSMinSampleValue        HEX: 0154
+CONSTANT: PropertyTagSMaxSampleValue        HEX: 0155
+CONSTANT: PropertyTagTransferRange          HEX: 0156
+
+CONSTANT: PropertyTagJPEGProc               HEX: 0200
+CONSTANT: PropertyTagJPEGInterFormat        HEX: 0201
+CONSTANT: PropertyTagJPEGInterLength        HEX: 0202
+CONSTANT: PropertyTagJPEGRestartInterval    HEX: 0203
+CONSTANT: PropertyTagJPEGLosslessPredictors HEX: 0205
+CONSTANT: PropertyTagJPEGPointTransforms    HEX: 0206
+CONSTANT: PropertyTagJPEGQTables            HEX: 0207
+CONSTANT: PropertyTagJPEGDCTables           HEX: 0208
+CONSTANT: PropertyTagJPEGACTables           HEX: 0209
+
+CONSTANT: PropertyTagYCbCrCoefficients      HEX: 0211
+CONSTANT: PropertyTagYCbCrSubsampling       HEX: 0212
+CONSTANT: PropertyTagYCbCrPositioning       HEX: 0213
+CONSTANT: PropertyTagREFBlackWhite          HEX: 0214
+
+CONSTANT: PropertyTagICCProfile          HEX: 8773
+
+CONSTANT: PropertyTagGamma                HEX: 0301
+CONSTANT: PropertyTagICCProfileDescriptor HEX: 0302
+CONSTANT: PropertyTagSRGBRenderingIntent  HEX: 0303
+
+CONSTANT: PropertyTagImageTitle          HEX: 0320
+CONSTANT: PropertyTagCopyright           HEX: 8298
+
+CONSTANT: PropertyTagResolutionXUnit            HEX: 5001
+CONSTANT: PropertyTagResolutionYUnit            HEX: 5002
+CONSTANT: PropertyTagResolutionXLengthUnit      HEX: 5003
+CONSTANT: PropertyTagResolutionYLengthUnit      HEX: 5004
+CONSTANT: PropertyTagPrintFlags                 HEX: 5005
+CONSTANT: PropertyTagPrintFlagsVersion          HEX: 5006
+CONSTANT: PropertyTagPrintFlagsCrop             HEX: 5007
+CONSTANT: PropertyTagPrintFlagsBleedWidth       HEX: 5008
+CONSTANT: PropertyTagPrintFlagsBleedWidthScale  HEX: 5009
+CONSTANT: PropertyTagHalftoneLPI                HEX: 500A
+CONSTANT: PropertyTagHalftoneLPIUnit            HEX: 500B
+CONSTANT: PropertyTagHalftoneDegree             HEX: 500C
+CONSTANT: PropertyTagHalftoneShape              HEX: 500D
+CONSTANT: PropertyTagHalftoneMisc               HEX: 500E
+CONSTANT: PropertyTagHalftoneScreen             HEX: 500F
+CONSTANT: PropertyTagJPEGQuality                HEX: 5010
+CONSTANT: PropertyTagGridSize                   HEX: 5011
+CONSTANT: PropertyTagThumbnailFormat            HEX: 5012
+CONSTANT: PropertyTagThumbnailWidth             HEX: 5013
+CONSTANT: PropertyTagThumbnailHeight            HEX: 5014
+CONSTANT: PropertyTagThumbnailColorDepth        HEX: 5015
+CONSTANT: PropertyTagThumbnailPlanes            HEX: 5016
+CONSTANT: PropertyTagThumbnailRawBytes          HEX: 5017
+CONSTANT: PropertyTagThumbnailSize              HEX: 5018
+CONSTANT: PropertyTagThumbnailCompressedSize    HEX: 5019
+CONSTANT: PropertyTagColorTransferFunction      HEX: 501A
+CONSTANT: PropertyTagThumbnailData              HEX: 501B
+
+CONSTANT: PropertyTagThumbnailImageWidth        HEX: 5020
+CONSTANT: PropertyTagThumbnailImageHeight       HEX: 5021
+CONSTANT: PropertyTagThumbnailBitsPerSample     HEX: 5022
+CONSTANT: PropertyTagThumbnailCompression       HEX: 5023
+CONSTANT: PropertyTagThumbnailPhotometricInterp HEX: 5024
+CONSTANT: PropertyTagThumbnailImageDescription  HEX: 5025
+CONSTANT: PropertyTagThumbnailEquipMake         HEX: 5026
+CONSTANT: PropertyTagThumbnailEquipModel        HEX: 5027
+CONSTANT: PropertyTagThumbnailStripOffsets      HEX: 5028
+CONSTANT: PropertyTagThumbnailOrientation       HEX: 5029
+CONSTANT: PropertyTagThumbnailSamplesPerPixel   HEX: 502A
+CONSTANT: PropertyTagThumbnailRowsPerStrip      HEX: 502B
+CONSTANT: PropertyTagThumbnailStripBytesCount   HEX: 502C
+CONSTANT: PropertyTagThumbnailResolutionX       HEX: 502D
+CONSTANT: PropertyTagThumbnailResolutionY       HEX: 502E
+CONSTANT: PropertyTagThumbnailPlanarConfig      HEX: 502F
+CONSTANT: PropertyTagThumbnailResolutionUnit    HEX: 5030
+CONSTANT: PropertyTagThumbnailTransferFunction  HEX: 5031
+CONSTANT: PropertyTagThumbnailSoftwareUsed      HEX: 5032
+CONSTANT: PropertyTagThumbnailDateTime          HEX: 5033
+CONSTANT: PropertyTagThumbnailArtist            HEX: 5034
+CONSTANT: PropertyTagThumbnailWhitePoint        HEX: 5035
+CONSTANT: PropertyTagThumbnailPrimaryChromaticities HEX: 5036
+CONSTANT: PropertyTagThumbnailYCbCrCoefficients HEX: 5037
+CONSTANT: PropertyTagThumbnailYCbCrSubsampling  HEX: 5038
+CONSTANT: PropertyTagThumbnailYCbCrPositioning  HEX: 5039
+CONSTANT: PropertyTagThumbnailRefBlackWhite     HEX: 503A
+CONSTANT: PropertyTagThumbnailCopyRight         HEX: 503B
+
+CONSTANT: PropertyTagLuminanceTable    HEX: 5090
+CONSTANT: PropertyTagChrominanceTable  HEX: 5091
+
+CONSTANT: PropertyTagFrameDelay        HEX: 5100
+CONSTANT: PropertyTagLoopCount         HEX: 5101
+
+CONSTANT: PropertyTagPixelUnit         HEX: 5110
+CONSTANT: PropertyTagPixelPerUnitX     HEX: 5111
+CONSTANT: PropertyTagPixelPerUnitY     HEX: 5112
+CONSTANT: PropertyTagPaletteHistogram  HEX: 5113
+
+CONSTANT: PropertyTagExifExposureTime  HEX: 829A
+CONSTANT: PropertyTagExifFNumber       HEX: 829D
+
+CONSTANT: PropertyTagExifExposureProg  HEX: 8822
+CONSTANT: PropertyTagExifSpectralSense HEX: 8824
+CONSTANT: PropertyTagExifISOSpeed      HEX: 8827
+CONSTANT: PropertyTagExifOECF          HEX: 8828
+
+CONSTANT: PropertyTagExifVer           HEX: 9000
+CONSTANT: PropertyTagExifDTOrig        HEX: 9003
+CONSTANT: PropertyTagExifDTDigitized   HEX: 9004
+
+CONSTANT: PropertyTagExifCompConfig    HEX: 9101
+CONSTANT: PropertyTagExifCompBPP       HEX: 9102
+
+CONSTANT: PropertyTagExifShutterSpeed  HEX: 9201
+CONSTANT: PropertyTagExifAperture      HEX: 9202
+CONSTANT: PropertyTagExifBrightness    HEX: 9203
+CONSTANT: PropertyTagExifExposureBias  HEX: 9204
+CONSTANT: PropertyTagExifMaxAperture   HEX: 9205
+CONSTANT: PropertyTagExifSubjectDist   HEX: 9206
+CONSTANT: PropertyTagExifMeteringMode  HEX: 9207
+CONSTANT: PropertyTagExifLightSource   HEX: 9208
+CONSTANT: PropertyTagExifFlash         HEX: 9209
+CONSTANT: PropertyTagExifFocalLength   HEX: 920A
+CONSTANT: PropertyTagExifMakerNote     HEX: 927C
+CONSTANT: PropertyTagExifUserComment   HEX: 9286
+CONSTANT: PropertyTagExifDTSubsec      HEX: 9290
+CONSTANT: PropertyTagExifDTOrigSS      HEX: 9291
+CONSTANT: PropertyTagExifDTDigSS       HEX: 9292
+
+CONSTANT: PropertyTagExifFPXVer        HEX: A000
+CONSTANT: PropertyTagExifColorSpace    HEX: A001
+CONSTANT: PropertyTagExifPixXDim       HEX: A002
+CONSTANT: PropertyTagExifPixYDim       HEX: A003
+CONSTANT: PropertyTagExifRelatedWav    HEX: A004
+CONSTANT: PropertyTagExifInterop       HEX: A005
+CONSTANT: PropertyTagExifFlashEnergy   HEX: A20B
+CONSTANT: PropertyTagExifSpatialFR     HEX: A20C
+CONSTANT: PropertyTagExifFocalXRes     HEX: A20E
+CONSTANT: PropertyTagExifFocalYRes     HEX: A20F
+CONSTANT: PropertyTagExifFocalResUnit  HEX: A210
+CONSTANT: PropertyTagExifSubjectLoc    HEX: A214
+CONSTANT: PropertyTagExifExposureIndex HEX: A215
+CONSTANT: PropertyTagExifSensingMethod HEX: A217
+CONSTANT: PropertyTagExifFileSource    HEX: A300
+CONSTANT: PropertyTagExifSceneType     HEX: A301
+CONSTANT: PropertyTagExifCfaPattern    HEX: A302
+
+CONSTANT: PropertyTagGpsVer            HEX: 0000
+CONSTANT: PropertyTagGpsLatitudeRef    HEX: 0001
+CONSTANT: PropertyTagGpsLatitude       HEX: 0002
+CONSTANT: PropertyTagGpsLongitudeRef   HEX: 0003
+CONSTANT: PropertyTagGpsLongitude      HEX: 0004
+CONSTANT: PropertyTagGpsAltitudeRef    HEX: 0005
+CONSTANT: PropertyTagGpsAltitude       HEX: 0006
+CONSTANT: PropertyTagGpsGpsTime        HEX: 0007
+CONSTANT: PropertyTagGpsGpsSatellites  HEX: 0008
+CONSTANT: PropertyTagGpsGpsStatus      HEX: 0009
+CONSTANT: PropertyTagGpsGpsMeasureMode HEX: 000A
+CONSTANT: PropertyTagGpsGpsDop         HEX: 000B
+CONSTANT: PropertyTagGpsSpeedRef       HEX: 000C
+CONSTANT: PropertyTagGpsSpeed          HEX: 000D
+CONSTANT: PropertyTagGpsTrackRef       HEX: 000E
+CONSTANT: PropertyTagGpsTrack          HEX: 000F
+CONSTANT: PropertyTagGpsImgDirRef      HEX: 0010
+CONSTANT: PropertyTagGpsImgDir         HEX: 0011
+CONSTANT: PropertyTagGpsMapDatum       HEX: 0012
+CONSTANT: PropertyTagGpsDestLatRef     HEX: 0013
+CONSTANT: PropertyTagGpsDestLat        HEX: 0014
+CONSTANT: PropertyTagGpsDestLongRef    HEX: 0015
+CONSTANT: PropertyTagGpsDestLong       HEX: 0016
+CONSTANT: PropertyTagGpsDestBearRef    HEX: 0017
+CONSTANT: PropertyTagGpsDestBear       HEX: 0018
+CONSTANT: PropertyTagGpsDestDistRef    HEX: 0019
+CONSTANT: PropertyTagGpsDestDist       HEX: 001A
+
+ENUM: ColorChannelFlags
+    ColorChannelFlagsC
+    ColorChannelFlagsM
+    ColorChannelFlagsY
+    ColorChannelFlagsK
+    ColorChannelFlagsLast ;
+
+STRUCT: GpColor
+    { Argb ARGB } ;
+
+STRUCT: ColorMatrix
+    { m REAL[5][5] } ;
+
+ENUM: ColorMatrixFlags
+    { ColorMatrixFlagsDefault    0 }
+    { ColorMatrixFlagsSkipGrays  1 }
+    { ColorMatrixFlagsAltGray    2 } ;
+
+ENUM: ColorAdjustType
+    ColorAdjustTypeDefault
+    ColorAdjustTypeBitmap
+    ColorAdjustTypeBrush
+    ColorAdjustTypePen
+    ColorAdjustTypeText
+    ColorAdjustTypeCount
+    ColorAdjustTypeAny ;
+
+STRUCT: ColorMap
+    { oldColor GpColor }
+    { newColor GpColor } ;
+
+C-TYPE: GpGraphics 
+C-TYPE: GpPen 
+C-TYPE: GpBrush 
+C-TYPE: GpHatch 
+C-TYPE: GpSolidFill 
+C-TYPE: GpPath 
+C-TYPE: GpMatrix 
+C-TYPE: GpPathIterator 
+C-TYPE: GpCustomLineCap 
+C-TYPE: GpAdjustableArrowCap 
+C-TYPE: GpImage 
+C-TYPE: GpMetafile 
+C-TYPE: GpImageAttributes 
+C-TYPE: GpCachedBitmap 
+C-TYPE: GpBitmap 
+C-TYPE: GpPathGradient 
+C-TYPE: GpLineGradient 
+C-TYPE: GpTexture 
+C-TYPE: GpFont 
+C-TYPE: GpFontCollection 
+C-TYPE: GpFontFamily 
+C-TYPE: GpStringFormat 
+C-TYPE: GpRegion 
+C-TYPE: CGpEffect 
+
+! dummy out other windows types we don't care to define yet
+C-TYPE: LOGFONTA
+C-TYPE: LOGFONTW
+
+FUNCTION: GpStatus GdipCreateAdjustableArrowCap ( REAL x, REAL x, BOOL x, GpAdjustableArrowCap** x ) ;
+FUNCTION: GpStatus GdipGetAdjustableArrowCapFillState ( GpAdjustableArrowCap* x, BOOL* x ) ;
+FUNCTION: GpStatus GdipGetAdjustableArrowCapHeight ( GpAdjustableArrowCap* x, REAL* x ) ;
+FUNCTION: GpStatus GdipGetAdjustableArrowCapMiddleInset ( GpAdjustableArrowCap* x, REAL* x ) ;
+FUNCTION: GpStatus GdipGetAdjustableArrowCapWidth ( GpAdjustableArrowCap* x, REAL* x ) ;
+FUNCTION: GpStatus GdipSetAdjustableArrowCapFillState ( GpAdjustableArrowCap* x, BOOL x ) ;
+FUNCTION: GpStatus GdipSetAdjustableArrowCapHeight ( GpAdjustableArrowCap* x, REAL x ) ;
+FUNCTION: GpStatus GdipSetAdjustableArrowCapMiddleInset ( GpAdjustableArrowCap* x, REAL x ) ;
+FUNCTION: GpStatus GdipSetAdjustableArrowCapWidth ( GpAdjustableArrowCap* x, REAL x ) ;
+
+FUNCTION: GpStatus GdipBitmapApplyEffect ( GpBitmap* x, CGpEffect* x, RECT* x, BOOL x, VOID** x, INT* x ) ;
+FUNCTION: GpStatus GdipBitmapCreateApplyEffect ( GpBitmap** x, INT x, CGpEffect* x, RECT* x, RECT* x, GpBitmap** x, BOOL x, VOID** x, INT* x ) ;
+FUNCTION: GpStatus GdipBitmapGetPixel ( GpBitmap* x, INT x, INT x, ARGB* x ) ;
+FUNCTION: GpStatus GdipBitmapLockBits ( GpBitmap* x, GpRect* x, UINT x, 
+             PixelFormat x, BitmapData* x ) ;
+FUNCTION: GpStatus GdipBitmapSetPixel ( GpBitmap* x, INT x, INT x, ARGB x ) ;
+FUNCTION: GpStatus GdipBitmapSetResolution ( GpBitmap* x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipBitmapUnlockBits ( GpBitmap* x, BitmapData* x ) ;
+FUNCTION: GpStatus GdipCloneBitmapArea ( REAL x, REAL x, REAL x, REAL x, PixelFormat x, GpBitmap* x, GpBitmap** x ) ;
+FUNCTION: GpStatus GdipCloneBitmapAreaI ( INT x, INT x, INT x, INT x, PixelFormat x, GpBitmap* x, GpBitmap** x ) ;
+FUNCTION: GpStatus GdipCreateBitmapFromFile ( WCHAR* x, GpBitmap** x ) ;
+FUNCTION: GpStatus GdipCreateBitmapFromFileICM ( WCHAR* x, GpBitmap** x ) ;
+FUNCTION: GpStatus GdipCreateBitmapFromGdiDib ( BITMAPINFO* x, VOID* x, GpBitmap** x ) ;
+FUNCTION: GpStatus GdipCreateBitmapFromGraphics ( INT x, INT x, GpGraphics* x, GpBitmap** x ) ;
+FUNCTION: GpStatus GdipCreateBitmapFromHBITMAP ( HBITMAP x,  HPALETTE x,  GpBitmap** x ) ;
+FUNCTION: GpStatus GdipCreateBitmapFromHICON ( HICON x,  GpBitmap** x ) ;
+FUNCTION: GpStatus GdipCreateBitmapFromResource ( HINSTANCE x, WCHAR* x, GpBitmap** x ) ;
+FUNCTION: GpStatus GdipCreateBitmapFromScan0 ( INT x, INT x, INT x, PixelFormat x, BYTE* x, 
+             GpBitmap** x ) ;
+FUNCTION: GpStatus GdipCreateBitmapFromStream ( IStream* x, GpBitmap** x ) ;
+FUNCTION: GpStatus GdipCreateBitmapFromStreamICM ( IStream* x, GpBitmap** x ) ;
+FUNCTION: GpStatus GdipCreateHBITMAPFromBitmap ( GpBitmap* x, HBITMAP* x, ARGB x ) ;
+FUNCTION: GpStatus GdipCreateHICONFromBitmap ( GpBitmap* x, HICON* x ) ;
+FUNCTION: GpStatus GdipDeleteEffect ( CGpEffect* x ) ;
+FUNCTION: GpStatus GdipSetEffectParameters ( CGpEffect* x, VOID* x, UINT x ) ;
+
+
+FUNCTION: GpStatus GdipCloneBrush ( GpBrush* x, GpBrush** x ) ;
+FUNCTION: GpStatus GdipDeleteBrush ( GpBrush* x ) ;
+FUNCTION: GpStatus GdipGetBrushType ( GpBrush* x, GpBrushType* x ) ;
+
+
+FUNCTION: GpStatus GdipCreateCachedBitmap ( GpBitmap* x, GpGraphics* x, 
+             GpCachedBitmap** x ) ;
+FUNCTION: GpStatus GdipDeleteCachedBitmap ( GpCachedBitmap* x ) ;
+FUNCTION: GpStatus GdipDrawCachedBitmap ( GpGraphics* x, GpCachedBitmap* x, INT x, INT x ) ;
+
+
+FUNCTION: GpStatus GdipCloneCustomLineCap ( GpCustomLineCap* x, GpCustomLineCap** x ) ;
+FUNCTION: GpStatus GdipCreateCustomLineCap ( GpPath* x, GpPath* x, GpLineCap x, REAL x, 
+             GpCustomLineCap** x ) ;
+FUNCTION: GpStatus GdipDeleteCustomLineCap ( GpCustomLineCap* x ) ;
+FUNCTION: GpStatus GdipGetCustomLineCapBaseCap ( GpCustomLineCap* x, GpLineCap* x ) ;
+FUNCTION: GpStatus GdipSetCustomLineCapBaseCap ( GpCustomLineCap* x, GpLineCap x ) ;
+FUNCTION: GpStatus GdipGetCustomLineCapBaseInset ( GpCustomLineCap* x, REAL* x ) ;
+FUNCTION: GpStatus GdipSetCustomLineCapBaseInset ( GpCustomLineCap* x, REAL x ) ;
+FUNCTION: GpStatus GdipSetCustomLineCapStrokeCaps ( GpCustomLineCap* x, GpLineCap x, 
+             GpLineCap x ) ;
+FUNCTION: GpStatus GdipGetCustomLineCapStrokeJoin ( GpCustomLineCap* x, GpLineJoin* x ) ;
+FUNCTION: GpStatus GdipSetCustomLineCapStrokeJoin ( GpCustomLineCap* x, GpLineJoin x ) ;
+FUNCTION: GpStatus GdipGetCustomLineCapWidthScale ( GpCustomLineCap* x, REAL* x ) ;
+FUNCTION: GpStatus GdipSetCustomLineCapWidthScale ( GpCustomLineCap* x, REAL x ) ;
+
+FUNCTION: GpStatus GdipCloneFont ( GpFont* x, GpFont** x ) ;
+FUNCTION: GpStatus GdipCreateFont ( GpFontFamily* x,  REAL x,  INT x,  GpUnit x, 
+             GpFont** x ) ;
+FUNCTION: GpStatus GdipCreateFontFromDC ( HDC x, GpFont** x ) ;
+FUNCTION: GpStatus GdipCreateFontFromLogfontA ( HDC x, LOGFONTA* x, GpFont** x ) ;
+FUNCTION: GpStatus GdipCreateFontFromLogfontW ( HDC x, LOGFONTW* x, GpFont** x ) ;
+FUNCTION: GpStatus GdipDeleteFont ( GpFont* x ) ;
+FUNCTION: GpStatus GdipGetLogFontA ( GpFont* x, GpGraphics* x, LOGFONTA* x ) ;
+FUNCTION: GpStatus GdipGetLogFontW ( GpFont* x, GpGraphics* x, LOGFONTW* x ) ;
+FUNCTION: GpStatus GdipGetFamily ( GpFont* x,  GpFontFamily** x ) ;
+FUNCTION: GpStatus GdipGetFontUnit ( GpFont* x,  GpUnit* x ) ;
+FUNCTION: GpStatus GdipGetFontSize ( GpFont* x,  REAL* x ) ;
+FUNCTION: GpStatus GdipGetFontStyle ( GpFont* x,  INT* x ) ;
+FUNCTION: GpStatus GdipGetFontHeight ( GpFont* x,  GpGraphics* x, 
+                 REAL* x ) ;
+FUNCTION: GpStatus GdipGetFontHeightGivenDPI ( GpFont* x,  REAL x,  REAL* x ) ;
+
+
+FUNCTION: GpStatus GdipNewInstalledFontCollection ( GpFontCollection** x ) ;
+FUNCTION: GpStatus GdipNewPrivateFontCollection ( GpFontCollection** x ) ;
+FUNCTION: GpStatus GdipDeletePrivateFontCollection ( GpFontCollection** x ) ;
+FUNCTION: GpStatus GdipPrivateAddFontFile ( GpFontCollection* x,  WCHAR* x ) ;
+FUNCTION: GpStatus GdipPrivateAddMemoryFont ( GpFontCollection* x, 
+                 void* x, INT x ) ;
+FUNCTION: GpStatus GdipGetFontCollectionFamilyCount ( GpFontCollection* x,  INT* x ) ;
+FUNCTION: GpStatus GdipGetFontCollectionFamilyList ( GpFontCollection* x,  INT x, 
+                 GpFontFamily** x,  INT* x ) ;
+
+
+FUNCTION: GpStatus GdipCloneFontFamily ( GpFontFamily* x,  GpFontFamily** x ) ;
+FUNCTION: GpStatus GdipCreateFontFamilyFromName ( WCHAR* x, 
+             GpFontCollection* x,  GpFontFamily** x ) ;
+FUNCTION: GpStatus GdipDeleteFontFamily ( GpFontFamily* x ) ;
+FUNCTION: GpStatus GdipGetFamilyName ( GpFontFamily* x,  WCHAR* x,  LANGID x ) ;
+FUNCTION: GpStatus GdipGetCellAscent ( GpFontFamily* x,  INT x,  UINT16* x ) ;
+FUNCTION: GpStatus GdipGetCellDescent ( GpFontFamily* x,  INT x,  UINT16* x ) ;
+FUNCTION: GpStatus GdipGetEmHeight ( GpFontFamily* x,  INT x,  UINT16* x ) ;
+FUNCTION: GpStatus GdipGetGenericFontFamilySansSerif ( GpFontFamily** x ) ;
+FUNCTION: GpStatus GdipGetGenericFontFamilySerif ( GpFontFamily** x ) ;
+FUNCTION: GpStatus GdipGetGenericFontFamilyMonospace ( GpFontFamily** x ) ;
+FUNCTION: GpStatus GdipGetLineSpacing ( GpFontFamily* x,  INT x,  UINT16* x ) ;
+FUNCTION: GpStatus GdipIsStyleAvailable ( GpFontFamily* x,  INT x,  BOOL* x ) ;
+
+
+FUNCTION: GpStatus GdipFlush ( GpGraphics* x,  GpFlushIntention x ) ;
+FUNCTION: GpStatus GdipBeginContainer ( GpGraphics* x, GpRectF* x, GpRectF* x, GpUnit x, GraphicsContainer* x ) ;
+FUNCTION: GpStatus GdipBeginContainer2 ( GpGraphics* x, GraphicsContainer* x ) ;
+FUNCTION: GpStatus GdipBeginContainerI ( GpGraphics* x, GpRect* x, GpRect* x, GpUnit x, GraphicsContainer* x ) ;
+FUNCTION: GpStatus GdipEndContainer ( GpGraphics* x, GraphicsContainer x ) ;
+FUNCTION: GpStatus GdipComment ( GpGraphics* x, UINT x, BYTE* x ) ;
+FUNCTION: GpStatus GdipCreateFromHDC ( HDC x, GpGraphics** x ) ;
+FUNCTION: GpStatus GdipCreateFromHDC2 ( HDC x, HANDLE x, GpGraphics** x ) ;
+FUNCTION: GpStatus GdipCreateFromHWND ( HWND x, GpGraphics** x ) ;
+FUNCTION: GpStatus GdipCreateFromHWNDICM ( HWND x, GpGraphics** x ) ;
+FUNCTION: HPALETTE GdipCreateHalftonePalette ( ) ;
+FUNCTION: GpStatus GdipDeleteGraphics ( GpGraphics* x ) ;
+FUNCTION: GpStatus GdipDrawArc ( GpGraphics* x, GpPen* x, REAL x, REAL x, REAL x, REAL x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipDrawArcI ( GpGraphics* x, GpPen* x, INT x, INT x, INT x, INT x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipDrawBezier ( GpGraphics* x, GpPen* x, REAL x, REAL x, REAL x, REAL x, REAL x, REAL x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipDrawBezierI ( GpGraphics* x, GpPen* x, INT x, INT x, INT x, INT x, INT x, INT x, INT x, INT x ) ;
+FUNCTION: GpStatus GdipDrawBeziers ( GpGraphics* x, GpPen* x, GpPointF* x, INT x ) ;
+FUNCTION: GpStatus GdipDrawBeziersI ( GpGraphics* x, GpPen* x, GpPoint* x, INT x ) ;
+FUNCTION: GpStatus GdipDrawClosedCurve ( GpGraphics* x, GpPen* x, GpPointF* x, INT x ) ;
+FUNCTION: GpStatus GdipDrawClosedCurveI ( GpGraphics* x, GpPen* x, GpPoint* x, INT x ) ;
+FUNCTION: GpStatus GdipDrawClosedCurve2 ( GpGraphics* x, GpPen* x, GpPointF* x, INT x, REAL x ) ;
+FUNCTION: GpStatus GdipDrawClosedCurve2I ( GpGraphics* x, GpPen* x, GpPoint* x, INT x, REAL x ) ;
+FUNCTION: GpStatus GdipDrawCurve ( GpGraphics* x, GpPen* x, GpPointF* x, INT x ) ;
+FUNCTION: GpStatus GdipDrawCurveI ( GpGraphics* x, GpPen* x, GpPoint* x, INT x ) ;
+FUNCTION: GpStatus GdipDrawCurve2 ( GpGraphics* x, GpPen* x, GpPointF* x, INT x, REAL x ) ;
+FUNCTION: GpStatus GdipDrawCurve2I ( GpGraphics* x, GpPen* x, GpPoint* x, INT x, REAL x ) ;
+FUNCTION: GpStatus GdipDrawCurve3 ( GpGraphics* x, GpPen* x, GpPointF* x, INT x, INT x, INT x, REAL x ) ;
+FUNCTION: GpStatus GdipDrawCurve3I ( GpGraphics* x, GpPen* x, GpPoint* x, INT x, INT x, INT x, REAL x ) ;
+FUNCTION: GpStatus GdipDrawDriverString ( GpGraphics* x, UINT16* x, INT x, 
+             GpFont* x, GpBrush* x, GpPointF* x, INT x, GpMatrix* x ) ;
+FUNCTION: GpStatus GdipDrawEllipse ( GpGraphics* x, GpPen* x, REAL x, REAL x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipDrawEllipseI ( GpGraphics* x, GpPen* x, INT x, INT x, INT x, INT x ) ;
+FUNCTION: GpStatus GdipDrawImage ( GpGraphics* x, GpImage* x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipDrawImageI ( GpGraphics* x, GpImage* x, INT x, INT x ) ;
+FUNCTION: GpStatus GdipDrawImagePointRect ( GpGraphics* x, GpImage* x, REAL x, REAL x, REAL x, REAL x, REAL x, REAL x, GpUnit x ) ;
+FUNCTION: GpStatus GdipDrawImagePointRectI ( GpGraphics* x, GpImage* x, INT x, INT x, INT x, INT x, INT x, INT x, GpUnit x ) ;
+FUNCTION: GpStatus GdipDrawImagePoints ( GpGraphics* x, GpImage* x, GpPointF* x, INT x ) ;
+FUNCTION: GpStatus GdipDrawImagePointsI ( GpGraphics* x, GpImage* x, GpPoint* x, INT x ) ;
+FUNCTION: GpStatus GdipDrawImagePointsRect ( GpGraphics* x, GpImage* x, 
+             GpPointF* x, INT x, REAL x, REAL x, REAL x, REAL x, GpUnit x, 
+             GpImageAttributes* x, DrawImageAbort x, VOID* x ) ;
+FUNCTION: GpStatus GdipDrawImagePointsRectI ( GpGraphics* x, GpImage* x, 
+             GpPoint* x, INT x, INT x, INT x, INT x, INT x, GpUnit x, 
+             GpImageAttributes* x, DrawImageAbort x, VOID* x ) ;
+FUNCTION: GpStatus GdipDrawImageRect ( GpGraphics* x, GpImage* x, REAL x, REAL x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipDrawImageRectI ( GpGraphics* x, GpImage* x, INT x, INT x, INT x, INT x ) ;
+FUNCTION: GpStatus GdipDrawImageRectRect ( GpGraphics* x, GpImage* x, REAL x, REAL x, REAL x, 
+             REAL x, REAL x, REAL x, REAL x, REAL x, GpUnit x, GpImageAttributes* x, DrawImageAbort x, 
+             VOID* x ) ;
+FUNCTION: GpStatus GdipDrawImageRectRectI ( GpGraphics* x, GpImage* x, INT x, INT x, INT x, 
+             INT x, INT x, INT x, INT x, INT x, GpUnit x, GpImageAttributes* x, DrawImageAbort x, 
+             VOID* x ) ;
+FUNCTION: GpStatus GdipDrawLine ( GpGraphics* x, GpPen* x, REAL x, REAL x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipDrawLineI ( GpGraphics* x, GpPen* x, INT x, INT x, INT x, INT x ) ;
+FUNCTION: GpStatus GdipDrawLines ( GpGraphics* x, GpPen* x, GpPointF* x, INT x ) ;
+FUNCTION: GpStatus GdipDrawLinesI ( GpGraphics* x, GpPen* x, GpPoint* x, INT x ) ;
+FUNCTION: GpStatus GdipDrawPath ( GpGraphics* x, GpPen* x, GpPath* x ) ;
+FUNCTION: GpStatus GdipDrawPie ( GpGraphics* x, GpPen* x, REAL x, REAL x, REAL x, REAL x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipDrawPieI ( GpGraphics* x, GpPen* x, INT x, INT x, INT x, INT x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipDrawPolygon ( GpGraphics* x, GpPen* x, GpPointF* x,  INT x ) ;
+FUNCTION: GpStatus GdipDrawPolygonI ( GpGraphics* x, GpPen* x, GpPoint* x,  INT x ) ;
+FUNCTION: GpStatus GdipDrawRectangle ( GpGraphics* x, GpPen* x, REAL x, REAL x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipDrawRectangleI ( GpGraphics* x, GpPen* x, INT x, INT x, INT x, INT x ) ;
+FUNCTION: GpStatus GdipDrawRectangles ( GpGraphics* x, GpPen* x, GpRectF* x, INT x ) ;
+FUNCTION: GpStatus GdipDrawRectanglesI ( GpGraphics* x, GpPen* x, GpRect* x, INT x ) ;
+FUNCTION: GpStatus GdipDrawString ( GpGraphics* x, WCHAR* x, INT x, 
+             GpFont* x, GpRectF* x,  GpStringFormat* x, 
+             GpBrush* x ) ;
+FUNCTION: GpStatus GdipFillClosedCurve2 ( GpGraphics* x, GpBrush* x, GpPointF* x, INT x, 
+             REAL x, GpFillMode x ) ;
+FUNCTION: GpStatus GdipFillClosedCurve2I ( GpGraphics* x, GpBrush* x, GpPoint* x, INT x, 
+             REAL x, GpFillMode x ) ;
+FUNCTION: GpStatus GdipFillEllipse ( GpGraphics* x, GpBrush* x, REAL x, REAL x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipFillEllipseI ( GpGraphics* x, GpBrush* x, INT x, INT x, INT x, INT x ) ;
+FUNCTION: GpStatus GdipFillPath ( GpGraphics* x, GpBrush* x, GpPath* x ) ;
+FUNCTION: GpStatus GdipFillPie ( GpGraphics* x, GpBrush* x, REAL x, REAL x, REAL x, REAL x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipFillPieI ( GpGraphics* x, GpBrush* x, INT x, INT x, INT x, INT x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipFillPolygon ( GpGraphics* x, GpBrush* x, GpPointF* x, 
+             INT x, GpFillMode x ) ;
+FUNCTION: GpStatus GdipFillPolygonI ( GpGraphics* x, GpBrush* x, GpPoint* x, 
+             INT x, GpFillMode x ) ;
+FUNCTION: GpStatus GdipFillPolygon2 ( GpGraphics* x, GpBrush* x, GpPointF* x, INT x ) ;
+FUNCTION: GpStatus GdipFillPolygon2I ( GpGraphics* x, GpBrush* x, GpPoint* x, INT x ) ;
+FUNCTION: GpStatus GdipFillRectangle ( GpGraphics* x, GpBrush* x, REAL x, REAL x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipFillRectangleI ( GpGraphics* x, GpBrush* x, INT x, INT x, INT x, INT x ) ;
+FUNCTION: GpStatus GdipFillRectangles ( GpGraphics* x, GpBrush* x, GpRectF* x, INT x ) ;
+FUNCTION: GpStatus GdipFillRectanglesI ( GpGraphics* x, GpBrush* x, GpRect* x, INT x ) ;
+FUNCTION: GpStatus GdipFillRegion ( GpGraphics* x, GpBrush* x, GpRegion* x ) ;
+FUNCTION: GpStatus GdipGetClip ( GpGraphics* x, GpRegion* x ) ;
+FUNCTION: GpStatus GdipGetClipBounds ( GpGraphics* x, GpRectF* x ) ;
+FUNCTION: GpStatus GdipGetClipBoundsI ( GpGraphics* x, GpRect* x ) ;
+FUNCTION: GpStatus GdipGetCompositingMode ( GpGraphics* x, CompositingMode* x ) ;
+FUNCTION: GpStatus GdipGetCompositingQuality ( GpGraphics* x, CompositingQuality* x ) ;
+FUNCTION: GpStatus GdipGetDC ( GpGraphics* x, HDC* x ) ;
+FUNCTION: GpStatus GdipGetDpiX ( GpGraphics* x, REAL* x ) ;
+FUNCTION: GpStatus GdipGetDpiY ( GpGraphics* x, REAL* x ) ;
+FUNCTION: GpStatus GdipGetImageDecoders ( UINT x, UINT x, ImageCodecInfo* x ) ;
+FUNCTION: GpStatus GdipGetImageDecodersSize ( UINT* x, UINT* x ) ;
+FUNCTION: GpStatus GdipGetImageGraphicsContext ( GpImage* x, GpGraphics** x ) ;
+FUNCTION: GpStatus GdipGetInterpolationMode ( GpGraphics* x, InterpolationMode* x ) ;
+FUNCTION: GpStatus GdipGetNearestColor ( GpGraphics* x, ARGB* x ) ;
+FUNCTION: GpStatus GdipGetPageScale ( GpGraphics* x, REAL* x ) ;
+FUNCTION: GpStatus GdipGetPageUnit ( GpGraphics* x, GpUnit* x ) ;
+FUNCTION: GpStatus GdipGetPixelOffsetMode ( GpGraphics* x, PixelOffsetMode* x ) ;
+FUNCTION: GpStatus GdipGetSmoothingMode ( GpGraphics* x, SmoothingMode* x ) ;
+FUNCTION: GpStatus GdipGetTextContrast ( GpGraphics* x, UINT* x ) ;
+FUNCTION: GpStatus GdipGetTextRenderingHint ( GpGraphics* x, TextRenderingHint* x ) ;
+FUNCTION: GpStatus GdipGetWorldTransform ( GpGraphics* x, GpMatrix* x ) ;
+FUNCTION: GpStatus GdipGraphicsClear ( GpGraphics* x, ARGB x ) ;
+FUNCTION: GpStatus GdipGetVisibleClipBounds ( GpGraphics* x, GpRectF* x ) ;
+FUNCTION: GpStatus GdipGetVisibleClipBoundsI ( GpGraphics* x, GpRect* x ) ;
+FUNCTION: GpStatus GdipIsClipEmpty ( GpGraphics* x,  BOOL* x ) ;
+FUNCTION: GpStatus GdipIsVisiblePoint ( GpGraphics* x, REAL x, REAL x, BOOL* x ) ;
+FUNCTION: GpStatus GdipIsVisiblePointI ( GpGraphics* x, INT x, INT x, BOOL* x ) ;
+FUNCTION: GpStatus GdipIsVisibleRect ( GpGraphics* x, REAL x, REAL x, REAL x, REAL x, BOOL* x ) ;
+FUNCTION: GpStatus GdipIsVisibleRectI ( GpGraphics* x, INT x, INT x, INT x, INT x, BOOL* x ) ;
+FUNCTION: GpStatus GdipMeasureCharacterRanges ( GpGraphics* x,  WCHAR* x, 
+             INT x,  GpFont* x,  GpRectF* x,  GpStringFormat* x,  INT x, 
+             GpRegion** x ) ;
+FUNCTION: GpStatus GdipMeasureDriverString ( GpGraphics* x, UINT16* x, INT x, 
+             GpFont* x, GpPointF* x, INT x, GpMatrix* x, GpRectF* x ) ;
+FUNCTION: GpStatus GdipMeasureString ( GpGraphics* x, WCHAR* x, INT x, 
+             GpFont* x, GpRectF* x, GpStringFormat* x, GpRectF* x, INT* x, INT* x ) ;
+FUNCTION: GpStatus GdipMultiplyWorldTransform ( GpGraphics* x, GpMatrix* x, GpMatrixOrder x ) ;
+FUNCTION: GpStatus GdipRecordMetafileFileName ( WCHAR* x, HDC x, EmfType x, 
+             GpRectF* x, MetafileFrameUnit x, WCHAR* x, GpMetafile** x ) ;
+FUNCTION: GpStatus GdipRecordMetafileFileNameI ( WCHAR* x, HDC x, EmfType x, 
+             GpRect* x, MetafileFrameUnit x, WCHAR* x, GpMetafile** x ) ;
+FUNCTION: GpStatus GdipRecordMetafileI ( HDC x, EmfType x, GpRect* x, 
+             MetafileFrameUnit x, WCHAR* x, GpMetafile** x ) ;
+FUNCTION: GpStatus GdipReleaseDC ( GpGraphics* x, HDC x ) ;
+FUNCTION: GpStatus GdipResetClip ( GpGraphics* x ) ;
+FUNCTION: GpStatus GdipResetWorldTransform ( GpGraphics* x ) ;
+FUNCTION: GpStatus GdipRestoreGraphics ( GpGraphics* x, GraphicsState x ) ;
+FUNCTION: GpStatus GdipRotateWorldTransform ( GpGraphics* x, REAL x, GpMatrixOrder x ) ;
+FUNCTION: GpStatus GdipSaveGraphics ( GpGraphics* x, GraphicsState* x ) ;
+FUNCTION: GpStatus GdipScaleWorldTransform ( GpGraphics* x, REAL x, REAL x, GpMatrixOrder x ) ;
+FUNCTION: GpStatus GdipSetClipHrgn ( GpGraphics* x, HRGN x, CombineMode x ) ;
+FUNCTION: GpStatus GdipSetClipGraphics ( GpGraphics* x, GpGraphics* x, CombineMode x ) ;
+FUNCTION: GpStatus GdipSetClipPath ( GpGraphics* x, GpPath* x, CombineMode x ) ;
+FUNCTION: GpStatus GdipSetClipRect ( GpGraphics* x, REAL x, REAL x, REAL x, REAL x, CombineMode x ) ;
+FUNCTION: GpStatus GdipSetClipRectI ( GpGraphics* x, INT x, INT x, INT x, INT x, CombineMode x ) ;
+FUNCTION: GpStatus GdipSetClipRegion ( GpGraphics* x, GpRegion* x, CombineMode x ) ;
+FUNCTION: GpStatus GdipSetCompositingMode ( GpGraphics* x, CompositingMode x ) ;
+FUNCTION: GpStatus GdipSetCompositingQuality ( GpGraphics* x, CompositingQuality x ) ;
+FUNCTION: GpStatus GdipSetInterpolationMode ( GpGraphics* x, InterpolationMode x ) ;
+FUNCTION: GpStatus GdipSetPageScale ( GpGraphics* x, REAL x ) ;
+FUNCTION: GpStatus GdipSetPageUnit ( GpGraphics* x, GpUnit x ) ;
+FUNCTION: GpStatus GdipSetPixelOffsetMode ( GpGraphics* x, PixelOffsetMode x ) ;
+FUNCTION: GpStatus GdipSetRenderingOrigin ( GpGraphics* x, INT x, INT x ) ;
+FUNCTION: GpStatus GdipSetSmoothingMode ( GpGraphics* x, SmoothingMode x ) ;
+FUNCTION: GpStatus GdipSetTextContrast ( GpGraphics* x, UINT x ) ;
+FUNCTION: GpStatus GdipSetTextRenderingHint ( GpGraphics* x, TextRenderingHint x ) ;
+FUNCTION: GpStatus GdipSetWorldTransform ( GpGraphics* x, GpMatrix* x ) ;
+FUNCTION: GpStatus GdipTransformPoints ( GpGraphics* x,  GpCoordinateSpace x,  GpCoordinateSpace x, 
+                                                 GpPointF* x,  INT x ) ;
+FUNCTION: GpStatus GdipTransformPointsI ( GpGraphics* x,  GpCoordinateSpace x,  GpCoordinateSpace x, 
+                                                  GpPoint* x,  INT x ) ;
+FUNCTION: GpStatus GdipTranslateClip ( GpGraphics* x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipTranslateClipI ( GpGraphics* x, INT x, INT x ) ;
+FUNCTION: GpStatus GdipTranslateWorldTransform ( GpGraphics* x, REAL x, REAL x, GpMatrixOrder x ) ;
+
+
+FUNCTION: GpStatus GdipAddPathArc ( GpPath* x, REAL x, REAL x, REAL x, REAL x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipAddPathArcI ( GpPath* x, INT x, INT x, INT x, INT x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipAddPathBezier ( GpPath* x, REAL x, REAL x, REAL x, REAL x, REAL x, REAL x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipAddPathBezierI ( GpPath* x, INT x, INT x, INT x, INT x, INT x, INT x, INT x, INT x ) ;
+FUNCTION: GpStatus GdipAddPathBeziers ( GpPath* x, GpPointF* x, INT x ) ;
+FUNCTION: GpStatus GdipAddPathBeziersI ( GpPath* x, GpPoint* x, INT x ) ;
+FUNCTION: GpStatus GdipAddPathClosedCurve ( GpPath* x, GpPointF* x, INT x ) ;
+FUNCTION: GpStatus GdipAddPathClosedCurveI ( GpPath* x, GpPoint* x, INT x ) ;
+FUNCTION: GpStatus GdipAddPathClosedCurve2 ( GpPath* x, GpPointF* x, INT x, REAL x ) ;
+FUNCTION: GpStatus GdipAddPathClosedCurve2I ( GpPath* x, GpPoint* x, INT x, REAL x ) ;
+FUNCTION: GpStatus GdipAddPathCurve ( GpPath* x, GpPointF* x, INT x ) ;
+FUNCTION: GpStatus GdipAddPathCurveI ( GpPath* x, GpPoint* x, INT x ) ;
+FUNCTION: GpStatus GdipAddPathCurve2 ( GpPath* x, GpPointF* x, INT x, REAL x ) ;
+FUNCTION: GpStatus GdipAddPathCurve2I ( GpPath* x, GpPoint* x, INT x, REAL x ) ;
+FUNCTION: GpStatus GdipAddPathCurve3 ( GpPath* x, GpPointF* x, INT x, INT x, INT x, REAL x ) ;
+FUNCTION: GpStatus GdipAddPathCurve3I ( GpPath* x, GpPoint* x, INT x, INT x, INT x, REAL x ) ;
+FUNCTION: GpStatus GdipAddPathEllipse ( GpPath* x, REAL x, REAL x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipAddPathEllipseI ( GpPath* x, INT x, INT x, INT x, INT x ) ;
+FUNCTION: GpStatus GdipAddPathLine ( GpPath* x, REAL x, REAL x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipAddPathLineI ( GpPath* x, INT x, INT x, INT x, INT x ) ;
+FUNCTION: GpStatus GdipAddPathLine2 ( GpPath* x, GpPointF* x, INT x ) ;
+FUNCTION: GpStatus GdipAddPathLine2I ( GpPath* x, GpPoint* x, INT x ) ;
+FUNCTION: GpStatus GdipAddPathPath ( GpPath* x, GpPath* x, BOOL x ) ;
+FUNCTION: GpStatus GdipAddPathPie ( GpPath* x, REAL x, REAL x, REAL x, REAL x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipAddPathPieI ( GpPath* x, INT x, INT x, INT x, INT x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipAddPathPolygon ( GpPath* x, GpPointF* x, INT x ) ;
+FUNCTION: GpStatus GdipAddPathPolygonI ( GpPath* x, GpPoint* x, INT x ) ;
+FUNCTION: GpStatus GdipAddPathRectangle ( GpPath* x, REAL x, REAL x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipAddPathRectangleI ( GpPath* x, INT x, INT x, INT x, INT x ) ;
+FUNCTION: GpStatus GdipAddPathRectangles ( GpPath* x, GpRectF* x, INT x ) ;
+FUNCTION: GpStatus GdipAddPathRectanglesI ( GpPath* x, GpRect* x, INT x ) ;
+FUNCTION: GpStatus GdipAddPathString ( GpPath* x, WCHAR* x, INT x, GpFontFamily* x, INT x, REAL x, GpRectF* x, GpStringFormat* x ) ;
+FUNCTION: GpStatus GdipAddPathStringI ( GpPath* x, WCHAR* x, INT x, GpFontFamily* x, INT x, REAL x, GpRect* x, GpStringFormat* x ) ;
+FUNCTION: GpStatus GdipClearPathMarkers ( GpPath* x ) ;
+FUNCTION: GpStatus GdipClonePath ( GpPath* x, GpPath** x ) ;
+FUNCTION: GpStatus GdipClosePathFigure ( GpPath* x ) ;
+FUNCTION: GpStatus GdipClosePathFigures ( GpPath* x ) ;
+FUNCTION: GpStatus GdipCreatePath ( GpFillMode x, GpPath** x ) ;
+FUNCTION: GpStatus GdipCreatePath2 ( GpPointF* x, BYTE* x, INT x, 
+             GpFillMode x, GpPath** x ) ;
+FUNCTION: GpStatus GdipCreatePath2I ( GpPoint* x, BYTE* x, INT x, GpFillMode x, GpPath** x ) ;
+FUNCTION: GpStatus GdipDeletePath ( GpPath* x ) ;
+FUNCTION: GpStatus GdipFlattenPath ( GpPath* x, GpMatrix* x, REAL x ) ;
+FUNCTION: GpStatus GdipIsOutlineVisiblePathPoint ( GpPath* x, REAL x, REAL x, GpPen* x, 
+             GpGraphics* x, BOOL* x ) ;
+FUNCTION: GpStatus GdipIsOutlineVisiblePathPointI ( GpPath* x, INT x, INT x, GpPen* x, 
+             GpGraphics* x, BOOL* x ) ;
+FUNCTION: GpStatus GdipIsVisiblePathPoint ( GpPath* x, REAL x, REAL x, GpGraphics* x, BOOL* x ) ;
+FUNCTION: GpStatus GdipIsVisiblePathPointI ( GpPath* x, INT x, INT x, GpGraphics* x, BOOL* x ) ;
+FUNCTION: GpStatus GdipGetPathData ( GpPath* x, GpPathData* x ) ;
+FUNCTION: GpStatus GdipGetPathFillMode ( GpPath* x, GpFillMode* x ) ;
+FUNCTION: GpStatus GdipGetPathLastPoint ( GpPath* x, GpPointF* x ) ;
+FUNCTION: GpStatus GdipGetPathPoints ( GpPath* x, GpPointF* x, INT x ) ;
+FUNCTION: GpStatus GdipGetPathPointsI ( GpPath* x, GpPoint* x, INT x ) ;
+FUNCTION: GpStatus GdipGetPathTypes ( GpPath* x, BYTE* x, INT x ) ;
+FUNCTION: GpStatus GdipGetPathWorldBounds ( GpPath* x, GpRectF* x, GpMatrix* x, GpPen* x ) ;
+FUNCTION: GpStatus GdipGetPathWorldBoundsI ( GpPath* x, GpRect* x, GpMatrix* x, GpPen* x ) ;
+FUNCTION: GpStatus GdipGetPointCount ( GpPath* x, INT* x ) ;
+FUNCTION: GpStatus GdipResetPath ( GpPath* x ) ;
+FUNCTION: GpStatus GdipReversePath ( GpPath* x ) ;
+FUNCTION: GpStatus GdipSetPathFillMode ( GpPath* x, GpFillMode x ) ;
+FUNCTION: GpStatus GdipSetPathMarker ( GpPath* x ) ;
+FUNCTION: GpStatus GdipStartPathFigure ( GpPath* x ) ;
+FUNCTION: GpStatus GdipTransformPath ( GpPath* x, GpMatrix* x ) ;
+FUNCTION: GpStatus GdipWarpPath ( GpPath* x, GpMatrix* x, GpPointF* x, INT x, REAL x, 
+             REAL x, REAL x, REAL x, WarpMode x, REAL x ) ;
+FUNCTION: GpStatus GdipWidenPath ( GpPath* x, GpPen* x, GpMatrix* x, REAL x ) ;
+
+
+FUNCTION: GpStatus GdipCreateHatchBrush ( HatchStyle x, ARGB x, ARGB x, GpHatch** x ) ;
+FUNCTION: GpStatus GdipGetHatchBackgroundColor ( GpHatch* x, ARGB* x ) ;
+FUNCTION: GpStatus GdipGetHatchForegroundColor ( GpHatch* x, ARGB* x ) ;
+FUNCTION: GpStatus GdipGetHatchStyle ( GpHatch* x, HatchStyle* x ) ;
+
+
+FUNCTION: GpStatus GdipCloneImage ( GpImage* x,  GpImage** x ) ;
+FUNCTION: GpStatus GdipCloneImageAttributes ( GpImageAttributes* x, GpImageAttributes** x ) ;
+FUNCTION: GpStatus GdipDisposeImage ( GpImage* x ) ;
+FUNCTION: GpStatus GdipEmfToWmfBits ( HENHMETAFILE x, UINT x, LPBYTE x, INT x, INT x ) ;
+FUNCTION: GpStatus GdipFindFirstImageItem ( GpImage* x, ImageItemData* x ) ;
+FUNCTION: GpStatus GdipFindNextImageItem ( GpImage* x, ImageItemData* x ) ;
+FUNCTION: GpStatus GdipGetAllPropertyItems ( GpImage* x, UINT x, UINT x, PropertyItem* x ) ;
+FUNCTION: GpStatus GdipGetImageBounds ( GpImage* x, GpRectF* x, GpUnit* x ) ;
+FUNCTION: GpStatus GdipGetImageDimension ( GpImage* x, REAL* x, REAL* x ) ;
+FUNCTION: GpStatus GdipGetImageFlags ( GpImage* x, UINT* x ) ;
+FUNCTION: GpStatus GdipGetImageHeight ( GpImage* x, UINT* x ) ;
+FUNCTION: GpStatus GdipGetImageHorizontalResolution ( GpImage* x, REAL* x ) ;
+FUNCTION: GpStatus GdipGetImageItemData ( GpImage* x, ImageItemData* x ) ;
+FUNCTION: GpStatus GdipGetImagePalette ( GpImage* x, ColorPalette* x, INT x ) ;
+FUNCTION: GpStatus GdipGetImagePaletteSize ( GpImage* x, INT* x ) ;
+FUNCTION: GpStatus GdipGetImagePixelFormat ( GpImage* x, PixelFormat* x ) ;
+FUNCTION: GpStatus GdipGetImageRawFormat ( GpImage* x, GUID* x ) ;
+FUNCTION: GpStatus GdipGetImageThumbnail ( GpImage* x, UINT x, UINT x, GpImage** x, GetThumbnailImageAbort x, VOID* x ) ;
+FUNCTION: GpStatus GdipGetImageType ( GpImage* x, ImageType* x ) ;
+FUNCTION: GpStatus GdipGetImageVerticalResolution ( GpImage* x, REAL* x ) ;
+FUNCTION: GpStatus GdipGetImageWidth ( GpImage* x, UINT* x ) ;
+FUNCTION: GpStatus GdipGetPropertyCount ( GpImage* x, UINT* x ) ;
+FUNCTION: GpStatus GdipGetPropertyIdList ( GpImage* x, UINT x, PROPID* x ) ;
+FUNCTION: GpStatus GdipGetPropertyItem ( GpImage* x, PROPID x, UINT x, PropertyItem* x ) ;
+FUNCTION: GpStatus GdipGetPropertyItemSize ( GpImage* x, PROPID x, UINT* x ) ;
+FUNCTION: GpStatus GdipGetPropertySize ( GpImage* x, UINT* x, UINT* x ) ;
+FUNCTION: GpStatus GdipImageForceValidation ( GpImage* x ) ;
+FUNCTION: GpStatus GdipImageGetFrameCount ( GpImage* x, GUID* x, UINT* x ) ;
+FUNCTION: GpStatus GdipImageGetFrameDimensionsCount ( GpImage* x, UINT* x ) ;
+FUNCTION: GpStatus GdipImageGetFrameDimensionsList ( GpImage* x, GUID* x, UINT x ) ;
+FUNCTION: GpStatus GdipImageRotateFlip ( GpImage* x, RotateFlipType x ) ;
+FUNCTION: GpStatus GdipImageSelectActiveFrame ( GpImage* x, GUID* x, UINT x ) ;
+FUNCTION: GpStatus GdipLoadImageFromFile ( WCHAR* x, GpImage** x ) ;
+FUNCTION: GpStatus GdipLoadImageFromFileICM ( WCHAR* x, GpImage** x ) ;
+FUNCTION: GpStatus GdipLoadImageFromStream ( IStream* x, GpImage** x ) ;
+FUNCTION: GpStatus GdipLoadImageFromStreamICM ( IStream* x, GpImage** x ) ;
+FUNCTION: GpStatus GdipRemovePropertyItem ( GpImage* x, PROPID x ) ;
+FUNCTION: GpStatus GdipSaveImageToFile ( GpImage* x, WCHAR* x, CLSID* x, EncoderParameters* x ) ;
+FUNCTION: GpStatus GdipSaveImageToStream ( GpImage* x, IStream* x, 
+             CLSID* x, EncoderParameters* x ) ;
+FUNCTION: GpStatus GdipSetImagePalette ( GpImage* x, ColorPalette* x ) ;
+FUNCTION: GpStatus GdipSetPropertyItem ( GpImage* x, PropertyItem* x ) ;
+
+
+FUNCTION: GpStatus GdipCreateImageAttributes ( GpImageAttributes** x ) ;
+FUNCTION: GpStatus GdipDisposeImageAttributes ( GpImageAttributes* x ) ;
+FUNCTION: GpStatus GdipSetImageAttributesCachedBackground ( GpImageAttributes* x, 
+             BOOL x ) ;
+FUNCTION: GpStatus GdipSetImageAttributesColorKeys ( GpImageAttributes* x, 
+             ColorAdjustType x, BOOL x, ARGB x, ARGB x ) ;
+FUNCTION: GpStatus GdipSetImageAttributesColorMatrix ( GpImageAttributes* x, 
+             ColorAdjustType x, BOOL x, ColorMatrix* x, ColorMatrix* x, 
+             ColorMatrixFlags x ) ;
+FUNCTION: GpStatus GdipSetImageAttributesGamma ( GpImageAttributes* x, 
+             ColorAdjustType x, BOOL x, REAL x ) ;
+FUNCTION: GpStatus GdipSetImageAttributesNoOp ( GpImageAttributes* x, 
+             ColorAdjustType x, BOOL x ) ;
+FUNCTION: GpStatus GdipSetImageAttributesOutputChannel ( GpImageAttributes* x, 
+             ColorAdjustType x, BOOL x, ColorChannelFlags x ) ;
+FUNCTION: GpStatus GdipSetImageAttributesOutputChannelColorProfile ( 
+             GpImageAttributes* x, ColorAdjustType x, BOOL x, WCHAR* x ) ;
+FUNCTION: GpStatus GdipSetImageAttributesRemapTable ( GpImageAttributes* x, 
+             ColorAdjustType x, BOOL x, UINT x, ColorMap* x ) ;
+FUNCTION: GpStatus GdipSetImageAttributesThreshold ( GpImageAttributes* x, 
+             ColorAdjustType x, BOOL x, REAL x ) ;
+FUNCTION: GpStatus GdipSetImageAttributesToIdentity ( GpImageAttributes* x, 
+             ColorAdjustType x ) ;
+FUNCTION: GpStatus GdipSetImageAttributesWrapMode ( GpImageAttributes* x, GpWrapMode x, 
+             ARGB x, BOOL x ) ;
+
+
+FUNCTION: GpStatus GdipCreateLineBrush ( GpPointF* x, GpPointF* x, 
+             ARGB x, ARGB x, GpWrapMode x, GpLineGradient** x ) ;
+FUNCTION: GpStatus GdipCreateLineBrushI ( GpPoint* x, GpPoint* x, 
+             ARGB x, ARGB x, GpWrapMode x, GpLineGradient** x ) ;
+FUNCTION: GpStatus GdipCreateLineBrushFromRect ( GpRectF* x, ARGB x, ARGB x, 
+             LinearGradientMode x, GpWrapMode x, GpLineGradient** x ) ;
+FUNCTION: GpStatus GdipCreateLineBrushFromRectI ( GpRect* x, ARGB x, ARGB x, 
+             LinearGradientMode x, GpWrapMode x, GpLineGradient** x ) ;
+FUNCTION: GpStatus GdipCreateLineBrushFromRectWithAngle ( GpRectF* x, 
+             ARGB x, ARGB x, REAL x, BOOL x, GpWrapMode x, GpLineGradient** x ) ;
+FUNCTION: GpStatus GdipCreateLineBrushFromRectWithAngleI ( GpRect* x, 
+             ARGB x, ARGB x, REAL x, BOOL x, GpWrapMode x, GpLineGradient** x ) ;
+FUNCTION: GpStatus GdipGetLineColors ( GpLineGradient* x, ARGB* x ) ;
+FUNCTION: GpStatus GdipGetLineGammaCorrection ( GpLineGradient* x, BOOL* x ) ;
+FUNCTION: GpStatus GdipGetLineRect ( GpLineGradient* x, GpRectF* x ) ;
+FUNCTION: GpStatus GdipGetLineRectI ( GpLineGradient* x, GpRect* x ) ;
+FUNCTION: GpStatus GdipGetLineWrapMode ( GpLineGradient* x, GpWrapMode* x ) ;
+FUNCTION: GpStatus GdipSetLineBlend ( GpLineGradient* x, REAL* x, 
+             REAL* x, INT x ) ;
+FUNCTION: GpStatus GdipGetLineBlend ( GpLineGradient* x, REAL* x, REAL* x, INT x ) ;
+FUNCTION: GpStatus GdipGetLineBlendCount ( GpLineGradient* x, INT* x ) ;
+FUNCTION: GpStatus GdipSetLinePresetBlend ( GpLineGradient* x, ARGB* x, 
+             REAL* x, INT x ) ;
+FUNCTION: GpStatus GdipGetLinePresetBlend ( GpLineGradient* x, ARGB* x, REAL* x, INT x ) ;
+FUNCTION: GpStatus GdipGetLinePresetBlendCount ( GpLineGradient* x, INT* x ) ;
+FUNCTION: GpStatus GdipResetLineTransform ( GpLineGradient* x ) ;
+FUNCTION: GpStatus GdipRotateLineTransform ( GpLineGradient* x, REAL x, GpMatrixOrder x ) ;
+FUNCTION: GpStatus GdipScaleLineTransform ( GpLineGradient* x, REAL x, REAL x, 
+             GpMatrixOrder x ) ;
+FUNCTION: GpStatus GdipSetLineColors ( GpLineGradient* x, ARGB x, ARGB x ) ;
+FUNCTION: GpStatus GdipSetLineGammaCorrection ( GpLineGradient* x, BOOL x ) ;
+FUNCTION: GpStatus GdipSetLineSigmaBlend ( GpLineGradient* x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipSetLineTransform ( GpLineGradient* x, GpMatrix* x ) ;
+FUNCTION: GpStatus GdipSetLineLinearBlend ( GpLineGradient* x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipSetLineWrapMode ( GpLineGradient* x, GpWrapMode x ) ;
+FUNCTION: GpStatus GdipTranslateLineTransform ( GpLineGradient* x, REAL x, REAL x, 
+             GpMatrixOrder x ) ;
+
+
+FUNCTION: GpStatus GdipCloneMatrix ( GpMatrix* x, GpMatrix** x ) ;
+FUNCTION: GpStatus GdipCreateMatrix ( GpMatrix** x ) ;
+FUNCTION: GpStatus GdipCreateMatrix2 ( REAL x, REAL x, REAL x, REAL x, REAL x, REAL x, GpMatrix** x ) ;
+FUNCTION: GpStatus GdipCreateMatrix3 ( GpRectF* x, GpPointF* x, GpMatrix** x ) ;
+FUNCTION: GpStatus GdipCreateMatrix3I ( GpRect* x, GpPoint* x, GpMatrix** x ) ;
+FUNCTION: GpStatus GdipDeleteMatrix ( GpMatrix* x ) ;
+FUNCTION: GpStatus GdipGetMatrixElements ( GpMatrix* x, REAL* x ) ;
+FUNCTION: GpStatus GdipInvertMatrix ( GpMatrix* x ) ;
+FUNCTION: GpStatus GdipIsMatrixEqual ( GpMatrix* x,  GpMatrix* x,  BOOL* x ) ;
+FUNCTION: GpStatus GdipIsMatrixIdentity ( GpMatrix* x,  BOOL* x ) ;
+FUNCTION: GpStatus GdipIsMatrixInvertible ( GpMatrix* x,  BOOL* x ) ;
+FUNCTION: GpStatus GdipMultiplyMatrix ( GpMatrix* x, GpMatrix* x, GpMatrixOrder x ) ;
+FUNCTION: GpStatus GdipRotateMatrix ( GpMatrix* x, REAL x, GpMatrixOrder x ) ;
+FUNCTION: GpStatus GdipShearMatrix ( GpMatrix* x, REAL x, REAL x, GpMatrixOrder x ) ;
+FUNCTION: GpStatus GdipScaleMatrix ( GpMatrix* x, REAL x, REAL x, GpMatrixOrder x ) ;
+FUNCTION: GpStatus GdipSetMatrixElements ( GpMatrix* x, REAL x, REAL x, REAL x, REAL x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipTransformMatrixPoints ( GpMatrix* x, GpPointF* x, INT x ) ;
+FUNCTION: GpStatus GdipTransformMatrixPointsI ( GpMatrix* x, GpPoint* x, INT x ) ;
+FUNCTION: GpStatus GdipTranslateMatrix ( GpMatrix* x, REAL x, REAL x, GpMatrixOrder x ) ;
+FUNCTION: GpStatus GdipVectorTransformMatrixPoints ( GpMatrix* x, GpPointF* x, INT x ) ;
+FUNCTION: GpStatus GdipVectorTransformMatrixPointsI ( GpMatrix* x, GpPoint* x, INT x ) ;
+
+
+FUNCTION: GpStatus GdipConvertToEmfPlus ( GpGraphics* x, GpMetafile* x, INT* x, 
+             EmfType x, WCHAR* x, GpMetafile** x ) ;
+FUNCTION: GpStatus GdipConvertToEmfPlusToFile ( GpGraphics* x, GpMetafile* x, INT* x, WCHAR* x, EmfType x, WCHAR* x, GpMetafile** x ) ;
+FUNCTION: GpStatus GdipConvertToEmfPlusToStream ( GpGraphics* x, GpMetafile* x, INT* x, IStream* x, EmfType x, WCHAR* x, GpMetafile** x ) ;
+FUNCTION: GpStatus GdipCreateMetafileFromEmf ( HENHMETAFILE x, BOOL x, GpMetafile** x ) ;
+FUNCTION: GpStatus GdipCreateMetafileFromWmf ( HMETAFILE x, BOOL x, 
+             WmfPlaceableFileHeader* x, GpMetafile** x ) ;
+FUNCTION: GpStatus GdipCreateMetafileFromWmfFile ( WCHAR* x,  WmfPlaceableFileHeader* x, 
+             GpMetafile** x ) ;
+FUNCTION: GpStatus GdipCreateMetafileFromFile ( WCHAR* x, GpMetafile** x ) ;
+FUNCTION: GpStatus GdipCreateMetafileFromStream ( IStream* x, GpMetafile** x ) ;
+FUNCTION: GpStatus GdipSetMetafileDownLevelRasterizationLimit ( GpMetafile* x, UINT x ) ;
+
+
+FUNCTION: GpStatus GdipGetMetafileHeaderFromEmf ( HENHMETAFILE x, MetafileHeader* x ) ;
+FUNCTION: GpStatus GdipGetMetafileHeaderFromFile ( WCHAR* x, MetafileHeader* x ) ;
+FUNCTION: GpStatus GdipGetMetafileHeaderFromMetafile ( GpMetafile* x, MetafileHeader* x ) ;
+FUNCTION: GpStatus GdipGetMetafileHeaderFromStream ( IStream* x, MetafileHeader* x ) ;
+FUNCTION: GpStatus GdipGetMetafileHeaderFromWmf ( HMETAFILE x, WmfPlaceableFileHeader* x, MetafileHeader* x ) ;
+
+
+FUNCTION: GpStatus GdiplusNotificationHook ( ULONG_PTR* x ) ;
+FUNCTION: void GdiplusNotificationUnhook ( ULONG_PTR x ) ;
+
+
+FUNCTION: GpStatus GdipCreatePathGradient ( GpPointF* x, INT x, GpWrapMode x, GpPathGradient** x ) ;
+FUNCTION: GpStatus GdipCreatePathGradientI ( GpPoint* x, INT x, GpWrapMode x, GpPathGradient** x ) ;
+FUNCTION: GpStatus GdipCreatePathGradientFromPath ( GpPath* x, 
+             GpPathGradient** x ) ;
+FUNCTION: GpStatus GdipGetPathGradientBlend ( GpPathGradient* x, REAL* x, REAL* x, INT x ) ;
+FUNCTION: GpStatus GdipGetPathGradientBlendCount ( GpPathGradient* x, INT* x ) ;
+FUNCTION: GpStatus GdipGetPathGradientCenterColor ( GpPathGradient* x, ARGB* x ) ;
+FUNCTION: GpStatus GdipGetPathGradientCenterPoint ( GpPathGradient* x, GpPointF* x ) ;
+FUNCTION: GpStatus GdipGetPathGradientCenterPointI ( GpPathGradient* x, GpPoint* x ) ;
+FUNCTION: GpStatus GdipGetPathGradientFocusScales ( GpPathGradient* x, REAL* x, REAL* x ) ;
+FUNCTION: GpStatus GdipGetPathGradientGammaCorrection ( GpPathGradient* x, BOOL* x ) ;
+FUNCTION: GpStatus GdipGetPathGradientPointCount ( GpPathGradient* x, INT* x ) ;
+FUNCTION: GpStatus GdipSetPathGradientPresetBlend ( GpPathGradient* x, 
+             ARGB* x, REAL* x, INT x ) ;
+FUNCTION: GpStatus GdipGetPathGradientRect ( GpPathGradient* x, GpRectF* x ) ;
+FUNCTION: GpStatus GdipGetPathGradientRectI ( GpPathGradient* x, GpRect* x ) ;
+FUNCTION: GpStatus GdipGetPathGradientSurroundColorsWithCount ( GpPathGradient* x, 
+             ARGB* x, INT* x ) ;
+FUNCTION: GpStatus GdipGetPathGradientWrapMode ( GpPathGradient* x, GpWrapMode* x ) ;
+FUNCTION: GpStatus GdipSetPathGradientBlend ( GpPathGradient* x, REAL* x, REAL* x, INT x ) ;
+FUNCTION: GpStatus GdipSetPathGradientCenterColor ( GpPathGradient* x, ARGB x ) ;
+FUNCTION: GpStatus GdipSetPathGradientCenterPoint ( GpPathGradient* x, GpPointF* x ) ;
+FUNCTION: GpStatus GdipSetPathGradientCenterPointI ( GpPathGradient* x, GpPoint* x ) ;
+FUNCTION: GpStatus GdipSetPathGradientFocusScales ( GpPathGradient* x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipSetPathGradientGammaCorrection ( GpPathGradient* x, BOOL x ) ;
+FUNCTION: GpStatus GdipSetPathGradientSigmaBlend ( GpPathGradient* x, REAL x, REAL x ) ;
+FUNCTION: GpStatus GdipSetPathGradientSurroundColorsWithCount ( GpPathGradient* x, 
+             ARGB* x, INT* x ) ;
+FUNCTION: GpStatus GdipSetPathGradientWrapMode ( GpPathGradient* x, GpWrapMode x ) ;
+FUNCTION: GpStatus GdipGetPathGradientSurroundColorCount ( GpPathGradient* x, INT* x ) ;
+
+
+FUNCTION: GpStatus GdipCreatePathIter ( GpPathIterator** x, GpPath* x ) ;
+FUNCTION: GpStatus GdipDeletePathIter ( GpPathIterator* x ) ;
+FUNCTION: GpStatus GdipPathIterCopyData ( GpPathIterator* x, INT* x, GpPointF* x, BYTE* x, 
+             INT x, INT x ) ;
+FUNCTION: GpStatus GdipPathIterGetCount ( GpPathIterator* x, INT* x ) ;
+FUNCTION: GpStatus GdipPathIterGetSubpathCount ( GpPathIterator* x, INT* x ) ;
+FUNCTION: GpStatus GdipPathIterEnumerate ( GpPathIterator* x, INT* x, GpPointF* x, BYTE* x, INT x ) ;
+FUNCTION: GpStatus GdipPathIterHasCurve ( GpPathIterator* x, BOOL* x ) ;
+FUNCTION: GpStatus GdipPathIterIsValid ( GpPathIterator* x, BOOL* x ) ;
+FUNCTION: GpStatus GdipPathIterNextMarker ( GpPathIterator* x, INT* x, INT* x, INT* x ) ;
+FUNCTION: GpStatus GdipPathIterNextMarkerPath ( GpPathIterator* x, INT* x, GpPath* x ) ;
+FUNCTION: GpStatus GdipPathIterNextPathType ( GpPathIterator* x, INT* x, BYTE* x, INT* x, INT* x ) ;
+FUNCTION: GpStatus GdipPathIterNextSubpath ( GpPathIterator* x, INT* x, INT* x, INT* x, BOOL* x ) ;
+FUNCTION: GpStatus GdipPathIterNextSubpathPath ( GpPathIterator* x, INT* x, GpPath* x, BOOL* x ) ;
+FUNCTION: GpStatus GdipPathIterRewind ( GpPathIterator* x ) ;
+
+
+FUNCTION: GpStatus GdipClonePen ( GpPen* x, GpPen** x ) ;
+FUNCTION: GpStatus GdipCreatePen1 ( ARGB x, REAL x, GpUnit x, GpPen** x ) ;
+FUNCTION: GpStatus GdipCreatePen2 ( GpBrush* x, REAL x, GpUnit x, GpPen** x ) ;
+FUNCTION: GpStatus GdipDeletePen ( GpPen* x ) ;
+FUNCTION: GpStatus GdipGetPenBrushFill ( GpPen* x, GpBrush** x ) ;
+FUNCTION: GpStatus GdipGetPenColor ( GpPen* x, ARGB* x ) ;
+FUNCTION: GpStatus GdipGetPenCustomStartCap ( GpPen* x, GpCustomLineCap** x ) ;
+FUNCTION: GpStatus GdipGetPenCustomEndCap ( GpPen* x, GpCustomLineCap** x ) ;
+FUNCTION: GpStatus GdipGetPenDashArray ( GpPen* x, REAL* x, INT x ) ;
+FUNCTION: GpStatus GdipGetPenDashCount ( GpPen* x, INT* x ) ;
+FUNCTION: GpStatus GdipGetPenDashOffset ( GpPen* x, REAL* x ) ;
+FUNCTION: GpStatus GdipGetPenDashStyle ( GpPen* x, GpDashStyle* x ) ;
+FUNCTION: GpStatus GdipGetPenMode ( GpPen* x, GpPenAlignment* x ) ;
+FUNCTION: GpStatus GdipResetPenTransform ( GpPen* x ) ;
+FUNCTION: GpStatus GdipScalePenTransform ( GpPen* x, REAL x, REAL x, GpMatrixOrder x ) ;
+FUNCTION: GpStatus GdipSetPenBrushFill ( GpPen* x, GpBrush* x ) ;
+FUNCTION: GpStatus GdipSetPenColor ( GpPen* x, ARGB x ) ;
+FUNCTION: GpStatus GdipSetPenCompoundArray ( GpPen* x, REAL* x, INT x ) ;
+FUNCTION: GpStatus GdipSetPenCustomEndCap ( GpPen* x, GpCustomLineCap* x ) ;
+FUNCTION: GpStatus GdipSetPenCustomStartCap ( GpPen* x, GpCustomLineCap* x ) ;
+FUNCTION: GpStatus GdipSetPenDashArray ( GpPen* x, REAL* x, INT x ) ;
+FUNCTION: GpStatus GdipSetPenDashCap197819 ( GpPen* x, GpDashCap x ) ;
+FUNCTION: GpStatus GdipSetPenDashOffset ( GpPen* x, REAL x ) ;
+FUNCTION: GpStatus GdipSetPenDashStyle ( GpPen* x, GpDashStyle x ) ;
+FUNCTION: GpStatus GdipSetPenEndCap ( GpPen* x, GpLineCap x ) ;
+FUNCTION: GpStatus GdipGetPenFillType ( GpPen* x, GpPenType* x ) ;
+FUNCTION: GpStatus GdipSetPenLineCap197819 ( GpPen* x, GpLineCap x, GpLineCap x, GpDashCap x ) ;
+FUNCTION: GpStatus GdipSetPenLineJoin ( GpPen* x, GpLineJoin x ) ;
+FUNCTION: GpStatus GdipSetPenMode ( GpPen* x, GpPenAlignment x ) ;
+FUNCTION: GpStatus GdipSetPenMiterLimit ( GpPen* x, REAL x ) ;
+FUNCTION: GpStatus GdipSetPenStartCap ( GpPen* x, GpLineCap x ) ;
+FUNCTION: GpStatus GdipSetPenWidth ( GpPen* x, REAL x ) ;
+FUNCTION: GpStatus GdipGetPenDashCap197819 ( GpPen* x, GpDashCap* x ) ;
+FUNCTION: GpStatus GdipGetPenEndCap ( GpPen* x, GpLineCap* x ) ;
+FUNCTION: GpStatus GdipGetPenLineJoin ( GpPen* x, GpLineJoin* x ) ;
+FUNCTION: GpStatus GdipGetPenMiterLimit ( GpPen* x, REAL* x ) ;
+FUNCTION: GpStatus GdipGetPenStartCap ( GpPen* x, GpLineCap* x ) ;
+FUNCTION: GpStatus GdipGetPenUnit ( GpPen* x, GpUnit* x ) ;
+FUNCTION: GpStatus GdipGetPenWidth ( GpPen* x, REAL* x ) ;
+
+
+FUNCTION: GpStatus GdipCloneRegion ( GpRegion* x,  GpRegion** x ) ;
+FUNCTION: GpStatus GdipCombineRegionPath ( GpRegion* x,  GpPath* x,  CombineMode x ) ;
+FUNCTION: GpStatus GdipCombineRegionRect ( GpRegion* x,  GpRectF* x,  CombineMode x ) ;
+FUNCTION: GpStatus GdipCombineRegionRectI ( GpRegion* x,  GpRect* x,  CombineMode x ) ;
+FUNCTION: GpStatus GdipCombineRegionRegion ( GpRegion* x,  GpRegion* x,  CombineMode x ) ;
+FUNCTION: GpStatus GdipCreateRegion ( GpRegion** x ) ;
+FUNCTION: GpStatus GdipCreateRegionPath ( GpPath* x,  GpRegion** x ) ;
+FUNCTION: GpStatus GdipCreateRegionRect ( GpRectF* x,  GpRegion** x ) ;
+FUNCTION: GpStatus GdipCreateRegionRectI ( GpRect* x,  GpRegion** x ) ;
+FUNCTION: GpStatus GdipCreateRegionRgnData ( BYTE* x,  INT x,  GpRegion** x ) ;
+FUNCTION: GpStatus GdipCreateRegionHrgn ( HRGN x,  GpRegion** x ) ;
+FUNCTION: GpStatus GdipDeleteRegion ( GpRegion* x ) ;
+FUNCTION: GpStatus GdipGetRegionBounds ( GpRegion* x,  GpGraphics* x,  GpRectF* x ) ;
+FUNCTION: GpStatus GdipGetRegionBoundsI ( GpRegion* x,  GpGraphics* x,  GpRect* x ) ;
+FUNCTION: GpStatus GdipGetRegionData ( GpRegion* x,  BYTE* x,  UINT x,  UINT* x ) ;
+FUNCTION: GpStatus GdipGetRegionDataSize ( GpRegion* x,  UINT* x ) ;
+FUNCTION: GpStatus GdipGetRegionHRgn ( GpRegion* x,  GpGraphics* x,  HRGN* x ) ;
+FUNCTION: GpStatus GdipIsEmptyRegion ( GpRegion* x,  GpGraphics* x,  BOOL* x ) ;
+FUNCTION: GpStatus GdipIsEqualRegion ( GpRegion* x,  GpRegion* x,  GpGraphics* x,  BOOL* x ) ;
+FUNCTION: GpStatus GdipIsInfiniteRegion ( GpRegion* x,  GpGraphics* x,  BOOL* x ) ;
+FUNCTION: GpStatus GdipIsVisibleRegionPoint ( GpRegion* x,  REAL x,  REAL x,  GpGraphics* x,  BOOL* x ) ;
+FUNCTION: GpStatus GdipIsVisibleRegionPointI ( GpRegion* x,  INT x,  INT x,  GpGraphics* x,  BOOL* x ) ;
+FUNCTION: GpStatus GdipIsVisibleRegionRect ( GpRegion* x,  REAL x,  REAL x,  REAL x,  REAL x,  GpGraphics* x,  BOOL* x ) ;
+FUNCTION: GpStatus GdipIsVisibleRegionRectI ( GpRegion* x,  INT x,  INT x,  INT x,  INT x,  GpGraphics* x,  BOOL* x ) ;
+FUNCTION: GpStatus GdipSetEmpty ( GpRegion* x ) ;
+FUNCTION: GpStatus GdipSetInfinite ( GpRegion* x ) ;
+FUNCTION: GpStatus GdipTransformRegion ( GpRegion* x,  GpMatrix* x ) ;
+FUNCTION: GpStatus GdipTranslateRegion ( GpRegion* x,  REAL x,  REAL x ) ;
+FUNCTION: GpStatus GdipTranslateRegionI ( GpRegion* x,  INT x,  INT x ) ;
+
+
+FUNCTION: GpStatus GdipCreateSolidFill ( ARGB x, GpSolidFill** x ) ;
+FUNCTION: GpStatus GdipGetSolidFillColor ( GpSolidFill* x, ARGB* x ) ;
+FUNCTION: GpStatus GdipSetSolidFillColor ( GpSolidFill* x, ARGB x ) ;
+
+
+FUNCTION: GpStatus GdipCloneStringFormat ( GpStringFormat* x, GpStringFormat** x ) ;
+FUNCTION: GpStatus GdipCreateStringFormat ( INT x, LANGID x, GpStringFormat** x ) ;
+FUNCTION: GpStatus GdipDeleteStringFormat ( GpStringFormat* x ) ;
+FUNCTION: GpStatus GdipGetStringFormatAlign ( GpStringFormat* x, StringAlignment* x ) ;
+FUNCTION: GpStatus GdipGetStringFormatDigitSubstitution ( GpStringFormat* x, LANGID* x, 
+                 StringDigitSubstitute* x ) ;
+FUNCTION: GpStatus GdipGetStringFormatFlags ( GpStringFormat* x,  INT* x ) ;
+FUNCTION: GpStatus GdipGetStringFormatHotkeyPrefix ( GpStringFormat* x, INT* x ) ;
+FUNCTION: GpStatus GdipGetStringFormatLineAlign ( GpStringFormat* x, StringAlignment* x ) ;
+FUNCTION: GpStatus GdipGetStringFormatMeasurableCharacterRangeCount ( 
+                 GpStringFormat* x,  INT* x ) ;
+FUNCTION: GpStatus GdipGetStringFormatTabStopCount ( GpStringFormat* x, INT* x ) ;
+FUNCTION: GpStatus GdipGetStringFormatTabStops ( GpStringFormat* x, INT x, REAL* x, REAL* x ) ;
+FUNCTION: GpStatus GdipGetStringFormatTrimming ( GpStringFormat* x, StringTrimming* x ) ;
+FUNCTION: GpStatus GdipSetStringFormatAlign ( GpStringFormat* x, StringAlignment x ) ;
+FUNCTION: GpStatus GdipSetStringFormatDigitSubstitution ( GpStringFormat* x, LANGID x, StringDigitSubstitute x ) ;
+FUNCTION: GpStatus GdipSetStringFormatHotkeyPrefix ( GpStringFormat* x, INT x ) ;
+FUNCTION: GpStatus GdipSetStringFormatLineAlign ( GpStringFormat* x, StringAlignment x ) ;
+FUNCTION: GpStatus GdipSetStringFormatMeasurableCharacterRanges ( 
+                 GpStringFormat* x,  INT x,  CharacterRange* x ) ;
+FUNCTION: GpStatus GdipSetStringFormatTabStops ( GpStringFormat* x, REAL x, INT x, REAL* x ) ;
+FUNCTION: GpStatus GdipSetStringFormatTrimming ( GpStringFormat* x, StringTrimming x ) ;
+FUNCTION: GpStatus GdipSetStringFormatFlags ( GpStringFormat* x,  INT x ) ;
+FUNCTION: GpStatus GdipStringFormatGetGenericDefault ( GpStringFormat** x ) ;
+FUNCTION: GpStatus GdipStringFormatGetGenericTypographic ( GpStringFormat** x ) ;
+
+
+FUNCTION: GpStatus GdipCreateTexture ( GpImage* x, GpWrapMode x, GpTexture** x ) ;
+FUNCTION: GpStatus GdipCreateTexture2 ( GpImage* x, GpWrapMode x, REAL x, REAL x, REAL x, REAL x, GpTexture** x ) ;
+FUNCTION: GpStatus GdipCreateTexture2I ( GpImage* x, GpWrapMode x, INT x, INT x, INT x, INT x, GpTexture** x ) ;
+FUNCTION: GpStatus GdipCreateTextureIA ( GpImage* x, GpImageAttributes* x, 
+             REAL x, REAL x, REAL x, REAL x, GpTexture** x ) ;
+FUNCTION: GpStatus GdipCreateTextureIAI ( GpImage* x, GpImageAttributes* x, 
+             INT x, INT x, INT x, INT x, GpTexture** x ) ;
+FUNCTION: GpStatus GdipGetTextureTransform ( GpTexture* x, GpMatrix* x ) ;
+FUNCTION: GpStatus GdipGetTextureWrapMode ( GpTexture* x,  GpWrapMode* x ) ;
+FUNCTION: GpStatus GdipMultiplyTextureTransform ( GpTexture* x, 
+             GpMatrix* x, GpMatrixOrder x ) ;
+FUNCTION: GpStatus GdipResetTextureTransform ( GpTexture* x ) ;
+FUNCTION: GpStatus GdipRotateTextureTransform ( GpTexture* x, REAL x, GpMatrixOrder x ) ;
+FUNCTION: GpStatus GdipScaleTextureTransform ( GpTexture* x, REAL x, REAL x, GpMatrixOrder x ) ;
+FUNCTION: GpStatus GdipSetTextureTransform ( GpTexture* x, GpMatrix* x ) ;
+FUNCTION: GpStatus GdipSetTextureWrapMode ( GpTexture* x,  GpWrapMode x ) ;
+FUNCTION: GpStatus GdipTranslateTextureTransform ( GpTexture* x, REAL x, REAL x, 
+             GpMatrixOrder x ) ;
+
+
+FUNCTION: GpStatus GdipCreateStreamOnFile ( WCHAR* x, UINT x, IStream** x ) ;
+FUNCTION: GpStatus GdipGetImageEncodersSize ( UINT* numEncoders,  UINT* size ) ;
+FUNCTION: GpStatus GdipGetImageEncoders ( UINT numEncoders,  UINT size,  ImageCodecInfo* encoders ) ;
+FUNCTION: GpStatus GdipTestControl ( GpTestControlEnum x, void* x ) ;
+
+ERROR: gdi+-error status ;
+
+: check-gdi+-status ( GpStatus -- )
+    dup Ok = [ drop ] [ gdi+-error ] if ;
+
+CONSTANT: standard-gdi+-startup-input
+    S{ GdiplusStartupInput
+        { GdiplusVersion 1 }
+        { DebugEventCallback f }
+        { SuppressBackgroundThread 0 }
+        { SuppressExternalCodecs 0 }
+    }
+
+: (start-gdi+) ( startup-input -- token startup-output )
+    { ULONG_PTR GdiplusStartupOutput }
+    [ swapd GdiplusStartup check-gdi+-status ] [ ] with-out-parameters ;
+: start-gdi+ ( -- token )
+    standard-gdi+-startup-input (start-gdi+) drop ; inline
+: stop-gdi+ ( token -- )
+    GdiplusShutdown ;
+
+DESTRUCTOR: stop-gdi+
diff --git a/basis/windows/gdiplus/platforms.txt b/basis/windows/gdiplus/platforms.txt
new file mode 100644 (file)
index 0000000..8e1a559
--- /dev/null
@@ -0,0 +1 @@
+windows
index 538a1428786694969ac5bda6855f3b21f9b784b6..8b0a2406c7578545fb1e6fb8d826a42886f9691d 100644 (file)
@@ -13,6 +13,9 @@ TYPEDEF: void* LPUNKNOWN
 TYPEDEF: LPWSTR LPOLESTR
 TYPEDEF: LPWSTR LPCOLESTR
 
+TYPEDEF: GUID IID
+TYPEDEF: GUID CLSID
+
 TYPEDEF: REFGUID LPGUID
 TYPEDEF: REFGUID REFIID
 TYPEDEF: REFGUID REFCLSID
diff --git a/basis/windows/streams/platforms.txt b/basis/windows/streams/platforms.txt
new file mode 100644 (file)
index 0000000..3646795
--- /dev/null
@@ -0,0 +1 @@
+windows\r
diff --git a/basis/windows/streams/streams.factor b/basis/windows/streams/streams.factor
new file mode 100644 (file)
index 0000000..33c519e
--- /dev/null
@@ -0,0 +1,123 @@
+USING: accessors alien.c-types classes.struct combinators\r
+continuations io kernel libc literals locals sequences\r
+specialized-arrays windows.com memoize\r
+windows.com.wrapper windows.kernel32 windows.ole32\r
+windows.types ;\r
+IN: windows.streams\r
+\r
+SPECIALIZED-ARRAY: uchar\r
+\r
+<PRIVATE\r
+\r
+: with-hresult ( quot: ( -- result ) -- result )\r
+    [ drop E_FAIL ] recover ; inline\r
+\r
+:: IStream-read ( stream pv cb out-read -- hresult )\r
+    [\r
+        cb stream stream-read :> buf\r
+        buf length :> bytes\r
+        pv buf bytes memcpy\r
+        out-read [ bytes out-read 0 ULONG set-alien-value ] when\r
+\r
+        cb bytes = [ S_OK ] [ S_FALSE ] if\r
+    ] with-hresult ; inline\r
+\r
+:: IStream-write ( stream pv cb out-written -- hresult )\r
+    [\r
+        pv cb <direct-uchar-array> stream stream-write\r
+        out-written [ cb out-written 0 ULONG set-alien-value ] when\r
+        S_OK\r
+    ] with-hresult ; inline\r
+\r
+: origin>seek-type ( origin -- seek-type )\r
+    {\r
+        { $ STREAM_SEEK_SET [ seek-absolute ] }\r
+        { $ STREAM_SEEK_CUR [ seek-relative ] }\r
+        { $ STREAM_SEEK_END [ seek-end ] }\r
+    } case ;\r
+\r
+:: IStream-seek ( stream move origin new-position -- hresult )\r
+    [\r
+        move origin origin>seek-type stream stream-seek\r
+        new-position [\r
+            stream stream-tell new-position 0 ULARGE_INTEGER set-alien-value\r
+        ] when\r
+        S_OK\r
+    ] with-hresult ; inline\r
+\r
+:: IStream-set-size ( stream new-size -- hresult )\r
+    STG_E_INVALIDFUNCTION ;\r
+\r
+:: IStream-copy-to ( stream other-stream cb out-read out-written -- hresult )\r
+    [\r
+        cb stream stream-read :> buf\r
+        buf length :> bytes\r
+        out-read [ bytes out-read 0 ULONG set-alien-value ] when\r
+\r
+        other-stream buf bytes out-written IStream::Write\r
+    ] with-hresult ; inline\r
+\r
+:: IStream-commit ( stream flags -- hresult )\r
+    stream stream-flush S_OK ;\r
+\r
+:: IStream-revert ( stream -- hresult )\r
+    STG_E_INVALIDFUNCTION ;\r
+\r
+:: IStream-lock-region ( stream offset cb lock-type -- hresult )\r
+    STG_E_INVALIDFUNCTION ;\r
+\r
+:: IStream-unlock-region ( stream offset cb lock-type -- hresult )\r
+    STG_E_INVALIDFUNCTION ;\r
+\r
+:: stream-size ( stream -- size )\r
+    stream stream-tell :> old-pos\r
+    0 seek-end stream stream-seek\r
+    stream stream-tell :> size\r
+    old-pos seek-absolute stream stream-seek\r
+    size ;\r
+\r
+:: IStream-stat ( stream out-stat stat-flag -- hresult )\r
+    [\r
+        out-stat\r
+            f >>pwcsName\r
+            STGTY_STREAM >>type\r
+            stream stream-size >>cbSize\r
+            FILETIME <struct> >>mtime\r
+            FILETIME <struct> >>ctime\r
+            FILETIME <struct> >>atime\r
+            STGM_READWRITE >>grfMode\r
+            0 >>grfLocksSupported\r
+            GUID_NULL >>clsid\r
+            0 >>grfStateBits\r
+            0 >>reserved\r
+            drop\r
+        S_OK\r
+    ] with-hresult ;\r
+\r
+:: IStream-clone ( out-clone-stream -- hresult )\r
+    f out-clone-stream 0 void* set-alien-value\r
+    STG_E_INVALIDFUNCTION ;\r
+\r
+CONSTANT: stream-wrapper\r
+    $[\r
+        {\r
+            { IStream {\r
+                [ IStream-read ]\r
+                [ IStream-write ]\r
+                [ IStream-seek ]\r
+                [ IStream-set-size ]\r
+                [ IStream-copy-to ]\r
+                [ IStream-commit ]\r
+                [ IStream-revert ]\r
+                [ IStream-lock-region ]\r
+                [ IStream-unlock-region ]\r
+                [ IStream-stat ]\r
+                [ IStream-clone ]\r
+            } }\r
+        } <com-wrapper>\r
+    ]\r
+\r
+PRIVATE>\r
+\r
+: stream>IStream ( stream -- IStream )\r
+    stream-wrapper com-wrap ;\r
diff --git a/basis/windows/streams/summary.txt b/basis/windows/streams/summary.txt
new file mode 100644 (file)
index 0000000..3578124
--- /dev/null
@@ -0,0 +1 @@
+IStream interface wrapper for Factor stream objects\r
index e2e4b113a4156b2d41f06a7b262da6b1cb25767f..3490e8083d3792adb655ea475c949cd7746435ac 100644 (file)
@@ -16,6 +16,8 @@ TYPEDEF: wchar_t             WCHAR
 
 TYPEDEF: short               SHORT
 TYPEDEF: ushort              USHORT
+TYPEDEF: short               INT16
+TYPEDEF: ushort              UINT16
 
 TYPEDEF: ushort              WORD
 TYPEDEF: ulong               DWORD
@@ -94,7 +96,7 @@ TYPEDEF: HANDLE              HDDEDATA
 TYPEDEF: HANDLE              HDESK
 TYPEDEF: HANDLE              HDROP
 TYPEDEF: HANDLE              HDWP
-TYPEDEF: HANDLE              HENMETAFILE
+TYPEDEF: HANDLE              HENHMETAFILE
 TYPEDEF: HANDLE              HFONT
 TYPEDEF: HANDLE              HGDIOBJ
 TYPEDEF: HANDLE              HGLOBAL
@@ -398,3 +400,5 @@ STRUCT: TEXTMETRICW
     { tmCharSet BYTE } ;
 
 TYPEDEF: TEXTMETRICW* LPTEXTMETRIC
+
+TYPEDEF: ULONG PROPID
index 4996d55f2e218bcae0375310e61e766017abd082..f3bf040bcb1e56db528db81de7fd8a8ac629fab3 100644 (file)
@@ -17,6 +17,7 @@ CONSTANT: MAX_UNICODE_PATH 32768
     { "iphlpapi"    "iphlpapi.dll"       stdcall }
     { "libc"        "msvcrt.dll"         cdecl   }
     { "libm"        "msvcrt.dll"         cdecl   }
+    { "gdiplus"     "gdiplus.dll"        stdcall }
     { "gl"          "opengl32.dll"       stdcall }
     { "glu"         "glu32.dll"          stdcall }
     { "ole32"       "ole32.dll"          stdcall }
index bcb4463e6ed114da41af9083930a2e7f053919db..8a0a346a1b5a8cb7d28f63989db27f4530fcd46f 100755 (executable)
@@ -28,7 +28,12 @@ ARTICLE: "vocabs.roots" "Vocabulary roots"
 { $subsections "add-vocab-roots" } ;
 
 ARTICLE: "vocabs.icons" "Vocabulary icons"
-"An icon file representing the vocabulary can be provided for use by " { $link "tools.deploy" } ". A file named " { $snippet "icon.ico" } " will be used as the application icon when the application is deployed on Windows. A file named " { $snippet "icon.icns" } " will be used when the application is deployed on MacOS X." ;
+"An icon file representing the vocabulary can be provided for use by " { $link "tools.deploy" } ". If any of the following files exist inside the vocabulary directory, they will be used as icons when the application is deployed."
+{ $list
+    { { $snippet "icon.ico" } " on Windows" }
+    { { $snippet "icon.icns" } " on MacOS X" }
+    { { $snippet "icon.png" } " on Linux and *BSD" }
+} ;
 
 ARTICLE: "vocabs.loader" "Vocabulary loader"
 "The " { $link POSTPONE: USE: } " and " { $link POSTPONE: USING: } " words load vocabularies using the vocabulary loader. The vocabulary loader is implemented in the " { $vocab-link "vocabs.loader" } " vocabulary."
index a240aae9452163ff3d4d40cfa2742402c7a669f5..55e6f7c0f4285b85919a544f9672ab51233bd193 100644 (file)
@@ -309,7 +309,7 @@ TYPED: read-compressed-texture ( tdt: texture-data-target level: integer -- byte
 
 : read-texture-image ( tdt level -- image )
     [ texture-dim ]
-    [ drop texture-object [ component-order>> ] [ component-type>> ] bi f ]
+    [ drop texture-object [ component-order>> ] [ component-type>> ] bi f ]
     [ read-texture ] 2tri
     image boa ; inline
 
index 9c2ce17edbc877ef4b7117ca90e7b980b2c30800..4616f0dce28c8f1a3ac7368bf5aaed56df4f8fe9 100644 (file)
Binary files a/extra/images/testing/bmp/42red_24bit.fig and b/extra/images/testing/bmp/42red_24bit.fig differ
index 4b75a10dc060c66b7261f130c244f407fb4dbec2..776d302469bb0c05b61a774b9d726431dfbd8b5c 100644 (file)
Binary files a/extra/images/testing/bmp/rgb_8bit.fig and b/extra/images/testing/bmp/rgb_8bit.fig differ
index b36a8f6666f5776bedf5ff9a0d10cc4dc9e8e3a8..46dc59425a47efd97e17eecd6255b49c615da96d 100644 (file)
Binary files a/extra/images/testing/gif/alpha.fig and b/extra/images/testing/gif/alpha.fig differ
index 905da6d827a7f7ec2e0828a8fe14fe0acfae5ffa..88e8e9bd18c463aa884f4f85e79adde150831813 100644 (file)
Binary files a/extra/images/testing/gif/astronaut_animation.fig and b/extra/images/testing/gif/astronaut_animation.fig differ
index c177d892509796c6f59e3a63fa9bffd0d32cadce..70556be3e7d0c7a04c99bff75373486acad05f45 100644 (file)
Binary files a/extra/images/testing/gif/checkmark.fig and b/extra/images/testing/gif/checkmark.fig differ
index 330397f7d72a0e59d5907fb2875061af67a5ad55..9f291efb331dbacdf8cd232241892636d4135006 100644 (file)
Binary files a/extra/images/testing/gif/circle.fig and b/extra/images/testing/gif/circle.fig differ
index 69de84564eefd3e015bece2d117f1ad565a7fe31..3c03fe22c395e925ac32f59ca414227cbd5bb4e0 100644 (file)
Binary files a/extra/images/testing/gif/monochrome.fig and b/extra/images/testing/gif/monochrome.fig differ
index a2650e971fd0d6a6ff7d38028db8c75aaef37edf..c4d6aa43c70d9388b97a40c685ea347ea1043bc8 100644 (file)
Binary files a/extra/images/testing/gif/noise.fig and b/extra/images/testing/gif/noise.fig differ
index aee805ec6985a325ad215ee428ef13f16dc889c4..ae2174290a1f588929883556220b9a992c093168 100644 (file)
Binary files a/extra/images/testing/pbm/test.ascii.fig and b/extra/images/testing/pbm/test.ascii.fig differ
index aee805ec6985a325ad215ee428ef13f16dc889c4..ae2174290a1f588929883556220b9a992c093168 100644 (file)
Binary files a/extra/images/testing/pbm/test.binary.fig and b/extra/images/testing/pbm/test.binary.fig differ
index 6e52311b94202145e080cf8f4dc7794d43490754..4fce1e636cb0cd0ef0f0babfe362afc623dd2c7d 100644 (file)
Binary files a/extra/images/testing/pgm/radial.ascii.fig and b/extra/images/testing/pgm/radial.ascii.fig differ
index 6e52311b94202145e080cf8f4dc7794d43490754..4fce1e636cb0cd0ef0f0babfe362afc623dd2c7d 100644 (file)
Binary files a/extra/images/testing/pgm/radial.binary.fig and b/extra/images/testing/pgm/radial.binary.fig differ
index 84f8c97b931b3cca7e8b88467380408d08dda514..655695610dfa983adc491f004ace769e81901b0b 100644 (file)
Binary files a/extra/images/testing/png/basn2c08.fig and b/extra/images/testing/png/basn2c08.fig differ
index f188879876599d23890b964b0ea157f64c3b2d72..723e1b419230711f140db00ddaeaac38afe262f3 100644 (file)
Binary files a/extra/images/testing/png/basn6a08.fig and b/extra/images/testing/png/basn6a08.fig differ
index 6a6aef9b0f9e6e1b8bd1bdc2c056395598894bdf..f2e7a981ba7a531617a50e649dba523706b4612f 100644 (file)
Binary files a/extra/images/testing/png/f00n2c08.fig and b/extra/images/testing/png/f00n2c08.fig differ
index f08c0bbee3f8c6dc780e90a61657632ce012aac0..097a24a849648ee426419091b14f3061fdd04111 100644 (file)
Binary files a/extra/images/testing/png/f01n2c08.fig and b/extra/images/testing/png/f01n2c08.fig differ
index 722f02a5ff03d74adb5191a4216f60132287d19e..3a6a60106a1787bb6d73d8ec589be2be5c07bbf8 100644 (file)
Binary files a/extra/images/testing/png/f02n2c08.fig and b/extra/images/testing/png/f02n2c08.fig differ
index 2a37fe6c7bd9e7ddd17da74a950be5446eff9ea6..ae91abddb729b22eebb1e56e4152e0a8c062cc5d 100644 (file)
Binary files a/extra/images/testing/png/f03n2c08.fig and b/extra/images/testing/png/f03n2c08.fig differ
index c0db771fa4c96be556e71fefbac36107943cf1d8..8116a4554290310083615016b870b950db00492a 100644 (file)
Binary files a/extra/images/testing/png/f04n2c08.fig and b/extra/images/testing/png/f04n2c08.fig differ
index 9d171e68b750d75b3cf68ee47b1f8a147470d381..79e5991dbb03ff5b93575061db2fbd447468382e 100644 (file)
Binary files a/extra/images/testing/png/z00n2c08.fig and b/extra/images/testing/png/z00n2c08.fig differ
index 9d171e68b750d75b3cf68ee47b1f8a147470d381..79e5991dbb03ff5b93575061db2fbd447468382e 100644 (file)
Binary files a/extra/images/testing/png/z03n2c08.fig and b/extra/images/testing/png/z03n2c08.fig differ
index 9d171e68b750d75b3cf68ee47b1f8a147470d381..79e5991dbb03ff5b93575061db2fbd447468382e 100644 (file)
Binary files a/extra/images/testing/png/z06n2c08.fig and b/extra/images/testing/png/z06n2c08.fig differ
index 9d171e68b750d75b3cf68ee47b1f8a147470d381..79e5991dbb03ff5b93575061db2fbd447468382e 100644 (file)
Binary files a/extra/images/testing/png/z09n2c08.fig and b/extra/images/testing/png/z09n2c08.fig differ
index 68a1fa1ac10fd7c8dcdddb7407527bd327f83baf..9f95883c38bbeb57b2d265a2a8d8f0fc19a4d6ec 100644 (file)
Binary files a/extra/images/testing/ppm/ascii.fig and b/extra/images/testing/ppm/ascii.fig differ
index 68a1fa1ac10fd7c8dcdddb7407527bd327f83baf..9f95883c38bbeb57b2d265a2a8d8f0fc19a4d6ec 100644 (file)
Binary files a/extra/images/testing/ppm/binary.fig and b/extra/images/testing/ppm/binary.fig differ
index b36a8f6666f5776bedf5ff9a0d10cc4dc9e8e3a8..46dc59425a47efd97e17eecd6255b49c615da96d 100644 (file)
Binary files a/extra/images/testing/tiff/alpha.fig and b/extra/images/testing/tiff/alpha.fig differ
index 7050c13f6c865f9d2b28589742cfe2faa119e2e6..5213f8d30ed7420c0d9cddb4f1818c6ede934ca9 100644 (file)
Binary files a/extra/images/testing/tiff/color_spectrum.fig and b/extra/images/testing/tiff/color_spectrum.fig differ
index dd582aaef329e1c2962f815148dce85dcda02823..e207120c9dfd334e8ad4430e34c515e11a42ce40 100644 (file)
Binary files a/extra/images/testing/tiff/noise.fig and b/extra/images/testing/tiff/noise.fig differ
index 0b66c62662120287e7c6ff5de4b3c356a8ee3b81..9273f3edaa5459e6c41677b70f297574206ed1c9 100644 (file)
Binary files a/extra/images/testing/tiff/octagon.fig and b/extra/images/testing/tiff/octagon.fig differ
index c09b1cd10e2b21e1e543015c5f6e5b33e0c699eb..8fb52821ff0b4ed74ee2158673f8c7c74b73617d 100644 (file)
Binary files a/extra/images/testing/tiff/rgb.fig and b/extra/images/testing/tiff/rgb.fig differ
index b78862d225fa10bf784d9f9af6be06dd22525e9d..44a086a9e6524a167a2372aef09879ecfb372c98 100644 (file)
@@ -88,12 +88,18 @@ TUPLE: vbo
     index-buffer index-count vertex-format texture bump ka ;
 
 : white-image ( -- image )
-    { 1 1 } BGR ubyte-components f
-    B{ 255 255 255 } image boa ;
+    <image>
+        { 1 1 } >>dim
+        BGR >>component-order
+        ubyte-components >>component-type
+        B{ 255 255 255 } >>bitmap ;
 
 : up-image ( -- image )
-    { 1 1 } BGR ubyte-components f
-    B{ 0 0 0 } image boa ;
+    <image>
+        { 1 1 } >>dim
+        BGR >>component-order
+        ubyte-components >>component-type
+        B{ 0 0 0 } >>bitmap ;
         
 : make-texture ( pathname alt -- texture )
     swap [ nip load-image ] [ ] if*