2008-04-05 Jordi Mas i Hernandez <jordimash@gmail.com>
authorJordi Mas i Hernandez <jordi@mono-cvs.ximian.com>
Sat, 5 Apr 2008 14:19:40 +0000 (14:19 -0000)
committerJordi Mas i Hernandez <jordi@mono-cvs.ximian.com>
Sat, 5 Apr 2008 14:19:40 +0000 (14:19 -0000)
* ScaledFont.cs: Adds class to encapsulate scaled font API
* Mono.Cairo.dll.sources: Adds new class
* Context.cs: Access to Scaled Fonts
* NativeMethods.cs: Add some missing scale_font APIs and fixes

svn path=/trunk/mcs/; revision=99906

mcs/class/Mono.Cairo/ChangeLog
mcs/class/Mono.Cairo/Mono.Cairo.dll.sources
mcs/class/Mono.Cairo/Mono.Cairo/Context.cs
mcs/class/Mono.Cairo/Mono.Cairo/NativeMethods.cs
mcs/class/Mono.Cairo/Mono.Cairo/ScaledFont.cs [new file with mode: 0644]

index ef3f7699cabe7891833194df5745f34f9db98f6f..5c36fa714c7a90cb4e5e2ebff338071e8ac28d9e 100644 (file)
@@ -1,3 +1,10 @@
+2008-04-05 Jordi Mas i Hernandez <jordimash@gmail.com>
+
+       * ScaledFont.cs: Adds class to encapsulate scaled font API
+       * Mono.Cairo.dll.sources: Adds new class
+       * Context.cs: Access to Scaled Fonts
+       * NativeMethods.cs: Add some missing scale_font APIs and fixes 
+
 2007-07-07  Miguel de Icaza  <miguel@novell.com>
 
        * Mono.Cairo/Context.cs: Integrate Alp's patch for looking up
index 9051e918ee6cdb70d173512ff200dcfeb05ce4b3..e95096f73f1a92c2a9e246f97ae3b6d5e49efe95 100644 (file)
@@ -35,6 +35,7 @@
 ./Mono.Cairo/PSSurface.cs
 ./Mono.Cairo/RadialGradient.cs
 ./Mono.Cairo/Rectangle.cs
+./Mono.Cairo/ScaledFont.cs
 ./Mono.Cairo/SolidPattern.cs
 ./Mono.Cairo/Status.cs
 ./Mono.Cairo/SubpixelOrder.cs
index 037f4e1fa790f83ae12e9d95f0e699943811fa55..3b2ac636ec74da250438a29b713750c2948ede24 100644 (file)
@@ -373,6 +373,16 @@ namespace Cairo {
                         }
                 }
 
+               public Cairo.ScaledFont ScaledFont {
+                        set {
+                               NativeMethods.cairo_set_scaled_font (state, value.Handle);
+                        }
+
+                        get {
+                                return new ScaledFont (NativeMethods.cairo_get_scaled_font (state));
+                        }
+                }
+
                public void SetSourceRGB (double r, double g, double b)
                {
                        NativeMethods.cairo_set_source_rgb (state, r, g, b);
index 78d35193e1b54af00323607b0932fb6dd8ec3268..cc5380f9e0f0baa1777d837caf25342ca6356ec4 100644 (file)
@@ -516,7 +516,7 @@ namespace Cairo
                internal static extern IntPtr cairo_scaled_font_destroy (IntPtr scaled_font);
                
                [DllImport (cairo)]
-               internal static extern void cairo_scaled_font_extents (IntPtr scaled_font, out TextExtents extents);
+               internal static extern void cairo_scaled_font_extents (IntPtr scaled_font, out FontExtents extents);
 
                [DllImport (cairo)]
                internal static extern void cairo_scaled_font_get_ctm (IntPtr scaled_font, out Matrix matrix);
@@ -542,6 +542,12 @@ namespace Cairo
                [DllImport (cairo)]
                internal static extern Status cairo_scaled_font_status (IntPtr scaled_font);
 
+               [DllImport (cairo)]
+               internal static extern void cairo_set_scaled_font (IntPtr cr, IntPtr scaled_font);
+
+               [DllImport (cairo)]
+               internal static extern IntPtr cairo_get_scaled_font (IntPtr cr);
+
                [DllImport (cairo)]
                internal static extern void cairo_scaled_font_text_extents (IntPtr scaled_font, string utf8, out TextExtents extents);
                
diff --git a/mcs/class/Mono.Cairo/Mono.Cairo/ScaledFont.cs b/mcs/class/Mono.Cairo/Mono.Cairo/ScaledFont.cs
new file mode 100644 (file)
index 0000000..8ac48f3
--- /dev/null
@@ -0,0 +1,114 @@
+//
+// Mono.Cairo.ScaledFont.cs
+//
+// (c) 2008 Jordi Mas i Hernandez (jordimash@gmail.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Cairo {
+   
+       public class ScaledFont : IDisposable
+       {
+               protected IntPtr handle = IntPtr.Zero;
+
+               internal ScaledFont (IntPtr handle)
+               {
+                       this.handle = handle;
+               }
+
+               public ScaledFont (FontFace fontFace, Matrix matrix, Matrix ctm, FontOptions options)
+               {
+                       handle = NativeMethods.cairo_scaled_font_create (fontFace.Handle, matrix, ctm, options.Handle);
+               }
+
+               ~ScaledFont ()
+               {
+                       Dispose (false);
+               }
+
+                public IntPtr Handle {
+                        get {
+                                return handle;
+                        }
+                }
+
+               public FontExtents FontExtents {
+                        get {
+                                FontExtents extents;
+                                NativeMethods.cairo_scaled_font_extents (handle, out extents);
+                                return extents;
+                        }
+                }
+
+               public Matrix FontMatrix {
+                       get {
+                               Matrix m;
+                               NativeMethods.cairo_scaled_font_get_font_matrix (handle, out m);
+                               return m;
+                       }
+               }
+
+               public FontType FontType {
+                       get {
+                               return NativeMethods.cairo_scaled_font_get_type (handle);
+                       }
+               }
+
+               public TextExtents GlyphExtents (Glyph[] glyphs)
+               {
+                       IntPtr ptr = Context.FromGlyphToUnManagedMemory (glyphs);
+                       TextExtents extents;
+
+                       NativeMethods.cairo_scaled_font_glyph_extents (handle, ptr, glyphs.Length, out extents);
+
+                       Marshal.FreeHGlobal (ptr);
+                       return extents;
+               }
+       
+               public Status Status
+               {
+                       get { return NativeMethods.cairo_scaled_font_status (handle); }
+               }
+
+               void IDisposable.Dispose ()
+               {
+                       Dispose (true);
+                       GC.SuppressFinalize (this);
+               }
+
+               protected virtual void Dispose (bool disposing)
+               {
+                       if (disposing) {
+                               NativeMethods.cairo_scaled_font_destroy (handle);
+                               handle = IntPtr.Zero;
+                       }
+               }
+               
+                protected void Reference ()
+                {
+                        NativeMethods.cairo_scaled_font_reference (handle);
+                }
+       }
+}
+