Use Cairo's toy text API for text rendering.
authorJan Vrany <jan.vrany@fit.cvut.cz>
Fri, 09 Jan 2015 16:15:59 +0000
changeset 34 97705b5a9411
parent 33 8a2e438b4363
child 35 395689a88b32
Use Cairo's toy text API for text rendering.
Cairo__CPrimitives.st
Cairo__FontSlant.st
Cairo__FontWeight.st
Cairo__GraphicsContext.st
Cairo__Region.st
Cairo__ScaledFont.st
Make.proto
Make.spec
bc.mak
libInit.cc
libcairo.rc
--- a/Cairo__CPrimitives.st	Wed Jan 07 21:49:27 2015 +0100
+++ b/Cairo__CPrimitives.st	Fri Jan 09 16:15:59 2015 +0000
@@ -530,7 +530,7 @@
 
 cairo_get_scaled_font: cr
 
-    <cdecl: Cairo::ScaledFont "cairo_get_scaled_font" ( handle ) >
+    <cdecl: handle "cairo_get_scaled_font" ( handle ) >
     self primitiveFailed
 !
 
@@ -1382,103 +1382,103 @@
 
 cairo_scaled_font_create: font_face _: font_matrix _: ctm _: options
 
-    <cdecl: Cairo::ScaledFont "cairo_scaled_font_create" ( Cairo::FontFace Cairo::Matrix Cairo::Matrix Cairo::FontOptions ) >
+    <cdecl: handle "cairo_scaled_font_create" ( Cairo::FontFace Cairo::Matrix Cairo::Matrix Cairo::FontOptions ) >
     self primitiveFailed
 !
 
 cairo_scaled_font_destroy: scaled_font
 
-    <cdecl: void "cairo_scaled_font_destroy" ( Cairo::ScaledFont ) >
+    <cdecl: void "cairo_scaled_font_destroy" ( handle ) >
     self primitiveFailed
 !
 
 cairo_scaled_font_extents: scaled_font _: extents
 
-    <cdecl: void "cairo_scaled_font_extents" ( Cairo::ScaledFont Cairo::FontExtents ) >
+    <cdecl: void "cairo_scaled_font_extents" ( handle Cairo::FontExtents ) >
     self primitiveFailed
 !
 
 cairo_scaled_font_get_ctm: scaled_font _: ctm
 
-    <cdecl: void "cairo_scaled_font_get_ctm" ( Cairo::ScaledFont Cairo::Matrix ) >
+    <cdecl: void "cairo_scaled_font_get_ctm" ( handle Cairo::Matrix ) >
     self primitiveFailed
 !
 
 cairo_scaled_font_get_font_face: scaled_font
 
-    <cdecl: Cairo::FontFace "cairo_scaled_font_get_font_face" ( Cairo::ScaledFont ) >
+    <cdecl: Cairo::FontFace "cairo_scaled_font_get_font_face" ( handle ) >
     self primitiveFailed
 !
 
 cairo_scaled_font_get_font_matrix: scaled_font _: font_matrix
 
-    <cdecl: void "cairo_scaled_font_get_font_matrix" ( Cairo::ScaledFont Cairo::Matrix ) >
+    <cdecl: void "cairo_scaled_font_get_font_matrix" ( handle Cairo::Matrix ) >
     self primitiveFailed
 !
 
 cairo_scaled_font_get_font_options: scaled_font _: options
 
-    <cdecl: void "cairo_scaled_font_get_font_options" ( Cairo::ScaledFont Cairo::FontOptions ) >
+    <cdecl: void "cairo_scaled_font_get_font_options" ( handle Cairo::FontOptions ) >
     self primitiveFailed
 !
 
 cairo_scaled_font_get_reference_count: scaled_font
 
-    <cdecl: uint32 "cairo_scaled_font_get_reference_count" ( Cairo::ScaledFont ) >
+    <cdecl: uint32 "cairo_scaled_font_get_reference_count" ( handle ) >
     self primitiveFailed
 !
 
 cairo_scaled_font_get_scale_matrix: scaled_font _: scale_matrix
 
-    <cdecl: void "cairo_scaled_font_get_scale_matrix" ( Cairo::ScaledFont Cairo::Matrix ) >
+    <cdecl: void "cairo_scaled_font_get_scale_matrix" ( handle Cairo::Matrix ) >
     self primitiveFailed
 !
 
 cairo_scaled_font_get_type: scaled_font
 
-    <cdecl: int32 "cairo_scaled_font_get_type" ( Cairo::ScaledFont ) >
+    <cdecl: int32 "cairo_scaled_font_get_type" ( handle ) >
     self primitiveFailed
 !
 
 cairo_scaled_font_get_user_data: scaled_font _: key
 
-    <cdecl: voidPointer "cairo_scaled_font_get_user_data" ( Cairo::ScaledFont Cairo::UserDataKey ) >
+    <cdecl: voidPointer "cairo_scaled_font_get_user_data" ( handle Cairo::UserDataKey ) >
     self primitiveFailed
 !
 
 cairo_scaled_font_glyph_extents: scaled_font _: glyphs _: num_glyphs _: extents
 
-    <cdecl: void "cairo_scaled_font_glyph_extents" ( Cairo::ScaledFont Cairo::Glyph int32 Cairo::TextExtents ) >
+    <cdecl: void "cairo_scaled_font_glyph_extents" ( handle Cairo::Glyph int32 Cairo::TextExtents ) >
     self primitiveFailed
 !
 
 cairo_scaled_font_reference: scaled_font
 
-    <cdecl: Cairo::ScaledFont "cairo_scaled_font_reference" ( Cairo::ScaledFont ) >
+    <cdecl: handle "cairo_scaled_font_reference" ( handle ) >
     self primitiveFailed
 !
 
 cairo_scaled_font_set_user_data: scaled_font _: key _: user_data _: destroy
 
-    <cdecl: int32 "cairo_scaled_font_set_user_data" ( Cairo::ScaledFont Cairo::UserDataKey voidPointer pointer ) >
+    <cdecl: int32 "cairo_scaled_font_set_user_data" ( handle Cairo::UserDataKey voidPointer pointer ) >
     self primitiveFailed
 !
 
 cairo_scaled_font_status: scaled_font
 
-    <cdecl: int32 "cairo_scaled_font_status" ( Cairo::ScaledFont ) >
+    <cdecl: int32 "cairo_scaled_font_status" ( handle ) >
     self primitiveFailed
 !
 
 cairo_scaled_font_text_extents: scaled_font _: utf8 _: extents
 
-    <cdecl: void "cairo_scaled_font_text_extents" ( Cairo::ScaledFont charPointer Cairo::TextExtents ) >
+    <cdecl: void "cairo_scaled_font_text_extents" ( handle charPointer Cairo::TextExtents ) >
     self primitiveFailed
 !
 
 cairo_scaled_font_text_to_glyphs: scaled_font _: x _: y _: utf8 _: utf8_len _: glyphs _: num_glyphs _: clusters _: num_clusters _: cluster_flags
 
-    <cdecl: int32 "cairo_scaled_font_text_to_glyphs" ( Cairo::ScaledFont double double charPointer int32 pointer int32Pointer pointer int32Pointer intPointer ) >
+    <cdecl: int32 "cairo_scaled_font_text_to_glyphs" ( handle double double charPointer int32 pointer int32Pointer pointer int32Pointer intPointer ) >
     self primitiveFailed
 !
 
@@ -1568,7 +1568,7 @@
 
 cairo_set_scaled_font: cr _: scaled_font
 
-    <cdecl: void "cairo_set_scaled_font" ( handle Cairo::ScaledFont ) >
+    <cdecl: void "cairo_set_scaled_font" ( handle handle ) >
     self primitiveFailed
 !
 
--- a/Cairo__FontSlant.st	Wed Jan 07 21:49:27 2015 +0100
+++ b/Cairo__FontSlant.st	Fri Jan 09 16:15:59 2015 +0000
@@ -5,7 +5,7 @@
 SharedPool subclass:#FontSlant
 	instanceVariableNames:''
 	classVariableNames:'CAIRO_FONT_SLANT_NORMAL CAIRO_FONT_SLANT_ITALIC
-		CAIRO_FONT_SLANT_OBLIQUE'
+		CAIRO_FONT_SLANT_OBLIQUE SymbolicFontSlantToCairoFontSlantMap'
 	poolDictionaries:''
 	category:'Cairo-Constants'
 !
@@ -17,6 +17,14 @@
     CAIRO_FONT_SLANT_NORMAL := 0.
     CAIRO_FONT_SLANT_ITALIC := 1.
     CAIRO_FONT_SLANT_OBLIQUE := 2.
+
+    SymbolicFontSlantToCairoFontSlantMap := Dictionary new.
+    SymbolicFontSlantToCairoFontSlantMap at: 'roman' put: CAIRO_FONT_SLANT_NORMAL.
+    SymbolicFontSlantToCairoFontSlantMap at: 'normal' put: CAIRO_FONT_SLANT_NORMAL.
+    SymbolicFontSlantToCairoFontSlantMap at: 'italic' put: CAIRO_FONT_SLANT_ITALIC.
+    SymbolicFontSlantToCairoFontSlantMap at: 'obligue' put: CAIRO_FONT_SLANT_OBLIQUE.
+
+    "Modified: / 09-01-2015 / 15:12:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !FontSlant class methodsFor:'constants'!
--- a/Cairo__FontWeight.st	Wed Jan 07 21:49:27 2015 +0100
+++ b/Cairo__FontWeight.st	Fri Jan 09 16:15:59 2015 +0000
@@ -4,7 +4,8 @@
 
 SharedPool subclass:#FontWeight
 	instanceVariableNames:''
-	classVariableNames:'CAIRO_FONT_WEIGHT_NORMAL CAIRO_FONT_WEIGHT_BOLD'
+	classVariableNames:'CAIRO_FONT_WEIGHT_NORMAL CAIRO_FONT_WEIGHT_BOLD
+		SymbolicFontFaceToCairoFontWeightMap'
 	poolDictionaries:''
 	category:'Cairo-Constants'
 !
@@ -15,6 +16,14 @@
 
     CAIRO_FONT_WEIGHT_NORMAL := 0.
     CAIRO_FONT_WEIGHT_BOLD := 1.
+
+    SymbolicFontFaceToCairoFontWeightMap := Dictionary new.
+    SymbolicFontFaceToCairoFontWeightMap at: 'normal' put: CAIRO_FONT_WEIGHT_NORMAL.
+    SymbolicFontFaceToCairoFontWeightMap at: 'regular' put: CAIRO_FONT_WEIGHT_NORMAL.
+    SymbolicFontFaceToCairoFontWeightMap at: 'medium' put: CAIRO_FONT_WEIGHT_NORMAL.
+    SymbolicFontFaceToCairoFontWeightMap at: 'bolf' put: CAIRO_FONT_WEIGHT_BOLD
+
+    "Modified: / 09-01-2015 / 15:23:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !FontWeight class methodsFor:'constants'!
--- a/Cairo__GraphicsContext.st	Wed Jan 07 21:49:27 2015 +0100
+++ b/Cairo__GraphicsContext.st	Fri Jan 09 16:15:59 2015 +0000
@@ -4,7 +4,7 @@
 
 Smalltalk::GraphicsContext subclass:#GraphicsContext
 	instanceVariableNames:'handle surface'
-	classVariableNames:'Lobby SymbolicFontSlantToCairoFontSlantMap'
+	classVariableNames:'Lobby'
 	poolDictionaries:'Cairo::FontSlant Cairo::FontWeight Cairo::Format'
 	category:'Cairo-Objects'
 !
@@ -19,11 +19,7 @@
 
     Lobby := Registry new.
 
-    SymbolicFontSlantToCairoFontSlantMap := Dictionary new.
-    SymbolicFontSlantToCairoFontSlantMap at: 'normal' put: CAIRO_FONT_SLANT_NORMAL.
-    SymbolicFontSlantToCairoFontSlantMap at: 'italic' put: CAIRO_FONT_SLANT_ITALIC.
-
-    "Modified: / 29-12-2014 / 01:06:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 09-01-2015 / 15:08:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !GraphicsContext class methodsFor:'instance creation'!
@@ -141,21 +137,26 @@
 !
 
 font:aFont
-    | family slant weight |
+    | dfont family slant psize weight |
+
+    dfont := aFont onDevice: device.
 
-    font := aFont onDevice: device.
-    aFont isAlienFont ifTrue:[ 
+    family := dfont family.
+    slant := SymbolicFontSlantToCairoFontSlantMap at: (dfont style ? 'roman'). 
+    weight := SymbolicFontFaceToCairoFontWeightMap at: (dfont face ? 'regular').
+
+    self font: family slant: slant weight: weight.
 
-    ] ifFalse:[ 
-        family := font family.
-        slant := SymbolicFontSlantToCairoFontSlantMap at: font style ifAbsent:[ CAIRO_FONT_SLANT_NORMAL ].
-        weight := CAIRO_FONT_WEIGHT_NORMAL.
+    psize := dfont pixelSize.
+    psize isNil ifTrue:[ 
+        psize := (self device verticalPixelPerInch / 72) * dfont size.
+    ].
+    self fontSize: psize .
 
-        self font: family slant: slant weight: weight.
-        self fontSize: font size.
-    ]
+    font := ScaledFont family: dfont family face: dfont face style: dfont style size: dfont size.
+    font handle: (CPrimitives cairo_get_scaled_font: handle).
 
-    "Modified: / 02-01-2015 / 12:34:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 09-01-2015 / 15:43:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 function:aFunctionSymbol
@@ -234,7 +235,7 @@
     ].
 
     "Created: / 01-01-2015 / 12:07:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 07-01-2015 / 11:58:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 09-01-2015 / 16:15:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !GraphicsContext methodsFor:'basic drawing'!
@@ -276,12 +277,6 @@
     "Modified: / 29-12-2014 / 01:18:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
-displayOpaqueString:aString from:index1 to:index2 x:x y:y
-    "draw part of a string with both fg and bg at x/y in current font"
-
-    ^ self shouldImplement
-!
-
 displayOpaqueString:aString from:index1 to:index2 x:x y:y maxWitdh:maxWidth
     "draw part of a string with both fg and bg at x/y in current font"
 
@@ -315,20 +310,16 @@
 displayString:aString from:index1 to:index2 x:x y:y
     "draw part of a string with fg at x/y in current font"
 
-    font isAlienFont ifTrue:[ 
-        font displayString:aString from:index1 to:index2 x:x y:y in:self.  
-    ] ifFalse:[  
-        self save.
-        self moveToX: x y: y.
-        (index1 == 1 and:[ index2 == aString size ]) ifTrue:[ 
-            self showText: aString
-        ] ifFalse:[ 
-            self showText: (aString copyFrom: index1 to: index2).
-        ].
-        self restore.
-    ]
+    self save.
+    self moveToX: x y: y.
+    (index1 == 1 and:[ index2 == aString size ]) ifTrue:[ 
+        self showText: aString
+    ] ifFalse:[ 
+        self showText: (aString copyFrom: index1 to: index2).
+    ].
+    self restore.
 
-    "Modified: / 02-01-2015 / 12:36:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 09-01-2015 / 15:21:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !GraphicsContext methodsFor:'basic filling'!
@@ -683,6 +674,24 @@
     "Created: / 07-01-2015 / 21:33:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+!GraphicsContext methodsFor:'finalization'!
+
+finalization
+    self destroy
+
+    "Created: / 09-01-2015 / 10:20:47 / 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"
+
+    ^ Lobby
+
+    "Created: / 09-01-2015 / 10:20:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !GraphicsContext methodsFor:'initialize & release'!
 
 destroy
@@ -703,15 +712,18 @@
     self lineWidth: 1.
     self initialize.
     self font: font.
+    self registerForFinalization
 
     "Created: / 28-12-2014 / 23:52:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 02-01-2015 / 00:20:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 09-01-2015 / 10:20:55 / 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>"
 ! !
 
 !GraphicsContext class methodsFor:'documentation'!
--- a/Cairo__Region.st	Wed Jan 07 21:49:27 2015 +0100
+++ b/Cairo__Region.st	Fri Jan 09 16:15:59 2015 +0000
@@ -9,6 +9,7 @@
 	category:'Cairo-Constants'
 !
 
+
 !Region class methodsFor:'accessing'!
 
 libraryName
@@ -26,3 +27,10 @@
     ^0
 ! !
 
+!Region class methodsFor:'documentation'!
+
+version_HG
+
+    ^ '$Changeset: <not expanded> $'
+! !
+
--- a/Cairo__ScaledFont.st	Wed Jan 07 21:49:27 2015 +0100
+++ b/Cairo__ScaledFont.st	Fri Jan 09 16:15:59 2015 +0000
@@ -2,14 +2,26 @@
 
 "{ NameSpace: Cairo }"
 
-CObject subclass:#ScaledFont
-	instanceVariableNames:''
-	classVariableNames:''
+FontDescription subclass:#ScaledFont
+	instanceVariableNames:'handle device extents'
+	classVariableNames:'Lobby RecentlyUsedFonts'
 	poolDictionaries:''
 	category:'Cairo-Objects'
 !
 
 
+!ScaledFont 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>"
+! !
+
 !ScaledFont class methodsFor:'accessing'!
 
 dllPath
@@ -65,6 +77,139 @@
     ^0
 ! !
 
+!ScaledFont methodsFor:'finalization'!
+
+finalization
+    self destroy
+
+    "Created: / 09-01-2015 / 10:20:47 / 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"
+
+    ^ Lobby
+
+    "Created: / 09-01-2015 / 10:20:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!ScaledFont methodsFor:'initialize'!
+
+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."
+
+    handle notNil ifTrue:[
+        CPrimitives cairo_scaled_font_destroy: handle
+    ].
+
+    "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>"
+! !
+
 !ScaledFont class methodsFor:'documentation'!
 
 version
@@ -75,3 +220,5 @@
     ^ '$Changeset: <not expanded> $'
 ! !
 
+
+ScaledFont initialize!
--- a/Make.proto	Wed Jan 07 21:49:27 2015 +0100
+++ b/Make.proto	Fri Jan 09 16:15:59 2015 +0000
@@ -178,6 +178,7 @@
 $(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)
@@ -191,7 +192,6 @@
 $(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__GraphicsContext.$(O) Cairo__GraphicsContext.$(H): Cairo__GraphicsContext.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/GraphicsContext.$(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__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)extensions.$(O): extensions.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview/DeviceGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/DeviceWorkstation.$(H) $(INCLUDE_TOP)/stx/libview/DisplaySurface.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsDevice.$(H) $(INCLUDE_TOP)/stx/libview/GraphicsMedium.$(H) $(INCLUDE_TOP)/stx/libview/HostGraphicsDevice.$(H) $(INCLUDE_TOP)/stx/libview/Image.$(H) $(INCLUDE_TOP)/stx/libview/SimpleView.$(H) $(INCLUDE_TOP)/stx/libview/XGraphicsContext.$(H) $(INCLUDE_TOP)/stx/libview/XWorkstation.$(H) $(STCHDR)
 
--- a/Make.spec	Wed Jan 07 21:49:27 2015 +0100
+++ b/Make.spec	Fri Jan 09 16:15:59 2015 +0000
@@ -85,6 +85,7 @@
 	Cairo::RectangleList \
 	Cairo::Region \
 	Cairo::RegionOverlap \
+	Cairo::ScaledFont \
 	Cairo::Status \
 	Cairo::SubpixelOrder \
 	Cairo::SurfaceObserverMode \
@@ -98,7 +99,6 @@
 	Cairo::FontFace \
 	Cairo::GraphicsContext \
 	Cairo::Pattern \
-	Cairo::ScaledFont \
 	Cairo::Surface \
 
 
@@ -139,6 +139,7 @@
     $(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) \
@@ -152,7 +153,6 @@
     $(OUTDIR_SLASH)Cairo__FontFace.$(O) \
     $(OUTDIR_SLASH)Cairo__GraphicsContext.$(O) \
     $(OUTDIR_SLASH)Cairo__Pattern.$(O) \
-    $(OUTDIR_SLASH)Cairo__ScaledFont.$(O) \
     $(OUTDIR_SLASH)Cairo__Surface.$(O) \
     $(OUTDIR_SLASH)extensions.$(O) \
 
--- a/bc.mak	Wed Jan 07 21:49:27 2015 +0100
+++ b/bc.mak	Fri Jan 09 16:15:59 2015 +0000
@@ -103,6 +103,7 @@
 $(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)
@@ -116,7 +117,6 @@
 $(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__GraphicsContext.$(O) Cairo__GraphicsContext.$(H): Cairo__GraphicsContext.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\GraphicsContext.$(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__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)extensions.$(O): extensions.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview\DeviceGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\DeviceWorkstation.$(H) $(INCLUDE_TOP)\stx\libview\DisplaySurface.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsDevice.$(H) $(INCLUDE_TOP)\stx\libview\GraphicsMedium.$(H) $(INCLUDE_TOP)\stx\libview\HostGraphicsDevice.$(H) $(INCLUDE_TOP)\stx\libview\Image.$(H) $(INCLUDE_TOP)\stx\libview\SimpleView.$(H) $(INCLUDE_TOP)\stx\libview\XGraphicsContext.$(H) $(INCLUDE_TOP)\stx\libview\XWorkstation.$(H) $(STCHDR)
 
--- a/libInit.cc	Wed Jan 07 21:49:27 2015 +0100
+++ b/libInit.cc	Fri Jan 09 16:15:59 2015 +0000
@@ -61,6 +61,7 @@
 _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);
@@ -74,7 +75,6 @@
 _Cairo__FontFace_Init(pass,__pRT__,snd);
 _Cairo__GraphicsContext_Init(pass,__pRT__,snd);
 _Cairo__Pattern_Init(pass,__pRT__,snd);
-_Cairo__ScaledFont_Init(pass,__pRT__,snd);
 _Cairo__Surface_Init(pass,__pRT__,snd);
 
 _stx_137goodies_137libcairo_extensions_Init(pass,__pRT__,snd);
--- a/libcairo.rc	Wed Jan 07 21:49:27 2015 +0100
+++ b/libcairo.rc	Fri Jan 09 16:15:59 2015 +0000
@@ -25,7 +25,7 @@
       VALUE "LegalCopyright", "Copyright Jan Vrany 2008\0"
       VALUE "ProductName", "Cairo\0"
       VALUE "ProductVersion", "6.2.5.0\0"
-      VALUE "ProductDate", "Fri, 02 Jan 2015 11:46:29 GMT\0"
+      VALUE "ProductDate", "Fri, 09 Jan 2015 16:15:15 GMT\0"
     END
 
   END