#displayString: in CairoGraphicsContext revamped
authorJan Vrany <jan.vrany@fit.cvut.cz>
Wed, 17 Feb 2016 06:43:31 +0000
changeset 40 28dfc583beb5
parent 39 8af34937e1ec
child 41 17bc740cbc2a
#displayString: in CairoGraphicsContext revamped Introduced a CairoScaledFont, a kind of FontDescription for Cairo fonts (Cairo::ScaledFont / cairo_scaled_font_t). CairoScaledFont provides a bridge between Smalltalk/X font API and Cairo the same way CairoGraphicsContext provides a bridge bewtween Smalltalk/X drawing API and Cairo. Don't use Cairo's "toy" text API to select font. Under X11, use FontConfig to select a proper font. However, for actual text rendering and measurements, Cairo's "toy" API is still used - it seems to be good enough, certainly as good as Core X11 / Xft text rendering for Latin-based left-to-right languages. At this point a TextEditView can be rendered using Cairo.
CairoGraphicsContext.st
CairoScaledFont.st
Cairo__CObject.st
Cairo__CPrimitives.st
Cairo__CStructure.st
Cairo__FontExtents.st
Cairo__FontFace.st
Cairo__FontOptions.st
Cairo__FontSlant.st
Cairo__Glyph.st
Cairo__GraphicsContext.st
Cairo__Matrix.st
Cairo__Rectangle.st
Cairo__ScaledFont.st
Cairo__Surface.st
Cairo__TextExtents.st
Make.proto
Make.spec
abbrev.stc
bc.mak
libInit.cc
stx_goodies_libcairo.st
--- a/CairoGraphicsContext.st	Tue Feb 16 07:46:52 2016 +0000
+++ b/CairoGraphicsContext.st	Wed Feb 17 06:43:31 2016 +0000
@@ -3,9 +3,9 @@
 "{ NameSpace: Smalltalk }"
 
 DeviceGraphicsContext subclass:#CairoGraphicsContext
-	instanceVariableNames:'cr crId'
-	classVariableNames:'Lobby'
-	poolDictionaries:'Cairo::FontSlant Cairo::FontWeight Cairo::Format'
+	instanceVariableNames:'cr'
+	classVariableNames:'Lobby SkippedSlotIndexes'
+	poolDictionaries:'Cairo::FontSlant Cairo::FontWeight Cairo::Format Cairo::Status'
 	category:'Cairo-Compatibility'
 !
 
@@ -19,7 +19,13 @@
 
     Lobby := Registry new.
 
-    "Modified: / 09-01-2015 / 15:08:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    SkippedSlotIndexes := {
+        DeviceGraphicsContext instVarIndexFor: #font.
+        DeviceGraphicsContext instVarIndexFor: #deviceFont.
+        DeviceGraphicsContext instVarIndexFor: #lineWidth.
+    }
+
+    "Modified: / 17-02-2016 / 21:43:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !CairoGraphicsContext class methodsFor:'instance creation'!
@@ -27,19 +33,21 @@
 onDeviceGraphicsContext: dGC
     | cGC |
 
-    cGC := self onDevice: dGC device.  
-    1 to: DeviceGraphicsContext instSize do:[:i | 
-        cGC instVarAt: i put: (dGC instVarAt: i).
+    cGC := self basicNew.
+    1 to: DeviceGraphicsContext instSize do:[:i |
+        (SkippedSlotIndexes includes:i) ifFalse:[ 
+            cGC instVarAt: i put: (dGC instVarAt: i).
+        ].
     ].
     dGC gcId notNil ifTrue:[ 
         cGC createCR.
     ].
     cGC lineWidth: dGC lineWidth.
-    cGC font: dGC font.
+    cGC basicFont: dGC basicFont.
     ^ cGC
 
     "Created: / 15-02-2016 / 21:20:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 16-02-2016 / 10:44:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 17-02-2016 / 22:46:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !CairoGraphicsContext class methodsFor:'accessing'!
@@ -122,6 +130,22 @@
 
 !CairoGraphicsContext methodsFor:'accessing'!
 
+basicFont:aFont
+    (aFont ~~ font) ifTrue:[     
+        super basicFont: aFont.
+        font notNil ifTrue:[ 
+            font := CairoScaledFont fromFontDescription: font onDevice: device.
+            cr notNil ifTrue:[ 
+                cr font: font scaledFont.
+                cr fontSize: (Screen current verticalPixelPerInch / 72) * font size.
+            ].
+        ].
+    ].
+
+    "Created: / 16-02-2016 / 15:37:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 18-02-2016 / 00:38:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 clippingBounds:aRectangleOrNil
     "set the clipping rectangle for drawing (in logical coordinates);
      a nil argument turn off clipping (i.e. whole view is drawable)"    
@@ -131,25 +155,6 @@
     "Created: / 15-02-2016 / 21:38:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
-font:aFont
-    | family slant psize weight |
-
-    super font: aFont.
-
-    family := font family.
-    slant := SymbolicFontSlantToCairoFontSlantMap at: (font style ? 'roman'). 
-    weight := SymbolicFontFaceToCairoFontWeightMap at: (font face ? 'regular').
-    psize := font pixelSize.
-    psize isNil ifTrue:[ 
-        psize := (self device verticalPixelPerInch / 72) * font size.
-    ].
-
-    cr font: family slant: slant weight: weight.
-    cr fontSize: psize .
-
-    "Modified: / 16-02-2016 / 10:55:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
 function:aFunctionSymbol
     "set the drawing function"
 
@@ -256,11 +261,12 @@
 displayRectangleX:x y:y width:w height:h
     "draw a rectangle
      - this could be recoded to draw using displayLine"
+    (w > 0 and:[h > 0]) ifTrue:[
+        cr rectangleX: x y: y width: w height: h.
+        cr stroke.
+    ]
 
-    cr rectangleX: x y: y width: w height: h.
-    cr stroke.
-
-    "Modified: / 13-02-2016 / 20:04:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 18-02-2016 / 22:21:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 displayString:aStringArg from:index1Arg to:index2Arg x:x y:y opaque:opaqueArg maxWidth:maxWidth
@@ -271,19 +277,63 @@
      the case where paint and/or bgPaint are dithered colors.
      maxWidth is the maximum width of the string in pixels or nil if unknown."    
 
+    | opaque string |
+    "
+     if backgroundPaint color is nil, we assume
+     this is a non-opaque draw
+    "
+    opaque := opaqueArg ? false.
+    bgPaint isNil ifTrue:[
+        opaque := false.
+    ].
+
+    gcId isNil ifTrue:[
+        self initGC
+    ]. 
+
+    (aStringArg isString not or:[aStringArg isText]) ifTrue:[
+        "
+         hook for non-strings (i.e. attributed text)
+         that 'thing' should know how to display itself ...
+        "
+        aStringArg displayOn:self x:x y:y from:index1Arg to:index2Arg opaque:opaque.
+        ^ self
+    ].   
+
+    (index1Arg == 1 and:[ index2Arg == aStringArg size ]) ifTrue:[ 
+        string := aStringArg
+    ] ifFalse:[ 
+        string := aStringArg copyFrom: index1Arg to: index2Arg
+    ].
+
     cr save.
     [ 
+        | extents |
+
+        extents := cr textExtents: string.
+        cr rectangleX: x + extents xBearing ceiling y: y - font ascent ceiling  width: extents xAdvance ceiling height: font height ceiling.
+        cr lineWidth: 0.
+
+        opaque ifTrue:[ 
+            cr source: bgPaint.
+            cr fill.
+        ] ifFalse:[
+            "/ I'm not sure why this is required but if not done,
+            "/ selected text is not rendered correcrtly...
+            cr stroke.
+        ].
+
+        self assert: cr status == CAIRO_STATUS_SUCCESS.
+        cr source: paint.
         cr moveToX: x y: y.
-        (index1Arg == 1 and:[ index2Arg == aStringArg size ]) ifTrue:[ 
-            cr showText: aStringArg
-        ] ifFalse:[ 
-            cr showText: (aStringArg copyFrom: index1Arg to: index2Arg).
-        ].
+        cr showText: string.
+        self assert: cr status == CAIRO_STATUS_SUCCESS.
     ] ensure:[ 
         cr restore.
     ]
 
     "Created: / 16-02-2016 / 10:51:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 18-02-2016 / 21:12:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !CairoGraphicsContext methodsFor:'basic filling'!
@@ -341,18 +391,70 @@
 fillRectangleX:x y:y width:w height:h
     "fill a rectangle with current paint color"
 
-    cr rectangleX: x y: y width: w height: h. 
-    cr strokeAndPreserve.
-    cr fill.
+    (w > 0 and:[h > 0]) ifTrue:[
+        cr lineWidth: 0.      
+        cr rectangleX: x y: y width: w height: h. 
+        cr fill.
+        cr lineWidth: (lineWidth == 0 ifTrue:[1] ifFalse:[lineWidth])  
+    ].
 
 "/    cr save.
 "/    cr rectangleX: x y: y width: w height: h. 
 "/    cr sourceR: 1 G: 0 B: 0.
-"/    cr lineWidth: 3.  
+"/    cr lineWidth: 1.  
 "/    cr stroke.
 "/    cr restore.
 
-    "Modified: / 16-02-2016 / 07:58:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 18-02-2016 / 22:20:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!CairoGraphicsContext methodsFor:'bit blitting'!
+
+copyBitsFrom:aByteArray bitsPerPixel:bpp depth:depth padding:pad width:srcW height:srcH x:srcX y:srcY toX:dstX y:dstY
+    "copy bits from a smalltalk byteArray.
+     The bits found there are supposed to be in the devices native format (i.e.
+     translated to allocated color indices on pseudoColor devices and padded as required.
+     The byteOrder is MSB and will be converted as appropriate by the underlying devices
+     method to whatever the device needs."
+
+    cr notNil ifTrue:[ 
+        cr surface flush
+    ].
+    ^ super copyBitsFrom:aByteArray bitsPerPixel:bpp depth:depth padding:pad width:srcW height:srcH x:srcX y:srcY toX:dstX y:dstY
+
+    "Created: / 18-02-2016 / 20:16:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+copyFrom:aDrawable x:srcX y:srcY toX:dstX y:dstY width:w height:h async:async
+    "copy from aDrawable into the receiver;
+     the source may be the receiver as well - in this case its a scroll.
+     All coordinates are in device coordinates.
+     If the receiver is a view AND async is true, the call returns immediately
+     - otherwise, it returns when the scroll operation is finished.
+     (not all devices care for this).
+     If the receiver is a pixmap, the call always returns immediately."
+
+    cr notNil ifTrue:[ 
+        cr surface flush
+    ].
+    ^ super copyFrom:aDrawable x:srcX y:srcY toX:dstX y:dstY width:w height:h async:async
+
+    "Created: / 18-02-2016 / 20:17:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+copyPlaneFrom:aDrawable x:srcX y:srcY toX:dstX y:dstY width:w height:h
+    "copy one plane from aDrawable into the receiver. 0's are drawn in
+     background, while 1's are drawn with foreground color.
+     The depth of aDrawable must (should) be 1.
+     The drawable must have been allocated on the same device.
+     All coordinates are in device coordinates."
+
+     cr notNil ifTrue:[ 
+        cr surface flush
+    ].
+    ^ super copyPlaneFrom:aDrawable x:srcX y:srcY toX:dstX y:dstY width:w height:h
+
+    "Created: / 18-02-2016 / 20:17:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !CairoGraphicsContext methodsFor:'drawing'!
@@ -375,15 +477,36 @@
     [
         image bitsARGB32Into: data stride: stride fg: self paint bg:  self backgroundPaint. 
         image_surface := Cairo::CPrimitives cairo_image_surface_create_for_data: data _: CAIRO_FORMAT_ARGB32 _: width _: height _: stride.
-        Cairo::CPrimitives cairo_set_source_surface: crId _: image_surface _: x asFloat _: y asFloat.
-        Cairo::CPrimitives cairo_paint: crId.
+        Cairo::CPrimitives cairo_set_source_surface: cr _: image_surface _: x asFloat _: y asFloat.
+        Cairo::CPrimitives cairo_paint: cr.
     ] ensure:[ 
         data finalize.
         image_surface release.
     ].
 
     "Created: / 31-12-2014 / 12:08:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 15-02-2016 / 21:32:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 17-02-2016 / 20:58:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+displayLineFrom:p0 to:p1
+    "draw a line (with current paint-color); apply transformation if nonNil"
+
+    ^ self displayLineFromX: p0 x y: p0 y toX: p1 x y: p1 y
+
+    "Created: / 18-02-2016 / 20:27:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+displayLineFromX:xStart y:yStart toX:xEnd y:yEnd brush:aForm
+    "draw a line using a brush.
+     Here, a slow fallback is used, drawing into a 
+     temporary bitmap first, which is then displayed"
+
+    cr notNil ifTrue:[ 
+        cr surface flush
+    ].
+    ^ super displayLineFromX:xStart y:yStart toX:xEnd y:yEnd brush:aForm
+
+    "Created: / 18-02-2016 / 20:28:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 displayRoundRectangleX:x y:y width:w height:h wCorner:wCorn hCorner:hCorn
@@ -485,9 +608,12 @@
     "Physically create a Cairo graphics context"
 
     cr := self cairo.
+    font notNil ifTrue:[ 
+        cr font: font scaledFont.
+    ].
 
     "Created: / 12-02-2016 / 16:59:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 13-02-2016 / 19:56:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 17-02-2016 / 22:42:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 createGC
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CairoScaledFont.st	Wed Feb 17 06:43:31 2016 +0000
@@ -0,0 +1,164 @@
+"{ Package: 'stx:goodies/libcairo' }"
+
+"{ NameSpace: Smalltalk }"
+
+FontDescription subclass:#CairoScaledFont
+	instanceVariableNames:'device scaledFont extents'
+	classVariableNames:'Lobby'
+	poolDictionaries:'Cairo::FontSlant Cairo::FontWeight Cairo::Format'
+	category:'Cairo-Compatibility'
+!
+
+!CairoScaledFont class methodsFor:'instance creation'!
+
+fromFontDescription: aFontDescription 
+    ^ self fromFontDescription: aFontDescription  onDevice: Screen current
+
+    "
+    CairoScaledFont fromFontDescription: CodeView defaultFont.
+    "
+
+    "Created: / 17-02-2016 / 20:51:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+fromFontDescription: aFontDescription onDevice: aHostGraphicsDevice
+    | font |
+
+    aFontDescription class == self ifTrue:[ 
+        ^ aFontDescription onDevice: aHostGraphicsDevice
+    ].
+    font := self new.
+    1 to: FontDescription instSize do:[:i | 
+        font instVarAt: i put: (aFontDescription instVarAt: i)
+    ].
+    font setDevice: aHostGraphicsDevice scaledFont: (Cairo::ScaledFont fromFontDescription: font).  
+    ^ font
+
+    "Created: / 17-02-2016 / 20:51:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified (format): / 17-02-2016 / 22:25:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!CairoScaledFont methodsFor:'accessing'!
+
+scaledFont
+    ^ scaledFont
+
+    "Created: / 17-02-2016 / 20:47:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!CairoScaledFont methodsFor:'converting'!
+
+onDevice: aDevice
+    device == aDevice ifTrue:[ ^ self ].
+    ^ self copy setDevice: aDevice scaledFont: (Cairo::ScaledFont fromFontDescription: self).
+
+    "Created: / 16-02-2016 / 13:22:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 17-02-2016 / 22:18:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!CairoScaledFont methodsFor:'displaying'!
+
+displayString:aString from:index1 to:index2 x:x y:y in:aGC opaque:opaque
+    "display a partial string at some position in aGC."
+
+    ^ self shouldImplement
+! !
+
+!CairoScaledFont methodsFor:'initialization'!
+
+setDevice: aHostGraphicsDevice scaledFont: aScaledFont
+    self assert: device isNil.
+    self assert: scaledFont isNil.
+
+    device := aHostGraphicsDevice.
+    scaledFont := aScaledFont
+
+    "Created: / 17-02-2016 / 20:46:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!CairoScaledFont methodsFor:'queries-dimensions'!
+
+ascent
+    "return the ascent - the number of pixels above the baseLine."
+
+    extents isNil ifTrue:[ extents := scaledFont extents ].    
+    ^ extents ascent ceiling
+
+    "Created: / 09-01-2015 / 15:33:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 18-02-2016 / 21:53:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+descent
+    "return the descent - the number of pixels below the baseLine."
+
+    extents isNil ifTrue:[ extents := scaledFont extents ].
+    ^ extents descent ceiling
+
+    "Created: / 09-01-2015 / 15:33:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 18-02-2016 / 21:54:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+height
+    "return the height - the number of pixels above plus below the baseLine."
+
+    extents isNil ifTrue:[ extents := scaledFont extents ].
+    ^ extents height ceiling
+
+    "Created: / 09-01-2015 / 15:33:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 18-02-2016 / 21:54:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+isFixedWidth
+    "return true, if this is a fixed pitch font (i.e. all characters
+     are of the same width)"
+
+    ^ false
+
+    "Created: / 09-01-2015 / 15:35:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+maxAscent
+    "return the fonts maximum-ascent (i.e. the maximum of all characters);
+     That is the number of units (usually pixels) above the baseline."
+
+    ^ self ascent
+
+    "Created: / 09-01-2015 / 15:34:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+maxDescent
+    "return the fonts maximum-descent (i.e. the maximum of all characters);
+     That is the number of units (usually pixels) below the baseline."
+
+    ^ self descent
+
+    "Created: / 09-01-2015 / 15:34:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+maxWidth
+    "return the fonts maximum-width character (i.e. the maximum of all characters);
+     That is a number of units (usually pixels)."
+
+    extents isNil ifTrue:[ extents := scaledFont extents ].
+    ^ extents maxXAdvance ceiling
+
+    "Created: / 09-01-2015 / 15:35:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 18-02-2016 / 21:54:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+widthOf:aString from:start to:stop
+    "return the width of a sub string"
+
+    | str |
+
+    (start == 1 and: [ stop == aString size ]) ifTrue:[ 
+        str := aString
+    ] ifFalse:[ 
+        str := aString copyFrom: start to: stop.
+    ].
+    ^ (scaledFont textExtents: str) xAdvance ceiling
+
+    "Created: / 09-01-2015 / 15:28:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 18-02-2016 / 21:54:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- a/Cairo__CObject.st	Tue Feb 16 07:46:52 2016 +0000
+++ b/Cairo__CObject.st	Wed Feb 17 06:43:31 2016 +0000
@@ -4,12 +4,24 @@
 
 ExternalAddress subclass:#CObject
 	instanceVariableNames:''
-	classVariableNames:''
+	classVariableNames:'Lobby'
 	poolDictionaries:''
 	category:'Cairo-Objects'
 !
 
 
+!CObject class methodsFor:'initialization'!
+
+initialize
+    "Invoked at system start or when the class is dynamically loaded."
+
+    "/ please change as required (and remove this comment)
+
+    Lobby := Registry new
+
+    "Modified: / 09-01-2015 / 11:22:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !CObject class methodsFor:'instance creation'!
 
 fromExternalAddress: anExternalAddress
@@ -109,3 +121,5 @@
     ^ '$Changeset: <not expanded> $'
 ! !
 
+
+CObject initialize!
--- a/Cairo__CPrimitives.st	Tue Feb 16 07:46:52 2016 +0000
+++ b/Cairo__CPrimitives.st	Wed Feb 17 06:43:31 2016 +0000
@@ -435,6 +435,14 @@
     self primitiveFailed
 !
 
+cairo_ft_font_face_create_for_pattern: pattern
+
+    <cdecl: Cairo::FontFace "cairo_ft_font_face_create_for_pattern" ( FcPattern ) >
+    self primitiveFailed
+
+    "Created: / 17-02-2016 / 20:00:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 cairo_get_antialias: cr
 
     <cdecl: int32 "cairo_get_antialias" ( handle ) >
@@ -473,8 +481,10 @@
 
 cairo_get_font_matrix: cr _: matrix
 
-    <cdecl: void "cairo_get_font_matrix" ( handle Cairo::Matrix ) >
+    <cdecl: void "cairo_get_font_matrix" ( handle pointer ) >
     self primitiveFailed
+
+    "Modified (format): / 18-02-2016 / 10:14:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 cairo_get_font_options: cr _: options
@@ -697,8 +707,10 @@
 
 cairo_matrix_init_identity: matrix
 
-    <cdecl: void "cairo_matrix_init_identity" ( Cairo::Matrix ) >
+    <cdecl: void "cairo_matrix_init_identity" ( handle ) >
     self primitiveFailed
+
+    "Modified (format): / 17-02-2016 / 20:34:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 cairo_matrix_init_rotate: matrix _: radians
@@ -709,8 +721,10 @@
 
 cairo_matrix_init_scale: matrix _: sx _: sy
 
-    <cdecl: void "cairo_matrix_init_scale" ( Cairo::Matrix double double ) >
+    <cdecl: void "cairo_matrix_init_scale" ( pointer double double ) >
     self primitiveFailed
+
+    "Modified (format): / 18-02-2016 / 00:15:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 cairo_matrix_init_translate: matrix _: tx _: ty
@@ -1389,8 +1403,10 @@
 
 cairo_scaled_font_create: font_face _: font_matrix _: ctm _: options
 
-    <cdecl: handle "cairo_scaled_font_create" ( Cairo::FontFace Cairo::Matrix Cairo::Matrix Cairo::FontOptions ) >
+    <cdecl: Cairo::ScaledFont "cairo_scaled_font_create" ( Cairo::FontFace handle handle Cairo::FontOptions ) >
     self primitiveFailed
+
+    "Modified (format): / 17-02-2016 / 20:35:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 cairo_scaled_font_destroy: scaled_font
@@ -1401,8 +1417,10 @@
 
 cairo_scaled_font_extents: scaled_font _: extents
 
-    <cdecl: void "cairo_scaled_font_extents" ( handle Cairo::FontExtents ) >
+    <cdecl: void "cairo_scaled_font_extents" ( handle pointer ) >
     self primitiveFailed
+
+    "Modified (format): / 17-02-2016 / 22:19:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 cairo_scaled_font_get_ctm: scaled_font _: ctm
@@ -1419,8 +1437,10 @@
 
 cairo_scaled_font_get_font_matrix: scaled_font _: font_matrix
 
-    <cdecl: void "cairo_scaled_font_get_font_matrix" ( handle Cairo::Matrix ) >
+    <cdecl: void "cairo_scaled_font_get_font_matrix" ( handle pointer ) >
     self primitiveFailed
+
+    "Modified (format): / 18-02-2016 / 10:14:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 cairo_scaled_font_get_font_options: scaled_font _: options
@@ -1479,8 +1499,10 @@
 
 cairo_scaled_font_text_extents: scaled_font _: utf8 _: extents
 
-    <cdecl: void "cairo_scaled_font_text_extents" ( handle charPointer Cairo::TextExtents ) >
+    <cdecl: void "cairo_scaled_font_text_extents" ( handle charPointer pointer ) >
     self primitiveFailed
+
+    "Modified (format): / 17-02-2016 / 22:09:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 cairo_scaled_font_text_to_glyphs: scaled_font _: x _: y _: utf8 _: utf8_len _: glyphs _: num_glyphs _: clusters _: num_clusters _: cluster_flags
@@ -1941,8 +1963,10 @@
 
 cairo_text_extents: cr _: utf8 _: extents
 
-    <cdecl: void "cairo_text_extents" ( handle charPointer Cairo::TextExtents ) >
+    <cdecl: void "cairo_text_extents" ( handle charPointer pointer ) >
     self primitiveFailed
+
+    "Modified (format): / 18-02-2016 / 09:02:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 cairo_text_path: cr _: utf8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Cairo__CStructure.st	Wed Feb 17 06:43:31 2016 +0000
@@ -0,0 +1,64 @@
+"{ Package: 'stx:goodies/libcairo' }"
+
+"{ NameSpace: Cairo }"
+
+ByteArray variableByteSubclass:#CStructure
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Cairo-Objects'
+!
+
+CStructure class instanceVariableNames:'fields'
+
+"
+ No other class instance variables are inherited by this class.
+"
+!
+
+!CStructure class methodsFor:'instance creation'!
+
+new
+    ^self basicNew: self sizeof
+
+    "Created: / 16-02-2016 / 14:22:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+new: size
+    self shouldNotImplement
+
+    "Created: / 16-02-2016 / 14:22:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!CStructure class methodsFor:'accessing'!
+
+sizeof
+    ^ self subclassResponsibility
+
+    "Created: / 16-02-2016 / 14:21:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!CStructure class methodsFor:'private'!
+
+fields
+    ^ fields
+
+    "Created: / 18-02-2016 / 09:05:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!CStructure methodsFor:'inserting'!
+
+inspectorExtraAttributes
+    | attrs |
+
+    attrs := super inspectorExtraAttributes.
+    self class fields notNil ifTrue:[ 
+        self class fields do:[:field | 
+            attrs at: '-', field put: [ self perform: field ]
+        ].
+    ].
+    ^ attrs
+
+    "Created: / 18-02-2016 / 09:11:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- a/Cairo__FontExtents.st	Tue Feb 16 07:46:52 2016 +0000
+++ b/Cairo__FontExtents.st	Wed Feb 17 06:43:31 2016 +0000
@@ -2,7 +2,7 @@
 
 "{ NameSpace: Cairo }"
 
-ExternalStructure subclass:#FontExtents
+CStructure variableByteSubclass:#FontExtents
 	instanceVariableNames:''
 	classVariableNames:''
 	poolDictionaries:''
@@ -10,6 +10,22 @@
 !
 
 
+!FontExtents class methodsFor:'initialization'!
+
+initialize
+    "Invoked at system start or when the class is dynamically loaded."
+
+    fields := #(
+        ascent
+        descent
+        height
+        maxXAdvance
+        maxYAdvance
+    )
+
+    "Modified: / 18-02-2016 / 09:09:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !FontExtents class methodsFor:'accessing'!
 
 dllPath
@@ -132,3 +148,5 @@
     ^ '$Changeset: <not expanded> $'
 ! !
 
+
+FontExtents initialize!
--- a/Cairo__FontFace.st	Tue Feb 16 07:46:52 2016 +0000
+++ b/Cairo__FontFace.st	Wed Feb 17 06:43:31 2016 +0000
@@ -10,6 +10,24 @@
 !
 
 
+!FontFace class methodsFor:'instance creation'!
+
+fromFontDescription: aFontDescription
+    Screen current platformName == #X11 ifTrue:[ 
+        | pattern |
+
+        pattern := FcPattern fromFontDescription: aFontDescription.
+        ^ CPrimitives cairo_ft_font_face_create_for_pattern: pattern.
+    ].
+    self error: 'Noy yet implemented'.
+
+    "
+    Cairo::FontFace fromFontDescription: CodeView defaultFont
+    "
+
+    "Created: / 17-02-2016 / 20:01:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !FontFace class methodsFor:'accessing'!
 
 dllPath
@@ -56,6 +74,38 @@
     ^0
 ! !
 
+!FontFace methodsFor:'accessing'!
+
+referenceCount
+    "Return value or reference counter"
+
+    ^ CPrimitives cairo_font_face_get_reference_count: self
+
+    "Modified: / 17-02-2016 / 19:54:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+type
+    "This function returns the type of the backend used to create a font face. 
+     See FontType for available types."
+
+    ^ CPrimitives cairo_font_face_get_type: self
+
+    "Created: / 17-02-2016 / 19:54:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!FontFace methodsFor:'private'!
+
+destroy
+    "Tell Cairo library to destroy the corresponding C object.
+     Remember that object is physically destroyed only if internal
+     refcounter goes to zero. However, after calling destroy,
+     this instance should be treated as invalid."
+
+    ^ CPrimitives cairo_font_face_destroy: self
+
+    "Modified: / 17-02-2016 / 19:54:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !FontFace class methodsFor:'documentation'!
 
 version
--- a/Cairo__FontOptions.st	Tue Feb 16 07:46:52 2016 +0000
+++ b/Cairo__FontOptions.st	Wed Feb 17 06:43:31 2016 +0000
@@ -2,7 +2,7 @@
 
 "{ NameSpace: Cairo }"
 
-ExternalStructure subclass:#FontOptions
+CObject variableByteSubclass:#FontOptions
 	instanceVariableNames:''
 	classVariableNames:''
 	poolDictionaries:''
@@ -10,6 +10,14 @@
 !
 
 
+!FontOptions class methodsFor:'instance creation'!
+
+new
+    ^ CPrimitives cairo_font_options_create
+
+    "Created: / 17-02-2016 / 20:30:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !FontOptions class methodsFor:'accessing'!
 
 dllPath
@@ -195,6 +203,29 @@
     "Modified: / 10-09-2008 / 18:19:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
 ! !
 
+!FontOptions methodsFor:'accessing'!
+
+referenceCount
+    "Return value or reference counter"
+
+    ^ self shouldNotImplement
+
+    "Modified: / 17-02-2016 / 20:29:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!FontOptions methodsFor:'private'!
+
+destroy
+    "Tell Cairo library to destroy the corresponding C object.
+     Remember that object is physically destroyed only if internal
+     refcounter goes to zero. However, after calling destroy,
+     this instance should be treated as invalid."
+
+    CPrimitives cairo_font_options_destroy: self.
+
+    "Modified: / 17-02-2016 / 20:29:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !FontOptions class methodsFor:'documentation'!
 
 version
--- a/Cairo__FontSlant.st	Tue Feb 16 07:46:52 2016 +0000
+++ b/Cairo__FontSlant.st	Wed Feb 17 06:43:31 2016 +0000
@@ -10,6 +10,7 @@
 	category:'Cairo-Constants'
 !
 
+
 !FontSlant class methodsFor:'initialization'!
 
 initialize
@@ -44,5 +45,12 @@
     ^CAIRO_FONT_SLANT_OBLIQUE
 ! !
 
+!FontSlant class methodsFor:'documentation'!
+
+version_HG
+
+    ^ '$Changeset: <not expanded> $'
+! !
+
 
 FontSlant initialize!
--- a/Cairo__Glyph.st	Tue Feb 16 07:46:52 2016 +0000
+++ b/Cairo__Glyph.st	Wed Feb 17 06:43:31 2016 +0000
@@ -2,7 +2,7 @@
 
 "{ NameSpace: Cairo }"
 
-ExternalStructure subclass:#Glyph
+CStructure variableByteSubclass:#Glyph
 	instanceVariableNames:''
 	classVariableNames:''
 	poolDictionaries:''
@@ -10,6 +10,20 @@
 !
 
 
+!Glyph class methodsFor:'initialization'!
+
+initialize
+    "Invoked at system start or when the class is dynamically loaded."
+
+    fields := #(
+    )
+
+
+    "/ please change as required (and remove this comment)
+
+    "Modified: / 18-02-2016 / 09:07:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !Glyph class methodsFor:'accessing'!
 
 dllPath
@@ -110,3 +124,5 @@
     ^ '$Changeset: <not expanded> $'
 ! !
 
+
+Glyph initialize!
--- a/Cairo__GraphicsContext.st	Tue Feb 16 07:46:52 2016 +0000
+++ b/Cairo__GraphicsContext.st	Wed Feb 17 06:43:31 2016 +0000
@@ -35,6 +35,12 @@
     "Modified: / 13-02-2016 / 16:13:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
+status
+    ^ CPrimitives cairo_status: self
+
+    "Created: / 18-02-2016 / 20:01:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 surface
     ^ surface
 ! !
@@ -254,6 +260,18 @@
 
 !GraphicsContext methodsFor:'cairo api - text'!
 
+font
+    ^ CPrimitives cairo_get_scaled_font: self
+
+    "Created: / 17-02-2016 / 21:02:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+font: scaledFont
+    CPrimitives cairo_set_scaled_font: self _: scaledFont
+
+    "Created: / 17-02-2016 / 21:01:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 font:family slant:slant weight:weight 
     ^ CPrimitives 
         cairo_select_font_face:self
@@ -264,6 +282,27 @@
     "Created: / 29-12-2014 / 01:08:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
+fontMatrix
+    | matrix |
+
+    matrix := Matrix new.
+    CPrimitives cairo_get_font_matrix: self _: matrix.
+    ^ matrix
+
+    "Created: / 18-02-2016 / 10:09:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+fontMatrix: matrix
+    "Sets the current font matrix to matrix . The font matrix gives a transformation from 
+     the design space of the font (in this space, the em-square is 1 unit by 1 unit) 
+     to user space. Normally, a simple scale is used (see #fontSize:), but a more complex 
+     font matrix can be used to shear the font or stretch it unequally along the two axes"
+
+    CPrimitives cairo_set_font_matrix: self _: matrix.
+
+    "Created: / 18-02-2016 / 10:11:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 fontSize:sz 
     ^ CPrimitives cairo_set_font_size:self _:sz asFloat
 
@@ -276,6 +315,16 @@
 
     "Created: / 23-04-2009 / 17:25:20 / Jan Vrany <vranyj1@fel.cvut.cz>"
     "Modified: / 28-12-2014 / 22:02:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+textExtents:aString
+    | extents |
+
+    extents := TextExtents new.
+    CPrimitives cairo_text_extents:self _:aString utf8Encoded _: extents.
+    ^ extents.
+
+    "Created: / 18-02-2016 / 08:55:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !GraphicsContext methodsFor:'cairo api - transformations & clipping'!
--- a/Cairo__Matrix.st	Tue Feb 16 07:46:52 2016 +0000
+++ b/Cairo__Matrix.st	Wed Feb 17 06:43:31 2016 +0000
@@ -2,7 +2,7 @@
 
 "{ NameSpace: Cairo }"
 
-ExternalStructure subclass:#Matrix
+CStructure variableByteSubclass:#Matrix
 	instanceVariableNames:''
 	classVariableNames:''
 	poolDictionaries:''
@@ -10,54 +10,53 @@
 !
 
 
-!Matrix class methodsFor:'accessing'!
-
-dllPath
+!Matrix class methodsFor:'initialization'!
 
-    OperatingSystem isMSWINDOWSlike ifTrue:[
-        ^ #( 'C:\Windows' 'C:\Windows\System32' "Wild guess, should not harm" )
-    ].
+initialize
+    "Invoked at system start or when the class is dynamically loaded."
 
-    OperatingSystem isUNIXlike ifTrue:[
-        OperatingSystem getSystemType == #linux ifTrue:[
-            | path |
-
-            path := #( '/lib' '/usr/lib' '/usr/local/lib' ).
-            (OperatingSystem getSystemInfo at:#machine) = 'x86_64' ifTrue:[
-                "If the machine is 64bit, prepend standard path for 32bit libs.
-                 Leave standard paths at the end, as the system might be completely 
-                 32bit but running on 64bit-capable CPU.
+    fields := #(
+        xx
+        yx
+        xy
+        yy
+        x0
+        y0
+    )
 
-                CAVEAT: This is bit dangerous, as on 64bit OS, if ia32 libs are
-                not installed byt 64bit sqlite libs are, then 64bit libs are found
-                and when a function is called, segfault will occur!!
+    "/ please change as required (and remove this comment)
 
-                Q: Is there a way how to figure out if the OS itself is 32bit,
-                regardles on CPU?"
-                path := #( '/lib32' '/usr/lib32' '/usr/local/lib32' ) , path.
-            ].
-            ^path
+    "Modified: / 18-02-2016 / 09:08:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!Matrix class methodsFor:'instance creation'!
 
-        ].
-    ].
-
-    self error:'Unsupported operating system'
+identity
+    | m |
 
-    "
-        SqliteLibrary dllPath
-    "
+    m := self new.
+    CPrimitives cairo_matrix_init_identity: m.
+    ^ m
 
-    "Created: / 31-08-2011 / 18:02:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Created: / 17-02-2016 / 20:14:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
-libraryName
-
-    OperatingSystem isUNIXlike ifTrue:[^'libcairo.so.2'].
+scale: aNumberOrPoint
+    | sx sy m |
+    aNumberOrPoint isPoint ifTrue:[ 
+        sx := aNumberOrPoint x asFloat.
+        sy := aNumberOrPoint y asFloat.
+    ] ifFalse:[ 
+        sx := sy := aNumberOrPoint asFloat.
+    ].
+    m := self new.
+    CPrimitives cairo_matrix_init_scale: m _: sx _: sy.    
+    ^ m.
 
-    OperatingSystem isMSWINDOWSlike ifTrue:[^'cairo.dll'].
+    "Created: / 18-02-2016 / 00:17:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
 
-    self error:'Library name for host OS is not known'
-!
+!Matrix class methodsFor:'accessing'!
 
 sizeof
     "Returns size of undelaying structure in bytes"
@@ -65,104 +64,6 @@
     ^48
 ! !
 
-!Matrix class methodsFor:'primitives'!
-
-primInit: matrix xx: xx yx: yx xy: xy yy: yy x0: x0 y0: y0 
-
-	<cdecl: const void "cairo_matrix_init" ( Cairo::Matrix double double double double double double ) >
-	self primitiveFailed
-
-    "Modified: / 10-09-2008 / 18:19:54 / Jan Vrany <vranyj1@fel.cvut.cz>"
-!
-
-primInitIdentity: matrix 
-
-	<cdecl: const void "cairo_matrix_init_identity" ( Cairo::Matrix ) >
-	self primitiveFailed
-
-    "Modified: / 10-09-2008 / 18:19:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
-!
-
-primInitRotate: matrix radians: radians 
-
-	<cdecl: const void "cairo_matrix_init_rotate" ( Cairo::Matrix double ) >
-	self primitiveFailed
-
-    "Modified: / 10-09-2008 / 18:19:54 / Jan Vrany <vranyj1@fel.cvut.cz>"
-!
-
-primInitScale: matrix sx: sx sy: sy 
-
-	<cdecl: const void "cairo_matrix_init_scale" ( Cairo::Matrix double double ) >
-	self primitiveFailed
-
-    "Modified: / 10-09-2008 / 18:19:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
-!
-
-primInitTranslate: matrix tx: tx ty: ty 
-
-	<cdecl: const void "cairo_matrix_init_translate" ( Cairo::Matrix double double ) >
-	self primitiveFailed
-
-    "Modified: / 10-09-2008 / 18:19:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
-!
-
-primInvert: matrix 
-
-	<cdecl: const int32 "cairo_matrix_invert" ( Cairo::Matrix ) >
-	self primitiveFailed
-
-    "Modified: / 10-09-2008 / 18:19:54 / Jan Vrany <vranyj1@fel.cvut.cz>"
-!
-
-primMultiply: result a: a b: b 
-
-	<cdecl: const void "cairo_matrix_multiply" ( Cairo::Matrix Cairo::Matrix Cairo::Matrix ) >
-	self primitiveFailed
-
-    "Modified: / 10-09-2008 / 18:19:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
-!
-
-primRotate: matrix radians: radians 
-
-	<cdecl: const void "cairo_matrix_rotate" ( Cairo::Matrix double ) >
-	self primitiveFailed
-
-    "Modified: / 10-09-2008 / 18:19:54 / Jan Vrany <vranyj1@fel.cvut.cz>"
-!
-
-primScale: matrix sx: sx sy: sy 
-
-	<cdecl: const void "cairo_matrix_scale" ( Cairo::Matrix double double ) >
-	self primitiveFailed
-
-    "Modified: / 10-09-2008 / 18:19:54 / Jan Vrany <vranyj1@fel.cvut.cz>"
-!
-
-primTransformDistance: matrix dx: dx dy: dy 
-
-	<cdecl: const void "cairo_matrix_transform_distance" ( Cairo::Matrix pointer pointer ) >
-	self primitiveFailed
-
-    "Modified: / 10-09-2008 / 18:19:54 / Jan Vrany <vranyj1@fel.cvut.cz>"
-!
-
-primTransformPoint: matrix x: x y: y 
-
-	<cdecl: const void "cairo_matrix_transform_point" ( Cairo::Matrix pointer pointer ) >
-	self primitiveFailed
-
-    "Modified: / 10-09-2008 / 18:19:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
-!
-
-primTranslate: matrix tx: tx ty: ty 
-
-	<cdecl: const void "cairo_matrix_translate" ( Cairo::Matrix double double ) >
-	self primitiveFailed
-
-    "Modified: / 10-09-2008 / 18:19:55 / Jan Vrany <vranyj1@fel.cvut.cz>"
-! !
-
 !Matrix methodsFor:'accessing'!
 
 x0
@@ -241,3 +142,5 @@
     ^ '$Changeset: <not expanded> $'
 ! !
 
+
+Matrix initialize!
--- a/Cairo__Rectangle.st	Tue Feb 16 07:46:52 2016 +0000
+++ b/Cairo__Rectangle.st	Wed Feb 17 06:43:31 2016 +0000
@@ -2,7 +2,7 @@
 
 "{ NameSpace: Cairo }"
 
-ExternalStructure subclass:#Rectangle
+CStructure variableByteSubclass:#Rectangle
 	instanceVariableNames:''
 	classVariableNames:''
 	poolDictionaries:''
@@ -10,6 +10,20 @@
 !
 
 
+!Rectangle class methodsFor:'initialization'!
+
+initialize
+    "Invoked at system start or when the class is dynamically loaded."
+
+    fields := #(
+    )
+
+
+    "/ please change as required (and remove this comment)
+
+    "Modified: / 18-02-2016 / 09:06:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !Rectangle class methodsFor:'accessing'!
 
 dllPath
@@ -121,3 +135,5 @@
     ^ '$Changeset: <not expanded> $'
 ! !
 
+
+Rectangle initialize!
--- a/Cairo__ScaledFont.st	Tue Feb 16 07:46:52 2016 +0000
+++ b/Cairo__ScaledFont.st	Wed Feb 17 06:43:31 2016 +0000
@@ -2,100 +2,96 @@
 
 "{ NameSpace: Cairo }"
 
-FontDescription subclass:#ScaledFont
-	instanceVariableNames:'handle device extents'
-	classVariableNames:'Lobby RecentlyUsedFonts'
+CObject subclass:#ScaledFont
+	instanceVariableNames:''
+	classVariableNames:''
 	poolDictionaries:''
 	category:'Cairo-Objects'
 !
 
 
-!ScaledFont class methodsFor:'initialization'!
+!ScaledFont class methodsFor:'instance creation'!
+
+fromFontDescription: aFontDescription
+    ^ self fromFontFace: (FontFace fromFontDescription: aFontDescription) scale: (Screen current verticalPixelPerInch / 72) * aFontDescription size.
 
-initialize
-    "Invoked at system start or when the class is dynamically loaded."
+    "
+    Cairo::ScaledFont fromFontDescription: CodeView defaultFont               
+    "
+
+    "Created: / 17-02-2016 / 20:21:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 18-02-2016 / 08:16:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+fromFontFace: face matrix: fontMatrix transformation: transformationMatrix options: options
+    ^ CPrimitives cairo_scaled_font_create: face _: fontMatrix _: transformationMatrix _: options
 
-    "/ please change as required (and remove this comment)
+    "Created: / 17-02-2016 / 20:30:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
 
-    Lobby := Registry new
+fromFontFace: face scale: scale
+    | options font |
+    options := FontOptions new.
+    font := self fromFontFace: face matrix: (Matrix scale: scale) transformation: Matrix identity options: options.
+    options release.
+    ^ font.              
+    "
+    Cairo::ScaledFont fromFontDescription: CodeView defaultFont               
+    "
 
-    "Modified: / 09-01-2015 / 11:22:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Created: / 18-02-2016 / 08:15:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 18-02-2016 / 10:17:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !ScaledFont class methodsFor:'accessing'!
 
-dllPath
-
-    OperatingSystem isMSWINDOWSlike ifTrue:[
-        ^ #( 'C:\Windows' 'C:\Windows\System32' "Wild guess, should not harm" )
-    ].
-
-    OperatingSystem isUNIXlike ifTrue:[
-        OperatingSystem getSystemType == #linux ifTrue:[
-            | path |
-
-            path := #( '/lib' '/usr/lib' '/usr/local/lib' ).
-            (OperatingSystem getSystemInfo at:#machine) = 'x86_64' ifTrue:[
-                "If the machine is 64bit, prepend standard path for 32bit libs.
-                 Leave standard paths at the end, as the system might be completely 
-                 32bit but running on 64bit-capable CPU.
-
-                CAVEAT: This is bit dangerous, as on 64bit OS, if ia32 libs are
-                not installed byt 64bit sqlite libs are, then 64bit libs are found
-                and when a function is called, segfault will occur!!
-
-                Q: Is there a way how to figure out if the OS itself is 32bit,
-                regardles on CPU?"
-                path := #( '/lib32' '/usr/lib32' '/usr/local/lib32' ) , path.
-            ].
-            ^path
-
-        ].
-    ].
-
-    self error:'Unsupported operating system'
-
-    "
-        SqliteLibrary dllPath
-    "
-
-    "Created: / 31-08-2011 / 18:02:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-libraryName
-
-    OperatingSystem isUNIXlike ifTrue:[^'libcairo.so.2'].
-
-    OperatingSystem isMSWINDOWSlike ifTrue:[^'cairo.dll'].
-
-    self error:'Library name for host OS is not known'
-!
-
 sizeof
     "Returns size of undelaying structure in bytes"
 
     ^0
 ! !
 
-!ScaledFont methodsFor:'finalization'!
+!ScaledFont methodsFor:'accessing'!
+
+fontMatrix
+    | matrix |
 
-finalization
-    self destroy
+    matrix := Matrix new.
+    CPrimitives cairo_scaled_font_get_font_matrix: self _: matrix.
+    ^ matrix
 
-    "Created: / 09-01-2015 / 10:20:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Created: / 18-02-2016 / 10:05:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
-finalizationLobby
-    "answer a Registry used for finalization.
-     Use a generic Registry for any object.
-     Subclasses using their own Registry should redefine this"
+referenceCount
+    "Return value or reference counter"
 
-    ^ Lobby
+    ^ CPrimitives cairo_scaled_font_get_reference_count: self.
 
-    "Created: / 09-01-2015 / 10:20:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 17-02-2016 / 20:16:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
-!ScaledFont methodsFor:'initialize'!
+!ScaledFont methodsFor:'cairo api'!
+
+extents
+    | extents |
+    extents := FontExtents new.
+    Cairo::CPrimitives cairo_scaled_font_extents: self _: extents.  
+    ^ extents
+
+    "Created: / 16-02-2016 / 14:56:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+textExtents: aString
+    | extents |
+    extents := TextExtents new.
+    Cairo::CPrimitives cairo_scaled_font_text_extents: self _: aString utf8Encoded _: extents.  
+    ^ extents
+
+    "Created: / 16-02-2016 / 14:56:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!ScaledFont methodsFor:'private'!
 
 destroy
     "Tell Cairo library to destroy the corresponding C object.
@@ -103,111 +99,11 @@
      refcounter goes to zero. However, after calling destroy,
      this instance should be treated as invalid."
 
-    handle notNil ifTrue:[
-        CPrimitives cairo_scaled_font_destroy: handle
-    ].
+     CPrimitives cairo_scaled_font_destroy: self.
+     self setAddress: nil.
 
     "Created: / 28-12-2014 / 22:10:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 09-01-2015 / 11:57:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-handle: anExternalAddress
-    handle := anExternalAddress.
-    CPrimitives cairo_scaled_font_reference: handle.
-    self registerForFinalization.
-    extents := FontExtents new.
-    CPrimitives cairo_scaled_font_extents: handle _: extents
-
-    "Created: / 09-01-2015 / 15:15:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-release
-    self unregisterForFinalization.
-    ^self destroy
-
-    "Created: / 28-12-2014 / 23:49:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 09-01-2015 / 10:23:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-! !
-
-!ScaledFont methodsFor:'queries-dimensions'!
-
-ascent
-    "return the ascent - the number of pixels above the baseLine."
-
-    ^ extents ascent
-
-    "Created: / 09-01-2015 / 15:33:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-descent
-    "return the descent - the number of pixels below the baseLine."
-
-    ^ extents descent
-
-    "Created: / 09-01-2015 / 15:33:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-height
-    "return the height - the number of pixels above plus below the baseLine."
-
-    ^ extents height
-
-    "Created: / 09-01-2015 / 15:33:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-isFixedWidth
-    "return true, if this is a fixed pitch font (i.e. all characters
-     are of the same width)"
-
-    ^ false
-
-    "Created: / 09-01-2015 / 15:35:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-maxAscent
-    "return the fonts maximum-ascent (i.e. the maximum of all characters);
-     That is the number of units (usually pixels) above the baseline."
-
-    ^ self ascent
-
-    "Created: / 09-01-2015 / 15:34:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-maxDescent
-    "return the fonts maximum-descent (i.e. the maximum of all characters);
-     That is the number of units (usually pixels) below the baseline."
-
-    ^ self descent
-
-    "Created: / 09-01-2015 / 15:34:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-maxWidth
-    "return the fonts maximum-width character (i.e. the maximum of all characters);
-     That is a number of units (usually pixels)."
-
-    ^ extents maxXAdvance
-
-    "Created: / 09-01-2015 / 15:35:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-widthOf:aString from:start to:stop
-    "return the width of a sub string"
-
-    | str extents width |
-
-    (start == 1 and: [ stop == aString size ]) ifTrue:[ 
-        str := aString
-    ] ifFalse:[ 
-        str := aString copyFrom: start to: stop.
-    ].
-    extents := TextExtents new.
-    Cairo::CPrimitives cairo_scaled_font_text_extents: handle _: str utf8Encoded _: extents.
-    width := extents width.
-    extents free.
-    ^ width
-
-    "Created: / 09-01-2015 / 15:28:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 17-02-2016 / 06:39:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !ScaledFont class methodsFor:'documentation'!
@@ -220,5 +116,3 @@
     ^ '$Changeset: <not expanded> $'
 ! !
 
-
-ScaledFont initialize!
--- a/Cairo__Surface.st	Tue Feb 16 07:46:52 2016 +0000
+++ b/Cairo__Surface.st	Wed Feb 17 06:43:31 2016 +0000
@@ -149,7 +149,31 @@
     "Modified: / 28-12-2014 / 21:46:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
-!Surface methodsFor:'initialization & release'!
+!Surface methodsFor:'cairo api'!
+
+finish
+
+    ^CPrimitives cairo_surface_finish: self
+
+    "Created: / 17-06-2012 / 08:49:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 28-12-2014 / 21:48:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+flush
+    "Do any pending drawing for the surface and also restore any temporary 
+     modifications cairo has made to the surface's state. This function must 
+     be called before switching from drawing on the surface with cairo to 
+     drawing on it directly with native APIs, or accessing its memory outside 
+     of Cairo. If the surface doesn't support direct access, then this function
+     does nothing."
+
+    CPrimitives cairo_surface_flush: self
+
+    "Created: / 10-07-2008 / 10:32:50 / Jan Vrany <vranyj1@fel.cvut.cz>"
+    "Modified: / 18-02-2016 / 20:15:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!Surface methodsFor:'private'!
 
 destroy
     "Tell Cairo library to destroy the corresponding C object.
@@ -162,22 +186,6 @@
 
     "Created: / 28-12-2014 / 22:10:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
     "Modified: / 13-02-2016 / 16:10:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-finish
-
-    ^CPrimitives cairo_surface_finish: self
-
-    "Created: / 17-06-2012 / 08:49:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 28-12-2014 / 21:48:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-flush
-
-    ^CPrimitives cairo_surface_flush: self
-
-    "Created: / 10-07-2008 / 10:32:50 / Jan Vrany <vranyj1@fel.cvut.cz>"
-    "Modified: / 28-12-2014 / 21:48:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !Surface methodsFor:'queries'!
--- a/Cairo__TextExtents.st	Tue Feb 16 07:46:52 2016 +0000
+++ b/Cairo__TextExtents.st	Wed Feb 17 06:43:31 2016 +0000
@@ -2,7 +2,7 @@
 
 "{ NameSpace: Cairo }"
 
-ExternalStructure subclass:#TextExtents
+CStructure variableByteSubclass:#TextExtents
 	instanceVariableNames:''
 	classVariableNames:''
 	poolDictionaries:''
@@ -10,6 +10,23 @@
 !
 
 
+!TextExtents class methodsFor:'initialization'!
+
+initialize
+    "Invoked at system start or when the class is dynamically loaded."
+
+    fields := #(
+        xBearing
+        yBearing
+        width
+        height
+        xAdvance
+        yAdvance
+    )
+
+    "Modified: / 18-02-2016 / 09:06:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !TextExtents class methodsFor:'accessing'!
 
 dllPath
@@ -143,3 +160,5 @@
     ^ '$Changeset: <not expanded> $'
 ! !
 
+
+TextExtents initialize!
--- a/Make.proto	Tue Feb 16 07:46:52 2016 +0000
+++ b/Make.proto	Wed Feb 17 06:43:31 2016 +0000
@@ -147,6 +147,7 @@
 $(OUTDIR)Cairo__Antialias.$(O) Cairo__Antialias.$(H): Cairo__Antialias.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SharedPool.$(H) $(STCHDR)
 $(OUTDIR)Cairo__CObject.$(O) Cairo__CObject.$(H): Cairo__CObject.st $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)Cairo__CPrimitives.$(O) Cairo__CPrimitives.$(H): Cairo__CPrimitives.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)Cairo__CStructure.$(O) Cairo__CStructure.$(H): Cairo__CStructure.st $(INCLUDE_TOP)/stx/libbasic/ArrayedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/ByteArray.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SequenceableCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/UninterpretedBytes.$(H) $(STCHDR)
 $(OUTDIR)Cairo__ClockView.$(O) Cairo__ClockView.$(H): Cairo__ClockView.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(STCHDR)
 $(OUTDIR)Cairo__Content.$(O) Cairo__Content.$(H): Cairo__Content.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SharedPool.$(H) $(STCHDR)
 $(OUTDIR)Cairo__Device.$(O) Cairo__Device.$(H): Cairo__Device.st $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
@@ -154,30 +155,24 @@
 $(OUTDIR)Cairo__Extend.$(O) Cairo__Extend.$(H): Cairo__Extend.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SharedPool.$(H) $(STCHDR)
 $(OUTDIR)Cairo__FillRule.$(O) Cairo__FillRule.$(H): Cairo__FillRule.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SharedPool.$(H) $(STCHDR)
 $(OUTDIR)Cairo__Filter.$(O) Cairo__Filter.$(H): Cairo__Filter.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SharedPool.$(H) $(STCHDR)
-$(OUTDIR)Cairo__FontExtents.$(O) Cairo__FontExtents.$(H): Cairo__FontExtents.st $(INCLUDE_TOP)/stx/libbasic/ArrayedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalBytes.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalStructure.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SequenceableCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/UninterpretedBytes.$(H) $(STCHDR)
-$(OUTDIR)Cairo__FontOptions.$(O) Cairo__FontOptions.$(H): Cairo__FontOptions.st $(INCLUDE_TOP)/stx/libbasic/ArrayedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalBytes.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalStructure.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SequenceableCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/UninterpretedBytes.$(H) $(STCHDR)
 $(OUTDIR)Cairo__FontSlant.$(O) Cairo__FontSlant.$(H): Cairo__FontSlant.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SharedPool.$(H) $(STCHDR)
 $(OUTDIR)Cairo__FontType.$(O) Cairo__FontType.$(H): Cairo__FontType.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SharedPool.$(H) $(STCHDR)
 $(OUTDIR)Cairo__FontWeight.$(O) Cairo__FontWeight.$(H): Cairo__FontWeight.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SharedPool.$(H) $(STCHDR)
 $(OUTDIR)Cairo__Format.$(O) Cairo__Format.$(H): Cairo__Format.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SharedPool.$(H) $(STCHDR)
-$(OUTDIR)Cairo__Glyph.$(O) Cairo__Glyph.$(H): Cairo__Glyph.st $(INCLUDE_TOP)/stx/libbasic/ArrayedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalBytes.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalStructure.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SequenceableCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/UninterpretedBytes.$(H) $(STCHDR)
 $(OUTDIR)Cairo__HintMetrics.$(O) Cairo__HintMetrics.$(H): Cairo__HintMetrics.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SharedPool.$(H) $(STCHDR)
 $(OUTDIR)Cairo__HintStyle.$(O) Cairo__HintStyle.$(H): Cairo__HintStyle.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SharedPool.$(H) $(STCHDR)
 $(OUTDIR)Cairo__LineCap.$(O) Cairo__LineCap.$(H): Cairo__LineCap.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SharedPool.$(H) $(STCHDR)
 $(OUTDIR)Cairo__LineJoin.$(O) Cairo__LineJoin.$(H): Cairo__LineJoin.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SharedPool.$(H) $(STCHDR)
-$(OUTDIR)Cairo__Matrix.$(O) Cairo__Matrix.$(H): Cairo__Matrix.st $(INCLUDE_TOP)/stx/libbasic/ArrayedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalBytes.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalStructure.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SequenceableCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/UninterpretedBytes.$(H) $(STCHDR)
 $(OUTDIR)Cairo__Operator.$(O) Cairo__Operator.$(H): Cairo__Operator.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SharedPool.$(H) $(STCHDR)
 $(OUTDIR)Cairo__Path.$(O) Cairo__Path.$(H): Cairo__Path.st $(INCLUDE_TOP)/stx/libbasic/ArrayedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalBytes.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalStructure.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SequenceableCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/UninterpretedBytes.$(H) $(STCHDR)
 $(OUTDIR)Cairo__PathData.$(O) Cairo__PathData.$(H): Cairo__PathData.st $(INCLUDE_TOP)/stx/libbasic/ArrayedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalBytes.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalStructure.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SequenceableCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/UninterpretedBytes.$(H) $(STCHDR)
 $(OUTDIR)Cairo__PathDataType.$(O) Cairo__PathDataType.$(H): Cairo__PathDataType.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SharedPool.$(H) $(STCHDR)
 $(OUTDIR)Cairo__PatternType.$(O) Cairo__PatternType.$(H): Cairo__PatternType.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SharedPool.$(H) $(STCHDR)
 $(OUTDIR)Cairo__PdfVersion.$(O) Cairo__PdfVersion.$(H): Cairo__PdfVersion.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SharedPool.$(H) $(STCHDR)
-$(OUTDIR)Cairo__Rectangle.$(O) Cairo__Rectangle.$(H): Cairo__Rectangle.st $(INCLUDE_TOP)/stx/libbasic/ArrayedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalBytes.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalStructure.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SequenceableCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/UninterpretedBytes.$(H) $(STCHDR)
 $(OUTDIR)Cairo__RectangleInt.$(O) Cairo__RectangleInt.$(H): Cairo__RectangleInt.st $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)Cairo__RectangleList.$(O) Cairo__RectangleList.$(H): Cairo__RectangleList.st $(INCLUDE_TOP)/stx/libbasic/ArrayedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalBytes.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalStructure.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SequenceableCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/UninterpretedBytes.$(H) $(STCHDR)
 $(OUTDIR)Cairo__Region.$(O) Cairo__Region.$(H): Cairo__Region.st $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)Cairo__RegionOverlap.$(O) Cairo__RegionOverlap.$(H): Cairo__RegionOverlap.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SharedPool.$(H) $(STCHDR)
-$(OUTDIR)Cairo__ScaledFont.$(O) Cairo__ScaledFont.$(H): Cairo__ScaledFont.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview/FontDescription.$(H) $(STCHDR)
 $(OUTDIR)Cairo__Status.$(O) Cairo__Status.$(H): Cairo__Status.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SharedPool.$(H) $(STCHDR)
 $(OUTDIR)Cairo__SubpixelOrder.$(O) Cairo__SubpixelOrder.$(H): Cairo__SubpixelOrder.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SharedPool.$(H) $(STCHDR)
 $(OUTDIR)Cairo__SurfaceObserverMode.$(O) Cairo__SurfaceObserverMode.$(H): Cairo__SurfaceObserverMode.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SharedPool.$(H) $(STCHDR)
@@ -185,14 +180,21 @@
 $(OUTDIR)Cairo__TextCluster.$(O) Cairo__TextCluster.$(H): Cairo__TextCluster.st $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)Cairo__TextClusterFlags.$(O) Cairo__TextClusterFlags.$(H): Cairo__TextClusterFlags.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SharedPool.$(H) $(STCHDR)
 $(OUTDIR)Cairo__TextExampleView.$(O) Cairo__TextExampleView.$(H): Cairo__TextExampleView.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(STCHDR)
-$(OUTDIR)Cairo__TextExtents.$(O) Cairo__TextExtents.$(H): Cairo__TextExtents.st $(INCLUDE_TOP)/stx/libbasic/ArrayedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalBytes.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalStructure.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SequenceableCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/UninterpretedBytes.$(H) $(STCHDR)
 $(OUTDIR)Cairo__UserDataKey.$(O) Cairo__UserDataKey.$(H): Cairo__UserDataKey.st $(INCLUDE_TOP)/stx/libbasic/ArrayedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalBytes.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalStructure.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SequenceableCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/UninterpretedBytes.$(H) $(STCHDR)
 $(OUTDIR)stx_goodies_libcairo.$(O) stx_goodies_libcairo.$(H): stx_goodies_libcairo.st $(INCLUDE_TOP)/stx/libbasic/LibraryDefinition.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/ProjectDefinition.$(H) $(STCHDR)
+$(OUTDIR)Cairo__FontExtents.$(O) Cairo__FontExtents.$(H): Cairo__FontExtents.st $(INCLUDE_TOP)/stx/goodies/libcairo/Cairo__CStructure.$(H) $(INCLUDE_TOP)/stx/libbasic/ArrayedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/ByteArray.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SequenceableCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/UninterpretedBytes.$(H) $(STCHDR)
 $(OUTDIR)Cairo__FontFace.$(O) Cairo__FontFace.$(H): Cairo__FontFace.st $(INCLUDE_TOP)/stx/goodies/libcairo/Cairo__CObject.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)Cairo__FontOptions.$(O) Cairo__FontOptions.$(H): Cairo__FontOptions.st $(INCLUDE_TOP)/stx/goodies/libcairo/Cairo__CObject.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)Cairo__Glyph.$(O) Cairo__Glyph.$(H): Cairo__Glyph.st $(INCLUDE_TOP)/stx/goodies/libcairo/Cairo__CStructure.$(H) $(INCLUDE_TOP)/stx/libbasic/ArrayedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/ByteArray.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SequenceableCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/UninterpretedBytes.$(H) $(STCHDR)
 $(OUTDIR)Cairo__GraphicsContext.$(O) Cairo__GraphicsContext.$(H): Cairo__GraphicsContext.st $(INCLUDE_TOP)/stx/goodies/libcairo/Cairo__CObject.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)Cairo__Matrix.$(O) Cairo__Matrix.$(H): Cairo__Matrix.st $(INCLUDE_TOP)/stx/goodies/libcairo/Cairo__CStructure.$(H) $(INCLUDE_TOP)/stx/libbasic/ArrayedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/ByteArray.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SequenceableCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/UninterpretedBytes.$(H) $(STCHDR)
 $(OUTDIR)Cairo__Pattern.$(O) Cairo__Pattern.$(H): Cairo__Pattern.st $(INCLUDE_TOP)/stx/goodies/libcairo/Cairo__CObject.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)Cairo__Rectangle.$(O) Cairo__Rectangle.$(H): Cairo__Rectangle.st $(INCLUDE_TOP)/stx/goodies/libcairo/Cairo__CStructure.$(H) $(INCLUDE_TOP)/stx/libbasic/ArrayedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/ByteArray.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SequenceableCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/UninterpretedBytes.$(H) $(STCHDR)
+$(OUTDIR)Cairo__ScaledFont.$(O) Cairo__ScaledFont.$(H): Cairo__ScaledFont.st $(INCLUDE_TOP)/stx/goodies/libcairo/Cairo__CObject.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)Cairo__Surface.$(O) Cairo__Surface.$(H): Cairo__Surface.st $(INCLUDE_TOP)/stx/goodies/libcairo/Cairo__CObject.$(H) $(INCLUDE_TOP)/stx/goodies/libcairo/Cairo__Format.$(H) $(INCLUDE_TOP)/stx/goodies/libcairo/Cairo__SurfaceType.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)CairoGraphicsContext.$(O) CairoGraphicsContext.$(H): CairoGraphicsContext.st $(INCLUDE_TOP)/stx/goodies/libcairo/Cairo__FontSlant.$(H) $(INCLUDE_TOP)/stx/goodies/libcairo/Cairo__FontWeight.$(H) $(INCLUDE_TOP)/stx/goodies/libcairo/Cairo__Format.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(STCHDR)
+$(OUTDIR)Cairo__TextExtents.$(O) Cairo__TextExtents.$(H): Cairo__TextExtents.st $(INCLUDE_TOP)/stx/goodies/libcairo/Cairo__CStructure.$(H) $(INCLUDE_TOP)/stx/libbasic/ArrayedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/ByteArray.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SequenceableCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/UninterpretedBytes.$(H) $(STCHDR)
+$(OUTDIR)CairoGraphicsContext.$(O) CairoGraphicsContext.$(H): CairoGraphicsContext.st $(INCLUDE_TOP)/stx/goodies/libcairo/Cairo__FontSlant.$(H) $(INCLUDE_TOP)/stx/goodies/libcairo/Cairo__FontWeight.$(H) $(INCLUDE_TOP)/stx/goodies/libcairo/Cairo__Format.$(H) $(INCLUDE_TOP)/stx/goodies/libcairo/Cairo__Status.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(STCHDR)
+$(OUTDIR)CairoScaledFont.$(O) CairoScaledFont.$(H): CairoScaledFont.st $(INCLUDE_TOP)/stx/goodies/libcairo/Cairo__FontSlant.$(H) $(INCLUDE_TOP)/stx/goodies/libcairo/Cairo__FontWeight.$(H) $(INCLUDE_TOP)/stx/goodies/libcairo/Cairo__Format.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview/FontDescription.$(H) $(STCHDR)
 $(OUTDIR)Cairo__SurfaceImage.$(O) Cairo__SurfaceImage.$(H): Cairo__SurfaceImage.st $(INCLUDE_TOP)/stx/goodies/libcairo/Cairo__CObject.$(H) $(INCLUDE_TOP)/stx/goodies/libcairo/Cairo__Surface.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)Cairo__SurfacePDF.$(O) Cairo__SurfacePDF.$(H): Cairo__SurfacePDF.st $(INCLUDE_TOP)/stx/goodies/libcairo/Cairo__CObject.$(H) $(INCLUDE_TOP)/stx/goodies/libcairo/Cairo__Surface.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)Cairo__SurfaceXlib.$(O) Cairo__SurfaceXlib.$(H): Cairo__SurfaceXlib.st $(INCLUDE_TOP)/stx/goodies/libcairo/Cairo__CObject.$(H) $(INCLUDE_TOP)/stx/goodies/libcairo/Cairo__Format.$(H) $(INCLUDE_TOP)/stx/goodies/libcairo/Cairo__Surface.$(H) $(INCLUDE_TOP)/stx/goodies/libcairo/Cairo__SurfaceType.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
--- a/Make.spec	Tue Feb 16 07:46:52 2016 +0000
+++ b/Make.spec	Wed Feb 17 06:43:31 2016 +0000
@@ -54,6 +54,7 @@
 	Cairo::Antialias \
 	Cairo::CObject \
 	Cairo::CPrimitives \
+	Cairo::CStructure \
 	Cairo::ClockView \
 	Cairo::Content \
 	Cairo::Device \
@@ -61,30 +62,24 @@
 	Cairo::Extend \
 	Cairo::FillRule \
 	Cairo::Filter \
-	Cairo::FontExtents \
-	Cairo::FontOptions \
 	Cairo::FontSlant \
 	Cairo::FontType \
 	Cairo::FontWeight \
 	Cairo::Format \
-	Cairo::Glyph \
 	Cairo::HintMetrics \
 	Cairo::HintStyle \
 	Cairo::LineCap \
 	Cairo::LineJoin \
-	Cairo::Matrix \
 	Cairo::Operator \
 	Cairo::Path \
 	Cairo::PathData \
 	Cairo::PathDataType \
 	Cairo::PatternType \
 	Cairo::PdfVersion \
-	Cairo::Rectangle \
 	Cairo::RectangleInt \
 	Cairo::RectangleList \
 	Cairo::Region \
 	Cairo::RegionOverlap \
-	Cairo::ScaledFont \
 	Cairo::Status \
 	Cairo::SubpixelOrder \
 	Cairo::SurfaceObserverMode \
@@ -92,14 +87,21 @@
 	Cairo::TextCluster \
 	Cairo::TextClusterFlags \
 	Cairo::TextExampleView \
-	Cairo::TextExtents \
 	Cairo::UserDataKey \
 	stx_goodies_libcairo \
+	Cairo::FontExtents \
 	Cairo::FontFace \
+	Cairo::FontOptions \
+	Cairo::Glyph \
 	Cairo::GraphicsContext \
+	Cairo::Matrix \
 	Cairo::Pattern \
+	Cairo::Rectangle \
+	Cairo::ScaledFont \
 	Cairo::Surface \
+	Cairo::TextExtents \
 	CairoGraphicsContext \
+	CairoScaledFont \
 	Cairo::SurfaceImage \
 	Cairo::SurfacePDF \
 	Cairo::SurfaceXlib \
@@ -111,6 +113,7 @@
     $(OUTDIR_SLASH)Cairo__Antialias.$(O) \
     $(OUTDIR_SLASH)Cairo__CObject.$(O) \
     $(OUTDIR_SLASH)Cairo__CPrimitives.$(O) \
+    $(OUTDIR_SLASH)Cairo__CStructure.$(O) \
     $(OUTDIR_SLASH)Cairo__ClockView.$(O) \
     $(OUTDIR_SLASH)Cairo__Content.$(O) \
     $(OUTDIR_SLASH)Cairo__Device.$(O) \
@@ -118,30 +121,24 @@
     $(OUTDIR_SLASH)Cairo__Extend.$(O) \
     $(OUTDIR_SLASH)Cairo__FillRule.$(O) \
     $(OUTDIR_SLASH)Cairo__Filter.$(O) \
-    $(OUTDIR_SLASH)Cairo__FontExtents.$(O) \
-    $(OUTDIR_SLASH)Cairo__FontOptions.$(O) \
     $(OUTDIR_SLASH)Cairo__FontSlant.$(O) \
     $(OUTDIR_SLASH)Cairo__FontType.$(O) \
     $(OUTDIR_SLASH)Cairo__FontWeight.$(O) \
     $(OUTDIR_SLASH)Cairo__Format.$(O) \
-    $(OUTDIR_SLASH)Cairo__Glyph.$(O) \
     $(OUTDIR_SLASH)Cairo__HintMetrics.$(O) \
     $(OUTDIR_SLASH)Cairo__HintStyle.$(O) \
     $(OUTDIR_SLASH)Cairo__LineCap.$(O) \
     $(OUTDIR_SLASH)Cairo__LineJoin.$(O) \
-    $(OUTDIR_SLASH)Cairo__Matrix.$(O) \
     $(OUTDIR_SLASH)Cairo__Operator.$(O) \
     $(OUTDIR_SLASH)Cairo__Path.$(O) \
     $(OUTDIR_SLASH)Cairo__PathData.$(O) \
     $(OUTDIR_SLASH)Cairo__PathDataType.$(O) \
     $(OUTDIR_SLASH)Cairo__PatternType.$(O) \
     $(OUTDIR_SLASH)Cairo__PdfVersion.$(O) \
-    $(OUTDIR_SLASH)Cairo__Rectangle.$(O) \
     $(OUTDIR_SLASH)Cairo__RectangleInt.$(O) \
     $(OUTDIR_SLASH)Cairo__RectangleList.$(O) \
     $(OUTDIR_SLASH)Cairo__Region.$(O) \
     $(OUTDIR_SLASH)Cairo__RegionOverlap.$(O) \
-    $(OUTDIR_SLASH)Cairo__ScaledFont.$(O) \
     $(OUTDIR_SLASH)Cairo__Status.$(O) \
     $(OUTDIR_SLASH)Cairo__SubpixelOrder.$(O) \
     $(OUTDIR_SLASH)Cairo__SurfaceObserverMode.$(O) \
@@ -149,14 +146,21 @@
     $(OUTDIR_SLASH)Cairo__TextCluster.$(O) \
     $(OUTDIR_SLASH)Cairo__TextClusterFlags.$(O) \
     $(OUTDIR_SLASH)Cairo__TextExampleView.$(O) \
-    $(OUTDIR_SLASH)Cairo__TextExtents.$(O) \
     $(OUTDIR_SLASH)Cairo__UserDataKey.$(O) \
     $(OUTDIR_SLASH)stx_goodies_libcairo.$(O) \
+    $(OUTDIR_SLASH)Cairo__FontExtents.$(O) \
     $(OUTDIR_SLASH)Cairo__FontFace.$(O) \
+    $(OUTDIR_SLASH)Cairo__FontOptions.$(O) \
+    $(OUTDIR_SLASH)Cairo__Glyph.$(O) \
     $(OUTDIR_SLASH)Cairo__GraphicsContext.$(O) \
+    $(OUTDIR_SLASH)Cairo__Matrix.$(O) \
     $(OUTDIR_SLASH)Cairo__Pattern.$(O) \
+    $(OUTDIR_SLASH)Cairo__Rectangle.$(O) \
+    $(OUTDIR_SLASH)Cairo__ScaledFont.$(O) \
     $(OUTDIR_SLASH)Cairo__Surface.$(O) \
+    $(OUTDIR_SLASH)Cairo__TextExtents.$(O) \
     $(OUTDIR_SLASH)CairoGraphicsContext.$(O) \
+    $(OUTDIR_SLASH)CairoScaledFont.$(O) \
     $(OUTDIR_SLASH)Cairo__SurfaceImage.$(O) \
     $(OUTDIR_SLASH)Cairo__SurfacePDF.$(O) \
     $(OUTDIR_SLASH)Cairo__SurfaceXlib.$(O) \
--- a/abbrev.stc	Tue Feb 16 07:46:52 2016 +0000
+++ b/abbrev.stc	Wed Feb 17 06:43:31 2016 +0000
@@ -4,6 +4,7 @@
 Cairo::Antialias Cairo__Antialias stx:goodies/libcairo 'Cairo-Constants' 0
 Cairo::CObject Cairo__CObject stx:goodies/libcairo 'Cairo-Objects' 0
 Cairo::CPrimitives Cairo__CPrimitives stx:goodies/libcairo 'Cairo-Primitives' 0
+Cairo::CStructure Cairo__CStructure stx:goodies/libcairo 'Cairo-Objects' 1
 Cairo::ClockView Cairo__ClockView stx:goodies/libcairo 'Cairo-Examples' 2
 Cairo::Content Cairo__Content stx:goodies/libcairo 'Cairo-Constants' 0
 Cairo::Device Cairo__Device stx:goodies/libcairo 'Cairo-Constants' 0
@@ -11,30 +12,24 @@
 Cairo::Extend Cairo__Extend stx:goodies/libcairo 'Cairo-Constants' 0
 Cairo::FillRule Cairo__FillRule stx:goodies/libcairo 'Cairo-Constants' 0
 Cairo::Filter Cairo__Filter stx:goodies/libcairo 'Cairo-Constants' 0
-Cairo::FontExtents Cairo__FontExtents stx:goodies/libcairo 'Cairo-Objects' 1
-Cairo::FontOptions Cairo__FontOptions stx:goodies/libcairo 'Cairo-Objects' 1
 Cairo::FontSlant Cairo__FontSlant stx:goodies/libcairo 'Cairo-Constants' 0
 Cairo::FontType Cairo__FontType stx:goodies/libcairo 'Cairo-Constants' 0
 Cairo::FontWeight Cairo__FontWeight stx:goodies/libcairo 'Cairo-Constants' 0
 Cairo::Format Cairo__Format stx:goodies/libcairo 'Cairo-Constants' 0
-Cairo::Glyph Cairo__Glyph stx:goodies/libcairo 'Cairo-Objects' 1
 Cairo::HintMetrics Cairo__HintMetrics stx:goodies/libcairo 'Cairo-Constants' 0
 Cairo::HintStyle Cairo__HintStyle stx:goodies/libcairo 'Cairo-Constants' 0
 Cairo::LineCap Cairo__LineCap stx:goodies/libcairo 'Cairo-Constants' 0
 Cairo::LineJoin Cairo__LineJoin stx:goodies/libcairo 'Cairo-Constants' 0
-Cairo::Matrix Cairo__Matrix stx:goodies/libcairo 'Cairo-Objects' 1
 Cairo::Operator Cairo__Operator stx:goodies/libcairo 'Cairo-Constants' 0
 Cairo::Path Cairo__Path stx:goodies/libcairo 'Cairo-Objects' 1
 Cairo::PathData Cairo__PathData stx:goodies/libcairo 'Cairo-Objects' 1
 Cairo::PathDataType Cairo__PathDataType stx:goodies/libcairo 'Cairo-Constants' 0
 Cairo::PatternType Cairo__PatternType stx:goodies/libcairo 'Cairo-Constants' 0
 Cairo::PdfVersion Cairo__PdfVersion stx:goodies/libcairo 'Cairo-Constants' 0
-Cairo::Rectangle Cairo__Rectangle stx:goodies/libcairo 'Cairo-Objects' 1
 Cairo::RectangleInt Cairo__RectangleInt stx:goodies/libcairo 'Cairo-Constants' 0
 Cairo::RectangleList Cairo__RectangleList stx:goodies/libcairo 'Cairo-Objects' 1
 Cairo::Region Cairo__Region stx:goodies/libcairo 'Cairo-Constants' 0
 Cairo::RegionOverlap Cairo__RegionOverlap stx:goodies/libcairo 'Cairo-Constants' 0
-Cairo::ScaledFont Cairo__ScaledFont stx:goodies/libcairo 'Cairo-Objects' 0
 Cairo::Status Cairo__Status stx:goodies/libcairo 'Cairo-Constants' 0
 Cairo::SubpixelOrder Cairo__SubpixelOrder stx:goodies/libcairo 'Cairo-Constants' 0
 Cairo::SurfaceObserverMode Cairo__SurfaceObserverMode stx:goodies/libcairo 'Cairo-Constants' 0
@@ -42,14 +37,21 @@
 Cairo::TextCluster Cairo__TextCluster stx:goodies/libcairo 'Cairo-Constants' 0
 Cairo::TextClusterFlags Cairo__TextClusterFlags stx:goodies/libcairo 'Cairo-Constants' 0
 Cairo::TextExampleView Cairo__TextExampleView stx:goodies/libcairo 'Cairo-Examples' 2
-Cairo::TextExtents Cairo__TextExtents stx:goodies/libcairo 'Cairo-Objects' 1
 Cairo::UserDataKey Cairo__UserDataKey stx:goodies/libcairo 'Cairo-Objects' 1
 stx_goodies_libcairo stx_goodies_libcairo stx:goodies/libcairo '* Projects & Packages *' 3
+Cairo::FontExtents Cairo__FontExtents stx:goodies/libcairo 'Cairo-Objects' 1
 Cairo::FontFace Cairo__FontFace stx:goodies/libcairo 'Cairo-Objects' 0
+Cairo::FontOptions Cairo__FontOptions stx:goodies/libcairo 'Cairo-Objects' 0
+Cairo::Glyph Cairo__Glyph stx:goodies/libcairo 'Cairo-Objects' 1
 Cairo::GraphicsContext Cairo__GraphicsContext stx:goodies/libcairo 'Cairo-Objects' 0
+Cairo::Matrix Cairo__Matrix stx:goodies/libcairo 'Cairo-Objects' 1
 Cairo::Pattern Cairo__Pattern stx:goodies/libcairo 'Cairo-Objects' 0
+Cairo::Rectangle Cairo__Rectangle stx:goodies/libcairo 'Cairo-Objects' 1
+Cairo::ScaledFont Cairo__ScaledFont stx:goodies/libcairo 'Cairo-Objects' 0
 Cairo::Surface Cairo__Surface stx:goodies/libcairo 'Cairo-Objects' 0
+Cairo::TextExtents Cairo__TextExtents stx:goodies/libcairo 'Cairo-Objects' 1
 CairoGraphicsContext CairoGraphicsContext stx:goodies/libcairo 'Cairo-Compatibility' 0
+CairoScaledFont CairoScaledFont stx:goodies/libcairo 'Cairo-Compatibility' 0
 Cairo::SurfaceImage Cairo__SurfaceImage stx:goodies/libcairo 'Cairo-Objects' 0
 Cairo::SurfacePDF Cairo__SurfacePDF stx:goodies/libcairo 'Cairo-Objects' 0
 Cairo::SurfaceXlib Cairo__SurfaceXlib stx:goodies/libcairo 'Cairo-Objects' 0
--- a/bc.mak	Tue Feb 16 07:46:52 2016 +0000
+++ b/bc.mak	Wed Feb 17 06:43:31 2016 +0000
@@ -72,6 +72,7 @@
 $(OUTDIR)Cairo__Antialias.$(O) Cairo__Antialias.$(H): Cairo__Antialias.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SharedPool.$(H) $(STCHDR)
 $(OUTDIR)Cairo__CObject.$(O) Cairo__CObject.$(H): Cairo__CObject.st $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)Cairo__CPrimitives.$(O) Cairo__CPrimitives.$(H): Cairo__CPrimitives.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)Cairo__CStructure.$(O) Cairo__CStructure.$(H): Cairo__CStructure.st $(INCLUDE_TOP)\stx\libbasic\ArrayedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\ByteArray.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\UninterpretedBytes.$(H) $(STCHDR)
 $(OUTDIR)Cairo__ClockView.$(O) Cairo__ClockView.$(H): Cairo__ClockView.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(STCHDR)
 $(OUTDIR)Cairo__Content.$(O) Cairo__Content.$(H): Cairo__Content.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SharedPool.$(H) $(STCHDR)
 $(OUTDIR)Cairo__Device.$(O) Cairo__Device.$(H): Cairo__Device.st $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
@@ -79,30 +80,24 @@
 $(OUTDIR)Cairo__Extend.$(O) Cairo__Extend.$(H): Cairo__Extend.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SharedPool.$(H) $(STCHDR)
 $(OUTDIR)Cairo__FillRule.$(O) Cairo__FillRule.$(H): Cairo__FillRule.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SharedPool.$(H) $(STCHDR)
 $(OUTDIR)Cairo__Filter.$(O) Cairo__Filter.$(H): Cairo__Filter.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SharedPool.$(H) $(STCHDR)
-$(OUTDIR)Cairo__FontExtents.$(O) Cairo__FontExtents.$(H): Cairo__FontExtents.st $(INCLUDE_TOP)\stx\libbasic\ArrayedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalBytes.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalStructure.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\UninterpretedBytes.$(H) $(STCHDR)
-$(OUTDIR)Cairo__FontOptions.$(O) Cairo__FontOptions.$(H): Cairo__FontOptions.st $(INCLUDE_TOP)\stx\libbasic\ArrayedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalBytes.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalStructure.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\UninterpretedBytes.$(H) $(STCHDR)
 $(OUTDIR)Cairo__FontSlant.$(O) Cairo__FontSlant.$(H): Cairo__FontSlant.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SharedPool.$(H) $(STCHDR)
 $(OUTDIR)Cairo__FontType.$(O) Cairo__FontType.$(H): Cairo__FontType.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SharedPool.$(H) $(STCHDR)
 $(OUTDIR)Cairo__FontWeight.$(O) Cairo__FontWeight.$(H): Cairo__FontWeight.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SharedPool.$(H) $(STCHDR)
 $(OUTDIR)Cairo__Format.$(O) Cairo__Format.$(H): Cairo__Format.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SharedPool.$(H) $(STCHDR)
-$(OUTDIR)Cairo__Glyph.$(O) Cairo__Glyph.$(H): Cairo__Glyph.st $(INCLUDE_TOP)\stx\libbasic\ArrayedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalBytes.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalStructure.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\UninterpretedBytes.$(H) $(STCHDR)
 $(OUTDIR)Cairo__HintMetrics.$(O) Cairo__HintMetrics.$(H): Cairo__HintMetrics.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SharedPool.$(H) $(STCHDR)
 $(OUTDIR)Cairo__HintStyle.$(O) Cairo__HintStyle.$(H): Cairo__HintStyle.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SharedPool.$(H) $(STCHDR)
 $(OUTDIR)Cairo__LineCap.$(O) Cairo__LineCap.$(H): Cairo__LineCap.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SharedPool.$(H) $(STCHDR)
 $(OUTDIR)Cairo__LineJoin.$(O) Cairo__LineJoin.$(H): Cairo__LineJoin.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SharedPool.$(H) $(STCHDR)
-$(OUTDIR)Cairo__Matrix.$(O) Cairo__Matrix.$(H): Cairo__Matrix.st $(INCLUDE_TOP)\stx\libbasic\ArrayedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalBytes.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalStructure.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\UninterpretedBytes.$(H) $(STCHDR)
 $(OUTDIR)Cairo__Operator.$(O) Cairo__Operator.$(H): Cairo__Operator.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SharedPool.$(H) $(STCHDR)
 $(OUTDIR)Cairo__Path.$(O) Cairo__Path.$(H): Cairo__Path.st $(INCLUDE_TOP)\stx\libbasic\ArrayedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalBytes.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalStructure.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\UninterpretedBytes.$(H) $(STCHDR)
 $(OUTDIR)Cairo__PathData.$(O) Cairo__PathData.$(H): Cairo__PathData.st $(INCLUDE_TOP)\stx\libbasic\ArrayedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalBytes.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalStructure.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\UninterpretedBytes.$(H) $(STCHDR)
 $(OUTDIR)Cairo__PathDataType.$(O) Cairo__PathDataType.$(H): Cairo__PathDataType.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SharedPool.$(H) $(STCHDR)
 $(OUTDIR)Cairo__PatternType.$(O) Cairo__PatternType.$(H): Cairo__PatternType.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SharedPool.$(H) $(STCHDR)
 $(OUTDIR)Cairo__PdfVersion.$(O) Cairo__PdfVersion.$(H): Cairo__PdfVersion.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SharedPool.$(H) $(STCHDR)
-$(OUTDIR)Cairo__Rectangle.$(O) Cairo__Rectangle.$(H): Cairo__Rectangle.st $(INCLUDE_TOP)\stx\libbasic\ArrayedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalBytes.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalStructure.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\UninterpretedBytes.$(H) $(STCHDR)
 $(OUTDIR)Cairo__RectangleInt.$(O) Cairo__RectangleInt.$(H): Cairo__RectangleInt.st $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)Cairo__RectangleList.$(O) Cairo__RectangleList.$(H): Cairo__RectangleList.st $(INCLUDE_TOP)\stx\libbasic\ArrayedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalBytes.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalStructure.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\UninterpretedBytes.$(H) $(STCHDR)
 $(OUTDIR)Cairo__Region.$(O) Cairo__Region.$(H): Cairo__Region.st $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)Cairo__RegionOverlap.$(O) Cairo__RegionOverlap.$(H): Cairo__RegionOverlap.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SharedPool.$(H) $(STCHDR)
-$(OUTDIR)Cairo__ScaledFont.$(O) Cairo__ScaledFont.$(H): Cairo__ScaledFont.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview\FontDescription.$(H) $(STCHDR)
 $(OUTDIR)Cairo__Status.$(O) Cairo__Status.$(H): Cairo__Status.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SharedPool.$(H) $(STCHDR)
 $(OUTDIR)Cairo__SubpixelOrder.$(O) Cairo__SubpixelOrder.$(H): Cairo__SubpixelOrder.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SharedPool.$(H) $(STCHDR)
 $(OUTDIR)Cairo__SurfaceObserverMode.$(O) Cairo__SurfaceObserverMode.$(H): Cairo__SurfaceObserverMode.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SharedPool.$(H) $(STCHDR)
@@ -110,14 +105,21 @@
 $(OUTDIR)Cairo__TextCluster.$(O) Cairo__TextCluster.$(H): Cairo__TextCluster.st $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)Cairo__TextClusterFlags.$(O) Cairo__TextClusterFlags.$(H): Cairo__TextClusterFlags.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SharedPool.$(H) $(STCHDR)
 $(OUTDIR)Cairo__TextExampleView.$(O) Cairo__TextExampleView.$(H): Cairo__TextExampleView.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(STCHDR)
-$(OUTDIR)Cairo__TextExtents.$(O) Cairo__TextExtents.$(H): Cairo__TextExtents.st $(INCLUDE_TOP)\stx\libbasic\ArrayedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalBytes.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalStructure.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\UninterpretedBytes.$(H) $(STCHDR)
 $(OUTDIR)Cairo__UserDataKey.$(O) Cairo__UserDataKey.$(H): Cairo__UserDataKey.st $(INCLUDE_TOP)\stx\libbasic\ArrayedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalBytes.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalStructure.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\UninterpretedBytes.$(H) $(STCHDR)
 $(OUTDIR)stx_goodies_libcairo.$(O) stx_goodies_libcairo.$(H): stx_goodies_libcairo.st $(INCLUDE_TOP)\stx\libbasic\LibraryDefinition.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProjectDefinition.$(H) $(STCHDR)
+$(OUTDIR)Cairo__FontExtents.$(O) Cairo__FontExtents.$(H): Cairo__FontExtents.st $(INCLUDE_TOP)\stx\goodies\libcairo\Cairo__CStructure.$(H) $(INCLUDE_TOP)\stx\libbasic\ArrayedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\ByteArray.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\UninterpretedBytes.$(H) $(STCHDR)
 $(OUTDIR)Cairo__FontFace.$(O) Cairo__FontFace.$(H): Cairo__FontFace.st $(INCLUDE_TOP)\stx\goodies\libcairo\Cairo__CObject.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)Cairo__FontOptions.$(O) Cairo__FontOptions.$(H): Cairo__FontOptions.st $(INCLUDE_TOP)\stx\goodies\libcairo\Cairo__CObject.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)Cairo__Glyph.$(O) Cairo__Glyph.$(H): Cairo__Glyph.st $(INCLUDE_TOP)\stx\goodies\libcairo\Cairo__CStructure.$(H) $(INCLUDE_TOP)\stx\libbasic\ArrayedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\ByteArray.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\UninterpretedBytes.$(H) $(STCHDR)
 $(OUTDIR)Cairo__GraphicsContext.$(O) Cairo__GraphicsContext.$(H): Cairo__GraphicsContext.st $(INCLUDE_TOP)\stx\goodies\libcairo\Cairo__CObject.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)Cairo__Matrix.$(O) Cairo__Matrix.$(H): Cairo__Matrix.st $(INCLUDE_TOP)\stx\goodies\libcairo\Cairo__CStructure.$(H) $(INCLUDE_TOP)\stx\libbasic\ArrayedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\ByteArray.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\UninterpretedBytes.$(H) $(STCHDR)
 $(OUTDIR)Cairo__Pattern.$(O) Cairo__Pattern.$(H): Cairo__Pattern.st $(INCLUDE_TOP)\stx\goodies\libcairo\Cairo__CObject.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)Cairo__Rectangle.$(O) Cairo__Rectangle.$(H): Cairo__Rectangle.st $(INCLUDE_TOP)\stx\goodies\libcairo\Cairo__CStructure.$(H) $(INCLUDE_TOP)\stx\libbasic\ArrayedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\ByteArray.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\UninterpretedBytes.$(H) $(STCHDR)
+$(OUTDIR)Cairo__ScaledFont.$(O) Cairo__ScaledFont.$(H): Cairo__ScaledFont.st $(INCLUDE_TOP)\stx\goodies\libcairo\Cairo__CObject.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)Cairo__Surface.$(O) Cairo__Surface.$(H): Cairo__Surface.st $(INCLUDE_TOP)\stx\goodies\libcairo\Cairo__CObject.$(H) $(INCLUDE_TOP)\stx\goodies\libcairo\Cairo__Format.$(H) $(INCLUDE_TOP)\stx\goodies\libcairo\Cairo__SurfaceType.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)CairoGraphicsContext.$(O) CairoGraphicsContext.$(H): CairoGraphicsContext.st $(INCLUDE_TOP)\stx\goodies\libcairo\Cairo__FontSlant.$(H) $(INCLUDE_TOP)\stx\goodies\libcairo\Cairo__FontWeight.$(H) $(INCLUDE_TOP)\stx\goodies\libcairo\Cairo__Format.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(STCHDR)
+$(OUTDIR)Cairo__TextExtents.$(O) Cairo__TextExtents.$(H): Cairo__TextExtents.st $(INCLUDE_TOP)\stx\goodies\libcairo\Cairo__CStructure.$(H) $(INCLUDE_TOP)\stx\libbasic\ArrayedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\ByteArray.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\UninterpretedBytes.$(H) $(STCHDR)
+$(OUTDIR)CairoGraphicsContext.$(O) CairoGraphicsContext.$(H): CairoGraphicsContext.st $(INCLUDE_TOP)\stx\goodies\libcairo\Cairo__FontSlant.$(H) $(INCLUDE_TOP)\stx\goodies\libcairo\Cairo__FontWeight.$(H) $(INCLUDE_TOP)\stx\goodies\libcairo\Cairo__Format.$(H) $(INCLUDE_TOP)\stx\goodies\libcairo\Cairo__Status.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(STCHDR)
+$(OUTDIR)CairoScaledFont.$(O) CairoScaledFont.$(H): CairoScaledFont.st $(INCLUDE_TOP)\stx\goodies\libcairo\Cairo__FontSlant.$(H) $(INCLUDE_TOP)\stx\goodies\libcairo\Cairo__FontWeight.$(H) $(INCLUDE_TOP)\stx\goodies\libcairo\Cairo__Format.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview\FontDescription.$(H) $(STCHDR)
 $(OUTDIR)Cairo__SurfaceImage.$(O) Cairo__SurfaceImage.$(H): Cairo__SurfaceImage.st $(INCLUDE_TOP)\stx\goodies\libcairo\Cairo__CObject.$(H) $(INCLUDE_TOP)\stx\goodies\libcairo\Cairo__Surface.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)Cairo__SurfacePDF.$(O) Cairo__SurfacePDF.$(H): Cairo__SurfacePDF.st $(INCLUDE_TOP)\stx\goodies\libcairo\Cairo__CObject.$(H) $(INCLUDE_TOP)\stx\goodies\libcairo\Cairo__Surface.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)Cairo__SurfaceXlib.$(O) Cairo__SurfaceXlib.$(H): Cairo__SurfaceXlib.st $(INCLUDE_TOP)\stx\goodies\libcairo\Cairo__CObject.$(H) $(INCLUDE_TOP)\stx\goodies\libcairo\Cairo__Format.$(H) $(INCLUDE_TOP)\stx\goodies\libcairo\Cairo__Surface.$(H) $(INCLUDE_TOP)\stx\goodies\libcairo\Cairo__SurfaceType.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
--- a/libInit.cc	Tue Feb 16 07:46:52 2016 +0000
+++ b/libInit.cc	Wed Feb 17 06:43:31 2016 +0000
@@ -30,6 +30,7 @@
 _Cairo__Antialias_Init(pass,__pRT__,snd);
 _Cairo__CObject_Init(pass,__pRT__,snd);
 _Cairo__CPrimitives_Init(pass,__pRT__,snd);
+_Cairo__CStructure_Init(pass,__pRT__,snd);
 _Cairo__ClockView_Init(pass,__pRT__,snd);
 _Cairo__Content_Init(pass,__pRT__,snd);
 _Cairo__Device_Init(pass,__pRT__,snd);
@@ -37,30 +38,24 @@
 _Cairo__Extend_Init(pass,__pRT__,snd);
 _Cairo__FillRule_Init(pass,__pRT__,snd);
 _Cairo__Filter_Init(pass,__pRT__,snd);
-_Cairo__FontExtents_Init(pass,__pRT__,snd);
-_Cairo__FontOptions_Init(pass,__pRT__,snd);
 _Cairo__FontSlant_Init(pass,__pRT__,snd);
 _Cairo__FontType_Init(pass,__pRT__,snd);
 _Cairo__FontWeight_Init(pass,__pRT__,snd);
 _Cairo__Format_Init(pass,__pRT__,snd);
-_Cairo__Glyph_Init(pass,__pRT__,snd);
 _Cairo__HintMetrics_Init(pass,__pRT__,snd);
 _Cairo__HintStyle_Init(pass,__pRT__,snd);
 _Cairo__LineCap_Init(pass,__pRT__,snd);
 _Cairo__LineJoin_Init(pass,__pRT__,snd);
-_Cairo__Matrix_Init(pass,__pRT__,snd);
 _Cairo__Operator_Init(pass,__pRT__,snd);
 _Cairo__Path_Init(pass,__pRT__,snd);
 _Cairo__PathData_Init(pass,__pRT__,snd);
 _Cairo__PathDataType_Init(pass,__pRT__,snd);
 _Cairo__PatternType_Init(pass,__pRT__,snd);
 _Cairo__PdfVersion_Init(pass,__pRT__,snd);
-_Cairo__Rectangle_Init(pass,__pRT__,snd);
 _Cairo__RectangleInt_Init(pass,__pRT__,snd);
 _Cairo__RectangleList_Init(pass,__pRT__,snd);
 _Cairo__Region_Init(pass,__pRT__,snd);
 _Cairo__RegionOverlap_Init(pass,__pRT__,snd);
-_Cairo__ScaledFont_Init(pass,__pRT__,snd);
 _Cairo__Status_Init(pass,__pRT__,snd);
 _Cairo__SubpixelOrder_Init(pass,__pRT__,snd);
 _Cairo__SurfaceObserverMode_Init(pass,__pRT__,snd);
@@ -68,14 +63,21 @@
 _Cairo__TextCluster_Init(pass,__pRT__,snd);
 _Cairo__TextClusterFlags_Init(pass,__pRT__,snd);
 _Cairo__TextExampleView_Init(pass,__pRT__,snd);
-_Cairo__TextExtents_Init(pass,__pRT__,snd);
 _Cairo__UserDataKey_Init(pass,__pRT__,snd);
 _stx_137goodies_137libcairo_Init(pass,__pRT__,snd);
+_Cairo__FontExtents_Init(pass,__pRT__,snd);
 _Cairo__FontFace_Init(pass,__pRT__,snd);
+_Cairo__FontOptions_Init(pass,__pRT__,snd);
+_Cairo__Glyph_Init(pass,__pRT__,snd);
 _Cairo__GraphicsContext_Init(pass,__pRT__,snd);
+_Cairo__Matrix_Init(pass,__pRT__,snd);
 _Cairo__Pattern_Init(pass,__pRT__,snd);
+_Cairo__Rectangle_Init(pass,__pRT__,snd);
+_Cairo__ScaledFont_Init(pass,__pRT__,snd);
 _Cairo__Surface_Init(pass,__pRT__,snd);
+_Cairo__TextExtents_Init(pass,__pRT__,snd);
 _CairoGraphicsContext_Init(pass,__pRT__,snd);
+_CairoScaledFont_Init(pass,__pRT__,snd);
 _Cairo__SurfaceImage_Init(pass,__pRT__,snd);
 _Cairo__SurfacePDF_Init(pass,__pRT__,snd);
 _Cairo__SurfaceXlib_Init(pass,__pRT__,snd);
--- a/stx_goodies_libcairo.st	Tue Feb 16 07:46:52 2016 +0000
+++ b/stx_goodies_libcairo.st	Wed Feb 17 06:43:31 2016 +0000
@@ -30,7 +30,7 @@
      by searching along the inheritance chain of all of my classes."
 
     ^ #(
-        #'stx:libbasic'    "ArrayedCollection - superclass of Cairo::FontExtents"
+        #'stx:libbasic'    "ArrayedCollection - superclass of Cairo::CStructure"
         #'stx:libview'    "DeviceGraphicsContext - extended"
     )
 !
@@ -120,6 +120,7 @@
         #'Cairo::Antialias'
         #'Cairo::CObject'
         #'Cairo::CPrimitives'
+        #'Cairo::CStructure'
         #'Cairo::ClockView'
         #'Cairo::Content'
         #'Cairo::Device'
@@ -127,30 +128,24 @@
         #'Cairo::Extend'
         #'Cairo::FillRule'
         #'Cairo::Filter'
-        #'Cairo::FontExtents'
-        #'Cairo::FontOptions'
         #'Cairo::FontSlant'
         #'Cairo::FontType'
         #'Cairo::FontWeight'
         #'Cairo::Format'
-        #'Cairo::Glyph'
         #'Cairo::HintMetrics'
         #'Cairo::HintStyle'
         #'Cairo::LineCap'
         #'Cairo::LineJoin'
-        #'Cairo::Matrix'
         #'Cairo::Operator'
         #'Cairo::Path'
         #'Cairo::PathData'
         #'Cairo::PathDataType'
         #'Cairo::PatternType'
         #'Cairo::PdfVersion'
-        #'Cairo::Rectangle'
         #'Cairo::RectangleInt'
         #'Cairo::RectangleList'
         #'Cairo::Region'
         #'Cairo::RegionOverlap'
-        #'Cairo::ScaledFont'
         #'Cairo::Status'
         #'Cairo::SubpixelOrder'
         #'Cairo::SurfaceObserverMode'
@@ -158,14 +153,21 @@
         #'Cairo::TextCluster'
         #'Cairo::TextClusterFlags'
         #'Cairo::TextExampleView'
-        #'Cairo::TextExtents'
         #'Cairo::UserDataKey'
         #'stx_goodies_libcairo'
+        #'Cairo::FontExtents'
         #'Cairo::FontFace'
+        #'Cairo::FontOptions'
+        #'Cairo::Glyph'
         #'Cairo::GraphicsContext'
+        #'Cairo::Matrix'
         #'Cairo::Pattern'
+        #'Cairo::Rectangle'
+        #'Cairo::ScaledFont'
         #'Cairo::Surface'
+        #'Cairo::TextExtents'
         CairoGraphicsContext
+        CairoScaledFont
         #'Cairo::SurfaceImage'
         #'Cairo::SurfacePDF'
         #'Cairo::SurfaceXlib'