]> O.S.I.I.S - jp/crow.git/commitdiff
merge vkvg2 into devel
authorJean-Philippe Bruyère <jp_bruyere@hotmail.com>
Mon, 2 Aug 2021 11:13:21 +0000 (13:13 +0200)
committerJean-Philippe Bruyère <jp_bruyere@hotmail.com>
Mon, 2 Aug 2021 11:13:21 +0000 (13:13 +0200)
187 files changed:
Crow/Crow.csproj
Crow/src/Cairo/CairoHelpers.cs
Crow/src/DebugUtils/PerformanceMeasure.cs
Crow/src/ExtensionsMethods.cs
Crow/src/Fill/BmpPicture.cs
Crow/src/Fill/Fill.cs
Crow/src/Fill/Gradient.cs
Crow/src/Fill/Picture.cs
Crow/src/Fill/SolidColor.cs
Crow/src/Fill/SvgPicture.cs
Crow/src/Font.cs
Crow/src/GraphicBackends/Mono.Cairo/Antialias.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/Cairo.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/CairoDebug.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/Content.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/Context.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/DRMDevice.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/DRMSurface.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/Device.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/DirectFBSurface.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/Distance.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/EGLDevice.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/Extend.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/FillRule.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/Filter.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/FontExtents.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/FontFace.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/FontOptions.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/FontSlant.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/FontType.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/FontWeight.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/Format.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/GLSurface.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/GLXDevice.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/GlitzSurface.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/Glyph.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/Gradient.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/HintMetrics.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/HintStyle.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/ImageSurface.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/LineCap.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/LineJoin.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/LinearGradient.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/Matrix.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/MeshPattern.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/NativeMethods-internal.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/NativeMethods.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/Operator.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/PSSurface.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/Path.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/Pattern.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/PatternType.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/PdfSurface.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/RadialGradient.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/Region.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/ScaledFont.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/SolidPattern.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/Status.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/SubpixelOrder.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/Surface.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/SurfacePattern.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/SurfaceType.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/SvgSurface.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/SvgVersion.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/TextExtents.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/WGLDevice.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/Win32Surface.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/XcbSurface.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/XlibSurface.cs [new file with mode: 0644]
Crow/src/GraphicBackends/Mono.Cairo/rsvg/SvgHandle.cs [new file with mode: 0644]
Crow/src/GraphicBackends/vkvg/Context.cs [new file with mode: 0644]
Crow/src/GraphicBackends/vkvg/Device.cs [new file with mode: 0644]
Crow/src/GraphicBackends/vkvg/Enums.cs [new file with mode: 0644]
Crow/src/GraphicBackends/vkvg/FontExtents.cs [new file with mode: 0644]
Crow/src/GraphicBackends/vkvg/Matrix.cs [new file with mode: 0644]
Crow/src/GraphicBackends/vkvg/NativeMethods.cs [new file with mode: 0644]
Crow/src/GraphicBackends/vkvg/Pattern.cs [new file with mode: 0644]
Crow/src/GraphicBackends/vkvg/Surface.cs [new file with mode: 0644]
Crow/src/GraphicBackends/vkvg/SvgHandle.cs [new file with mode: 0644]
Crow/src/GraphicBackends/vkvg/TextExtents.cs [new file with mode: 0644]
Crow/src/GraphicBackends/vkvg/TextRun.cs [new file with mode: 0644]
Crow/src/GraphicBackends/vkvg/VulkanContext.cs [new file with mode: 0644]
Crow/src/GraphicBackends/vkvg/tmp/FontOptions.cs [new file with mode: 0644]
Crow/src/GraphicBackends/vkvg/tmp/Region.cs [new file with mode: 0644]
Crow/src/Interface.cs
Crow/src/Mono.Cairo [new file with mode: 0644]
Crow/src/Mono.Cairo/Antialias.cs [deleted file]
Crow/src/Mono.Cairo/Cairo.cs [deleted file]
Crow/src/Mono.Cairo/CairoDebug.cs [deleted file]
Crow/src/Mono.Cairo/Content.cs [deleted file]
Crow/src/Mono.Cairo/Context.cs [deleted file]
Crow/src/Mono.Cairo/DRMDevice.cs [deleted file]
Crow/src/Mono.Cairo/DRMSurface.cs [deleted file]
Crow/src/Mono.Cairo/Device.cs [deleted file]
Crow/src/Mono.Cairo/DirectFBSurface.cs [deleted file]
Crow/src/Mono.Cairo/Distance.cs [deleted file]
Crow/src/Mono.Cairo/EGLDevice.cs [deleted file]
Crow/src/Mono.Cairo/Extend.cs [deleted file]
Crow/src/Mono.Cairo/FillRule.cs [deleted file]
Crow/src/Mono.Cairo/Filter.cs [deleted file]
Crow/src/Mono.Cairo/FontExtents.cs [deleted file]
Crow/src/Mono.Cairo/FontFace.cs [deleted file]
Crow/src/Mono.Cairo/FontOptions.cs [deleted file]
Crow/src/Mono.Cairo/FontSlant.cs [deleted file]
Crow/src/Mono.Cairo/FontType.cs [deleted file]
Crow/src/Mono.Cairo/FontWeight.cs [deleted file]
Crow/src/Mono.Cairo/Format.cs [deleted file]
Crow/src/Mono.Cairo/GLSurface.cs [deleted file]
Crow/src/Mono.Cairo/GLXDevice.cs [deleted file]
Crow/src/Mono.Cairo/GlitzSurface.cs [deleted file]
Crow/src/Mono.Cairo/Glyph.cs [deleted file]
Crow/src/Mono.Cairo/Gradient.cs [deleted file]
Crow/src/Mono.Cairo/HintMetrics.cs [deleted file]
Crow/src/Mono.Cairo/HintStyle.cs [deleted file]
Crow/src/Mono.Cairo/ImageSurface.cs [deleted file]
Crow/src/Mono.Cairo/LineCap.cs [deleted file]
Crow/src/Mono.Cairo/LineJoin.cs [deleted file]
Crow/src/Mono.Cairo/LinearGradient.cs [deleted file]
Crow/src/Mono.Cairo/Matrix.cs [deleted file]
Crow/src/Mono.Cairo/MeshPattern.cs [deleted file]
Crow/src/Mono.Cairo/NativeMethods-internal.cs [deleted file]
Crow/src/Mono.Cairo/NativeMethods.cs [deleted file]
Crow/src/Mono.Cairo/Operator.cs [deleted file]
Crow/src/Mono.Cairo/PSSurface.cs [deleted file]
Crow/src/Mono.Cairo/Path.cs [deleted file]
Crow/src/Mono.Cairo/Pattern.cs [deleted file]
Crow/src/Mono.Cairo/PatternType.cs [deleted file]
Crow/src/Mono.Cairo/PdfSurface.cs [deleted file]
Crow/src/Mono.Cairo/RadialGradient.cs [deleted file]
Crow/src/Mono.Cairo/Region.cs [deleted file]
Crow/src/Mono.Cairo/ScaledFont.cs [deleted file]
Crow/src/Mono.Cairo/SolidPattern.cs [deleted file]
Crow/src/Mono.Cairo/Status.cs [deleted file]
Crow/src/Mono.Cairo/SubpixelOrder.cs [deleted file]
Crow/src/Mono.Cairo/Surface.cs [deleted file]
Crow/src/Mono.Cairo/SurfacePattern.cs [deleted file]
Crow/src/Mono.Cairo/SurfaceType.cs [deleted file]
Crow/src/Mono.Cairo/SvgSurface.cs [deleted file]
Crow/src/Mono.Cairo/SvgVersion.cs [deleted file]
Crow/src/Mono.Cairo/TextExtents.cs [deleted file]
Crow/src/Mono.Cairo/WGLDevice.cs [deleted file]
Crow/src/Mono.Cairo/Win32Surface.cs [deleted file]
Crow/src/Mono.Cairo/XcbSurface.cs [deleted file]
Crow/src/Mono.Cairo/XlibSurface.cs [deleted file]
Crow/src/Text/IEditableTextWidget.cs
Crow/src/Widgets/Border.cs
Crow/src/Widgets/CircleMeter.cs
Crow/src/Widgets/ColorSlider.cs
Crow/src/Widgets/DockWindow.cs
Crow/src/Widgets/Expandable.cs
Crow/src/Widgets/Gauge.cs
Crow/src/Widgets/GraduatedSlider.cs
Crow/src/Widgets/Group.cs
Crow/src/Widgets/GroupBase.cs
Crow/src/Widgets/HueSelector.cs
Crow/src/Widgets/Image.cs
Crow/src/Widgets/Label.cs
Crow/src/Widgets/OldLabel.cs [deleted file]
Crow/src/Widgets/OldTextBox.cs [deleted file]
Crow/src/Widgets/PrivateContainer.cs
Crow/src/Widgets/ProgressBar.cs
Crow/src/Widgets/SaturationValueSelector.cs
Crow/src/Widgets/Scroller.cs
Crow/src/Widgets/ScrollingStack.cs
Crow/src/Widgets/Shape.cs
Crow/src/Widgets/Slider.cs
Crow/src/Widgets/TabView.cs
Crow/src/Widgets/Table.cs
Crow/src/Widgets/TableRow copy.cs
Crow/src/Widgets/TableRow.cs
Crow/src/Widgets/TemplatedControl.cs
Crow/src/Widgets/TemplatedGroup.cs
Crow/src/Widgets/TestCairoPatch.cs [deleted file]
Crow/src/Widgets/TextBox.cs
Crow/src/Widgets/TextRun.cs [deleted file]
Crow/src/Widgets/Trend.cs [deleted file]
Crow/src/Widgets/Widget.cs
Crow/src/rsvg/DimensionData.cs [deleted file]
Crow/src/rsvg/Handle.cs [deleted file]
Directory.Build.props
Samples/DebugLogAnalyzer/src/DbgEventWidget.cs
Samples/DebugLogAnalyzer/src/DbgLogViewer.cs
Samples/DebugLogAnalyzer/src/DebugInterface.cs
Samples/DebugLogAnalyzer/src/DebugInterfaceWidget.cs
Samples/common/src/Editor.cs
Samples/common/src/SampleBase.cs
Samples/common/ui/Interfaces/TemplatedControl/testEnumSelector.crow

index 972e22f18e450772a19dd690683ca420ee19f43d..e778a55be86dfb01cc1e07e9773a1defa724eedb 100644 (file)
                <PackageReference Include="glfw-sharp" Version="$(GlfwSharpVersion)" />
        </ItemGroup>
 
-       <PropertyGroup Condition=" '$(CrowVkvgBackend)' == 'true'">
-               <DefineConstants>$(DefineConstants);VKVG</DefineConstants>
-       </PropertyGroup>
-       <ItemGroup Condition=" '$(CrowVkvgBackend)' == 'true'">
-               <PackageReference Include="vkvg.net" Version="0.2.2-beta" />
-       </ItemGroup>
-
        <PropertyGroup Condition=" '$(CrowStbSharp)' == 'true'">
                <DefineConstants>$(DefineConstants);STB_SHARP</DefineConstants>
        </PropertyGroup>
                <ProjectReference Include="..\CrowDbgShared\CrowDbgShared.csproj" />
        </ItemGroup>-->
 
+       <PropertyGroup Condition=" '$(CrowVkvgBackend)' == 'true'">
+               <DefineConstants>$(DefineConstants);VKVG</DefineConstants>
+       </PropertyGroup>
+
+       <ItemGroup Condition=" '$(CrowVkvgBackend)' == 'true'">
+               <Compile Include="src\GraphicBackends\vkvg\**\*.*" />
+               <PackageReference Include="vke" Version="0.2.0-beta" />
+       </ItemGroup>
+
+       <ItemGroup Condition=" '$(CrowVkvgBackend)' != 'true'">
+               <Compile Include="src\GraphicBackends\Mono.Cairo\**\*.*"
+                       Exclude="src\GraphicBackends\Mono.Cairo\NativeMethods-internal.cs" />
+       </ItemGroup>
+
        <ItemGroup>
                <Content Include="..\Images\crow.png" Pack="true" PackagePath="" />
-               <Compile Include="src\**\*.cs" Exclude="src\Mono.Cairo\NativeMethods-internal.cs" />
+               <Compile Include="src\**\*.cs" Exclude="src\GraphicBackends\**\*.*" />
                <EmbeddedResource Include="Templates\*.*">
                        <LogicalName>Crow.%(Filename)%(Extension)</LogicalName>
                </EmbeddedResource>
index a2e036ac385e61ac9330db6b9f5f1c6c9d65f95b..ea9a94badeb64c554dfe8b74fc4b548c8c9a65d1 100644 (file)
@@ -1,38 +1,14 @@
-//
-// CairoHelpers.cs
+// Copyright (c) 2013-2021  Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
 //
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// 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.
+// This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
 
 using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
+using Crow.Drawing;
 
 namespace Crow
 {
     public static class CairoHelpers
-    {
+    {          
                public static T Clamp<T>(this T val, T min, T max) where T : IComparable<T>
                {
                    if (val.CompareTo(min) < 0) return min;
@@ -57,18 +33,18 @@ namespace Crow
 
             return arr[minp];
         }
-               public static void CairoRectangle(Cairo.Context gr, RectangleD r, double radius, double stroke = 0.0)
+               public static void CairoRectangle(Context gr, RectangleD r, double radius, double stroke = 0.0)
                {
                        if (radius > 0)
                                DrawRoundedRectangle (gr, r, radius, stroke);
                        else
                                gr.Rectangle (r, stroke);
                }
-               public static void CairoCircle(Cairo.Context gr, RectangleD r)
+               public static void CairoCircle(Context gr, RectangleD r)
                {
                        gr.Arc(r.X + r.Width/2.0, r.Y + r.Height/2.0, Math.Min(r.Width,r.Height)/2.0, 0, 2.0*Math.PI);
                }
-               public static void DrawRoundedRectangle(Cairo.Context gr, RectangleD r, double radius, double stroke = 0.0)
+               public static void DrawRoundedRectangle(Context gr, RectangleD r, double radius, double stroke = 0.0)
         {
                        if (stroke>0.0) {
                                gr.LineWidth = stroke;
@@ -78,9 +54,9 @@ namespace Crow
                        }else
                                DrawRoundedRectangle(gr, r.X, r.Y, r.Width, r.Height, radius);
         }
-        public static void DrawRoundedRectangle(Cairo.Context gr, double x, double y, double width, double height, double radius)
+        public static void DrawRoundedRectangle(Context gr, double x, double y, double width, double height, double radius)
         {
-            gr.Save();
+            //gr.Save();
 
             if ((radius > height / 2) || (radius > width / 2))
                 radius = min(height / 2, width / 2);
@@ -94,11 +70,11 @@ namespace Crow
             gr.LineTo(x + radius, y + height);
             gr.Arc(x + radius, y + height - radius, radius, Math.PI / 2, Math.PI);
             gr.ClosePath();
-            gr.Restore();
+            //gr.Restore();
         }
-        public static void StrokeRaisedRectangle(Cairo.Context gr, Rectangle r, double width = 1)
+        public static void StrokeRaisedRectangle(Context gr, Rectangle r, double width = 1)
         {
-            gr.Save();
+            //gr.Save();
             r.Inflate((int)-width / 2, (int)-width / 2);
             gr.LineWidth = width;
                        gr.SetSource(Colors.White);
@@ -113,11 +89,11 @@ namespace Crow
             gr.LineTo(r.BottomLeft);
             gr.Stroke();
 
-            gr.Restore();
+            //gr.Restore();
         }
-        public static void StrokeLoweredRectangle(Cairo.Context gr, Rectangle r, double width = 1)
+        public static void StrokeLoweredRectangle(Context gr, Rectangle r, double width = 1)
         {
-            gr.Save();
+            //gr.Save();
             r.Inflate((int)-width / 2, (int)-width / 2);
             gr.LineWidth = width;
                        gr.SetSource(Colors.DarkGrey);
@@ -131,7 +107,7 @@ namespace Crow
             gr.LineTo(r.BottomLeft);
             gr.Stroke();
 
-            gr.Restore();
+            //gr.Restore();
         }
     }
 }
index f4cf76a8d7f5a9b0f504dbcc3a82048298d09841..8cd72d97281307a13260b3f98b7f926eb4a36d26 100644 (file)
@@ -29,7 +29,7 @@ namespace Crow
                public static void InitMeasures () {
                        Measures = new PerformanceMeasure[4];
                        Measures[(int)Kind.Update] = new PerformanceMeasure (Kind.Update, 1);
-                       Measures[(int)Kind.Clipping] = new PerformanceMeasure (Kind.Clipping, 1);
+                       Measures[(int)Kind.Clipping] = new PerformanceMeasure (Kind.Clipping, 0);
                        Measures[(int)Kind.Layouting] = new PerformanceMeasure (Kind.Layouting, 1);
                        Measures[(int)Kind.Drawing] = new PerformanceMeasure (Kind.Drawing, 1);
                }
index c435f7ca1b443196ede1c53713f741a87fc909df..bc9268773fd853331eee36c513197d07350538e1 100644 (file)
@@ -9,13 +9,15 @@ using System.Linq;
 using System.Linq.Expressions;
 using System.Reflection;
 
+using Crow.Drawing;
+
 namespace Crow
 {
        public static class ExtensionsMethods
        {
                #region Cairo extensions
 
-               public static void Rectangle(this Cairo.Context ctx, Rectangle r, double stroke = 0.0)
+               public static void Rectangle(this Context ctx, Rectangle r, double stroke = 0.0)
                {
                        if (stroke > 0.0) {
                                ctx.LineWidth = stroke;
@@ -49,7 +51,7 @@ namespace Crow
                public static PointD Multiply(this PointD p1, double v){
                        return new PointD(p1.X * v, p1.Y * v);
                }
-               public static void DrawCote(this Cairo.Context ctx, PointD p1, PointD p2,
+               public static void DrawCote(this Context ctx, PointD p1, PointD p2,
                        double stroke = 1.0, bool fill = false, double arrowWidth = 3.0, double arrowLength = 7.0)
                {                       
                        PointD vDir = p2.Substract(p1);
@@ -86,7 +88,7 @@ namespace Crow
                        ctx.LineWidth = stroke;
                        ctx.Stroke ();
                }
-               public static void DrawCoteInverse(this Cairo.Context ctx, PointD p1, PointD p2,
+               public static void DrawCoteInverse(this Context ctx, PointD p1, PointD p2,
                        double stroke = 1.0, bool fill = false, double arrowWidth = 3.0, double arrowLength = 7.0)
                {                       
                        PointD vDir = p2.Substract(p1);
@@ -118,7 +120,7 @@ namespace Crow
                        ctx.LineWidth = stroke;
                        ctx.Stroke ();
                }
-               public static void DrawCoteFixed(this Cairo.Context ctx, PointD p1, PointD p2,
+               public static void DrawCoteFixed(this Context ctx, PointD p1, PointD p2,
                        double stroke = 1.0, double coteWidth = 3.0)
                {                       
                        PointD vDir = p2.Substract(p1);
@@ -136,7 +138,7 @@ namespace Crow
                        ctx.Stroke ();
                }
 
-               public static void AddColorStop(this Cairo.Gradient grad, double offset, Color c)
+               public static void AddColorStop(this Gradient grad, double offset, Color c)
                {
                        grad.AddColorStop (offset, c);
                }
index 0f67323d2810f1dd4fbe8916ba8d1501d3595607..8b72b8b3dfeaa90556e30f8fa74fbb95da7ac97b 100644 (file)
@@ -5,7 +5,8 @@
 using System;
 using System.IO;
 using System.Runtime.InteropServices;
-using Crow.Cairo;
+
+using Crow.Drawing;
 
 namespace Crow
 {
@@ -30,7 +31,7 @@ namespace Crow
                /// <summary>
                /// load the image for rendering from the path given as argument
                /// </summary>
-               void load (Interface iFace) {
+               public override void load (Interface iFace) {
                        if (iFace.sharedPictures.ContainsKey (Path)) {
                                sharedPicture sp = iFace.sharedPictures[Path];
                                image = (byte[])sp.Data;
@@ -47,6 +48,9 @@ namespace Crow
 #if STB_SHARP
                        StbImageSharp.ImageResult stbi = StbImageSharp.ImageResult.FromStream (stream, StbImageSharp.ColorComponents.RedGreenBlueAlpha);
                        image = new byte[stbi.Data.Length];
+       #if VKVG
+                       Array.Copy (stbi.Data, image, stbi.Data.Length);
+       #else
                        //rgba to argb for cairo.
                        for (int i = 0; i < stbi.Data.Length; i += 4) {
                                image[i] = stbi.Data[i + 2];
@@ -54,17 +58,22 @@ namespace Crow
                                image[i + 2] = stbi.Data[i];
                                image[i + 3] = stbi.Data[i + 3];
                        }
+       #endif
                        Dimensions = new Size (stbi.Width, stbi.Height);
 #else
                                using (StbImage stbi = new StbImage (stream)) {
                                        image = new byte [stbi.Size];
-                                       //rgba to argb for cairo.
+       #if VKVG
+                                       Marshal.Copy (stbi.Handle, image, 0, stbi.Size);
+       #else
                                        for (int i = 0; i < stbi.Size; i+=4) {
+                                               //rgba to argb for cairo. ???? looks like bgra to me.
                                                image [i] = Marshal.ReadByte (stbi.Handle, i + 2);
                                                image [i + 1] = Marshal.ReadByte (stbi.Handle, i + 1);
                                                image [i + 2] = Marshal.ReadByte (stbi.Handle, i);
                                                image [i + 3] = Marshal.ReadByte (stbi.Handle, i + 3);
                                        }
+       #endif
                                        Dimensions = new Size (stbi.Width, stbi.Height);
                                }
 #endif
@@ -98,7 +107,7 @@ namespace Crow
                }*/
 
                #region implemented abstract members of Fill
-
+               public override bool IsLoaded => image != null;
                public override void SetAsSource (Interface iFace, Context ctx, Rectangle bounds = default(Rectangle))
                {
                        if (image == null)
@@ -119,14 +128,21 @@ namespace Crow
                                        widthRatio = heightRatio;
                        }
 
-                       using (ImageSurface tmp = new ImageSurface (Format.Argb32, bounds.Width, bounds.Height)) {
+#if VKVG
+                       using (Surface tmp = new Surface (iFace.vkvgDevice, bounds.Width, bounds.Height)) {
+#else
+                       using (Surface tmp = new ImageSurface (Format.Argb32, bounds.Width, bounds.Height)) {
+#endif
                                using (Context gr = new Context (tmp)) {
                                        gr.Translate (bounds.Left, bounds.Top);
                                        gr.Scale (widthRatio, heightRatio);
                                        gr.Translate ((bounds.Width/widthRatio - Dimensions.Width)/2, (bounds.Height/heightRatio - Dimensions.Height)/2);
-
-                                       using (ImageSurface imgSurf = new ImageSurface (image, Format.Argb32, 
-                                               Dimensions.Width, Dimensions.Height, 4 * Dimensions.Width)) {
+#if VKVG
+                                       using (Surface imgSurf = new Surface (iFace.vkvgDevice, image, Dimensions.Width, Dimensions.Height)) 
+#else
+                                       using (Surface imgSurf = new ImageSurface (image, Format.Argb32, Dimensions.Width, Dimensions.Height, 4 * Dimensions.Width)) 
+#endif
+                                       {
                                                gr.SetSource (imgSurf, 0,0);
                                                gr.Paint ();
                                        }
@@ -163,18 +179,26 @@ namespace Crow
                                        widthRatio = heightRatio;
                        }
 
-                       gr.Save ();
+                       //gr.Save ();
+
+                       Matrix m = gr.Matrix;
 
                        gr.Translate (rect.Left,rect.Top);
                        gr.Scale (widthRatio, heightRatio);
                        gr.Translate ((rect.Width/widthRatio - Dimensions.Width)/2, (rect.Height/heightRatio - Dimensions.Height)/2);
-                       
-                       using (ImageSurface imgSurf = new ImageSurface (image, Format.Argb32, 
-                               Dimensions.Width, Dimensions.Height, 4 * Dimensions.Width)) {
+
+#if VKVG
+                       using (Surface imgSurf = new Surface (iFace.vkvgDevice, image, Dimensions.Width, Dimensions.Height)) 
+#else
+                       using (Surface imgSurf = new ImageSurface (image, Format.Argb32, Dimensions.Width, Dimensions.Height, 4 * Dimensions.Width)) 
+#endif                 
+                       {                               
                                gr.SetSource (imgSurf, 0,0);
                                gr.Paint ();
                        }
-                       gr.Restore ();
+
+                       gr.Matrix = m;
+                       //gr.Restore ();
                }
        }
 }
index a11b666e60e4c336ef5db459711159be8867a087..2faeca80f8809273d9f690fd3692ac10fb8dcad5 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (c) 2013-2020  Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
+// Copyright (c) 2013-2021  Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
 //
 // This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
 
 using System;
-using Crow.Cairo;
+using Crow.Drawing;
 
 namespace Crow
 {
index ac6a638ef27aa64b4977ce63542f65e5a736bfe7..d0b4b6537782efa2ddfe5cb51c95d2608750d2a0 100644 (file)
@@ -1,32 +1,11 @@
-//
-// Gradient.cs
+// Copyright (c) 2013-2021  Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
 //
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// 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.
+// This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
 
 using System;
 using System.Collections.Generic;
-using Crow.Cairo;
+
+using Crow.Drawing;
 
 namespace Crow
 {
@@ -81,7 +60,7 @@ namespace Crow
 
                public override void SetAsSource (Interface iFace, Context ctx, Rectangle bounds = default(Rectangle))
                {
-                       Cairo.Gradient grad = null;
+                       /*Cairo.Gradient grad = null;
                        switch (GradientType) {
                        case Type.Vertical:
                                grad = new LinearGradient (bounds.Left, bounds.Top, bounds.Left, bounds.Bottom);
@@ -103,7 +82,7 @@ namespace Crow
                        }
                        
                        ctx.SetSource (grad);
-                       grad.Dispose ();
+                       grad.Dispose ();*/
                }
                #endregion
 
index c9b234041d6c4092c18849d9d7f7ff3c2765d1b3..b915f6d4644060f05429b59b204fe1b2e0e6d72e 100644 (file)
@@ -1,33 +1,12 @@
-//
-// Picture.cs
+// Copyright (c) 2013-2021  Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
 //
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// 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.
+// This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
 
 using System;
 using System.IO;
-using Crow.Cairo;
+
 using System.Collections.Generic;
+using Crow.Drawing;
 
 namespace Crow
 {
@@ -58,7 +37,7 @@ namespace Crow
                /// <summary>
                /// unscaled dimensions fetched on loading
                /// </summary>
-               public Size Dimensions;
+               public Size Dimensions { get; protected set; }
                /// <summary>
                /// if true and image has to be scalled, it will be scaled in both direction
                /// equaly
@@ -94,7 +73,8 @@ namespace Crow
                /// <param name="rect">bounds of the target surface to paint</param>
                /// <param name="subPart">used for svg only</param>
                public abstract void Paint(Interface iFace, Context ctx, Rectangle rect, string subPart = "");
-
+               public abstract bool IsLoaded { get; }
+               public abstract void load (Interface iface);
                #region Operators
                public static implicit operator Picture(string path) => Parse (path) as Picture;
                public static implicit operator string(Picture _pic) => _pic == null ? null : _pic.Path;
index 40c7cdc19249835d7d39de22bd9d7e989fa87394..6977a8bc466d5b1855e48a228d776512977ff7b5 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (c) 2013-2020  Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
+// Copyright (c) 2013-2021  Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
 //
 // This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
 
@@ -9,9 +9,8 @@ using System.Text;
 using System.Xml.Serialization;
 using System.Reflection;
 using System.Diagnostics;
-using Crow.Cairo;
-
 
+using Crow.Drawing;
 
 namespace Crow
 {
index fcd5c4d25c19e1f5c60b32c53d4236ae414eb2d4..80d380ed08adadea21774d0b2edcda7260347273 100644 (file)
@@ -4,7 +4,8 @@
 
 using System;
 using System.IO;
-using Crow.Cairo;
+
+using Crow.Drawing;
 
 namespace Crow
 {
@@ -13,7 +14,7 @@ namespace Crow
        /// </summary>
        public class SvgPicture : Picture
        {
-               Rsvg.Handle hSVG;
+               SvgHandle hSVG;
 
                #region CTOR
                /// <summary>
@@ -27,45 +28,49 @@ namespace Crow
                public SvgPicture (string path) : base(path) {}
                #endregion
 
-               bool load (Interface iFace)
+               public override void load (Interface iFace)
                {
-                       if (string.IsNullOrEmpty(Path))
-                               return false;
                        if (iFace.sharedPictures.ContainsKey (Path)) {
                                sharedPicture sp = iFace.sharedPictures [Path];
-                               hSVG = (Rsvg.Handle)sp.Data;
+                               hSVG = (SvgHandle)sp.Data;
                                Dimensions = sp.Dims;
-                               return true;
+                               return;
                        }
                        using (Stream stream = iFace.GetStreamFromPath (Path))
-                               load (stream);
+                               load (iFace, stream);
                        iFace.sharedPictures [Path] = new sharedPicture (hSVG, Dimensions);
-                       return true;
                }
-               void load (Stream stream) {
+               void load (Interface iface, Stream stream) {
                        using (BinaryReader sr = new BinaryReader (stream)) {
-                               hSVG = new Rsvg.Handle (sr.ReadBytes ((int)stream.Length));
-                               Dimensions = new Size (hSVG.Dimensions.Width, hSVG.Dimensions.Height);
+#if VKVG
+                               hSVG = new SvgHandle (iface.vkvgDevice, sr.ReadBytes ((int)stream.Length));
+#else
+                               hSVG = new SvgHandle (sr.ReadBytes ((int)stream.Length));
+#endif
+                               Dimensions = hSVG.Dimensions;
                        }
                }
-               internal static sharedPicture CreateSharedPicture (Stream stream) {
+               internal static sharedPicture CreateSharedPicture (Interface iface, Stream stream) {
                        SvgPicture pic = new SvgPicture ();
-                       pic.load (stream);
+                       pic.load (iface, stream);
                        return new sharedPicture (pic.hSVG, pic.Dimensions);
                }
 
-               public void LoadSvgFragment (string fragment) {                 
-                       hSVG = new Rsvg.Handle (System.Text.Encoding.Unicode.GetBytes(fragment));
+               public void LoadSvgFragment (Interface iface, string fragment) {                        
+#if VKVG
+                       hSVG = new SvgHandle (iface.vkvgDevice, System.Text.Encoding.Unicode.GetBytes(fragment));
+#else
+                       hSVG = new SvgHandle (System.Text.Encoding.Unicode.GetBytes(fragment));
+#endif
                        Dimensions = new Size (hSVG.Dimensions.Width, hSVG.Dimensions.Height);
                }
 
                #region implemented abstract members of Fill
-
+               public override bool IsLoaded => hSVG != null;
                public override void SetAsSource (Interface iFace, Context ctx, Rectangle bounds = default(Rectangle))
                {
                        if (hSVG == null)
-                               if (!load (iFace))
-                                       return;
+                               load (iFace);
 
                        float widthRatio = 1f;
                        float heightRatio = 1f;
@@ -82,16 +87,20 @@ namespace Crow
                                        widthRatio = heightRatio;
                        }
 
-                       using (ImageSurface tmp = new ImageSurface (Format.Argb32, bounds.Width, bounds.Height)) {
+#if VKVG
+                       using (Surface tmp = new Surface (iFace.vkvgDevice, bounds.Width, bounds.Height)) {
+#else
+                       using (Surface tmp = new ImageSurface (Format.Argb32, bounds.Width, bounds.Height)) {
+#endif
                                using (Context gr = new Context (tmp)) {
                                        gr.Translate (bounds.Left, bounds.Top);
                                        gr.Scale (widthRatio, heightRatio);
                                        gr.Translate ((bounds.Width/widthRatio - Dimensions.Width)/2, (bounds.Height/heightRatio - Dimensions.Height)/2);
 
-                                       hSVG.RenderCairo (gr);
+                                       hSVG.Render (gr);
                                }
                                ctx.SetSource (tmp);
-                       }       
+                       }
                }
                #endregion
 
@@ -105,8 +114,7 @@ namespace Crow
                public override void Paint (Interface iFace, Context gr, Rectangle rect, string subPart = "")
                {
                        if (hSVG == null)
-                               if (!load (iFace))
-                                       return;
+                               load (iFace);
 
                        float widthRatio = 1f;
                        float heightRatio = 1f;
@@ -129,14 +137,14 @@ namespace Crow
                        gr.Translate (((float)rect.Width/widthRatio - Dimensions.Width)/2f, ((float)rect.Height/heightRatio - Dimensions.Height)/2f);
 
                        if (string.IsNullOrEmpty (subPart))
-                               hSVG.RenderCairo (gr);
+                               hSVG.Render (gr);
                        else {
                                string[] parts = subPart.Split (new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                 foreach (string p in parts)                
-                                       hSVG.RenderCairoSub (gr, "#" + subPart);
+                                       hSVG.Render (gr, "#" + subPart);
                        }
                        
-                       gr.Restore ();                  
+                       gr.Restore ();
                }
        }
 }
index 1ec0b2cc868009d37bc1f67e7fe2155e712d8284..0d6534ff42a949ee0e4f7295353d5cec159d8026 100644 (file)
@@ -3,8 +3,7 @@
 // This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
 
 using System;
-using Crow.Cairo;
-//using FastEnumUtility;
+using Crow.Drawing;
 
 namespace Crow
 {
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/Antialias.cs b/Crow/src/GraphicBackends/Mono.Cairo/Antialias.cs
new file mode 100644 (file)
index 0000000..fd98f60
--- /dev/null
@@ -0,0 +1,43 @@
+//
+// Mono.Cairo.Antialias.cs
+//
+// Authors:
+//   Duncan Mak (duncan@ximian.com)
+//   Hisham Mardam Bey (hisham.mardambey@gmail.com)
+//
+// (C) Ximian, Inc. 2003
+// Copyright (C) 2004 Novell, Inc (http://www.novell.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;
+
+namespace Crow.Drawing
+{
+       
+       public enum Antialias
+       {
+               Default,
+               None,
+               Grey,
+               Subpixel,
+       }
+}
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/Cairo.cs b/Crow/src/GraphicBackends/Mono.Cairo/Cairo.cs
new file mode 100644 (file)
index 0000000..6428304
--- /dev/null
@@ -0,0 +1,53 @@
+//
+// Cairo.cs - a simplistic binding of the Cairo API to C#.
+//
+// Authors: Duncan Mak (duncan@ximian.com)
+//          Hisham Mardam Bey (hisham.mardambey@gmail.com)
+//          John Luke (john.luke@gmail.com)
+//          Alp Toker (alp@atoker.com)
+//
+// (C) Ximian, Inc. 2003
+// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2005 John Luke
+// Copyright (C) 2006 Alp Toker
+//
+// 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 Crow.Drawing
+{
+       public static class CairoAPI {
+               static public int Version {
+                       get {
+                               return Cairo.NativeMethods.cairo_version ();
+                       }
+               }
+
+               static public string VersionString {
+                       get {
+                               IntPtr x = Cairo.NativeMethods.cairo_version_string ();
+                               return Marshal.PtrToStringAnsi (x);
+                       }
+               }
+       }
+}
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/CairoDebug.cs b/Crow/src/GraphicBackends/Mono.Cairo/CairoDebug.cs
new file mode 100644 (file)
index 0000000..890793d
--- /dev/null
@@ -0,0 +1,82 @@
+//
+// CairoDebug.cs
+//
+// Author:
+//   Michael Hutchinson (mhutch@xamarin.com)
+//
+// Copyright (C) 2013 Xamarin Inc. (http://www.xamarin.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;
+
+namespace Crow.Drawing {
+
+       static class CairoDebug
+       {
+               static System.Collections.Generic.Dictionary<IntPtr,string> traces;
+
+               public static readonly bool Enabled;
+
+               static CairoDebug ()
+               {
+                       var dbg = Environment.GetEnvironmentVariable ("MONO_CAIRO_DEBUG_DISPOSE");
+                       if (dbg == null)
+                               return;
+                       Enabled = true;
+                       traces = new System.Collections.Generic.Dictionary<IntPtr,string> ();
+               }
+
+               public static void OnAllocated (IntPtr obj)
+               {
+                       if (!Enabled)
+                               throw new InvalidOperationException ();
+
+                       traces[obj] = Environment.StackTrace;
+               }
+
+               public static void OnDisposed<T> (IntPtr obj, bool disposing)
+               {
+                       if (disposing && !Enabled)
+                               throw new InvalidOperationException ();
+
+                       if (Environment.HasShutdownStarted)
+                               return;
+
+                       if (!disposing) {
+                               System.Diagnostics.Debug.WriteLine ("{0} is leaking, programmer is missing a call to Dispose", typeof(T).FullName);
+                               if (Enabled) {
+                                       string val;
+                                       if (traces.TryGetValue (obj, out val)) {
+                                               System.Diagnostics.Debug.WriteLine ("Allocated from:");
+                                               System.Diagnostics.Debug.WriteLine (val);
+                                       }
+                               } else {
+                                       System.Diagnostics.Debug.WriteLine ("Set MONO_CAIRO_DEBUG_DISPOSE to track allocation traces");
+                               }
+                       }
+
+                       if (Enabled)
+                               traces.Remove (obj);
+               }
+       }
+
+}
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/Content.cs b/Crow/src/GraphicBackends/Mono.Cairo/Content.cs
new file mode 100644 (file)
index 0000000..13927c1
--- /dev/null
@@ -0,0 +1,43 @@
+//
+// Mono.Cairo.Content.cs
+//
+// Authors:
+//   Duncan Mak (duncan@ximian.com)
+//   Hisham Mardam Bey (hisham.mardambey@gmail.com)
+//
+// (C) Ximian, Inc. 2003
+// Copyright (C) 2004 Novell, Inc (http://www.novell.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;
+
+namespace Crow.Drawing
+{
+       //[Flags]
+       
+       public enum Content
+       {
+               Color = 0x1000,
+               Alpha = 0x2000,
+               ColorAlpha = 0x3000,
+       }
+}
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/Context.cs b/Crow/src/GraphicBackends/Mono.Cairo/Context.cs
new file mode 100644 (file)
index 0000000..c69a423
--- /dev/null
@@ -0,0 +1,928 @@
+//
+// Mono.Cairo.Context.cs
+//
+// Author:
+//   Duncan Mak (duncan@ximian.com)
+//   Miguel de Icaza (miguel@novell.com)
+//   Hisham Mardam Bey (hisham.mardambey@gmail.com)
+//   Alp Toker (alp@atoker.com)
+//
+// (C) Ximian Inc, 2003.
+// (C) Novell Inc, 2003.
+//
+// This is an OO wrapper API for the Cairo API.
+//
+// Copyright (C) 2004 Novell, Inc (http://www.novell.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;
+using System.Text;
+
+namespace Crow.Drawing {       
+
+       [Obsolete ("Renamed Cairo.Context per suggestion from cairo binding guidelines.")]
+       public class Graphics : Context {
+               public Graphics (IntPtr state) : base (state) {}
+               public Graphics (Surface surface) : base (surface) {}
+       }
+
+       public class Context : IDisposable
+       {
+               IntPtr handle = IntPtr.Zero;
+
+               static int native_glyph_size, c_compiler_long_size;
+
+               static Context ()
+               {
+                       //
+                       // This is used to determine what kind of structure
+                       // we should use to marshal Glyphs, as the public
+                       // definition in Cairo uses `long', which can be
+                       // 32 bits or 64 bits depending on the platform.
+                       //
+                       // We assume that sizeof(long) == sizeof(void*)
+                       // except in the case of Win64 where sizeof(long)
+                       // is 32 bits
+                       //
+                       int ptr_size = Marshal.SizeOf (typeof (IntPtr));
+
+                       PlatformID platform = Environment.OSVersion.Platform;
+                       if (platform == PlatformID.Win32NT ||
+                           platform == PlatformID.Win32S ||
+                           platform == PlatformID.Win32Windows ||
+                           platform == PlatformID.WinCE ||
+                           ptr_size == 4){
+                               c_compiler_long_size = 4;
+                               native_glyph_size = Marshal.SizeOf (typeof (NativeGlyph_4byte_longs));
+                       } else {
+                               c_compiler_long_size = 8;
+                               native_glyph_size = Marshal.SizeOf (typeof (Glyph));
+                       }
+               }
+
+               public Context (Surface surface) : this (NativeMethods.cairo_create (surface.Handle), true)
+               {
+               }
+
+
+               public Context (IntPtr handle, bool owner)
+               {
+                       this.handle = handle;
+                       if (!owner)
+                               NativeMethods.cairo_reference (handle);
+                       if (CairoDebug.Enabled)
+                               CairoDebug.OnAllocated (handle);
+               }
+
+               [Obsolete]
+               public Context (IntPtr state) : this (state, true)
+               {
+               }
+
+               ~Context ()
+               {
+                       Dispose (false);
+               }
+
+               public void Dispose ()
+               {
+                       Dispose (true);
+                       GC.SuppressFinalize (this);
+               }
+
+               protected virtual void Dispose (bool disposing)
+               {
+                       if (!disposing || CairoDebug.Enabled)
+                               CairoDebug.OnDisposed<Context> (handle, disposing);
+
+                       if (!disposing|| handle == IntPtr.Zero)
+                               return;
+
+                       NativeMethods.cairo_destroy (handle);
+                       handle = IntPtr.Zero;
+
+               }
+
+               public void Save ()
+               {
+                       NativeMethods.cairo_save (handle);
+               }
+
+               public void Restore ()
+               {
+                       NativeMethods.cairo_restore (handle);
+               }
+
+               public Antialias Antialias {
+                       get { return NativeMethods.cairo_get_antialias (handle); }
+                       set { NativeMethods.cairo_set_antialias (handle, value); }
+               }
+
+               public Cairo.Status Status {
+                       get {
+                               return NativeMethods.cairo_status (handle);
+                       }
+               }
+
+               public IntPtr Handle {
+                       get {
+                               return handle;
+                       }
+               }
+
+               public Operator Operator {
+                       set {
+                               NativeMethods.cairo_set_operator (handle, value);
+                       }
+
+                       get {
+                               return NativeMethods.cairo_get_operator (handle);
+                       }
+               }
+
+               public double Tolerance {
+                       get {
+                               return NativeMethods.cairo_get_tolerance (handle);
+                       }
+
+                       set {
+                               NativeMethods.cairo_set_tolerance (handle, value);
+                       }
+               }
+
+               public Cairo.FillRule FillRule {
+                       set {
+                               NativeMethods.cairo_set_fill_rule (handle, value);
+                       }
+
+                       get {
+                               return NativeMethods.cairo_get_fill_rule (handle);
+                       }
+               }
+
+               public double LineWidth {
+                       set {
+                               NativeMethods.cairo_set_line_width (handle, value);
+                       }
+
+                       get {
+                               return NativeMethods.cairo_get_line_width (handle);
+                       }
+               }
+
+               public Cairo.LineCap LineCap {
+                       set {
+                               NativeMethods.cairo_set_line_cap (handle, value);
+                       }
+
+                       get {
+                               return NativeMethods.cairo_get_line_cap (handle);
+                       }
+               }
+
+               public Cairo.LineJoin LineJoin {
+                       set {
+                               NativeMethods.cairo_set_line_join (handle, value);
+                       }
+
+                       get {
+                               return NativeMethods.cairo_get_line_join (handle);
+                       }
+               }
+
+               public void SetDash (double [] dashes, double offset = 0)
+               {
+                       NativeMethods.cairo_set_dash (handle, dashes, dashes.Length, offset);
+               }
+
+               [Obsolete("Use GetSource/SetSource")]
+               public Pattern Pattern {
+                       set {
+                               SetSource (value);
+                       }
+                       get {
+                               return GetSource ();
+                       }
+               }
+
+               //This is obsolete because it wasn't obvious it needed to be disposed
+               [Obsolete("Use GetSource/SetSource")]
+               public Pattern Source {
+                       set {
+                               SetSource (value);
+                       }
+                       get {
+                               return GetSource ();
+                       }
+               }
+
+               public void SetSource (Pattern source)
+               {
+                       NativeMethods.cairo_set_source (handle, source.Handle);
+               }
+
+               public Pattern GetSource ()
+               {
+                       var ptr = NativeMethods.cairo_get_source (handle);
+                       return Cairo.Pattern.Lookup (ptr, false);
+               }
+
+               public double MiterLimit {
+                       set {
+                               NativeMethods.cairo_set_miter_limit (handle, value);
+                       }
+
+                       get {
+                               return NativeMethods.cairo_get_miter_limit (handle);
+                       }
+               }
+
+               public PointD CurrentPoint {
+                       get {
+                               double x, y;
+                               NativeMethods.cairo_get_current_point (handle, out x, out y);
+                               return new PointD (x, y);
+                       }
+               }
+
+               public bool HasCurrentPoint {
+                       get {
+                               return NativeMethods.cairo_has_current_point (handle);
+                       }
+               }
+
+               [Obsolete ("Use GetTarget/SetTarget")]
+               public Cairo.Surface Target {
+                       set {
+                               if (handle != IntPtr.Zero)
+                                       NativeMethods.cairo_destroy (handle);
+
+                               handle = NativeMethods.cairo_create (value.Handle);
+                       }
+
+                       get {
+                               return GetTarget ();
+                       }
+               }
+
+               public Surface GetTarget ()
+               {
+                       return Surface.Lookup (NativeMethods.cairo_get_target (handle), false);
+               }
+
+               public void SetTarget (Surface target)
+               {
+                       if (handle != IntPtr.Zero)
+                               NativeMethods.cairo_destroy (handle);
+                       handle = NativeMethods.cairo_create (target.Handle);
+               }
+
+               [Obsolete("Use GetScaledFont/SetScaledFont")]
+               public ScaledFont ScaledFont {
+                       set {
+                               SetScaledFont (value);
+                       }
+
+                       get {
+                               return GetScaledFont ();
+                       }
+               }
+
+               public ScaledFont GetScaledFont ()
+               {
+                       return new ScaledFont (NativeMethods.cairo_get_scaled_font (handle), false);
+               }
+
+               public void SetScaledFont (ScaledFont font)
+               {
+                       NativeMethods.cairo_set_scaled_font (handle, font.Handle);
+               }
+
+               public uint ReferenceCount {
+                       get { return NativeMethods.cairo_get_reference_count (handle); }
+               }
+
+               public void SetSource (Color color)
+               {
+                       NativeMethods.cairo_set_source_rgba (handle, color.R / 255.0, color.G / 255.0, color.B / 255.0, color.A / 255.0);
+               }
+
+               public void SetSource (double r, double g, double b)
+               {
+                       NativeMethods.cairo_set_source_rgb (handle, r, g, b);
+               }
+
+               public void SetSource (double r, double g, double b, double a)
+               {
+                       NativeMethods.cairo_set_source_rgba (handle, r, g, b, a);
+               }
+
+               //[Obsolete ("Use SetSource method (with double parameters)")]
+               public void SetSource (Surface source, int x = 0, int y = 0)
+               {
+                       NativeMethods.cairo_set_source_surface (handle, source.Handle, x, y);
+               }
+
+               public void SetSource (Surface source, double x, double y)
+               {
+                       NativeMethods.cairo_set_source_surface (handle, source.Handle, x, y);
+               }
+
+               public void SetSource (Surface source)
+               {
+                       NativeMethods.cairo_set_source_surface (handle, source.Handle, 0, 0);
+               }
+
+#region Path methods
+
+               public void NewPath ()
+               {
+                       NativeMethods.cairo_new_path (handle);
+               }
+
+               public void NewSubPath ()
+               {
+                       NativeMethods.cairo_new_sub_path (handle);
+               }
+
+               public void MoveTo (PointD p)
+               {
+                       MoveTo (p.X, p.Y);
+               }
+
+               public void MoveTo (double x, double y)
+               {
+                       NativeMethods.cairo_move_to (handle, x, y);
+               }
+
+               public void LineTo (PointD p)
+               {
+                       LineTo (p.X, p.Y);
+               }
+
+               public void LineTo (double x, double y)
+               {
+                       NativeMethods.cairo_line_to (handle, x, y);
+               }
+
+               public void CurveTo (PointD p1, PointD p2, PointD p3)
+               {
+                       CurveTo (p1.X, p1.Y, p2.X, p2.Y, p3.X, p3.Y);
+               }
+
+               public void CurveTo (double x1, double y1, double x2, double y2, double x3, double y3)
+               {
+                       NativeMethods.cairo_curve_to (handle, x1, y1, x2, y2, x3, y3);
+               }
+
+               public void RelMoveTo (Distance d)
+               {
+                       RelMoveTo (d.Dx, d.Dy);
+               }
+
+               public void RelMoveTo (double dx, double dy)
+               {
+                       NativeMethods.cairo_rel_move_to (handle, dx, dy);
+               }
+
+               public void RelLineTo (Distance d)
+               {
+                       RelLineTo (d.Dx, d.Dy);
+               }
+
+               public void RelLineTo (double dx, double dy)
+               {
+                       NativeMethods.cairo_rel_line_to (handle, dx, dy);
+               }
+
+               public void RelCurveTo (Distance d1, Distance d2, Distance d3)
+               {
+                       RelCurveTo (d1.Dx, d1.Dy, d2.Dx, d2.Dy, d3.Dx, d3.Dy);
+               }
+
+               public void RelCurveTo (double dx1, double dy1, double dx2, double dy2, double dx3, double dy3)
+               {
+                       NativeMethods.cairo_rel_curve_to (handle, dx1, dy1, dx2, dy2, dx3, dy3);
+               }
+
+               public void Arc (double xc, double yc, double radius, double angle1, double angle2)
+               {
+                       NativeMethods.cairo_arc (handle, xc, yc, radius, angle1, angle2);
+               }
+               public void Arc (PointD center, double radius, double angle1, double angle2)
+               {
+                       NativeMethods.cairo_arc (handle, center.X, center.Y, radius, angle1, angle2);
+               }
+
+               public void ArcNegative (double xc, double yc, double radius, double angle1, double angle2)
+               {
+                       NativeMethods.cairo_arc_negative (handle, xc, yc, radius, angle1, angle2);
+               }
+               public void ArcNegative (PointD center, double radius, double angle1, double angle2)
+               {
+                       NativeMethods.cairo_arc_negative (handle, center.X, center.Y, radius, angle1, angle2);
+               }
+
+               public void Rectangle (Crow.Rectangle rectangle)
+               {
+                       Rectangle (rectangle.X, rectangle.Y, rectangle.Width, rectangle.Height);
+               }
+               public void Rectangle (Crow.RectangleD rectangle)
+               {
+                       Rectangle (rectangle.X, rectangle.Y, rectangle.Width, rectangle.Height);
+               }
+
+               public void Rectangle (PointD p, double width, double height)
+               {
+                       Rectangle (p.X, p.Y, width, height);
+               }
+
+               public void Rectangle (double x, double y, double width, double height)
+               {
+                       NativeMethods.cairo_rectangle (handle, x, y, width, height);
+               }
+
+               public void ClosePath ()
+               {
+                       NativeMethods.cairo_close_path (handle);
+               }
+
+               public Path CopyPath ()
+               {
+                       return new Path (NativeMethods.cairo_copy_path (handle));
+               }
+
+               public Path CopyPathFlat ()
+               {
+                       return new Path (NativeMethods.cairo_copy_path_flat (handle));
+               }
+
+               public void AppendPath (Path path)
+               {
+                       NativeMethods.cairo_append_path (handle, path.Handle);
+               }
+
+#endregion
+
+#region Painting Methods
+               public void Paint ()
+               {
+                       NativeMethods.cairo_paint (handle);
+               }
+
+               public void PaintWithAlpha (double alpha)
+               {
+                       NativeMethods.cairo_paint_with_alpha (handle, alpha);
+               }
+
+               public void Mask (Pattern pattern)
+               {
+                       NativeMethods.cairo_mask (handle, pattern.Handle);
+               }
+
+               public void MaskSurface (Surface surface, double surface_x, double surface_y)
+               {
+                       NativeMethods.cairo_mask_surface (handle, surface.Handle, surface_x, surface_y);
+               }
+
+               public void Stroke ()
+               {
+                       NativeMethods.cairo_stroke (handle);
+               }
+
+               public void StrokePreserve ()
+               {
+                       NativeMethods.cairo_stroke_preserve (handle);
+               }
+
+               public Crow.Rectangle StrokeExtents ()
+               {
+                       double x1, y1, x2, y2;
+                       NativeMethods.cairo_stroke_extents (handle, out x1, out y1, out x2, out y2);
+                       return new Crow.Rectangle ((int)x1, (int)y1, (int)(x2 - x1), (int)(y2 - y1));
+               }
+
+               public void Fill ()
+               {
+                       NativeMethods.cairo_fill (handle);
+               }
+
+               public Crow.Rectangle FillExtents ()
+               {
+                       double x1, y1, x2, y2;
+                       NativeMethods.cairo_fill_extents (handle, out x1, out y1, out x2, out y2);
+                       return new Crow.Rectangle ((int)x1, (int)y1, (int)(x2 - x1), (int)(y2 - y1));
+               }
+
+               public void FillPreserve ()
+               {
+                       NativeMethods.cairo_fill_preserve (handle);
+               }
+
+#endregion
+
+               public void Clip ()
+               {
+                       NativeMethods.cairo_clip (handle);
+               }
+
+               public void ClipPreserve ()
+               {
+                       NativeMethods.cairo_clip_preserve (handle);
+               }
+
+               public void ResetClip ()
+               {
+                       NativeMethods.cairo_reset_clip (handle);
+               }
+
+               public bool InClip (double x, double y)
+               {
+                       return NativeMethods.cairo_in_clip (handle, x, y);
+               }
+               public RectangleList GetClipRectangles (){
+                       return (RectangleList)Marshal.PtrToStructure (NativeMethods.cairo_copy_clip_rectangle_list (handle), typeof(RectangleList));
+               }
+               public void ClipExtendRectangle (){
+                       double x1, y1, x2, y2;
+                       NativeMethods.cairo_clip_extents (handle, out x1, out y1, out x2, out y2);
+                       NativeMethods.cairo_rectangle (handle, x1, y1, x2 - x1, y2 - y1); 
+               }
+               public bool InStroke (double x, double y)
+               {
+                       return NativeMethods.cairo_in_stroke (handle, x, y);
+               }
+
+               public bool InFill (double x, double y)
+               {
+                       return NativeMethods.cairo_in_fill (handle, x, y);
+               }
+
+               public Pattern PopGroup ()
+               {
+                       return Pattern.Lookup (NativeMethods.cairo_pop_group (handle), true);
+               }
+
+               public void PopGroupToSource ()
+               {
+                       NativeMethods.cairo_pop_group_to_source (handle);
+               }
+
+               public void PushGroup ()
+               {
+                       NativeMethods.cairo_push_group (handle);
+               }
+
+               public void PushGroup (Content content)
+               {
+                       NativeMethods.cairo_push_group_with_content (handle, content);
+               }
+
+               [Obsolete ("Use GetGroupTarget()")]
+               public Surface GroupTarget {
+                       get {
+                               return GetGroupTarget ();
+                       }
+               }
+
+               public Surface GetGroupTarget ()
+               {
+                       IntPtr surface = NativeMethods.cairo_get_group_target (handle);
+                       return Surface.Lookup (surface, false);
+               }
+
+               public void Rotate (double angle)
+               {
+                       NativeMethods.cairo_rotate (handle, angle);
+               }
+
+               public void Scale (double sx, double sy)
+               {
+                       NativeMethods.cairo_scale (handle, sx, sy);
+               }
+
+               public void Translate (double tx, double ty)
+               {
+                       NativeMethods.cairo_translate (handle, tx, ty);
+               }
+
+               public void Transform (Matrix m)
+               {
+                       NativeMethods.cairo_transform (handle, m);
+               }
+
+               [Obsolete("Use UserToDevice instead")]
+               public void TransformPoint (ref double x, ref double y)
+               {
+                       NativeMethods.cairo_user_to_device (handle, ref x, ref y);
+               }
+
+               [Obsolete("Use UserToDeviceDistance instead")]
+               public void TransformDistance (ref double dx, ref double dy)
+               {
+                       NativeMethods.cairo_user_to_device_distance (handle, ref dx, ref dy);
+               }
+
+               [Obsolete("Use InverseTransformPoint instead")]
+               public void InverseTransformPoint (ref double x, ref double y)
+               {
+                       NativeMethods.cairo_device_to_user (handle, ref x, ref y);
+               }
+
+               [Obsolete("Use DeviceToUserDistance instead")]
+               public void InverseTransformDistance (ref double dx, ref double dy)
+               {
+                       NativeMethods.cairo_device_to_user_distance (handle, ref dx, ref dy);
+               }
+
+               public void UserToDevice (ref double x, ref double y)
+               {
+                       NativeMethods.cairo_user_to_device (handle, ref x, ref y);
+               }
+
+               public void UserToDeviceDistance (ref double dx, ref double dy)
+               {
+                       NativeMethods.cairo_user_to_device_distance (handle, ref dx, ref dy);
+               }
+
+               public void DeviceToUser (ref double x, ref double y)
+               {
+                       NativeMethods.cairo_device_to_user (handle, ref x, ref y);
+               }
+
+               public void DeviceToUserDistance (ref double dx, ref double dy)
+               {
+                       NativeMethods.cairo_device_to_user_distance (handle, ref dx, ref dy);
+               }
+
+               public Matrix Matrix {
+                       set {
+                               NativeMethods.cairo_set_matrix (handle, value);
+                       }
+
+                       get {
+                               Matrix m = new Matrix();
+                               NativeMethods.cairo_get_matrix (handle, m);
+                               return m;
+                       }
+               }
+
+               public void SetFontSize (double scale)
+               {
+                       NativeMethods.cairo_set_font_size (handle, scale);
+               }
+
+               public void IdentityMatrix ()
+               {
+                       NativeMethods.cairo_identity_matrix (handle);
+               }
+
+               [Obsolete ("Use SetFontSize() instead.")]
+               public void FontSetSize (double scale)
+               {
+                       SetFontSize (scale);
+               }
+
+               [Obsolete ("Use SetFontSize() instead.")]
+               public double FontSize {
+                       set { SetFontSize (value); }
+               }
+
+               public Matrix FontMatrix {
+                       get {
+                               Matrix m;
+                               NativeMethods.cairo_get_font_matrix (handle, out m);
+                               return m;
+                       }
+                       set { NativeMethods.cairo_set_font_matrix (handle, value); }
+               }
+
+               public FontOptions FontOptions {
+                       get {
+                               FontOptions options = new FontOptions ();
+                               NativeMethods.cairo_get_font_options (handle, options.Handle);
+                               return options;
+                       }
+                       set { NativeMethods.cairo_set_font_options (handle, value.Handle); }
+               }
+
+               [StructLayout(LayoutKind.Sequential)]
+               internal struct NativeGlyph_4byte_longs {
+                       public int index;
+                       public double x;
+                       public double y;
+
+                       public NativeGlyph_4byte_longs (Glyph source)
+                       {
+                               index = (int) source.index;
+                               x = source.x;
+                               y = source.y;
+                       }
+               }
+
+               static internal IntPtr FromGlyphToUnManagedMemory(Glyph [] glyphs)
+               {
+                       IntPtr dest = Marshal.AllocHGlobal (native_glyph_size * glyphs.Length);
+                       long pos = dest.ToInt64();
+
+                       if (c_compiler_long_size == 8){
+                               foreach (Glyph g in glyphs){
+                                       Marshal.StructureToPtr (g, (IntPtr)pos, false);
+                                       pos += native_glyph_size;
+                               }
+                       } else {
+                               foreach (Glyph g in glyphs){
+                                       NativeGlyph_4byte_longs n = new NativeGlyph_4byte_longs (g);
+
+                                       Marshal.StructureToPtr (n, (IntPtr)pos, false);
+                                       pos += native_glyph_size;
+                               }
+                       }
+
+                       return dest;
+               }
+
+               public void ShowGlyphs (Glyph[] glyphs)
+               {
+                       IntPtr ptr;
+
+                       ptr = FromGlyphToUnManagedMemory (glyphs);
+
+                       NativeMethods.cairo_show_glyphs (handle, ptr, glyphs.Length);
+
+                       Marshal.FreeHGlobal (ptr);
+               }
+
+               [Obsolete("The matrix argument was never used, use ShowGlyphs(Glyphs []) instead")]
+               public void ShowGlyphs (Matrix matrix, Glyph[] glyphs)
+               {
+                       ShowGlyphs (glyphs);
+               }
+
+               [Obsolete("The matrix argument was never used, use GlyphPath(Glyphs []) instead")]
+               public void GlyphPath (Matrix matrix, Glyph[] glyphs)
+               {
+                       GlyphPath (glyphs);
+               }
+
+               public void GlyphPath (Glyph[] glyphs)
+               {
+                       IntPtr ptr;
+
+                       ptr = FromGlyphToUnManagedMemory (glyphs);
+
+                       NativeMethods.cairo_glyph_path (handle, ptr, glyphs.Length);
+
+                       Marshal.FreeHGlobal (ptr);
+
+               }
+
+               public FontExtents FontExtents {
+                       get {
+                               FontExtents f_extents;
+                               NativeMethods.cairo_font_extents (handle, out f_extents);
+                               return f_extents;
+                       }
+               }
+
+               public void CopyPage ()
+               {
+                       NativeMethods.cairo_copy_page (handle);
+               }
+
+               [Obsolete ("Use SelectFontFace() instead.")]
+               public void FontFace (string family, FontSlant slant, FontWeight weight)
+               {
+                       SelectFontFace (family, slant, weight);
+               }
+
+               [Obsolete("Use GetFontFace/SetFontFace")]
+               public FontFace ContextFontFace {
+                       get {
+                               return GetContextFontFace ();
+                       }
+                       set {
+                               SetContextFontFace (value);
+                       }
+               }
+
+               public FontFace GetContextFontFace ()
+               {
+                       return Cairo.FontFace.Lookup (NativeMethods.cairo_get_font_face (handle), false);
+               }
+
+               public void SetContextFontFace (FontFace value)
+               {
+                       NativeMethods.cairo_set_font_face (handle, value == null ? IntPtr.Zero : value.Handle);
+               }
+
+               public void SelectFontFace (string family, FontSlant slant, FontWeight weight)
+               {
+                       NativeMethods.cairo_select_font_face (handle, family, slant, weight);
+               }
+
+               public void ShowPage ()
+               {
+                       NativeMethods.cairo_show_page (handle);
+               }
+
+               private static byte[] TerminateUtf8(byte[] utf8)
+               {
+                       if (utf8.Length > 0 && utf8[utf8.Length - 1] == 0)
+                               return utf8;
+                       var termedArray = new byte[utf8.Length + 1];
+                       Array.Copy(utf8, termedArray, utf8.Length);
+                       termedArray[utf8.Length] = 0;
+                       return termedArray;
+               }
+
+               private static byte[] TerminateUtf8(string s)
+               {
+                       // compute the byte count including the trailing \0
+                       var byteCount = Encoding.UTF8.GetMaxByteCount(s.Length + 1);
+                       var bytes = new byte[byteCount];
+                       Encoding.UTF8.GetBytes(s, 0, s.Length, bytes, 0);
+                       return bytes;
+               }
+
+               public void ShowText(string str)
+               {
+                       NativeMethods.cairo_show_text (handle, TerminateUtf8 (str));
+               }
+
+
+               public void TextPath(string str)
+               {
+                       NativeMethods.cairo_text_path (handle, TerminateUtf8(str));
+               }
+
+               public void TextPath(byte[] utf8)
+               {
+                       NativeMethods.cairo_text_path (handle, TerminateUtf8(utf8));
+               }
+
+               public TextExtents TextExtents(string s)
+               {
+                       TextExtents extents;
+                       NativeMethods.cairo_text_extents (handle, TerminateUtf8(s), out extents);
+                       return extents;
+               }
+               public void ShowText (ReadOnlySpan<char> s, int tabSize) {
+                       int size = s.Length * 4 + 1;
+                       Span<byte> bytes = size > 512 ? new byte[size] : stackalloc byte[size];
+                       int encodedBytes = Crow.Text.Encoding.ToUtf8 (s, bytes, tabSize);
+                       bytes[encodedBytes] = 0;
+                       ShowText (bytes.Slice (0, encodedBytes + 1));
+               }
+               public TextExtents TextExtents (ReadOnlySpan<char> s, int tabSize) {
+                       TextExtents (s, tabSize, out TextExtents extents);                      
+                       return extents;
+               }
+               public void TextExtents (ReadOnlySpan<char> s, int tabSize, out TextExtents extents) {
+                       int size = s.Length * 4 + 1;
+                       Span<byte> bytes = size > 512 ? new byte[size] : stackalloc byte[size];
+                       int encodedBytes = Crow.Text.Encoding.ToUtf8 (s, bytes, tabSize);
+                       bytes[encodedBytes] = 0;
+                       TextExtents (bytes.Slice (0, encodedBytes + 1), out extents);
+               }
+               public void ShowText (Span<byte> bytes) {
+                       NativeMethods.cairo_show_text (handle, ref bytes.GetPinnableReference());
+               }
+               public void TextExtents (Span<byte> bytes, out TextExtents extents) {
+                       NativeMethods.cairo_text_extents (handle, ref bytes.GetPinnableReference (), out extents);
+               }
+
+               public TextExtents GlyphExtents (Glyph[] glyphs)
+               {
+                       IntPtr ptr = FromGlyphToUnManagedMemory (glyphs);
+
+                       TextExtents extents;
+
+                       NativeMethods.cairo_glyph_extents (handle, ptr, glyphs.Length, out extents);
+
+                       Marshal.FreeHGlobal (ptr);
+
+                       return extents;
+               }
+       }
+}
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/DRMDevice.cs b/Crow/src/GraphicBackends/Mono.Cairo/DRMDevice.cs
new file mode 100644 (file)
index 0000000..c08ad03
--- /dev/null
@@ -0,0 +1,53 @@
+//
+// Mono.Cairo.Device.cs
+//
+// Authors:
+//                     JP Bruyère (jp_bruyere@hotmail.com)
+//
+// This is an OO wrapper API for the Cairo API
+//
+// Copyright (C) 2016 JP Bruyère
+//
+// 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;
+
+namespace Crow.Drawing
+{
+       public class DRMDevice : Device
+       {
+               public DRMDevice () : base (NativeMethods.cairo_drm_device_default (), true)
+               {
+               }
+               public DRMDevice (int fd) : base (NativeMethods.cairo_drm_device_get_for_fd (fd), true)
+               {
+               }
+               public DRMDevice (IntPtr udev_device) : base (NativeMethods.cairo_drm_device_get (udev_device), true)
+               {
+               }
+
+               public int FileDescriptor {
+                       get { return NativeMethods.cairo_drm_device_get_fd (Handle); }
+               }
+
+               public void DeviceThrottle () { NativeMethods.cairo_drm_device_throttle (Handle);}
+       }
+}
+
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/DRMSurface.cs b/Crow/src/GraphicBackends/Mono.Cairo/DRMSurface.cs
new file mode 100644 (file)
index 0000000..b1fcfb7
--- /dev/null
@@ -0,0 +1,53 @@
+//
+// Mono.Cairo.GLSurface.cs
+//
+// Authors:
+//                     JP Bruyère (jp_bruyere@hotmail.com)
+//
+// This is an OO wrapper API for the Cairo API
+//
+// Copyright (C) 2016 JP Bruyère
+//
+// 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;
+
+namespace Crow.Drawing {
+
+       public class DRMSurface : Surface
+       {
+               
+               public DRMSurface (IntPtr ptr, bool own) : base (ptr, own)
+               {}
+
+               public DRMSurface (DRMDevice device, Format format, int width, int height)
+                       : base (NativeMethods.cairo_drm_surface_create (device.Handle, format, width, height), true)
+               {}
+
+               public DRMSurface (DRMDevice device, uint name, Format format, int width, int height, int stride)
+                       : base (NativeMethods.cairo_drm_surface_create_for_name (device.Handle, name, format, width, height, stride), true)
+               {}
+
+               public DRMSurface (DRMDevice device, IntPtr imageSurface)
+                       : base (NativeMethods.cairo_drm_surface_create_from_cacheable_image (device.Handle, imageSurface), true)
+               {}
+       }
+}
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/Device.cs b/Crow/src/GraphicBackends/Mono.Cairo/Device.cs
new file mode 100644 (file)
index 0000000..426d4ca
--- /dev/null
@@ -0,0 +1,101 @@
+//
+// Mono.Cairo.Device.cs
+//
+// Authors:
+//                     JP Bruyère (jp_bruyere@hotmail.com)
+//
+// This is an OO wrapper API for the Cairo API
+//
+// Copyright (C) 2016 JP Bruyère
+//
+// 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;
+
+namespace Crow.Drawing
+{
+       public class Device : IDisposable
+       {
+               IntPtr handle = IntPtr.Zero;
+
+               protected Device()
+               {
+               }
+
+               protected Device (IntPtr ptr) : this (ptr, true)
+               {
+               }
+
+               protected Device (IntPtr handle, bool owner)
+               {
+                       this.handle = handle;
+                       if (!owner)
+                               NativeMethods.cairo_device_reference (handle);
+                       if (CairoDebug.Enabled)
+                               CairoDebug.OnAllocated (handle);
+               }
+
+               ~Device ()
+               {
+                       Dispose (false);
+               }
+
+               public IntPtr Handle {
+                       get {
+                               return handle;
+                       }
+               }
+               public string Status {
+                       get {
+                return System.Runtime.InteropServices.Marshal.PtrToStringAuto(NativeMethods.cairo_status_to_string (NativeMethods.cairo_device_status (handle)));
+                       }
+               }
+               public void SetThreadAware (bool value){
+                       NativeMethods.cairo_gl_device_set_thread_aware (handle, value ? 1 : 0);
+               }
+               public Status Acquire()
+               {
+                       return NativeMethods.cairo_device_acquire (handle);
+               }
+               public void Release()
+               {
+                       NativeMethods.cairo_device_release (handle);
+               }
+
+               public void Dispose ()
+               {
+                       Dispose (true);
+                       GC.SuppressFinalize (this);
+               }
+
+               protected virtual void Dispose (bool disposing)
+               {
+                       if (!disposing || CairoDebug.Enabled)
+                               CairoDebug.OnDisposed<Device> (handle, disposing);
+
+                       if (!disposing || handle == IntPtr.Zero)
+                               return;
+
+                       NativeMethods.cairo_device_destroy (handle);
+                       handle = IntPtr.Zero;
+               }
+       }
+}
+
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/DirectFBSurface.cs b/Crow/src/GraphicBackends/Mono.Cairo/DirectFBSurface.cs
new file mode 100644 (file)
index 0000000..4f52ec7
--- /dev/null
@@ -0,0 +1,43 @@
+//
+// Mono.Cairo.DirectFBSurface.cs
+//
+// Authors:
+//    Alp Toker
+//
+// (C) Alp Toker, 2006.
+//
+// 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;
+
+namespace Crow.Drawing {
+       public class DirectFBSurface : Surface
+       {
+               internal DirectFBSurface (IntPtr handle, bool owns) : base (handle, owns)
+               {
+               }
+
+               public DirectFBSurface (IntPtr dfb, IntPtr dfb_surface)
+                       : base (NativeMethods.cairo_directfb_surface_create (dfb, dfb_surface), true)
+               {
+               }
+       }
+}
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/Distance.cs b/Crow/src/GraphicBackends/Mono.Cairo/Distance.cs
new file mode 100644 (file)
index 0000000..eaa7d5a
--- /dev/null
@@ -0,0 +1,58 @@
+//
+// Mono.Cairo.Context.cs
+//
+// Author:
+//   Duncan Mak (duncan@ximian.com)
+//   Miguel de Icaza (miguel@novell.com)
+//   Hisham Mardam Bey (hisham.mardambey@gmail.com)
+//   Alp Toker (alp@atoker.com)
+//
+// (C) Ximian Inc, 2003.
+// (C) Novell Inc, 2003.
+//
+// This is an OO wrapper API for the Cairo API.
+//
+// Copyright (C) 2004 Novell, Inc (http://www.novell.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.
+//
+
+namespace Crow.Drawing {
+
+       public struct Distance
+       {
+               public Distance (double dx, double dy)
+               {
+                       this.dx = dx;
+                       this.dy = dy;
+               }
+
+               double dx, dy;
+               public double Dx {
+                       get { return dx; }
+                       set { dx = value; }
+               }
+
+               public double Dy {
+                       get { return dy; }
+                       set { dy = value; }
+               }
+       }
+}
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/EGLDevice.cs b/Crow/src/GraphicBackends/Mono.Cairo/EGLDevice.cs
new file mode 100644 (file)
index 0000000..9315088
--- /dev/null
@@ -0,0 +1,41 @@
+//
+// Mono.Cairo.Device.cs
+//
+// Authors:
+//                     JP Bruyère (jp_bruyere@hotmail.com)
+//
+// This is an OO wrapper API for the Cairo API
+//
+// Copyright (C) 2016 JP Bruyère
+//
+// 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;
+
+namespace Crow.Drawing
+{
+       public class EGLDevice : Device
+       {
+               public EGLDevice (IntPtr dpy, IntPtr gl_ctx) : base (NativeMethods.cairo_egl_device_create (dpy, gl_ctx), true)
+               {
+               }
+       }
+}
+
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/Extend.cs b/Crow/src/GraphicBackends/Mono.Cairo/Extend.cs
new file mode 100644 (file)
index 0000000..01a7969
--- /dev/null
@@ -0,0 +1,45 @@
+//
+// Mono.Cairo.Extend.cs
+//
+// Authors:
+//   Duncan Mak (duncan@ximian.com)
+//   Hisham Mardam Bey (hisham.mardambey@gmail.com)
+//   John Luke (john.luke@gmail.com)
+//
+// (C) Ximian, Inc. 2003
+// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2005 John Luke
+//
+// 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;
+
+namespace Crow.Drawing
+{
+       
+       public enum Extend
+       {
+               None,
+               Repeat,
+               Reflect,
+               Pad,
+       }
+}
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/FillRule.cs b/Crow/src/GraphicBackends/Mono.Cairo/FillRule.cs
new file mode 100644 (file)
index 0000000..314a783
--- /dev/null
@@ -0,0 +1,41 @@
+//
+// Mono.Cairo.FillRule.cs
+//
+// Authors:
+//   Duncan Mak (duncan@ximian.com)
+//   Hisham Mardam Bey (hisham.mardambey@gmail.com)
+//
+// (C) Ximian, Inc. 2003
+// Copyright (C) 2004 Novell, Inc (http://www.novell.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;
+
+namespace Crow.Drawing
+{
+       
+       public enum FillRule
+       {
+               Winding,
+               EvenOdd
+       }
+}
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/Filter.cs b/Crow/src/GraphicBackends/Mono.Cairo/Filter.cs
new file mode 100644 (file)
index 0000000..5b52104
--- /dev/null
@@ -0,0 +1,45 @@
+//
+// Mono.Cairo.Filter.cs
+//
+// Authors:
+//   Duncan Mak (duncan@ximian.com)
+//   Hisham Mardam Bey (hisham.mardambey@gmail.com)
+//
+// (C) Ximian, Inc. 2003
+// Copyright (C) 2004 Novell, Inc (http://www.novell.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;
+
+namespace Crow.Drawing
+{
+       
+       public enum Filter
+       {
+               Fast,
+               Good,
+               Best,
+               Nearest,
+               Bilinear,
+               Gaussian,
+       }
+}
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/FontExtents.cs b/Crow/src/GraphicBackends/Mono.Cairo/FontExtents.cs
new file mode 100644 (file)
index 0000000..99a26d2
--- /dev/null
@@ -0,0 +1,104 @@
+//
+// Mono.Cairo.FontExtents.cs
+//
+// Authors: Duncan Mak (duncan@ximian.com)
+//          Hisham Mardam Bey (hisham.mardambey@gmail.com)
+//
+// (C) Ximian, Inc. 2003
+//
+// This is a simplistic binding of the Cairo API to C#. All functions
+// in cairo.h are transcribed into their C# equivelants
+//
+// Copyright (C) 2004 Novell, Inc (http://www.novell.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 Crow.Drawing
+{
+       [StructLayout (LayoutKind.Sequential)]
+       public struct FontExtents
+       {
+               double ascent;
+               double descent;
+               double height;
+               double maxXAdvance;
+               double maxYAdvance;
+               
+               public double Ascent {
+                       get { return ascent; }
+                       set { ascent = value; }
+               }
+               
+               public double Descent {
+                       get { return descent; }
+                       set { descent = value; }
+               }
+               
+               public double Height {
+                       get { return height; }
+                       set { height = value; }
+               }
+               
+               public double MaxXAdvance {
+                       get { return maxXAdvance; }
+                       set { maxXAdvance = value; }
+               }
+               
+               public double MaxYAdvance {
+                       get { return maxYAdvance; }
+                       set { maxYAdvance = value; }
+               }
+
+               public FontExtents (double ascent, double descent, double height, double maxXAdvance, double maxYAdvance)
+               {
+                       this.ascent = ascent;
+                       this.descent = descent;
+                       this.height = height;
+                       this.maxXAdvance = maxXAdvance;
+                       this.maxYAdvance = maxYAdvance;
+               }
+
+               public override bool Equals (object obj)
+               {
+                       if (obj is FontExtents)
+                               return this == (FontExtents) obj;
+                       return false;
+               }
+
+               public override int GetHashCode ()
+               {
+                       return (int) Ascent ^ (int) Descent ^ (int) Height ^ (int) MaxXAdvance ^ (int) MaxYAdvance;
+               }
+
+               public static bool operator == (FontExtents extents, FontExtents other)
+               {
+                       return extents.Ascent == other.Ascent && extents.Descent == other.Descent && extents.Height == other.Height && extents.MaxXAdvance == other.MaxXAdvance && extents.MaxYAdvance == other.MaxYAdvance;
+               }
+
+               public static bool operator != (FontExtents extents, FontExtents other)
+               {
+                       return !(extents == other);
+               }
+       }
+}
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/FontFace.cs b/Crow/src/GraphicBackends/Mono.Cairo/FontFace.cs
new file mode 100644 (file)
index 0000000..e4fd1a6
--- /dev/null
@@ -0,0 +1,108 @@
+//
+// Mono.Cairo.FontFace.cs
+//
+// Author:
+//   Alp Toker (alp@atoker.com)
+//   Miguel de Icaza (miguel@novell.com)
+//
+// (C) Ximian Inc, 2003.
+//
+// This is an OO wrapper API for the Cairo API.
+//
+// Copyright (C) 2004, 2007 Novell, Inc (http://www.novell.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;
+
+namespace Crow.Drawing
+{
+       public class FontFace : IDisposable
+       {
+               IntPtr handle;
+
+               internal static FontFace Lookup (IntPtr handle, bool owner)
+               {
+                       if (handle == IntPtr.Zero)
+                               return null;
+                       return new FontFace (handle, owner);
+               }
+
+               ~FontFace ()
+               {
+                       Dispose (false);
+               }
+
+               public void Dispose ()
+               {
+                       Dispose (true);
+                       GC.SuppressFinalize (this);
+               }
+
+               protected virtual void Dispose (bool disposing)
+               {
+                       if (!disposing || CairoDebug.Enabled)
+                               CairoDebug.OnDisposed<FontFace> (handle, disposing);
+
+                       if (!disposing|| handle == IntPtr.Zero)
+                               return;
+
+                       NativeMethods.cairo_font_face_destroy (handle);
+                       handle = IntPtr.Zero;
+               }
+
+               [Obsolete]
+               public FontFace (IntPtr handle) : this (handle, true)
+               {
+               }
+
+               public FontFace (IntPtr handle, bool owned)
+               {
+                       this.handle = handle;
+                       if (!owned)
+                               NativeMethods.cairo_font_face_reference (handle);
+                       if (CairoDebug.Enabled)
+                               CairoDebug.OnAllocated (handle);
+               }
+
+               public IntPtr Handle {
+                       get {
+                               return handle;
+                       }
+               }
+
+               public Status Status {
+                       get {
+                               return NativeMethods.cairo_font_face_status (handle);
+                       }
+               }
+               
+               public FontType FontType {
+                       get {
+                               return NativeMethods.cairo_font_face_get_type (handle);
+                       }
+               }
+
+               public uint ReferenceCount {
+                       get { return NativeMethods.cairo_font_face_get_reference_count (handle); }
+               }
+       }
+}
+
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/FontOptions.cs b/Crow/src/GraphicBackends/Mono.Cairo/FontOptions.cs
new file mode 100644 (file)
index 0000000..977b699
--- /dev/null
@@ -0,0 +1,143 @@
+//
+// Mono.Cairo.FontOptions.cs
+//
+// Author:
+//   John Luke (john.luke@gmail.com)
+//
+// (C) John Luke 2005.
+//
+// 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;
+
+namespace Crow.Drawing
+{
+       public class FontOptions : IDisposable
+       {
+               IntPtr handle;
+
+               public FontOptions () : this (NativeMethods.cairo_font_options_create ())
+               {
+               }
+
+               ~FontOptions ()
+               {
+                       Dispose (false);
+               }
+
+               internal FontOptions (IntPtr handle)
+               {
+                       this.handle = handle;
+                       if (CairoDebug.Enabled)
+                               CairoDebug.OnAllocated (handle);
+               }
+
+               public FontOptions Copy ()
+               {
+                       return new FontOptions (NativeMethods.cairo_font_options_copy (handle));
+               }
+
+               [Obsolete ("Use Dispose()")]
+               public void Destroy ()
+               {
+                       Dispose ();
+               }
+
+               public void Dispose ()
+               {
+                       Dispose (true);
+                       GC.SuppressFinalize (this);
+               }
+
+               protected virtual void Dispose (bool disposing)
+               {
+                       if (!disposing || CairoDebug.Enabled)
+                               CairoDebug.OnDisposed<FontOptions> (handle, disposing);
+
+                       if (!disposing|| handle == IntPtr.Zero)
+                               return;
+
+                       NativeMethods.cairo_font_options_destroy (handle);
+                       handle = IntPtr.Zero;
+               }
+
+               public static bool operator == (FontOptions options, FontOptions other)
+               {
+                       return Equals (options, other);
+               }
+
+               public static bool operator != (FontOptions options, FontOptions other)
+               {
+                       return !(options == other);
+               }
+
+               public override bool Equals (object other)
+               {
+                       return Equals (other as FontOptions);
+               }
+
+               bool Equals (FontOptions options)
+               {
+                       return options != null && NativeMethods.cairo_font_options_equal (Handle, options.Handle);
+               }
+
+               public IntPtr Handle {
+                       get { return handle; }
+               }
+
+               public override int GetHashCode ()
+               {
+                       return (int) NativeMethods.cairo_font_options_hash (handle);
+               }
+               
+               public void Merge (FontOptions other)
+               {
+                       if (other == null)
+                               throw new ArgumentNullException ("other");
+                       NativeMethods.cairo_font_options_merge (handle, other.Handle);
+               }
+
+               public Antialias Antialias {
+                       get { return NativeMethods.cairo_font_options_get_antialias (handle); }
+                       set { NativeMethods.cairo_font_options_set_antialias (handle, value); }
+               }
+
+               public HintMetrics HintMetrics {
+                       get { return NativeMethods.cairo_font_options_get_hint_metrics (handle);}
+                       set { NativeMethods.cairo_font_options_set_hint_metrics (handle, value); }
+               }
+
+               public HintStyle HintStyle {
+                       get { return NativeMethods.cairo_font_options_get_hint_style (handle);}
+                       set { NativeMethods.cairo_font_options_set_hint_style (handle, value); }
+               }
+
+               public Status Status {
+                       get { return NativeMethods.cairo_font_options_status (handle); }
+               }
+
+               public SubpixelOrder SubpixelOrder {
+                       get { return NativeMethods.cairo_font_options_get_subpixel_order (handle);}
+                       set { NativeMethods.cairo_font_options_set_subpixel_order (handle, value); }
+               }
+       }
+}
+
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/FontSlant.cs b/Crow/src/GraphicBackends/Mono.Cairo/FontSlant.cs
new file mode 100644 (file)
index 0000000..4ce74a2
--- /dev/null
@@ -0,0 +1,42 @@
+//
+// Mono.Cairo.FontSlant.cs
+//
+// Authors:
+//   Duncan Mak (duncan@ximian.com)
+//   Hisham Mardam Bey (hisham.mardambey@gmail.com)
+//
+// (C) Ximian, Inc. 2003
+// Copyright (C) 2004 Novell, Inc (http://www.novell.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;
+
+namespace Crow.Drawing
+{
+       
+       public enum FontSlant
+       {
+               Normal,
+               Italic,
+               Oblique
+       }
+}
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/FontType.cs b/Crow/src/GraphicBackends/Mono.Cairo/FontType.cs
new file mode 100644 (file)
index 0000000..80d672c
--- /dev/null
@@ -0,0 +1,41 @@
+//
+// Mono.Cairo.FontType.cs
+//
+// Authors:
+//    John Luke
+//
+// (C) John Luke, 2006.
+//
+// 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;
+
+namespace Crow.Drawing {
+
+       
+       public enum FontType
+       {
+               Toy,
+               FreeType,
+               Win32,
+               Atsui,
+       }
+}
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/FontWeight.cs b/Crow/src/GraphicBackends/Mono.Cairo/FontWeight.cs
new file mode 100644 (file)
index 0000000..51c0e8d
--- /dev/null
@@ -0,0 +1,41 @@
+//
+// Mono.Cairo.FontWeight.cs
+//
+// Authors:
+//   Duncan Mak (duncan@ximian.com)
+//   Hisham Mardam Bey (hisham.mardambey@gmail.com)
+//
+// (C) Ximian, Inc. 2003
+// Copyright (C) 2004 Novell, Inc (http://www.novell.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;
+
+namespace Crow.Drawing
+{
+       
+       public enum FontWeight
+       {
+               Normal,
+               Bold,
+       }
+}
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/Format.cs b/Crow/src/GraphicBackends/Mono.Cairo/Format.cs
new file mode 100644 (file)
index 0000000..4078b16
--- /dev/null
@@ -0,0 +1,48 @@
+//
+// Mono.Cairo.Format.cs
+//
+// Authors: Duncan Mak (duncan@ximian.com)
+//          Hisham Mardam Bey (hisham.mardambey@gmail.com)
+//
+// (C) Ximian, Inc. 2003
+// Copyright (C) 2004 Novell, Inc (http://www.novell.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;
+
+namespace Crow.Drawing
+{
+       
+       public enum Format
+       {
+               Argb32  = 0,
+               Rgb24   = 1,
+               A8      = 2,
+               A1      = 3,
+               Rgb16565 = 4,
+
+               //[Obsolete ("Use Argb32")]
+               ARGB32 = Argb32,
+               //[Obsolete ("Use Rgb24")]
+               RGB24   = Rgb24,
+       }
+}
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/GLSurface.cs b/Crow/src/GraphicBackends/Mono.Cairo/GLSurface.cs
new file mode 100644 (file)
index 0000000..54522f5
--- /dev/null
@@ -0,0 +1,61 @@
+//
+// Mono.Cairo.GLSurface.cs
+//
+// Authors:
+//                     JP Bruyère (jp_bruyere@hotmail.com)
+//
+// This is an OO wrapper API for the Cairo API
+//
+// Copyright (C) 2016 JP Bruyère
+//
+// 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;
+
+namespace Crow.Drawing {
+
+       public class GLSurface : Surface
+       {
+               
+               public GLSurface (IntPtr ptr, bool own) : base (ptr, own)
+               {}
+
+               public GLSurface (Device device, Cairo.Content content, uint tex, int width, int height)
+                       : base (NativeMethods.cairo_gl_surface_create_for_texture (device.Handle, (uint)content, tex, width, height), true)
+               {}
+
+               public GLSurface (EGLDevice device, IntPtr eglSurf, int width, int height)
+                       : base (NativeMethods.cairo_gl_surface_create_for_egl (device.Handle, eglSurf, width, height), true)
+               {}
+
+               public GLSurface (GLXDevice device, IntPtr window, int width, int height)
+                       : base (NativeMethods.cairo_gl_surface_create_for_window (device.Handle, window, width, height),true)
+               {}
+
+               public GLSurface (WGLDevice device, IntPtr hdc, int width, int height)
+                       : base (NativeMethods.cairo_gl_surface_create_for_dc (device.Handle, hdc, width, height), true)
+               {}
+
+               public void SwapBuffers(){
+                       NativeMethods.cairo_gl_surface_swapbuffers (this.Handle);
+               }
+       }
+}
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/GLXDevice.cs b/Crow/src/GraphicBackends/Mono.Cairo/GLXDevice.cs
new file mode 100644 (file)
index 0000000..086cf1f
--- /dev/null
@@ -0,0 +1,49 @@
+//
+// Mono.Cairo.Device.cs
+//
+// Authors:
+//                     JP Bruyère (jp_bruyere@hotmail.com)
+//
+// This is an OO wrapper API for the Cairo API
+//
+// Copyright (C) 2016 JP Bruyère
+//
+// 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;
+
+namespace Crow.Drawing
+{
+       public class GLXDevice : Device
+       {
+               public GLXDevice (IntPtr dpy, IntPtr gl_ctx) : base (NativeMethods.cairo_glx_device_create (dpy, gl_ctx), true)
+               {
+               }
+
+               public IntPtr Display {
+                       get { return NativeMethods.cairo_glx_device_get_display (Handle); }
+               }
+
+               public IntPtr Context {
+                       get { return NativeMethods.cairo_glx_device_get_context (Handle); }
+               }
+       }
+}
+
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/GlitzSurface.cs b/Crow/src/GraphicBackends/Mono.Cairo/GlitzSurface.cs
new file mode 100644 (file)
index 0000000..fc12c67
--- /dev/null
@@ -0,0 +1,43 @@
+//
+// Mono.Cairo.GlitzSurface.cs
+//
+// Authors:
+//    Alp Toker
+//
+// (C) Alp Toker, 2006.
+//
+// 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;
+
+namespace Crow.Drawing {
+       public class GlitzSurface : Surface
+       {
+               internal GlitzSurface (IntPtr handle, bool owns) : base (handle, owns)
+               {
+               }
+
+               public GlitzSurface (IntPtr glitz_surface)
+                       : base (NativeMethods.cairo_glitz_surface_create (glitz_surface), true)
+               {
+               }
+       }
+}
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/Glyph.cs b/Crow/src/GraphicBackends/Mono.Cairo/Glyph.cs
new file mode 100644 (file)
index 0000000..c015e6d
--- /dev/null
@@ -0,0 +1,96 @@
+//
+// Mono.Cairo.Glyph.cs
+//
+// Authors: Duncan Mak (duncan@ximian.com)
+//          Hisham Mardam Bey (hisham.mardambey@gmail.com)
+//
+// (C) Ximian, Inc. 2003
+// Copyright (C) 2004 Novell, Inc (http://www.novell.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 Crow.Drawing
+{
+       [StructLayout(LayoutKind.Sequential)]
+       public struct Glyph
+       {
+               internal long index;
+               internal double x;
+               internal double y;
+               
+               public Glyph (long index, double x, double y)
+               {
+                       this.index = index;
+                       this.x = x;
+                       this.y = y;
+               }
+               
+               public long Index {
+                       get { return index; }
+                       set { index = value; }
+               }
+               
+               public double X {
+                       get { return x; }
+                       set { x = value; }
+               }
+               
+               public double Y {
+                       get { return y; }
+                       set { y = value; }
+               }
+
+               public override bool Equals (object obj)
+               {
+                       if (obj is Glyph)
+                               return this == (Glyph)obj;
+                       return false;
+               }
+
+               public override int GetHashCode ()
+               {
+                       return (int) Index ^ (int) X ^ (int) Y;
+               }
+
+               internal static IntPtr GlyphsToIntPtr (Glyph[] glyphs)
+               {
+                       int size = Marshal.SizeOf (glyphs[0]);
+                       IntPtr dest = Marshal.AllocHGlobal (size * glyphs.Length);
+                       long pos = dest.ToInt64 ();
+                       for (int i = 0; i < glyphs.Length; i++, pos += size)
+                               Marshal.StructureToPtr (glyphs[i], (IntPtr) pos, false);
+                       return dest;
+               }
+
+               public static bool operator == (Glyph glyph, Glyph other)
+               {
+                       return glyph.Index == other.Index && glyph.X == other.X && glyph.Y == other.Y;
+               }
+
+               public static bool operator != (Glyph glyph, Glyph other)
+               {
+                       return !(glyph == other);
+               }
+       }
+}
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/Gradient.cs b/Crow/src/GraphicBackends/Mono.Cairo/Gradient.cs
new file mode 100644 (file)
index 0000000..c7d2ea3
--- /dev/null
@@ -0,0 +1,66 @@
+//
+// Mono.Cairo.Gradient.cs
+//
+// Author: Jordi Mas (jordi@ximian.com)
+//         Hisham Mardam Bey (hisham.mardambey@gmail.com)
+// (C) Ximian Inc, 2004.
+//
+// Copyright (C) 2004 Novell, Inc (http://www.novell.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 Color = Crow.Color;
+namespace Crow.Drawing {
+
+       public class Gradient : Pattern
+       {
+               protected Gradient (IntPtr handle, bool owned) : base (handle, owned)
+               {
+               }
+
+               [Obsolete]
+               protected Gradient ()
+               {
+               }
+
+               public int ColorStopCount {
+                       get {
+                               int cnt;
+                               NativeMethods.cairo_pattern_get_color_stop_count (Handle, out cnt);
+                               return cnt;
+                       }
+               }
+
+               public Status AddColorStop (double offset, Color c)
+               {
+                       NativeMethods.cairo_pattern_add_color_stop_rgba (Handle, offset, c.R / 255.0, c.G / 255.0, c.B / 255.0, c.A / 255.0);
+                       return Status;
+               }
+
+               public Status AddColorStopRgb (double offset, Color c)
+               {
+                       NativeMethods.cairo_pattern_add_color_stop_rgb (Handle, offset, c.R / 255.0, c.G / 255.0 / 255.0, c.B / 255.0);
+                       return Status;
+               }
+       }
+}
+
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/HintMetrics.cs b/Crow/src/GraphicBackends/Mono.Cairo/HintMetrics.cs
new file mode 100644 (file)
index 0000000..fbb78ad
--- /dev/null
@@ -0,0 +1,41 @@
+//
+// Mono.Cairo.HintMetrics.cs
+//
+// Authors: Duncan Mak (duncan@ximian.com)
+//          Hisham Mardam Bey (hisham.mardambey@gmail.com)
+//
+// (C) Ximian, Inc. 2003
+// Copyright (C) 2004 Novell, Inc (http://www.novell.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;
+
+namespace Crow.Drawing
+{
+       
+       public enum HintMetrics
+       {
+               Default,
+               Off,
+               On,
+       }
+}
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/HintStyle.cs b/Crow/src/GraphicBackends/Mono.Cairo/HintStyle.cs
new file mode 100644 (file)
index 0000000..713dafa
--- /dev/null
@@ -0,0 +1,43 @@
+//
+// Mono.Cairo.HintStyle.cs
+//
+// Authors: Duncan Mak (duncan@ximian.com)
+//          Hisham Mardam Bey (hisham.mardambey@gmail.com)
+//
+// (C) Ximian, Inc. 2003
+// Copyright (C) 2004 Novell, Inc (http://www.novell.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;
+
+namespace Crow.Drawing
+{
+       
+       public enum HintStyle
+       {
+               Default,
+               None,
+               Slight,
+               Medium,
+               Full,
+       }
+}
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/ImageSurface.cs b/Crow/src/GraphicBackends/Mono.Cairo/ImageSurface.cs
new file mode 100644 (file)
index 0000000..a1a182c
--- /dev/null
@@ -0,0 +1,99 @@
+//
+// Mono.Cairo.ImageSurface.cs
+//
+// Authors:
+//    Duncan Mak
+//    Miguel de Icaza.
+//
+// (C) Ximian Inc, 2003.
+// (C) Novell, Inc. 2003.
+//
+// This is an OO wrapper API for the Cairo API
+//
+// Copyright (C) 2004 Novell, Inc (http://www.novell.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 Crow.Drawing {
+
+       public class ImageSurface : Surface
+       {
+               internal ImageSurface (IntPtr handle, bool owns) : base (handle, owns)
+               {
+               }
+
+               public ImageSurface (Format format, int width, int height)
+                       : base (NativeMethods.cairo_image_surface_create (format, width, height), true)
+               {
+               }
+
+               [Obsolete ("Use ImageSurface (byte[] data, Cairo.Format format, int width, int height, int stride)")]
+               public ImageSurface (ref byte[] data, Cairo.Format format, int width, int height, int stride)
+                       : this (data, format, width, height, stride)
+               {
+               }
+
+               public ImageSurface (byte[] data, Format format, int width, int height, int stride)
+                       : base (NativeMethods.cairo_image_surface_create_for_data (data, format, width, height, stride), true)
+               {
+               }
+
+               public ImageSurface (IntPtr data, Format format, int width, int height, int stride)
+                       : base (NativeMethods.cairo_image_surface_create_for_data (data, format, width, height, stride), true)
+               {
+               }
+
+               public ImageSurface (string filename)
+                       : base (NativeMethods.cairo_image_surface_create_from_png (filename), true)
+               {
+               }
+
+               public override int Width => NativeMethods.cairo_image_surface_get_width (Handle);
+               public override int Height => NativeMethods.cairo_image_surface_get_height (Handle);            
+
+               public byte[] Data {
+                       get {
+                               IntPtr ptr = NativeMethods.cairo_image_surface_get_data (Handle);
+                               int length = Height * Stride;
+                               byte[] data = new byte[length];
+                               Marshal.Copy (ptr, data, 0, length);
+                               return data;
+                       }
+               }
+
+               public IntPtr DataPtr {
+                       get {
+                               return NativeMethods.cairo_image_surface_get_data (Handle);
+                       }
+               }
+
+               public Format Format {
+                       get { return NativeMethods.cairo_image_surface_get_format (Handle); }
+               }
+
+               public int Stride {
+                       get { return NativeMethods.cairo_image_surface_get_stride (Handle); }
+               }
+       }
+}
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/LineCap.cs b/Crow/src/GraphicBackends/Mono.Cairo/LineCap.cs
new file mode 100644 (file)
index 0000000..b9fcb22
--- /dev/null
@@ -0,0 +1,41 @@
+//
+// Mono.Cairo.LineCap.cs
+//
+// Authors: Duncan Mak (duncan@ximian.com)
+//          Hisham Mardam Bey (hisham.mardambey@gmail.com)
+//
+// (C) Ximian, Inc. 2003
+// Copyright (C) 2004 Novell, Inc (http://www.novell.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;
+
+namespace Crow.Drawing
+{
+       
+       public enum LineCap
+       {
+               Butt,
+               Round,
+               Square,
+       }
+}
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/LineJoin.cs b/Crow/src/GraphicBackends/Mono.Cairo/LineJoin.cs
new file mode 100644 (file)
index 0000000..2ec44b6
--- /dev/null
@@ -0,0 +1,42 @@
+//
+// Mono.Cairo.LineJoin.cs
+//
+// Authors: Duncan Mak (duncan@ximian.com)
+//          Hisham Mardam Bey (hisham.mardambey@gmail.com)
+//
+// (C) Ximian, Inc. 2003
+// Copyright (C) 2004 Novell, Inc (http://www.novell.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;
+
+namespace Crow.Drawing
+{
+       
+       public enum LineJoin
+       {
+               Miter,
+               Round,
+               Bevel
+       }
+}
+
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/LinearGradient.cs b/Crow/src/GraphicBackends/Mono.Cairo/LinearGradient.cs
new file mode 100644 (file)
index 0000000..69d9a93
--- /dev/null
@@ -0,0 +1,59 @@
+//
+// Mono.Cairo.LinearGradient.cs
+//
+// Author: Jordi Mas (jordi@ximian.com)
+//         Hisham Mardam Bey (hisham.mardambey@gmail.com)
+// (C) Ximian Inc, 2004.
+//
+// Copyright (C) 2004 Novell, Inc (http://www.novell.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;
+
+namespace Crow.Drawing {
+
+       public class LinearGradient : Gradient
+       {
+               internal LinearGradient (IntPtr handle, bool owned) : base (handle, owned)
+               {
+               }
+
+               public LinearGradient (double x0, double y0, double x1, double y1)
+                       : base (NativeMethods.cairo_pattern_create_linear (x0, y0, x1, y1), true)
+               {
+               }
+
+               public PointD[] LinearPoints {
+                       get {
+                               double x0, y0, x1, y1;
+                               PointD[] points = new PointD [2];
+
+                               NativeMethods.cairo_pattern_get_linear_points (Handle, out x0, out y0, out x1, out y1);
+
+                               points[0] = new PointD (x0, y0);
+                               points[1] = new PointD (x1, y1);
+                               return points;
+                       }
+               }
+       }
+}
+
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/Matrix.cs b/Crow/src/GraphicBackends/Mono.Cairo/Matrix.cs
new file mode 100644 (file)
index 0000000..fc9f393
--- /dev/null
@@ -0,0 +1,193 @@
+//
+// Mono.Cairo.Matrix.cs
+//
+// Author: Duncan Mak
+//         Hisham Mardam Bey (hisham.mardambey@gmail.com)
+//         Idan Gazit (idan@fastmail.fm)
+//
+// (C) Ximian Inc, 2003 - 2005.
+//
+// This is an OO wrapper API for the Cairo API
+//
+// Copyright (C) 2004 Novell, Inc (http://www.novell.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 Crow.Drawing {
+
+       [StructLayout(LayoutKind.Sequential)]
+       public class Matrix //: ICloneable
+       {
+               public double Xx;
+               public double Yx;
+               public double Xy;
+               public double Yy;
+               public double X0;
+               public double Y0;
+
+               public Matrix (double xx, double yx, double xy, double yy,
+                               double x0, double y0)
+               {
+                       this.Xx = xx; this.Yx = yx; this.Xy = xy;
+                       this.Yy = yy; this.X0 = x0; this.Y0 = y0;
+               }
+
+               public Matrix ()
+               {
+                       this.InitIdentity ();
+               }
+
+               public bool IsIdentity ()
+               {
+                       return (this == new Matrix ());
+               }
+
+               public void InitIdentity ()
+               {
+                       // this.Init(1,0,0,1,0,0);
+                       NativeMethods.cairo_matrix_init_identity (this);
+               }
+
+               public void Init (double xx, double yx, double xy, double yy,
+                                 double x0, double y0)
+               {
+                       this.Xx = xx; this.Yx = yx; this.Xy = xy;
+                       this.Yy = yy; this.X0 = x0; this.Y0 = y0;
+               }
+
+               public void InitTranslate (double tx, double ty)
+               {
+                       //this.Init (1, 0, 0, 1, tx, ty);
+                       NativeMethods.cairo_matrix_init_translate (this, tx, ty);
+               }
+
+               public void Translate (double tx, double ty)
+               {
+                       NativeMethods.cairo_matrix_translate (this, tx, ty);
+               }
+
+               public void InitScale (double sx, double sy)
+               {
+                       //this.Init (sx, 0, 0, sy, 0, 0);
+                       NativeMethods.cairo_matrix_init_scale (this, sx, sy);
+               }
+
+               public void Scale (double sx, double sy)
+               {
+                       NativeMethods.cairo_matrix_scale (this, sx, sy);
+               }
+
+               public void InitRotate (double radians)
+               {
+                       /*
+                       double s, c;
+                       s = Math.Sin (radians);
+                       c = Math.Cos (radians);
+                       this.Init (c, s, -s, c, 0, 0);
+                       */
+                       NativeMethods.cairo_matrix_init_rotate (this, radians);
+               }
+
+               public void Rotate (double radians)
+               {
+                       NativeMethods.cairo_matrix_rotate (this, radians);
+               }
+
+               public Cairo.Status Invert ()
+               {
+                       return NativeMethods.cairo_matrix_invert (this);
+               }
+
+               public void Multiply (Matrix b)
+               {
+                       Matrix a = (Matrix) this.Clone ();
+                       NativeMethods.cairo_matrix_multiply (this, a, b);
+               }
+
+               public static Matrix Multiply (Matrix a, Matrix b) {
+                       Matrix result = new Matrix ();
+                       NativeMethods.cairo_matrix_multiply (result, a, b);
+                       return result;
+               }
+
+
+               public void TransformDistance (ref double dx, ref double dy)
+               {
+                       NativeMethods.cairo_matrix_transform_distance (this, ref dx, ref dy);
+               }
+
+               public void TransformPoint (ref double x, ref double y)
+               {
+                       NativeMethods.cairo_matrix_transform_point (this, ref x, ref y);
+               }
+
+               public override String ToString ()
+               {
+                       String s = String.Format ("xx:{0:##0.0#} yx:{1:##0.0#} xy:{2:##0.0#} yy:{3:##0.0#} x0:{4:##0.0#} y0:{5:##0.0#}",
+                               this.Xx, this.Yx, this.Xy, this.Yy, this.X0, this.Y0);
+                       return s;
+               }
+
+               public static bool operator == (Matrix lhs, Matrix rhs)
+               {
+                       return (lhs.Xx == rhs.Xx &&
+                               lhs.Xy == rhs.Xy &&
+                               lhs.Yx == rhs.Yx &&
+                               lhs.Yy == rhs.Yy &&
+                               lhs.X0 == rhs.X0 &&
+                               lhs.Y0 == rhs.Y0 );
+               }
+
+               public static bool operator != (Matrix lhs, Matrix rhs)
+               {
+                       return !(lhs==rhs);
+               }
+
+
+
+               public override bool Equals(object o)
+               {
+                       if (! (o is Matrix))
+                               return false;
+                       else
+                               return (this == (Matrix) o);
+               }
+
+               public override int GetHashCode()
+               {
+                       return  (int)this.Xx ^ (int)this.Xx>>32 ^
+                               (int)this.Xy ^ (int)this.Xy>>32 ^
+                               (int)this.Yx ^ (int)this.Yx>>32 ^
+                               (int)this.Yy ^ (int)this.Yy>>32 ^
+                               (int)this.X0 ^ (int)this.X0>>32 ^
+                               (int)this.Y0 ^ (int)this.Y0>>32;
+               }
+
+               public object Clone()
+               {
+                       return this.MemberwiseClone ();
+               }
+
+       }
+}
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/MeshPattern.cs b/Crow/src/GraphicBackends/Mono.Cairo/MeshPattern.cs
new file mode 100644 (file)
index 0000000..99cd72c
--- /dev/null
@@ -0,0 +1,112 @@
+//
+// Mono.Cairo.Pattern.cs
+//
+// Author: Jordi Mas (jordi@ximian.com)
+//         Hisham Mardam Bey (hisham.mardambey@gmail.com)
+// (C) Ximian Inc, 2004.
+//
+// Copyright (C) 2004 Novell, Inc (http://www.novell.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;
+
+namespace Crow.Drawing {
+
+       public class MeshPattern : Pattern
+       {
+               internal MeshPattern (IntPtr handle, bool owned) : base (handle, owned)
+               {
+               }
+
+               public MeshPattern ()
+                       : base (NativeMethods.cairo_pattern_create_mesh(), true)
+               {
+               }
+
+               //no idea why this is here, the base one is identical, but we can't remove it now
+               public new Extend Extend {
+                       set { NativeMethods.cairo_pattern_set_extend (Handle, value); }
+                       get { return NativeMethods.cairo_pattern_get_extend (Handle); }
+               }
+
+               public Filter Filter {
+                       set { NativeMethods.cairo_pattern_set_filter (Handle, value); }
+                       get { return NativeMethods.cairo_pattern_get_filter (Handle); }
+               }
+
+               public void BeginPatch(){
+                       NativeMethods.cairo_mesh_pattern_begin_patch (Handle);
+               }
+               public void EndPatch(){
+                       NativeMethods.cairo_mesh_pattern_end_patch (Handle);
+               }
+               public void MoveTo(double x, double y){
+                       NativeMethods.cairo_mesh_pattern_move_to (Handle, x, y);
+               }
+               public void MoveTo (PointD p) {
+                       NativeMethods.cairo_mesh_pattern_move_to (Handle, p.X, p.Y);
+               }
+               public void LineTo(double x, double y){
+                       NativeMethods.cairo_mesh_pattern_line_to (Handle, x, y);
+               }
+               public void LineTo (PointD p) {
+                       NativeMethods.cairo_mesh_pattern_line_to (Handle, p.X, p.Y);
+               }
+               public void CurveTo(double x1, double y1, double x2, double y2, double x3, double y3)
+               {
+                       NativeMethods.cairo_mesh_pattern_curve_to (Handle, x1, y1, x2, y2, x3, y3);
+               }
+               public void SetControlPoint(uint point_num, double x, double y){
+                       NativeMethods.cairo_mesh_pattern_set_control_point (Handle, point_num, x, y);
+               }
+               public void SetControlPoint (uint point_num, PointD p) {
+                       NativeMethods.cairo_mesh_pattern_set_control_point (Handle, point_num, p.X, p.Y);
+               }
+               public void SetCornerColorRGB(uint corner_num, double r, double g, double b){
+                       NativeMethods.cairo_mesh_pattern_set_corner_color_rgb (Handle, corner_num, r, g, b);
+               }
+               public void SetCornerColorRGBA(uint corner_num, double r, double g, double b, double a){
+                       NativeMethods.cairo_mesh_pattern_set_corner_color_rgba (Handle, corner_num, r, g, b, a);
+               }
+               public void SetCornerColor (uint corner_num, Color c) {
+                       NativeMethods.cairo_mesh_pattern_set_corner_color_rgba (Handle, corner_num, c.R, c.G, c.B, c.A);
+               }
+               public uint PatchCount {
+                       get {
+                               uint count = 0;
+                               NativeMethods.cairo_mesh_pattern_get_patch_count(Handle, out count);
+                               return count;
+                       }       
+               }
+               public Path GetPath(uint patch_num){
+                       return new Path(NativeMethods.cairo_mesh_pattern_get_path(Handle, patch_num));
+               }
+               public PointD GetControlPoint(uint point_num, uint patch_num = 0) {
+                       NativeMethods.cairo_mesh_pattern_get_control_point (Handle, patch_num, point_num, out double x, out double y);
+                       return new PointD (x, y);
+               }
+               public void GetCornerColorRGBA(){
+                       
+               }
+       }
+}
+
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/NativeMethods-internal.cs b/Crow/src/GraphicBackends/Mono.Cairo/NativeMethods-internal.cs
new file mode 100644 (file)
index 0000000..6e6d507
--- /dev/null
@@ -0,0 +1,1026 @@
+//
+// Cairo.cs - a simplistic binding of the Cairo API to C#.
+//
+// Authors: Duncan Mak (duncan@ximian.com)
+//          Hisham Mardam Bey (hisham.mardambey@gmail.com)
+//          John Luke (john.luke@gmail.com)
+//          Alp Toker (alp@atoker.com)
+//
+// (C) Ximian, Inc. 2003
+// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2005 John Luke
+// Copyright (C) 2006 Alp Toker
+//
+// 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;
+using System.Runtime.CompilerServices;
+
+namespace Cairo
+{
+       // sort the functions like in the following page so it is easier to find what is missing
+       // http://cairographics.org/manual/index-all.html
+
+       public static class NativeMethods
+       {
+               #if MONOTOUCH
+               const string cairo = "__Internal";
+               #else
+               const string cairo = "libcairo-2.dll";
+               #endif
+
+               //[MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               //public static extern void cairo_append_path (IntPtr cr, Path path);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_arc (IntPtr cr, double xc, double yc, double radius, double angle1, double angle2);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_arc_negative (IntPtr cr, double xc, double yc, double radius, double angle1, double angle2);
+
+               //              [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               //              public static extern IntPtr cairo_atsui_font_face_create_for_atsu_font_id (IntPtr font_id);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_clip (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_clip_preserve (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_clip_extents (IntPtr cr, out double x1, out double y1, out double x2, out double y2);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_close_path (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_copy_page (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_copy_path (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_copy_path_flat (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_append_path (IntPtr cr, IntPtr path);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_create (IntPtr target);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_curve_to (IntPtr cr, double x1, double y1, double x2, double y2, double x3, double y3);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_debug_reset_static_data ();
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_destroy (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_device_to_user (IntPtr cr, ref double x, ref double y);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_device_to_user_distance (IntPtr cr, ref double dx, ref double dy);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_fill (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_fill_extents (IntPtr cr, out double x1, out double y1, out double x2, out double y2);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_fill_preserve (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_font_extents (IntPtr cr, out FontExtents extents);
+
+               #region FontFace
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_font_face_destroy (IntPtr font_face);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern FontType cairo_font_face_get_type (IntPtr font_face);
+
+               //[MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               //public static extern void cairo_font_face_get_user_data (IntPtr font_face);
+
+               //[MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               //public static extern void cairo_font_face_set_user_data (IntPtr font_face);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_font_face_reference (IntPtr font_face);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Status cairo_font_face_status (IntPtr font_face);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern uint cairo_font_face_get_reference_count (IntPtr surface);
+               #endregion
+
+               #region FontOptions
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_font_options_copy (IntPtr original);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_font_options_create ();
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_font_options_destroy (IntPtr options);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern bool cairo_font_options_equal (IntPtr options, IntPtr other);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Antialias cairo_font_options_get_antialias (IntPtr options);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern HintMetrics cairo_font_options_get_hint_metrics (IntPtr options);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern HintStyle cairo_font_options_get_hint_style (IntPtr options);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern SubpixelOrder cairo_font_options_get_subpixel_order (IntPtr options);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern long cairo_font_options_hash (IntPtr options);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_font_options_merge (IntPtr options, IntPtr other);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_font_options_set_antialias (IntPtr options, Antialias aa);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_font_options_set_hint_metrics (IntPtr options, HintMetrics metrics);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_font_options_set_hint_style (IntPtr options, HintStyle style);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_font_options_set_subpixel_order (IntPtr options, SubpixelOrder order);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Status cairo_font_options_status (IntPtr options);
+               #endregion
+
+               #region Freetype / FontConfig
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_ft_font_face_create_for_ft_face (IntPtr face, int load_flags);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_ft_font_face_create_for_pattern (IntPtr fc_pattern);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_ft_font_options_substitute (FontOptions options, IntPtr pattern);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_ft_scaled_font_lock_face (IntPtr scaled_font);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_ft_scaled_font_unlock_face (IntPtr scaled_font);
+               #endregion
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Antialias cairo_get_antialias (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_get_current_point (IntPtr cr, out double x, out double y);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern FillRule cairo_get_fill_rule (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_get_font_face (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_get_font_matrix (IntPtr cr, out Matrix matrix);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_get_font_options (IntPtr cr, IntPtr options);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_get_group_target (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern LineCap cairo_get_line_cap (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern LineJoin cairo_get_line_join (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern double cairo_get_line_width (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_get_matrix (IntPtr cr, Matrix matrix);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern double cairo_get_miter_limit (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Operator cairo_get_operator (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern uint cairo_get_reference_count (IntPtr surface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_get_source (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_get_target (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern double cairo_get_tolerance (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_glitz_surface_create (IntPtr surface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_glyph_extents (IntPtr cr, IntPtr glyphs, int num_glyphs, out TextExtents extents);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_glyph_path (IntPtr cr, IntPtr glyphs, int num_glyphs);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               [return: MarshalAs (UnmanagedType.U1)]
+               public static extern bool cairo_has_current_point (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_identity_matrix (IntPtr cr);
+
+               #region Image Surface
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_image_surface_create (Cairo.Format format, int width, int height);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               public static extern IntPtr cairo_image_surface_create_for_data (byte[] data, Cairo.Format format, int width, int height, int stride);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_image_surface_create_for_data (IntPtr data, Cairo.Format format, int width, int height, int stride);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_image_surface_create_from_png  (string filename);
+
+               //[MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               //public static extern IntPtr cairo_image_surface_create_from_png_stream  (string filename);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_image_surface_get_data (IntPtr surface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Format cairo_image_surface_get_format (IntPtr surface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern int cairo_image_surface_get_height (IntPtr surface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern int cairo_image_surface_get_stride (IntPtr surface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern int cairo_image_surface_get_width  (IntPtr surface);
+               #endregion
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               [return: MarshalAs (UnmanagedType.U1)]
+               public static extern bool cairo_in_clip (IntPtr cr, double x, double y);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               [return: MarshalAs (UnmanagedType.U1)]
+               public static extern bool cairo_in_fill (IntPtr cr, double x, double y);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               [return: MarshalAs (UnmanagedType.U1)]
+               public static extern bool cairo_in_stroke (IntPtr cr, double x, double y);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_line_to (IntPtr cr, double x, double y);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_mask (IntPtr cr, IntPtr pattern);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_mask_surface (IntPtr cr, IntPtr surface, double x, double y);
+
+               #region Matrix
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_matrix_init (Matrix matrix, double xx, double yx, double xy, double yy, double x0, double y0);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_matrix_init_identity (Matrix matrix);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_matrix_init_rotate (Matrix matrix, double radians);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_matrix_init_scale (Matrix matrix, double sx, double sy);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_matrix_init_translate (Matrix matrix, double tx, double ty);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Status cairo_matrix_invert (Matrix matrix);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_matrix_multiply (Matrix result, Matrix a, Matrix b);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_matrix_scale (Matrix matrix, double sx, double sy);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_matrix_rotate (Matrix matrix, double radians);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_matrix_transform_distance (Matrix matrix, ref double dx, ref double dy);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_matrix_transform_point (Matrix matrix, ref double x, ref double y);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_matrix_translate (Matrix matrix, double tx, double ty);
+               #endregion
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_move_to (IntPtr cr, double x, double y);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_new_path (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_new_sub_path (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_paint (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_paint_with_alpha (IntPtr cr, double alpha);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_path_destroy (IntPtr path);
+
+               #region Pattern
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_pattern_add_color_stop_rgb (IntPtr pattern, double offset, double red, double green, double blue);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_pattern_add_color_stop_rgba (IntPtr pattern, double offset, double red, double green, double blue, double alpha);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Status cairo_pattern_get_color_stop_count (IntPtr pattern, out int count);
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Status cairo_pattern_get_color_stop_rgba (IntPtr pattern, int index, out double offset, out double red, out double green, out double blue, out double alpha);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_pattern_create_for_surface (IntPtr surface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Status cairo_pattern_get_surface (IntPtr pattern, out IntPtr surface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_pattern_create_linear (double x0, double y0, double x1, double y1);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Status cairo_pattern_get_linear_points (IntPtr pattern, out double x0, out double y0, out double x1, out double y1);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_pattern_create_radial (double cx0, double cy0, double radius0, double cx1, double cy1, double radius1);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Status cairo_pattern_get_radial_circles (IntPtr pattern, out double x0, out double y0, out double r0, out double x1, out double y1, out double r1);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_pattern_create_rgb (double r, double g, double b);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_pattern_create_rgba (double r, double g, double b, double a);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Status cairo_pattern_get_rgba (IntPtr pattern, out double red, out double green, out double blue, out double alpha);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_pattern_destroy (IntPtr pattern);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Extend cairo_pattern_get_extend (IntPtr pattern);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Filter cairo_pattern_get_filter (IntPtr pattern);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_pattern_get_matrix (IntPtr pattern, Matrix matrix);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern PatternType cairo_pattern_get_type (IntPtr pattern);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_pattern_reference (IntPtr pattern);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_pattern_set_extend (IntPtr pattern, Extend extend);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_pattern_set_filter (IntPtr pattern, Filter filter);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_pattern_set_matrix (IntPtr pattern, Matrix matrix);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Status cairo_pattern_status (IntPtr pattern);
+               #endregion
+
+               #region PdfSurface
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_pdf_surface_create (string filename, double width, double height);
+
+               //[MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               //public static extern IntPtr cairo_pdf_surface_create_for_stream (string filename, double width, double height);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_pdf_surface_set_size (IntPtr surface, double x, double y);
+               #endregion
+
+               #region PostscriptSurface
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_ps_surface_create (string filename, double width, double height);
+
+               //[MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               //public static extern IntPtr cairo_ps_surface_create_for_stream (string filename, double width, double height);
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_ps_surface_dsc_begin_page_setup (IntPtr surface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_ps_surface_dsc_begin_setup (IntPtr surface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_ps_surface_dsc_comment (IntPtr surface, string comment);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_ps_surface_set_size (IntPtr surface, double x, double y);
+               #endregion
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_pop_group (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_pop_group_to_source (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_push_group (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_push_group_with_content (IntPtr cr, Content content);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_quartz_surface_create (IntPtr context, bool flipped, int width, int height);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_rectangle (IntPtr cr, double x, double y, double width, double height);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_reference (IntPtr cr);
+
+               #region Regions
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern bool cairo_region_contains_point (IntPtr region, int x, int y);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern RegionOverlap cairo_region_contains_rectangle (IntPtr region, ref Crow.Rectangle rectangle);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_region_copy (IntPtr original);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_region_create ();
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_region_create_rectangle (ref Crow.Rectangle rect);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_region_create_rectangles (IntPtr rects, int count);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_region_destroy (IntPtr region);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern bool cairo_region_equal (IntPtr a, IntPtr b);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_region_get_extents (IntPtr region, out Crow.Rectangle extents);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_region_get_rectangle (IntPtr region, int nth, out Crow.Rectangle rectangle);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Status cairo_region_intersect (IntPtr dst, IntPtr other);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Status cairo_region_intersect_rectangle (IntPtr dst, ref Crow.Rectangle rectangle);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern bool cairo_region_is_empty (IntPtr region);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern int cairo_region_num_rectangles (IntPtr region);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_region_reference (IntPtr region);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Status cairo_region_status (IntPtr region);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Status cairo_region_subtract (IntPtr dst, IntPtr other);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Status cairo_region_subtract_rectangle (IntPtr dst, ref Crow.Rectangle rectangle);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_region_translate (IntPtr region, int dx, int dy);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Status cairo_region_union (IntPtr dst, IntPtr other);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Status cairo_region_union_rectangle (IntPtr dst, ref Crow.Rectangle rectangle);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Status cairo_region_xor (IntPtr dst, IntPtr other);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Status cairo_region_xor_rectangle (IntPtr dst, ref Crow.Rectangle rectangle);
+               #endregion
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_rel_curve_to (IntPtr cr, double dx1, double dy1, double dx2, double dy2, double dx3, double dy3);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_rel_line_to (IntPtr cr, double dx, double dy);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_rel_move_to (IntPtr cr, double dx, double dy);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_reset_clip (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_restore (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_rotate (IntPtr cr, double angle);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_save (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_scale (IntPtr cr, double sx, double sy);
+
+               #region ScaledFont
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_scaled_font_create (IntPtr fontFace, Matrix matrix, Matrix ctm, IntPtr options);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_scaled_font_destroy (IntPtr scaled_font);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_scaled_font_extents (IntPtr scaled_font, out FontExtents extents);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_scaled_font_get_ctm (IntPtr scaled_font, out Matrix matrix);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_scaled_font_get_font_face (IntPtr scaled_font);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_scaled_font_get_font_matrix (IntPtr scaled_font, out Matrix matrix);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_scaled_font_get_font_options (IntPtr scaled_font);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern FontType cairo_scaled_font_get_type (IntPtr scaled_font);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_scaled_font_glyph_extents (IntPtr scaled_font, IntPtr glyphs, int num_glyphs, out TextExtents extents);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_scaled_font_reference (IntPtr scaled_font);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Status cairo_scaled_font_status (IntPtr scaled_font);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_set_scaled_font (IntPtr cr, IntPtr scaled_font);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_get_scaled_font (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               public static extern void cairo_scaled_font_text_extents (IntPtr scaled_font, byte[] utf8, out TextExtents extents);
+               #endregion
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_select_font_face (IntPtr cr, string family, FontSlant slant, FontWeight weight);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_set_antialias (IntPtr cr, Antialias antialias);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               public static extern void cairo_set_dash (IntPtr cr, double [] dashes, int ndash, double offset);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_get_dash (IntPtr cr, IntPtr dashes, out double offset);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern int cairo_get_dash_count (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_set_fill_rule (IntPtr cr, Cairo.FillRule fill_rule);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_set_font_face (IntPtr cr, IntPtr fontFace);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               public static extern void cairo_set_font_matrix (IntPtr cr, Matrix matrix);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_set_font_options (IntPtr cr, IntPtr options);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_set_font_size (IntPtr cr, double size);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_set_line_cap (IntPtr cr, LineCap line_cap);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_set_line_join (IntPtr cr, LineJoin line_join);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_set_line_width (IntPtr cr, double width);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_set_matrix (IntPtr cr, Matrix matrix);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_set_miter_limit (IntPtr cr, double limit);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_set_operator (IntPtr cr, Cairo.Operator op);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_set_source (IntPtr cr, IntPtr pattern);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_set_source_rgb (IntPtr cr, double red, double green, double blue);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_set_source_rgba (IntPtr cr, double red, double green, double blue, double alpha);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_set_source_surface (IntPtr cr, IntPtr surface, double x, double y);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_set_tolerance (IntPtr cr, double tolerance);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_show_glyphs (IntPtr ct, IntPtr glyphs, int num_glyphs);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_show_page (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_show_text (IntPtr cr, string str);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Status cairo_status (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_status_to_string (Status status);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_stroke (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_stroke_extents (IntPtr cr, out double x1, out double y1, out double x2, out double y2);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_stroke_preserve (IntPtr cr);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_rectangle_list_destroy (IntPtr rectangle_list);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_copy_clip_rectangle_list (IntPtr cr);
+
+               #region Surface
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_surface_create_similar (IntPtr surface, Cairo.Content content, int width, int height);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_surface_destroy (IntPtr surface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_surface_finish (IntPtr surface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_surface_flush (IntPtr surface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Content cairo_surface_get_content (IntPtr surface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_surface_get_device_offset (IntPtr surface, out double x, out double y);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_surface_get_font_options (IntPtr surface, IntPtr FontOptions);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern uint cairo_surface_get_reference_count (IntPtr surface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern SurfaceType cairo_surface_get_type (IntPtr surface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_surface_mark_dirty (IntPtr surface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_surface_mark_dirty_rectangle (IntPtr surface, int x, int y, int width, int height);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_surface_reference (IntPtr surface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_surface_set_device_offset (IntPtr surface, double x, double y);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_surface_set_fallback_resolution (IntPtr surface, double x, double y);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Status cairo_surface_status (IntPtr surface);
+               #endregion
+
+               #region SVG surface
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_surface_write_to_png (IntPtr surface, string filename);
+
+               //[MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               //public static extern void cairo_surface_write_to_png_stream (IntPtr surface, WriteFunc writeFunc);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_svg_surface_create (string fileName, double width, double height);
+
+               //[MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               //public static extern IntPtr cairo_svg_surface_create_for_stream (double width, double height);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_svg_surface_restrict_to_version (IntPtr surface, SvgVersion version);
+               #endregion
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_text_extents (IntPtr cr, string txt, out TextExtents extents);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               public static extern void cairo_text_path (IntPtr ct, byte[] utf8);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_transform (IntPtr cr, Matrix matrix);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_translate (IntPtr cr, double tx, double ty);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_user_to_device (IntPtr cr, ref double x, ref double y);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_user_to_device_distance (IntPtr cr, ref double dx, ref double dy);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern int cairo_version ();
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_version_string ();
+
+               #region DirectFBSurface
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_directfb_surface_create (IntPtr dfb, IntPtr surface);
+               #endregion
+
+               #region win32 fonts
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_win32_font_face_create_for_logfontw (IntPtr logfontw);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_win32_scaled_font_done_font (IntPtr scaled_font);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern double cairo_win32_scaled_font_get_metrics_factor (IntPtr scaled_font);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Status cairo_win32_scaled_font_select_font (IntPtr scaled_font, IntPtr hdc);
+               #endregion
+
+               #region win32 surface
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_win32_surface_create (IntPtr hdc);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_win32_surface_create_with_ddb (IntPtr hdc, Format format, int width, int height);
+               #endregion
+
+               #region XcbSurface
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_xcb_surface_create (IntPtr connection, uint drawable, IntPtr visual, int width, int height);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_xcb_surface_create_for_bitmap (IntPtr connection, uint bitmap, IntPtr screen, int width, int height);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_xcb_surface_set_size (IntPtr surface, int width, int height);
+               #endregion
+
+               #region XlibSurface
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_xlib_surface_create (IntPtr display, IntPtr drawable, IntPtr visual, int width, int height);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_xlib_surface_create_for_bitmap (IntPtr display, IntPtr bitmap, IntPtr screen, int width, int height);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern int cairo_xlib_surface_get_depth (IntPtr surface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_xlib_surface_get_display (IntPtr surface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_xlib_surface_get_drawable (IntPtr surface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern int cairo_xlib_surface_get_height (IntPtr surface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_xlib_surface_get_screen (IntPtr surface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_xlib_surface_get_visual (IntPtr surface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern int cairo_xlib_surface_get_width (IntPtr surface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_xlib_surface_set_drawable (IntPtr surface, IntPtr drawable, int width, int height);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_xlib_surface_set_size (IntPtr surface, int width, int height);
+               #endregion
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_gl_device_set_thread_aware(IntPtr device, int value);
+
+               #region GLSurface
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_gl_surface_create (IntPtr device, uint content, int width, int height);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_gl_surface_create_for_texture (IntPtr device, uint content, uint tex, int width, int height);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_gl_surface_set_size (IntPtr surface, int width, int height);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern int cairo_gl_surface_get_width (IntPtr surface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern int cairo_gl_surface_get_height (IntPtr surface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_gl_surface_swapbuffers (IntPtr surf);
+               #endregion
+
+               #region GLX Functions
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_glx_device_create (IntPtr dpy, IntPtr gl_ctx);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_glx_device_get_display (IntPtr device);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_glx_device_get_context (IntPtr device);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_gl_surface_create_for_window (IntPtr device, IntPtr window, int width, int height);
+               #endregion
+
+               #region WGL Fucntions
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_wgl_device_create (IntPtr hglrc);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_wgl_device_get_context (IntPtr device);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_gl_surface_create_for_dc (IntPtr device, IntPtr hdc, int width, int height);
+               #endregion
+
+               #region EGL Functions
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_egl_device_create (IntPtr dpy, IntPtr gl_ctx);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_gl_surface_create_for_egl (IntPtr device, IntPtr eglSurface, int width, int height);
+               #endregion
+
+               #region DRM Functions
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_drm_device_get (IntPtr udev_device);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_drm_device_get_for_fd (int fd);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_drm_device_default ();
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern int cairo_drm_device_get_fd (IntPtr cairo_device);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern  void cairo_drm_device_throttle (IntPtr cairo_device);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_drm_surface_create (IntPtr cairo_device, Format format,       int width, int height);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_drm_surface_create_for_name (IntPtr cairo_device, uint name, Format format,   int width, int height, int stride);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_drm_surface_create_from_cacheable_image (IntPtr cairo_device, IntPtr imageSurface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Status cairo_drm_surface_enable_scan_out (IntPtr drmSurface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_drm_surface_get_handle (IntPtr drmSurface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_drm_surface_get_name (IntPtr drmSurface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Format cairo_drm_surface_get_format (IntPtr drmSurface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern int cairo_drm_surface_get_width (IntPtr drmSurface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern int cairo_drm_surface_get_height (IntPtr drmSurface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern int cairo_drm_surface_get_stride (IntPtr drmSurface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_drm_surface_map_to_image (IntPtr drmSurface);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void       cairo_drm_surface_unmap (IntPtr drmSurface,     IntPtr imageSurface);
+               #endregion
+
+               #region Device
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Status cairo_device_acquire(IntPtr device);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_device_destroy (IntPtr device);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern IntPtr cairo_device_reference (IntPtr device);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void cairo_device_release(IntPtr device);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern Status cairo_device_status(IntPtr device);
+               #endregion
+
+
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
+               public static extern void crow_cairo_region_clear(IntPtr ctx, IntPtr reg);
+
+       }
+}
\ No newline at end of file
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/NativeMethods.cs b/Crow/src/GraphicBackends/Mono.Cairo/NativeMethods.cs
new file mode 100644 (file)
index 0000000..6bce9f1
--- /dev/null
@@ -0,0 +1,1071 @@
+//
+// Cairo.cs - a simplistic binding of the Cairo API to C#.
+//
+// Authors: Duncan Mak (duncan@ximian.com)
+//          Hisham Mardam Bey (hisham.mardambey@gmail.com)
+//          John Luke (john.luke@gmail.com)
+//          Alp Toker (alp@atoker.com)
+//
+// (C) Ximian, Inc. 2003
+// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2005 John Luke
+// Copyright (C) 2006 Alp Toker
+//
+// 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 Crow.Drawing
+{
+       // sort the functions like in the following page so it is easier to find what is missing
+       // http://cairographics.org/manual/index-all.html
+
+       internal static class NativeMethods
+       {
+#if MONOTOUCH
+               const string cairo = "__Internal";
+#else
+       const string cairo = "cairo";
+#endif
+
+        //[DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+        //internal static extern void cairo_append_path (IntPtr cr, Path path);
+
+        [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_arc (IntPtr cr, double xc, double yc, double radius, double angle1, double angle2);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_arc_negative (IntPtr cr, double xc, double yc, double radius, double angle1, double angle2);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_atsui_font_face_create_for_atsu_font_id (IntPtr font_id);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_clip (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_clip_preserve (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_clip_extents (IntPtr cr, out double x1, out double y1, out double x2, out double y2);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_close_path (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_copy_page (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_copy_path (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_copy_path_flat (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_append_path (IntPtr cr, IntPtr path);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_create (IntPtr target);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_curve_to (IntPtr cr, double x1, double y1, double x2, double y2, double x3, double y3);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_debug_reset_static_data ();
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_destroy (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_device_to_user (IntPtr cr, ref double x, ref double y);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_device_to_user_distance (IntPtr cr, ref double dx, ref double dy);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_fill (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_fill_extents (IntPtr cr, out double x1, out double y1, out double x2, out double y2);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_fill_preserve (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_font_extents (IntPtr cr, out FontExtents extents);
+
+               #region FontFace
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_font_face_destroy (IntPtr font_face);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern FontType cairo_font_face_get_type (IntPtr font_face);
+
+               //[DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               //internal static extern void cairo_font_face_get_user_data (IntPtr font_face);
+
+               //[DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               //internal static extern void cairo_font_face_set_user_data (IntPtr font_face);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_font_face_reference (IntPtr font_face);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_font_face_status (IntPtr font_face);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern uint cairo_font_face_get_reference_count (IntPtr surface);
+               #endregion
+
+               #region FontOptions
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_font_options_copy (IntPtr original);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_font_options_create ();
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_font_options_destroy (IntPtr options);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               [return: MarshalAs (UnmanagedType.U1)]
+               internal static extern bool cairo_font_options_equal (IntPtr options, IntPtr other);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Antialias cairo_font_options_get_antialias (IntPtr options);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern HintMetrics cairo_font_options_get_hint_metrics (IntPtr options);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern HintStyle cairo_font_options_get_hint_style (IntPtr options);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern SubpixelOrder cairo_font_options_get_subpixel_order (IntPtr options);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern long cairo_font_options_hash (IntPtr options);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_font_options_merge (IntPtr options, IntPtr other);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_font_options_set_antialias (IntPtr options, Antialias aa);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_font_options_set_hint_metrics (IntPtr options, HintMetrics metrics);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_font_options_set_hint_style (IntPtr options, HintStyle style);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_font_options_set_subpixel_order (IntPtr options, SubpixelOrder order);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_font_options_status (IntPtr options);
+               #endregion
+
+               #region Freetype / FontConfig
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_ft_font_face_create_for_ft_face (IntPtr face, int load_flags);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_ft_font_face_create_for_pattern (IntPtr fc_pattern);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_ft_font_options_substitute (FontOptions options, IntPtr pattern);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_ft_scaled_font_lock_face (IntPtr scaled_font);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_ft_scaled_font_unlock_face (IntPtr scaled_font);
+               #endregion
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Antialias cairo_get_antialias (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_get_current_point (IntPtr cr, out double x, out double y);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern FillRule cairo_get_fill_rule (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_get_font_face (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_get_font_matrix (IntPtr cr, out Matrix matrix);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_get_font_options (IntPtr cr, IntPtr options);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_get_group_target (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern LineCap cairo_get_line_cap (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern LineJoin cairo_get_line_join (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern double cairo_get_line_width (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_get_matrix (IntPtr cr, Matrix matrix);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern double cairo_get_miter_limit (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Operator cairo_get_operator (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern uint cairo_get_reference_count (IntPtr surface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_get_source (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_get_target (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern double cairo_get_tolerance (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_glitz_surface_create (IntPtr surface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_glyph_extents (IntPtr cr, IntPtr glyphs, int num_glyphs, out TextExtents extents);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_glyph_path (IntPtr cr, IntPtr glyphs, int num_glyphs);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               [return: MarshalAs (UnmanagedType.U1)]
+               internal static extern bool cairo_has_current_point (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_identity_matrix (IntPtr cr);
+
+               #region Image Surface
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_image_surface_create (Cairo.Format format, int width, int height);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_image_surface_create_for_data (byte[] data, Cairo.Format format, int width, int height, int stride);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_image_surface_create_for_data (IntPtr data, Cairo.Format format, int width, int height, int stride);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_image_surface_create_from_png  (string filename);
+
+               //[DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               //internal static extern IntPtr cairo_image_surface_create_from_png_stream  (string filename);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_image_surface_get_data (IntPtr surface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Format cairo_image_surface_get_format (IntPtr surface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern int cairo_image_surface_get_height (IntPtr surface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern int cairo_image_surface_get_stride (IntPtr surface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern int cairo_image_surface_get_width  (IntPtr surface);
+               #endregion
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               [return: MarshalAs (UnmanagedType.U1)]
+               internal static extern bool cairo_in_clip (IntPtr cr, double x, double y);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               [return: MarshalAs (UnmanagedType.U1)]
+               internal static extern bool cairo_in_fill (IntPtr cr, double x, double y);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               [return: MarshalAs (UnmanagedType.U1)]
+               internal static extern bool cairo_in_stroke (IntPtr cr, double x, double y);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_line_to (IntPtr cr, double x, double y);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_mask (IntPtr cr, IntPtr pattern);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_mask_surface (IntPtr cr, IntPtr surface, double x, double y);
+
+               #region Matrix
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_matrix_init (Matrix matrix, double xx, double yx, double xy, double yy, double x0, double y0);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_matrix_init_identity (Matrix matrix);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_matrix_init_rotate (Matrix matrix, double radians);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_matrix_init_scale (Matrix matrix, double sx, double sy);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_matrix_init_translate (Matrix matrix, double tx, double ty);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_matrix_invert (Matrix matrix);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_matrix_multiply (Matrix result, Matrix a, Matrix b);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_matrix_scale (Matrix matrix, double sx, double sy);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_matrix_rotate (Matrix matrix, double radians);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_matrix_transform_distance (Matrix matrix, ref double dx, ref double dy);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_matrix_transform_point (Matrix matrix, ref double x, ref double y);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_matrix_translate (Matrix matrix, double tx, double ty);
+               #endregion
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_move_to (IntPtr cr, double x, double y);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_new_path (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_new_sub_path (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_paint (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_paint_with_alpha (IntPtr cr, double alpha);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_path_destroy (IntPtr path);
+
+               #region Pattern
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_pattern_add_color_stop_rgb (IntPtr pattern, double offset, double red, double green, double blue);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_pattern_add_color_stop_rgba (IntPtr pattern, double offset, double red, double green, double blue, double alpha);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_pattern_get_color_stop_count (IntPtr pattern, out int count);
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_pattern_get_color_stop_rgba (IntPtr pattern, int index, out double offset, out double red, out double green, out double blue, out double alpha);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_pattern_create_for_surface (IntPtr surface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_pattern_get_surface (IntPtr pattern, out IntPtr surface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_pattern_create_linear (double x0, double y0, double x1, double y1);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_pattern_get_linear_points (IntPtr pattern, out double x0, out double y0, out double x1, out double y1);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_pattern_create_radial (double cx0, double cy0, double radius0, double cx1, double cy1, double radius1);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_pattern_get_radial_circles (IntPtr pattern, out double x0, out double y0, out double r0, out double x1, out double y1, out double r1);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_pattern_create_rgb (double r, double g, double b);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_pattern_create_rgba (double r, double g, double b, double a);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_pattern_get_rgba (IntPtr pattern, out double red, out double green, out double blue, out double alpha);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_pattern_destroy (IntPtr pattern);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Extend cairo_pattern_get_extend (IntPtr pattern);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Filter cairo_pattern_get_filter (IntPtr pattern);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_pattern_get_matrix (IntPtr pattern, Matrix matrix);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern PatternType cairo_pattern_get_type (IntPtr pattern);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_pattern_reference (IntPtr pattern);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_pattern_set_extend (IntPtr pattern, Extend extend);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_pattern_set_filter (IntPtr pattern, Filter filter);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_pattern_set_matrix (IntPtr pattern, Matrix matrix);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_pattern_status (IntPtr pattern);
+
+               //mesh pattern
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_pattern_create_mesh ();
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_mesh_pattern_begin_patch (IntPtr pattern);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_mesh_pattern_end_patch (IntPtr pattern);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_mesh_pattern_move_to (IntPtr pattern, double x, double y);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_mesh_pattern_line_to (IntPtr pattern, double x, double y);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_mesh_pattern_curve_to (IntPtr pattern, double x1, double y1,
+                       double x2, double y2, double x3, double y3);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_mesh_pattern_set_control_point (IntPtr pattern, uint point_num, double x, double y);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_mesh_pattern_set_corner_color_rgb (IntPtr pattern, uint corner_num,
+                       double r, double g, double b);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_mesh_pattern_set_corner_color_rgba (IntPtr pattern, uint corner_num,
+                       double r, double g, double b, double a);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_mesh_pattern_get_patch_count (IntPtr pattern, out uint count);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_mesh_pattern_get_path (IntPtr pattern, uint patch_num);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_mesh_pattern_get_control_point (IntPtr pattern,
+                       uint patch_num, uint point_num, out double x, out double y);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_mesh_pattern_get_corner_color_rgba (IntPtr pattern,
+                       uint patch_num, uint point_num, out double r, out double g, out double b, out double a);
+               #endregion
+
+               #region PdfSurface
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_pdf_surface_create (string filename, double width, double height);
+
+               //[DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               //internal static extern IntPtr cairo_pdf_surface_create_for_stream (string filename, double width, double height);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_pdf_surface_set_size (IntPtr surface, double x, double y);
+               #endregion
+
+               #region PostscriptSurface
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_ps_surface_create (string filename, double width, double height);
+
+               //[DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               //internal static extern IntPtr cairo_ps_surface_create_for_stream (string filename, double width, double height);
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_ps_surface_dsc_begin_page_setup (IntPtr surface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_ps_surface_dsc_begin_setup (IntPtr surface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_ps_surface_dsc_comment (IntPtr surface, string comment);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_ps_surface_set_size (IntPtr surface, double x, double y);
+               #endregion
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_pop_group (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_pop_group_to_source (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_push_group (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_push_group_with_content (IntPtr cr, Content content);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_quartz_surface_create (IntPtr context, bool flipped, int width, int height);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_rectangle (IntPtr cr, double x, double y, double width, double height);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_reference (IntPtr cr);
+
+               #region Regions
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern bool cairo_region_contains_point (IntPtr region, int x, int y);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern RegionOverlap cairo_region_contains_rectangle (IntPtr region, ref Crow.Rectangle rectangle);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_region_copy (IntPtr original);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_region_create ();
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_region_create_rectangle (ref Crow.Rectangle rect);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_region_create_rectangles (IntPtr rects, int count);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_region_destroy (IntPtr region);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern bool cairo_region_equal (IntPtr a, IntPtr b);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_region_get_extents (IntPtr region, out Crow.Rectangle extents);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_region_get_rectangle (IntPtr region, int nth, out Crow.Rectangle rectangle);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_region_intersect (IntPtr dst, IntPtr other);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_region_intersect_rectangle (IntPtr dst, ref Crow.Rectangle rectangle);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern bool cairo_region_is_empty (IntPtr region);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern int cairo_region_num_rectangles (IntPtr region);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_region_reference (IntPtr region);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_region_status (IntPtr region);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_region_subtract (IntPtr dst, IntPtr other);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_region_subtract_rectangle (IntPtr dst, ref Crow.Rectangle rectangle);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_region_translate (IntPtr region, int dx, int dy);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_region_union (IntPtr dst, IntPtr other);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_region_union_rectangle (IntPtr dst, ref Crow.Rectangle rectangle);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_region_xor (IntPtr dst, IntPtr other);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_region_xor_rectangle (IntPtr dst, ref Crow.Rectangle rectangle);
+               #endregion
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_rel_curve_to (IntPtr cr, double dx1, double dy1, double dx2, double dy2, double dx3, double dy3);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_rel_line_to (IntPtr cr, double dx, double dy);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_rel_move_to (IntPtr cr, double dx, double dy);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_reset_clip (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_restore (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_rotate (IntPtr cr, double angle);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_save (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_scale (IntPtr cr, double sx, double sy);
+
+               #region ScaledFont
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_scaled_font_create (IntPtr fontFace, Matrix matrix, Matrix ctm, IntPtr options);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_scaled_font_destroy (IntPtr scaled_font);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_scaled_font_extents (IntPtr scaled_font, out FontExtents extents);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_scaled_font_get_ctm (IntPtr scaled_font, out Matrix matrix);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_scaled_font_get_font_face (IntPtr scaled_font);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_scaled_font_get_font_matrix (IntPtr scaled_font, out Matrix matrix);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_scaled_font_get_font_options (IntPtr scaled_font);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern FontType cairo_scaled_font_get_type (IntPtr scaled_font);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_scaled_font_glyph_extents (IntPtr scaled_font, IntPtr glyphs, int num_glyphs, out TextExtents extents);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_scaled_font_reference (IntPtr scaled_font);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_scaled_font_status (IntPtr scaled_font);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_set_scaled_font (IntPtr cr, IntPtr scaled_font);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_get_scaled_font (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_scaled_font_text_extents (IntPtr scaled_font, byte[] utf8, out TextExtents extents);
+               #endregion
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_select_font_face (IntPtr cr, string family, FontSlant slant, FontWeight weight);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_set_antialias (IntPtr cr, Antialias antialias);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_set_dash (IntPtr cr, double [] dashes, int ndash, double offset);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_get_dash (IntPtr cr, IntPtr dashes, out double offset);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern int cairo_get_dash_count (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_set_fill_rule (IntPtr cr, Cairo.FillRule fill_rule);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_set_font_face (IntPtr cr, IntPtr fontFace);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_set_font_matrix (IntPtr cr, Matrix matrix);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_set_font_options (IntPtr cr, IntPtr options);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_set_font_size (IntPtr cr, double size);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_set_line_cap (IntPtr cr, LineCap line_cap);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_set_line_join (IntPtr cr, LineJoin line_join);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_set_line_width (IntPtr cr, double width);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_set_matrix (IntPtr cr, Matrix matrix);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_set_miter_limit (IntPtr cr, double limit);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_set_operator (IntPtr cr, Cairo.Operator op);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_set_source (IntPtr cr, IntPtr pattern);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_set_source_rgb (IntPtr cr, double red, double green, double blue);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_set_source_rgba (IntPtr cr, double red, double green, double blue, double alpha);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_set_source_surface (IntPtr cr, IntPtr surface, double x, double y);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_set_tolerance (IntPtr cr, double tolerance);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_show_glyphs (IntPtr ct, IntPtr glyphs, int num_glyphs);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_show_page (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_status (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_status_to_string (Status status);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_stroke (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_stroke_extents (IntPtr cr, out double x1, out double y1, out double x2, out double y2);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_stroke_preserve (IntPtr cr);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_rectangle_list_destroy (IntPtr rectangle_list);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_copy_clip_rectangle_list (IntPtr cr);
+
+               #region Surface
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_surface_create_similar (IntPtr surface, Cairo.Content content, int width, int height);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_surface_destroy (IntPtr surface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_surface_finish (IntPtr surface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_surface_flush (IntPtr surface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Content cairo_surface_get_content (IntPtr surface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_surface_get_device_offset (IntPtr surface, out double x, out double y);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_surface_get_font_options (IntPtr surface, IntPtr FontOptions);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern uint cairo_surface_get_reference_count (IntPtr surface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern SurfaceType cairo_surface_get_type (IntPtr surface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_surface_mark_dirty (IntPtr surface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_surface_mark_dirty_rectangle (IntPtr surface, int x, int y, int width, int height);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_surface_reference (IntPtr surface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_surface_set_device_offset (IntPtr surface, double x, double y);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_surface_set_fallback_resolution (IntPtr surface, double x, double y);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_surface_status (IntPtr surface);
+               #endregion
+
+               #region SVG surface
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_surface_write_to_png (IntPtr surface, string filename);
+
+               //[DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               //internal static extern void cairo_surface_write_to_png_stream (IntPtr surface, WriteFunc writeFunc);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_svg_surface_create (string fileName, double width, double height);
+
+               //[DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               //internal static extern IntPtr cairo_svg_surface_create_for_stream (double width, double height);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_svg_surface_restrict_to_version (IntPtr surface, SvgVersion version);
+               #endregion
+
+               [DllImport (cairo, CallingConvention = CallingConvention.Cdecl)]
+               internal static extern void cairo_show_text (IntPtr cr, byte[] text);
+
+               [DllImport (cairo, CallingConvention = CallingConvention.Cdecl)]
+               internal static extern void cairo_text_extents (IntPtr cr, byte[] utf8, out TextExtents extents);
+
+               [DllImport (cairo, CallingConvention = CallingConvention.Cdecl)]
+               internal static extern void cairo_show_text (IntPtr cr, ref byte utf8);
+
+               [DllImport (cairo, CallingConvention = CallingConvention.Cdecl)]
+               internal static extern void cairo_text_extents (IntPtr cr, ref byte utf8, out TextExtents extents);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_text_path (IntPtr ct, byte[] utf8);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_transform (IntPtr cr, Matrix matrix);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_translate (IntPtr cr, double tx, double ty);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_user_to_device (IntPtr cr, ref double x, ref double y);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_user_to_device_distance (IntPtr cr, ref double dx, ref double dy);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern int cairo_version ();
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_version_string ();
+
+               #region DirectFBSurface
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_directfb_surface_create (IntPtr dfb, IntPtr surface);
+               #endregion
+
+               #region win32 fonts
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_win32_font_face_create_for_logfontw (IntPtr logfontw);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_win32_scaled_font_done_font (IntPtr scaled_font);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern double cairo_win32_scaled_font_get_metrics_factor (IntPtr scaled_font);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_win32_scaled_font_select_font (IntPtr scaled_font, IntPtr hdc);
+               #endregion
+
+               #region win32 surface
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_win32_surface_create (IntPtr hdc);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_win32_surface_create_with_ddb (IntPtr hdc, Format format, int width, int height);
+               #endregion
+
+               #region XcbSurface
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_xcb_surface_create (IntPtr connection, uint drawable, IntPtr visual, int width, int height);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_xcb_surface_create_for_bitmap (IntPtr connection, uint bitmap, IntPtr screen, int width, int height);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_xcb_surface_set_size (IntPtr surface, int width, int height);
+               #endregion
+
+               #region XlibSurface
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_xlib_surface_create (IntPtr display, IntPtr drawable, IntPtr visual, int width, int height);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_xlib_surface_create_for_bitmap (IntPtr display, IntPtr bitmap, IntPtr screen, int width, int height);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern int cairo_xlib_surface_get_depth (IntPtr surface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_xlib_surface_get_display (IntPtr surface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_xlib_surface_get_drawable (IntPtr surface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern int cairo_xlib_surface_get_height (IntPtr surface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_xlib_surface_get_screen (IntPtr surface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_xlib_surface_get_visual (IntPtr surface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern int cairo_xlib_surface_get_width (IntPtr surface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_xlib_surface_set_drawable (IntPtr surface, IntPtr drawable, int width, int height);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_xlib_surface_set_size (IntPtr surface, int width, int height);
+               #endregion
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_gl_device_set_thread_aware(IntPtr device, int value);
+
+               #region GLSurface
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_gl_surface_create (IntPtr device, uint content, int width, int height);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_gl_surface_create_for_texture (IntPtr device, uint content, uint tex, int width, int height);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_gl_surface_set_size (IntPtr surface, int width, int height);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern int cairo_gl_surface_get_width (IntPtr surface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern int cairo_gl_surface_get_height (IntPtr surface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_gl_surface_swapbuffers (IntPtr surf);
+               #endregion
+
+               #region GLX Functions
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_glx_device_create (IntPtr dpy, IntPtr gl_ctx);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_glx_device_get_display (IntPtr device);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_glx_device_get_context (IntPtr device);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_gl_surface_create_for_window (IntPtr device, IntPtr window, int width, int height);
+               #endregion
+
+               #region WGL Fucntions
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_wgl_device_create (IntPtr hglrc);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_wgl_device_get_context (IntPtr device);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_gl_surface_create_for_dc (IntPtr device, IntPtr hdc, int width, int height);
+               #endregion
+
+               #region EGL Functions
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_egl_device_create (IntPtr dpy, IntPtr gl_ctx);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_gl_surface_create_for_egl (IntPtr device, IntPtr eglSurface, int width, int height);
+               #endregion
+
+               #region DRM Functions
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_drm_device_get (IntPtr udev_device);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_drm_device_get_for_fd (int fd);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_drm_device_default ();
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern int cairo_drm_device_get_fd (IntPtr cairo_device);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern  void cairo_drm_device_throttle (IntPtr cairo_device);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_drm_surface_create (IntPtr cairo_device, Format format,     int width, int height);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_drm_surface_create_for_name (IntPtr cairo_device, uint name, Format format, int width, int height, int stride);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_drm_surface_create_from_cacheable_image (IntPtr cairo_device, IntPtr imageSurface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_drm_surface_enable_scan_out (IntPtr drmSurface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_drm_surface_get_handle (IntPtr drmSurface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_drm_surface_get_name (IntPtr drmSurface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Format cairo_drm_surface_get_format (IntPtr drmSurface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern int cairo_drm_surface_get_width (IntPtr drmSurface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern int cairo_drm_surface_get_height (IntPtr drmSurface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern int cairo_drm_surface_get_stride (IntPtr drmSurface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_drm_surface_map_to_image (IntPtr drmSurface);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void     cairo_drm_surface_unmap (IntPtr drmSurface,     IntPtr imageSurface);
+               #endregion
+
+               #region Device
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_device_acquire(IntPtr device);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_device_destroy (IntPtr device);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern IntPtr cairo_device_reference (IntPtr device);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern void cairo_device_release(IntPtr device);
+
+               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
+               internal static extern Status cairo_device_status(IntPtr device);
+               #endregion
+       }
+}
\ No newline at end of file
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/Operator.cs b/Crow/src/GraphicBackends/Mono.Cairo/Operator.cs
new file mode 100644 (file)
index 0000000..7de2d11
--- /dev/null
@@ -0,0 +1,62 @@
+//
+// Mono.Cairo.Operator.cs
+//
+// Authors: Duncan Mak (duncan@ximian.com)
+//          Hisham Mardam Bey (hisham.mardambey@gmail.com)
+//          John Luke (john.luke@gmail.com)
+//
+// (C) Ximian, Inc. 2003
+// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2005 John Luke
+//
+// 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;
+
+namespace Crow.Drawing
+{
+       
+       public enum Operator
+       {
+               Clear,
+               Source,
+               Over,
+               In,
+               Out,
+               Atop,
+
+               Dest,
+               DestOver,
+               DestIn,
+               DestOut,
+               DestAtop,
+               
+               Xor,
+               Add,
+               Saturate,
+               Multiply,
+               Screen,
+               Overlay,
+               Darken,
+               Lighten,
+
+       }
+}
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/PSSurface.cs b/Crow/src/GraphicBackends/Mono.Cairo/PSSurface.cs
new file mode 100644 (file)
index 0000000..ca3c1d7
--- /dev/null
@@ -0,0 +1,64 @@
+//
+// Mono.Cairo.PostscriptSurface.cs
+//
+// Authors:
+//    John Luke
+//
+// (C) John Luke, 2006.
+//
+// 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;
+
+namespace Crow.Drawing {
+
+       public class PSSurface : Surface
+       {
+               internal PSSurface (IntPtr handle, bool owns) : base (handle, owns)
+               {
+               }
+
+               public PSSurface (string filename, double width, double height)
+                       : base (NativeMethods.cairo_ps_surface_create (filename, width, height), true)
+               {
+               }
+
+               public void BeginPageSetup ()
+               {
+                       NativeMethods.cairo_ps_surface_dsc_begin_page_setup (Handle);
+               }
+
+               public void BeginSetup ()
+               {
+                       NativeMethods.cairo_ps_surface_dsc_begin_setup (Handle);
+               }
+
+               public void DscComment (string comment)
+               {
+                       NativeMethods.cairo_ps_surface_dsc_comment (Handle, comment);
+               }
+
+               public void SetSize (double width, double height)
+               {
+                       NativeMethods.cairo_ps_surface_set_size (Handle, width, height);
+               }
+       }
+}
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/Path.cs b/Crow/src/GraphicBackends/Mono.Cairo/Path.cs
new file mode 100644 (file)
index 0000000..9d5e945
--- /dev/null
@@ -0,0 +1,73 @@
+//
+// Mono.Cairo.Context.cs
+//
+// Author:
+//   Miguel de Icaza (miguel@novell.com)
+//
+// This is an OO wrapper API for the Cairo API.
+//
+// Copyright 2007 Novell, Inc (http://www.novell.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 Crow.Drawing {
+
+       public class Path : IDisposable
+       {
+               IntPtr handle = IntPtr.Zero;
+
+               internal Path (IntPtr handle)
+               {
+                       this.handle = handle;
+                       if (CairoDebug.Enabled)
+                               CairoDebug.OnAllocated (handle);
+               }
+
+               ~Path ()
+               {
+                       Dispose (false);
+               }
+
+               public IntPtr Handle { get { return handle; } }
+
+               public void Dispose ()
+               {
+                       Dispose (true);
+                       GC.SuppressFinalize (this);
+               }
+
+               protected virtual void Dispose (bool disposing)
+               {
+                       if (!disposing || CairoDebug.Enabled)
+                               CairoDebug.OnDisposed<Path> (handle, disposing);
+
+                       if (!disposing|| handle == IntPtr.Zero)
+                               return;
+
+                       NativeMethods.cairo_path_destroy (handle);
+                       handle = IntPtr.Zero;
+               }
+       }
+}
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/Pattern.cs b/Crow/src/GraphicBackends/Mono.Cairo/Pattern.cs
new file mode 100644 (file)
index 0000000..1180e63
--- /dev/null
@@ -0,0 +1,155 @@
+//
+// Mono.Cairo.Pattern.cs
+//
+// Author: Jordi Mas (jordi@ximian.com)
+//         Hisham Mardam Bey (hisham.mardambey@gmail.com)
+// (C) Ximian Inc, 2004.
+//
+// Copyright (C) 2004 Novell, Inc (http://www.novell.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.Collections;
+
+namespace Crow.Drawing {
+   
+       public class Pattern : IDisposable
+       {
+               [Obsolete]
+               protected IntPtr pattern = IntPtr.Zero;
+
+               public static Pattern Lookup (IntPtr pattern, bool owner)
+               {
+                       if (pattern == IntPtr.Zero)
+                               return null;
+                       
+                       PatternType pt = NativeMethods.cairo_pattern_get_type (pattern);
+                       switch (pt) {
+                       case PatternType.Solid:
+                               return new SolidPattern (pattern, owner);
+                       case PatternType.Surface:
+                               return new SurfacePattern (pattern, owner);
+                       case PatternType.Linear:
+                               return new LinearGradient (pattern, owner);
+                       case PatternType.Radial:
+                               return new RadialGradient (pattern, owner);
+                       default:
+                               return new Pattern (pattern, owner);
+                       }
+               }
+
+               [Obsolete]
+               protected Pattern ()
+               {
+               }
+               
+               internal Pattern (IntPtr handle, bool owned)
+               {
+                       Handle = handle;
+                       if (!owned)
+                               NativeMethods.cairo_pattern_reference (handle);
+                       if (CairoDebug.Enabled)
+                               CairoDebug.OnAllocated (handle);
+               }
+
+               ~Pattern ()
+               {
+                       Dispose (false);
+               }
+               
+               [Obsolete ("Use the SurfacePattern constructor")]
+               public Pattern (Surface surface)
+                       : this ( NativeMethods.cairo_pattern_create_for_surface (surface.Handle), true)
+               {
+               }
+               
+               [Obsolete]
+               protected void Reference ()
+               {
+                       NativeMethods.cairo_pattern_reference (pattern);
+               }
+
+               public void Dispose ()
+               {
+                       Dispose (true);
+                       GC.SuppressFinalize (this);
+               }
+
+               protected virtual void Dispose (bool disposing)
+               {
+                       if (!disposing || CairoDebug.Enabled)
+                               CairoDebug.OnDisposed<Pattern> (Handle, disposing);
+
+                       if (!disposing|| Handle == IntPtr.Zero)
+                               return;
+
+                       NativeMethods.cairo_pattern_destroy (Handle);
+                       Handle = IntPtr.Zero;
+               }
+
+               [Obsolete ("Use Dispose()")]
+               public void Destroy ()
+               {
+                       Dispose ();
+               }
+
+               public Status Status
+               {
+                       get { return NativeMethods.cairo_pattern_status (Handle); }
+               }
+
+               public Extend Extend
+               {
+                       get { return NativeMethods.cairo_pattern_get_extend (Handle); }
+                       set { NativeMethods.cairo_pattern_set_extend (Handle, value); }
+               }
+
+               public Matrix Matrix {
+                       set {
+                               NativeMethods.cairo_pattern_set_matrix (Handle, value);
+                       }
+
+                       get {
+                               Matrix m = new Matrix ();
+                               NativeMethods.cairo_pattern_get_matrix (Handle, m);
+                               return m;
+                       }
+               }
+
+#pragma warning disable 612
+               public IntPtr Handle {
+                       get { return pattern; }
+                       private set { pattern = value; }
+               }
+#pragma warning restore 612
+
+               [Obsolete]
+               public IntPtr Pointer {
+                       get { return pattern; }
+               }
+
+               public PatternType PatternType {
+                       get { return NativeMethods.cairo_pattern_get_type (Handle); }
+               }
+       }
+}
+
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/PatternType.cs b/Crow/src/GraphicBackends/Mono.Cairo/PatternType.cs
new file mode 100644 (file)
index 0000000..008d8e5
--- /dev/null
@@ -0,0 +1,44 @@
+//
+// Mono.Cairo.PatternType.cs
+//
+// Authors:
+//    John Luke
+//
+// (C) John Luke, 2006.
+//
+// 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;
+
+namespace Crow.Drawing {
+
+       
+       public enum PatternType
+       {
+               Solid,
+               Surface,
+               Linear,
+               Radial,
+               Mesh,
+               RasterSource
+       }
+}
+
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/PdfSurface.cs b/Crow/src/GraphicBackends/Mono.Cairo/PdfSurface.cs
new file mode 100644 (file)
index 0000000..16287b7
--- /dev/null
@@ -0,0 +1,50 @@
+//
+// Mono.Cairo.PdfSurface.cs
+//
+// Authors:
+//    John Luke
+//
+// (C) John Luke, 2006.
+//
+// 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;
+
+namespace Crow.Drawing {
+
+       public class PdfSurface : Surface
+       {
+               internal PdfSurface (IntPtr handle, bool owns) : base (handle, owns)
+               {
+               }
+
+               public PdfSurface (string filename, double width, double height)
+                       : base (NativeMethods.cairo_pdf_surface_create (filename, width, height), true)
+               {
+               }
+
+               public void SetSize (double width, double height)
+               {
+                       NativeMethods.cairo_pdf_surface_set_size (Handle, width, height);
+               }
+       }
+}
+
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/RadialGradient.cs b/Crow/src/GraphicBackends/Mono.Cairo/RadialGradient.cs
new file mode 100644 (file)
index 0000000..e76f7df
--- /dev/null
@@ -0,0 +1,46 @@
+//
+// Mono.Cairo.Pattern.cs
+//
+// Author: Jordi Mas (jordi@ximian.com)
+//         Hisham Mardam Bey (hisham.mardambey@gmail.com)
+// (C) Ximian Inc, 2004.
+//
+// Copyright (C) 2004 Novell, Inc (http://www.novell.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;
+
+namespace Crow.Drawing {
+
+       public class RadialGradient : Gradient
+       {
+               internal RadialGradient (IntPtr handle, bool owned) : base (handle, owned)
+               {
+               }
+
+               public RadialGradient (double cx0, double cy0, double radius0, double cx1, double cy1, double radius1)
+                       : base (NativeMethods.cairo_pattern_create_radial (cx0, cy0, radius0, cx1, cy1, radius1), true)
+               {
+               }
+       }
+}
+
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/Region.cs b/Crow/src/GraphicBackends/Mono.Cairo/Region.cs
new file mode 100644 (file)
index 0000000..efb8e8f
--- /dev/null
@@ -0,0 +1,203 @@
+// Copyright (C) 2011 Novell, Inc (http://www.novell.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 Crow.Drawing
+{
+       [StructLayout(LayoutKind.Sequential)]
+       public struct RectangleList {
+               public Status Status;
+               public IntPtr Rectangles;
+               public int NumRectangles;
+       }
+
+       public enum RegionOverlap {
+               In,
+               Out,
+               Part,
+       }
+
+       public class Region : IDisposable {
+
+               IntPtr handle;
+               public IntPtr Handle {
+                       get { return handle; }
+               }
+
+               [Obsolete]
+               public Region (IntPtr handle) : this (handle, false) {}
+
+               public Region (IntPtr handle, bool owned)
+               {
+                       this.handle = handle;
+                       if (!owned)
+                               NativeMethods.cairo_region_reference (handle);
+                       if (CairoDebug.Enabled)
+                               CairoDebug.OnAllocated (handle);
+               }
+
+               public Region () : this (NativeMethods.cairo_region_create () , true)
+               {
+               }
+
+               public Region (Crow.Rectangle rect)
+               {
+                       handle = NativeMethods.cairo_region_create_rectangle (ref rect);
+               }
+
+               public Region (RectangleList rects)
+               {
+                       handle = NativeMethods.cairo_region_create_rectangles (rects.Rectangles, rects.NumRectangles);
+               }
+
+               public Region Copy ()
+               {
+                       return new Region (NativeMethods.cairo_region_copy (Handle), true);
+               }
+
+               #region IDisposable
+               ~Region ()
+               {
+                       Dispose (false);
+               }
+
+               public void Dispose ()
+               {
+                       Dispose (true);
+                       GC.SuppressFinalize (this);
+               }
+
+               protected virtual void Dispose (bool disposing)
+               {
+                       if (!disposing || CairoDebug.Enabled)
+                               CairoDebug.OnDisposed<Region> (handle, disposing);
+
+                       if (!disposing|| handle == IntPtr.Zero)
+                               return;
+
+                       NativeMethods.cairo_region_destroy (Handle);
+                       handle = IntPtr.Zero;
+               }
+               #endregion
+
+               public override bool Equals (object obj)
+               {
+                       return (obj is Region) && NativeMethods.cairo_region_equal (Handle, (obj as Region).Handle);
+               }
+
+               public override int GetHashCode ()
+               {
+                       return Handle.GetHashCode ();
+               }
+
+               public Status Status {
+                       get { return NativeMethods.cairo_region_status (Handle); }
+               }
+
+               public Crow.Rectangle Extents {
+                       get {
+                               Crow.Rectangle result;
+                               NativeMethods.cairo_region_get_extents (Handle, out result);
+                               return result;
+                       }
+               }
+
+               public int NumRectangles {
+                       get { return NativeMethods.cairo_region_num_rectangles (Handle); }
+               }
+
+               public Crow.Rectangle GetRectangle (int nth)
+               {
+                       Crow.Rectangle val;
+                       NativeMethods.cairo_region_get_rectangle (Handle, nth, out val);
+                       return val;
+               }
+
+               public bool IsEmpty {
+                       get { return NativeMethods.cairo_region_is_empty (Handle); }
+               }
+
+               public RegionOverlap Contains (Crow.Rectangle rectangle)
+               {
+                       return NativeMethods.cairo_region_contains_rectangle (Handle, ref rectangle);
+               }
+
+               public bool Contains (int x, int y)
+               {
+                       return NativeMethods.cairo_region_contains_point (Handle, x, y);
+               }
+
+               public void Translate (int dx, int dy)
+               {
+                       NativeMethods.cairo_region_translate (Handle, dx, dy);
+               }
+
+               public Status Subtract (Region other)
+               {
+                       return NativeMethods.cairo_region_subtract (Handle, other.Handle);
+               }
+
+               public Status SubtractRectangle (Crow.Rectangle rectangle)
+               {
+                       return NativeMethods.cairo_region_subtract_rectangle (Handle, ref rectangle);
+               }
+
+               public Status Intersect (Region other)
+               {
+                       return NativeMethods.cairo_region_intersect (Handle, other.Handle);
+               }
+
+               public Status IntersectRectangle (Crow.Rectangle rectangle)
+               {
+                       return NativeMethods.cairo_region_intersect_rectangle (Handle, ref rectangle);
+               }
+
+               public Status Union (Region other)
+               {
+                       return NativeMethods.cairo_region_union (Handle, other.Handle);
+               }
+
+               public Status UnionRectangle (Crow.Rectangle rectangle)
+               {
+                       return NativeMethods.cairo_region_union_rectangle (Handle, ref rectangle);
+               }
+
+               public Status Xor (Region other)
+               {
+                       return NativeMethods.cairo_region_xor (Handle, other.Handle);
+               }
+
+               public Status XorRectangle (Crow.Rectangle rectangle)
+               {
+                       return NativeMethods.cairo_region_xor_rectangle (Handle, ref rectangle);
+               }
+               public void Reset () {
+                       if (IsEmpty)
+                               return;
+                       NativeMethods.cairo_region_destroy (Handle);
+                       handle = NativeMethods.cairo_region_create ();                  
+               }
+               public bool OverlapOut (Crow.Rectangle rectangle) => Contains (p.Slot) == RegionOverlap.Out;
+       }
+}
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/ScaledFont.cs b/Crow/src/GraphicBackends/Mono.Cairo/ScaledFont.cs
new file mode 100644 (file)
index 0000000..1d70646
--- /dev/null
@@ -0,0 +1,123 @@
+//
+// 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 Crow.Drawing {
+   
+       public class ScaledFont : IDisposable
+       {
+               protected IntPtr handle = IntPtr.Zero;
+
+               internal ScaledFont (IntPtr handle, bool owner)
+               {
+                       this.handle = handle;
+                       if (!owner)
+                               NativeMethods.cairo_scaled_font_reference (handle);
+                       if (CairoDebug.Enabled)
+                               CairoDebug.OnAllocated (handle);
+               }
+
+               public ScaledFont (FontFace fontFace, Matrix matrix, Matrix ctm, FontOptions options)
+                       : this (NativeMethods.cairo_scaled_font_create (fontFace.Handle, matrix, ctm, options.Handle), true)
+               {
+               }
+
+               ~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); }
+               }
+
+               public void Dispose ()
+               {
+                       Dispose (true);
+                       GC.SuppressFinalize (this);
+               }
+
+               protected virtual void Dispose (bool disposing)
+               {
+                       if (!disposing || CairoDebug.Enabled)
+                               CairoDebug.OnDisposed<ScaledFont> (handle, disposing);
+
+                       if (!disposing|| handle == IntPtr.Zero)
+                               return;
+
+                       NativeMethods.cairo_scaled_font_destroy (handle);
+                       handle = IntPtr.Zero;
+               }
+
+               [Obsolete]
+               protected void Reference ()
+               {
+                       NativeMethods.cairo_scaled_font_reference (handle);
+               }
+       }
+}
+
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/SolidPattern.cs b/Crow/src/GraphicBackends/Mono.Cairo/SolidPattern.cs
new file mode 100644 (file)
index 0000000..5c5da80
--- /dev/null
@@ -0,0 +1,72 @@
+//
+// Mono.Cairo.Pattern.cs
+//
+// Author: Jordi Mas (jordi@ximian.com)
+//         Hisham Mardam Bey (hisham.mardambey@gmail.com)
+// (C) Ximian Inc, 2004.
+//
+// Copyright (C) 2004 Novell, Inc (http://www.novell.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 Color = Crow.Color;
+namespace Crow.Drawing {
+
+       public class SolidPattern : Pattern
+       {
+               internal SolidPattern (IntPtr handle, bool owned) : base (handle, owned)
+               {
+               }
+
+               public SolidPattern (Color color)
+                       : base (NativeMethods.cairo_pattern_create_rgba (color.R, color.G, color.B, color.A), true)
+               {
+               }
+
+               public SolidPattern (double r, double g, double b)
+                       : base (NativeMethods.cairo_pattern_create_rgb (r, g, b), true)
+               {
+               }
+
+               public SolidPattern (double r, double g, double b, double a)
+                       : base (NativeMethods.cairo_pattern_create_rgba (r, g, b, a), true)
+               {
+               }
+
+               public SolidPattern (Color color, bool solid)
+                       : base (solid
+                                       ? NativeMethods.cairo_pattern_create_rgb (color.R, color.G, color.B)
+                                       : NativeMethods.cairo_pattern_create_rgba (color.R, color.G, color.B, color.A),
+                               true)
+               {
+               }
+
+               public Color Color {
+                       get {
+                               double red, green, blue, alpha;
+                               NativeMethods.cairo_pattern_get_rgba  (Handle, out red, out green, out blue, out alpha);
+                               return new Color (red, green, blue, alpha);
+                       }
+               }
+       }
+}
+
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/Status.cs b/Crow/src/GraphicBackends/Mono.Cairo/Status.cs
new file mode 100644 (file)
index 0000000..9a0b8ee
--- /dev/null
@@ -0,0 +1,64 @@
+//
+// Mono.Cairo.Status.cs
+//
+// Authors:
+//   Duncan Mak (duncan@ximian.com)
+//   Hisham Mardam Bey (hisham.mardambey@gmail.com)
+//   John Luke (john.luke@gmail.com)
+//   Alp Toker (alp@atoker.com)
+//
+// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2005 John Luke
+//
+// 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;
+
+namespace Crow.Drawing
+{
+       
+       public enum Status
+       {
+               Success = 0,
+               NoMemory,
+               InvalidRestore,
+               InvalidPopGroup,
+               NoCurrentPoint,
+               InvalidMatrix,
+               InvalidStatus,
+               NullPointer,
+               InvalidString,
+               InvalidPathData,
+               ReadError,
+               WriteError,
+               SurfaceFinished,
+               SurfaceTypeMismatch,
+               PatternTypeMismatch,
+               InvalidContent,
+               InvalidFormat,
+               InvalidVisual,
+               FileNotFound,
+               InvalidDash,
+               InvalidDscComment,
+               InvalidIndex,
+               ClipNotRepresentable,
+       }
+}
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/SubpixelOrder.cs b/Crow/src/GraphicBackends/Mono.Cairo/SubpixelOrder.cs
new file mode 100644 (file)
index 0000000..a67776d
--- /dev/null
@@ -0,0 +1,42 @@
+//
+// Mono.Cairo.Cairo.cs
+//
+// Authors:
+//   John Luke (john.luke@gmail.com)
+//
+// Copyright (C) John Luke 2005
+//
+// 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;
+
+namespace Crow.Drawing
+{
+       
+       public enum SubpixelOrder
+       {
+               Default,
+               Rgb,
+               Bgr,
+               Vrgb,
+               Vbgr,
+       }
+}
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/Surface.cs b/Crow/src/GraphicBackends/Mono.Cairo/Surface.cs
new file mode 100644 (file)
index 0000000..4b31990
--- /dev/null
@@ -0,0 +1,229 @@
+//
+// Mono.Cairo.Surface.cs
+//
+// Authors:
+//    Duncan Mak
+//    Miguel de Icaza.
+//    Alp Toker
+//
+// (C) Ximian Inc, 2003.
+// (C) Novell, Inc. 2003.
+//
+// This is an OO wrapper API for the Cairo API
+//
+// Copyright (C) 2004 Novell, Inc (http://www.novell.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.Collections;
+
+namespace Crow.Drawing {
+
+       public class Surface : IDisposable
+       {
+               IntPtr handle = IntPtr.Zero;
+
+               [Obsolete]
+               protected Surface()
+               {
+               }
+
+               [Obsolete]
+               protected Surface (IntPtr ptr) : this (ptr, true)
+               {
+               }
+
+               protected Surface (IntPtr handle, bool owner)
+               {
+                       this.handle = handle;
+                       if (!owner)
+                               NativeMethods.cairo_surface_reference (handle);
+                       if (CairoDebug.Enabled)
+                               CairoDebug.OnAllocated (handle);
+               }
+
+               public static Surface Lookup (IntPtr surface, bool owned)
+               {
+                       SurfaceType st = NativeMethods.cairo_surface_get_type (surface);
+                       switch (st) {
+                       case SurfaceType.Image:
+                               return new ImageSurface (surface, owned);
+                       case SurfaceType.Xlib:
+                               return new XlibSurface (surface, owned);
+                       case SurfaceType.Xcb:
+                               return new XcbSurface (surface, owned);
+                       case SurfaceType.Glitz:
+                               return new GlitzSurface (surface, owned);
+                       case SurfaceType.Win32:
+                               return new Win32Surface (surface, owned);
+                       case SurfaceType.Pdf:
+                               return new PdfSurface (surface, owned);
+                       case SurfaceType.PS:
+                               return new PSSurface (surface, owned);
+                       case SurfaceType.DirectFB:
+                               return new DirectFBSurface (surface, owned);
+                       case SurfaceType.Svg:
+                               return new SvgSurface (surface, owned);
+                       case SurfaceType.GL:
+                               return new GLSurface (surface, owned);
+                       default:
+                               return new Surface (surface, owned);
+                       }
+               }
+
+               [Obsolete ("Use an ImageSurface constructor instead.")]
+               public static Cairo.Surface CreateForImage (
+                       ref byte[] data, Cairo.Format format, int width, int height, int stride)
+               {
+                       IntPtr p = NativeMethods.cairo_image_surface_create_for_data (
+                               data, format, width, height, stride);
+
+                       return new Cairo.Surface (p, true);
+               }
+
+               [Obsolete ("Use an ImageSurface constructor instead.")]
+               public static Cairo.Surface CreateForImage (
+                       Cairo.Format format, int width, int height)
+               {
+                       IntPtr p = NativeMethods.cairo_image_surface_create (
+                               format, width, height);
+
+                       return new Cairo.Surface (p, true);
+               }
+
+
+               public Cairo.Surface CreateSimilar (
+                       Cairo.Content content, int width, int height)
+               {
+                       IntPtr p = NativeMethods.cairo_surface_create_similar (
+                               this.Handle, content, width, height);
+
+                       return Surface.Lookup(p, true);
+               }
+
+               ~Surface ()
+               {
+                       Dispose (false);
+               }
+
+
+               public void Dispose ()
+               {
+                       Dispose (true);
+                       GC.SuppressFinalize (this);
+               }
+
+               protected virtual void Dispose (bool disposing)
+               {
+                       if (!disposing || CairoDebug.Enabled)
+                               CairoDebug.OnDisposed<Surface> (handle, disposing);
+
+                       if (!disposing|| handle == IntPtr.Zero)
+                               return;
+
+                       NativeMethods.cairo_surface_destroy (handle);
+                       handle = IntPtr.Zero;
+               }
+               public virtual void SetSize (int width, int height) {                   
+               }
+
+               public Status Finish ()
+               {
+                       NativeMethods.cairo_surface_finish (handle);
+                       return Status;
+               }
+
+               public void Flush ()
+               {
+                       NativeMethods.cairo_surface_flush (handle);
+               }
+
+               public void MarkDirty ()
+               {
+                       NativeMethods.cairo_surface_mark_dirty (Handle);
+               }
+
+               public void MarkDirty (Crow.Rectangle rectangle)
+               {
+                       NativeMethods.cairo_surface_mark_dirty_rectangle (Handle, rectangle.X, rectangle.Y, rectangle.Width, rectangle.Height);
+               }
+               public virtual int Width => -1;
+               public virtual int Height => -1;
+
+               public IntPtr Handle {
+                       get {
+                               return handle;
+                       }
+               }
+
+               public PointD DeviceOffset {
+                       get {
+                               double x, y;
+                               NativeMethods.cairo_surface_get_device_offset (handle, out x, out y);
+                               return new PointD (x, y);
+                       }
+
+                       set {
+                               NativeMethods.cairo_surface_set_device_offset (handle, value.X, value.Y);
+                       }
+               }
+
+               [Obsolete ("Use Dispose()")]
+               public void Destroy()
+               {
+                       Dispose ();
+               }
+
+               public void SetFallbackResolution (double x, double y)
+               {
+                       NativeMethods.cairo_surface_set_fallback_resolution (handle, x, y);
+               }
+
+               public void WriteToPng (string filename)
+               {
+                       NativeMethods.cairo_surface_write_to_png (handle, filename);
+               }
+
+               [Obsolete ("Use Handle instead.")]
+               public IntPtr Pointer {
+                       get {
+                               return handle;
+                       }
+               }
+
+               public Status Status {
+                       get { return NativeMethods.cairo_surface_status (handle); }
+               }
+
+               public Content Content {
+                       get { return NativeMethods.cairo_surface_get_content (handle); }
+               }
+
+               public SurfaceType SurfaceType {
+                       get { return NativeMethods.cairo_surface_get_type (handle); }
+               }
+
+               public uint ReferenceCount {
+                       get { return NativeMethods.cairo_surface_get_reference_count (handle); }
+               }
+       }
+}
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/SurfacePattern.cs b/Crow/src/GraphicBackends/Mono.Cairo/SurfacePattern.cs
new file mode 100644 (file)
index 0000000..6c4539c
--- /dev/null
@@ -0,0 +1,57 @@
+//
+// Mono.Cairo.Pattern.cs
+//
+// Author: Jordi Mas (jordi@ximian.com)
+//         Hisham Mardam Bey (hisham.mardambey@gmail.com)
+// (C) Ximian Inc, 2004.
+//
+// Copyright (C) 2004 Novell, Inc (http://www.novell.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;
+
+namespace Crow.Drawing {
+
+       public class SurfacePattern : Pattern
+       {
+               internal SurfacePattern (IntPtr handle, bool owned) : base (handle, owned)
+               {
+               }
+
+               public SurfacePattern (Surface surface)
+                       : base (NativeMethods.cairo_pattern_create_for_surface (surface.Handle), true)
+               {
+               }
+
+               //no idea why this is here, the base one is identical, but we can't remove it now
+               public new Extend Extend {
+                       set { NativeMethods.cairo_pattern_set_extend (Handle, value); }
+                       get { return NativeMethods.cairo_pattern_get_extend (Handle); }
+               }
+
+               public Filter Filter {
+                       set { NativeMethods.cairo_pattern_set_filter (Handle, value); }
+                       get { return NativeMethods.cairo_pattern_get_filter (Handle); }
+               }
+       }
+}
+
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/SurfaceType.cs b/Crow/src/GraphicBackends/Mono.Cairo/SurfaceType.cs
new file mode 100644 (file)
index 0000000..5333e53
--- /dev/null
@@ -0,0 +1,61 @@
+//
+// Mono.Cairo.SurfaceType.cs
+//
+// Authors:
+//    John Luke
+//
+// (C) John Luke, 2006.
+//
+// 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;
+
+namespace Crow.Drawing {
+
+       
+       public enum SurfaceType
+       {
+               Image,
+               Pdf,
+               PS,
+               Xlib,
+               Xcb,
+               Glitz,
+               Quartz,
+               Win32,
+               BeOS,
+               DirectFB,
+               Svg,
+               OS2,
+               Win32Printing,
+               QuartzImage,
+               Script,
+               Qt,
+               Recording,
+               VG,
+               GL,
+               Drm,
+               Tee,
+               Xml,
+               Skia,
+               SubSurface
+       }
+}
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/SvgSurface.cs b/Crow/src/GraphicBackends/Mono.Cairo/SvgSurface.cs
new file mode 100644 (file)
index 0000000..4e22148
--- /dev/null
@@ -0,0 +1,50 @@
+//
+// Mono.Cairo.SvgSurface.cs
+//
+// Authors:
+//    John Luke
+//
+// (C) John Luke, 2006.
+//
+// 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;
+
+namespace Crow.Drawing {
+
+       public class SvgSurface : Surface
+       {
+               internal SvgSurface (IntPtr handle, bool owns) : base (handle, owns)
+               {
+               }
+
+               public SvgSurface (string filename, double width, double height)
+                       : base (NativeMethods.cairo_svg_surface_create (filename, width, height), true)
+               {
+               }
+
+               public void RestrictToVersion (SvgVersion version)
+               {
+                       NativeMethods.cairo_svg_surface_restrict_to_version (Handle, version);
+               }
+       }
+}
+
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/SvgVersion.cs b/Crow/src/GraphicBackends/Mono.Cairo/SvgVersion.cs
new file mode 100644 (file)
index 0000000..85bc6ca
--- /dev/null
@@ -0,0 +1,41 @@
+//
+// Mono.Cairo.SvgVersion.cs
+//
+// Authors:
+//    John Luke
+//
+// (C) John Luke, 2006.
+//
+// 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;
+
+namespace Crow.Drawing {
+
+       
+       public enum SvgVersion
+       {
+               // FIXME: yuck
+               OnePointOne = 0,
+               OnePointTwo,
+       }
+}
+
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/TextExtents.cs b/Crow/src/GraphicBackends/Mono.Cairo/TextExtents.cs
new file mode 100644 (file)
index 0000000..4dd606f
--- /dev/null
@@ -0,0 +1,98 @@
+//
+// Mono.Cairo.TextExtents.cs
+//
+// Authors:
+//   Duncan Mak (duncan@ximian.com)
+//   Hisham Mardam Bey (hisham.mardambey@gmail.com)
+//
+// (C) Ximian, Inc. 2003
+// Copyright (C) 2004 Novell, Inc (http://www.novell.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 Crow.Drawing
+{
+       [StructLayout (LayoutKind.Sequential)]
+       public struct TextExtents
+       {
+               double xbearing;
+               double ybearing;
+               double width;
+               double height;
+               double xadvance;
+               double yadvance;
+               
+               public double XBearing {
+                       get { return xbearing; }
+                       set { xbearing = value; }
+               }
+               
+               public double YBearing {
+                       get { return ybearing; }
+                       set { ybearing = value; }
+               }
+               
+               public double Width {
+                       get { return width; }
+                       set { width = value; }
+               }
+               
+               public double Height {
+                       get { return height; }
+                       set { height = value; }
+               }
+               
+               public double XAdvance {
+                       get { return xadvance; }
+                       set { xadvance = value; }
+               }
+               
+               public double YAdvance {
+                       get { return yadvance; }
+                       set { yadvance = value; }
+               }
+
+               public override bool Equals (object obj)
+               {
+                       if (obj is TextExtents)
+                               return this == (TextExtents)obj;
+                       return false;
+               }
+
+               public override int GetHashCode ()
+               {
+                       return (int)XBearing ^ (int)YBearing ^ (int)Width ^ (int)Height ^ (int)XAdvance ^ (int)YAdvance;
+               }
+
+               public static bool operator == (TextExtents extents, TextExtents other)
+               {
+                       return extents.XBearing == other.XBearing && extents.YBearing == other.YBearing && extents.Width == other.Width && extents.Height == other.Height && extents.XAdvance == other.XAdvance && extents.YAdvance == other.YAdvance;
+               }
+
+               public static bool operator != (TextExtents extents, TextExtents other)
+               {
+                       return !(extents == other);
+               }
+       }
+}
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/WGLDevice.cs b/Crow/src/GraphicBackends/Mono.Cairo/WGLDevice.cs
new file mode 100644 (file)
index 0000000..fda7d93
--- /dev/null
@@ -0,0 +1,45 @@
+//
+// Mono.Cairo.Device.cs
+//
+// Authors:
+//                     JP Bruyère (jp_bruyere@hotmail.com)
+//
+// This is an OO wrapper API for the Cairo API
+//
+// Copyright (C) 2016 JP Bruyère
+//
+// 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;
+
+namespace Crow.Drawing
+{
+       public class WGLDevice : Device
+       {
+               public WGLDevice (IntPtr hglrc) : base (NativeMethods.cairo_wgl_device_create (hglrc), true)
+               {
+               }
+
+               public IntPtr Context {
+                       get { return NativeMethods.cairo_wgl_device_get_context (Handle); }
+               }
+       }
+}
+
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/Win32Surface.cs b/Crow/src/GraphicBackends/Mono.Cairo/Win32Surface.cs
new file mode 100644 (file)
index 0000000..53b79e9
--- /dev/null
@@ -0,0 +1,44 @@
+//
+// Mono.Cairo.Win32Surface.cs
+//
+// Authors:
+//    John Luke
+//
+// (C) John Luke, 2006.
+//
+// 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;
+
+namespace Crow.Drawing {
+       
+       public class Win32Surface : Surface
+       {
+               internal Win32Surface (IntPtr handle, bool owns) : base (handle, owns)
+               {
+               }
+               
+               public Win32Surface (IntPtr hdc)
+                       : base (NativeMethods.cairo_win32_surface_create (hdc), true)
+               {
+               }
+       }
+}
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/XcbSurface.cs b/Crow/src/GraphicBackends/Mono.Cairo/XcbSurface.cs
new file mode 100644 (file)
index 0000000..72c4dbe
--- /dev/null
@@ -0,0 +1,53 @@
+//
+// Mono.Cairo.XcbSurface.cs
+//
+// Authors:
+//    Alp Toker
+//
+// (C) Alp Toker, 2006.
+//
+// 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;
+
+namespace Crow.Drawing {
+       public class XcbSurface : Surface
+       {
+               internal XcbSurface (IntPtr handle, bool owns) : base (handle, owns)
+               {
+               }
+
+               public XcbSurface (IntPtr connection, uint drawable, IntPtr visual, int width, int height)
+                       : base (NativeMethods.cairo_xcb_surface_create (connection, drawable, visual, width, height), true)
+               {
+               }
+
+               public static XcbSurface FromBitmap (IntPtr connection, uint bitmap, IntPtr screen, int width, int height)
+               {
+                       IntPtr ptr = NativeMethods.cairo_xcb_surface_create_for_bitmap (connection, bitmap, screen, width, height);
+                       return new XcbSurface (ptr, true);
+               }
+               public override void SetSize (int width, int height)
+               {                       
+                       NativeMethods.cairo_xcb_surface_set_size (Handle, width, height);
+               }
+       }
+}
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/XlibSurface.cs b/Crow/src/GraphicBackends/Mono.Cairo/XlibSurface.cs
new file mode 100644 (file)
index 0000000..fbe9e01
--- /dev/null
@@ -0,0 +1,77 @@
+//
+// Mono.Cairo.XlibSurface.cs
+//
+// Authors:
+//    Duncan Mak
+//    Miguel de Icaza.
+//       JP Bruyère
+//
+// (C) Ximian Inc, 2003.
+// (C) Novell, Inc. 2003.
+// (C) JP Bruyère 2021
+//
+// This is an OO wrapper API for the Cairo API
+//
+// Copyright (C) 2004 Novell, Inc (http://www.novell.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;
+
+namespace Crow.Drawing {
+
+       public class XlibSurface : Surface
+       {
+               public XlibSurface (IntPtr display, IntPtr drawable, IntPtr visual, int width, int height)
+                       : base (NativeMethods.cairo_xlib_surface_create (display, drawable, visual, width, height), true)
+               {
+               }
+
+               public XlibSurface (IntPtr ptr, bool own) : base (ptr, own)
+               {
+               }
+
+               public static XlibSurface FromBitmap (IntPtr display, IntPtr bitmap, IntPtr screen, int width, int height)
+               {
+                       IntPtr ptr = NativeMethods.cairo_xlib_surface_create_for_bitmap (display, bitmap, screen, width, height);
+                       return new XlibSurface(ptr, true);
+               }
+
+               public void SetDrawable (IntPtr drawable, int width, int height)
+               {
+                       NativeMethods.cairo_xlib_surface_set_drawable (Handle, drawable, width, height);
+               }
+
+               public override void SetSize (int width, int height)
+               {
+                       NativeMethods.cairo_xlib_surface_set_size (Handle, width, height);
+               }
+
+               public int Depth => NativeMethods.cairo_xlib_surface_get_depth (Handle);
+               public IntPtr Display => NativeMethods.cairo_xlib_surface_get_display (Handle);
+               public IntPtr Drawable => NativeMethods.cairo_xlib_surface_get_drawable (Handle);
+               public override int Width => NativeMethods.cairo_xlib_surface_get_width (Handle);               
+               public override int Height => NativeMethods.cairo_xlib_surface_get_height (Handle);             
+
+               public IntPtr Screen => NativeMethods.cairo_xlib_surface_get_screen (Handle);
+               public IntPtr Visual=> NativeMethods.cairo_xlib_surface_get_visual (Handle);
+       }
+}
diff --git a/Crow/src/GraphicBackends/Mono.Cairo/rsvg/SvgHandle.cs b/Crow/src/GraphicBackends/Mono.Cairo/rsvg/SvgHandle.cs
new file mode 100644 (file)
index 0000000..1477b14
--- /dev/null
@@ -0,0 +1,98 @@
+//Copyright GPL2
+using System;
+using System.Runtime.InteropServices;
+
+namespace Crow.Drawing {
+
+
+       public sealed class SvgHandle : IDisposable {
+               const string lib = "rsvg-2.40";
+
+               public IntPtr Raw;
+
+               [DllImport (lib)]
+               static extern IntPtr rsvg_handle_new();
+               [DllImport (lib)]
+               static extern IntPtr rsvg_handle_new_from_data (byte[] data, UIntPtr n_data, out IntPtr error);
+               [DllImport (lib)]
+               static extern IntPtr rsvg_handle_new_from_file (string file_name, out IntPtr error);
+               [DllImport (lib)]
+               static extern IntPtr rsvg_handle_get_base_uri (IntPtr raw);
+               [DllImport (lib)]
+               static extern void rsvg_handle_set_dpi (IntPtr raw, double dpi);
+               [DllImport (lib)]
+               static extern void rsvg_handle_set_dpi_x_y (IntPtr raw, double dpi_x, double dpi_y);
+
+               [DllImport (lib)]
+               static extern void rsvg_handle_render_cairo (IntPtr raw, IntPtr cr);
+               [DllImport (lib)]
+               static extern void rsvg_handle_render_cairo_sub (IntPtr raw, IntPtr cr, string id);
+
+               [DllImport (lib)]
+               static extern void rsvg_handle_get_dimensions (IntPtr raw, IntPtr dimension_data);
+               [DllImport (lib)]
+               static extern bool rsvg_handle_close (IntPtr raw, out IntPtr error);
+               [DllImport (lib)]
+               static extern IntPtr rsvg_handle_get_title (IntPtr raw);
+               [DllImport (lib)]
+               static extern IntPtr rsvg_handle_get_metadata (IntPtr raw);
+
+               public SvgHandle ()
+               {
+                       Raw = rsvg_handle_new();
+               }
+               public  SvgHandle (byte[] data)
+               {                       
+                       Raw = rsvg_handle_new_from_data(data, new UIntPtr ((ulong) (data == null ? 0 : data.Length)), out IntPtr error);
+                       if (error != IntPtr.Zero) throw new Exception (error.ToString());
+               }
+               public SvgHandle (string file_name)
+               {                       
+                       Raw = rsvg_handle_new_from_file(file_name, out IntPtr error);
+                       if (error != IntPtr.Zero) throw new Exception (error.ToString());
+               }
+
+
+               public double Dpi { set => rsvg_handle_set_dpi (Raw, value); }
+               public void SetDpiXY (double dpi_x, double dpi_y) => rsvg_handle_set_dpi_x_y (Raw, dpi_x, dpi_y);
+
+
+               public void Render(Context cr) =>
+                       rsvg_handle_render_cairo (Raw, cr == null ? IntPtr.Zero : cr.Handle);
+               
+               public void Render (Context cr, string id) =>
+                       rsvg_handle_render_cairo_sub (Raw, cr == null ? IntPtr.Zero : cr.Handle, id);
+               
+               [StructLayout(LayoutKind.Sequential)]
+               struct DimensionData {
+
+                       public int Width;
+                       public int Height;
+                       public double Em;
+                       public double Ex;
+
+                       public static DimensionData Zero = new DimensionData ();
+
+                       public static DimensionData New(IntPtr raw) {
+                               if (raw == IntPtr.Zero)
+                                       return DimensionData.Zero;
+                               return (DimensionData) Marshal.PtrToStructure (raw, typeof (DimensionData));
+                       }
+               }               
+               public Size Dimensions {
+                       get {
+                               DimensionData dimension_data;
+                               IntPtr native_dimension_data = Marshal.AllocHGlobal (Marshal.SizeOf (typeof (DimensionData)));
+                               rsvg_handle_get_dimensions(Raw, native_dimension_data);
+                               dimension_data = DimensionData.New (native_dimension_data);
+                               Marshal.FreeHGlobal (native_dimension_data);
+                               return new Size (dimension_data.Width, dimension_data.Height);
+                       }
+               }
+
+               public void Dispose() {                 
+                       bool raw_ret = rsvg_handle_close(Raw, out IntPtr error);
+                       if (error != IntPtr.Zero) throw new Exception (error.ToString());                       
+               }
+       }
+}
diff --git a/Crow/src/GraphicBackends/vkvg/Context.cs b/Crow/src/GraphicBackends/vkvg/Context.cs
new file mode 100644 (file)
index 0000000..bf638de
--- /dev/null
@@ -0,0 +1,386 @@
+// Copyright (c) 2018-2020  Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
+//
+// This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
+
+using System;
+using System.Text;
+using Crow;
+
+namespace Crow.Drawing
+{
+       public class Context : IDisposable
+       {
+
+               IntPtr handle = IntPtr.Zero;
+
+               public Context(Surface surf)
+               {
+                       handle = NativeMethods.vkvg_create(surf.Handle);
+                       this.FillRule = FillRule.NonZero;
+               }
+               ~Context()
+               {
+                       Dispose(false);
+               }
+
+               public IntPtr Handle => handle;
+
+               public void AddReference()
+               {
+                       NativeMethods.vkvg_reference(handle);
+               }
+               public uint References() => NativeMethods.vkvg_get_reference_count(handle);
+
+               public double LineWidth
+               {
+                       get => NativeMethods.vkvg_get_line_width(handle);
+                       set { NativeMethods.vkvg_set_line_width(handle, (float)value); }
+               }
+               public LineJoin LineJoin
+               {
+                       get => NativeMethods.vkvg_get_line_join(handle);
+                       set { NativeMethods.vkvg_set_line_join(handle, value); }
+               }
+               public LineCap LineCap
+               {
+                       get => NativeMethods.vkvg_get_line_cap(handle);
+                       set { NativeMethods.vkvg_set_line_cap(handle, value); }
+               }
+               public uint FontSize
+               {
+                       set { NativeMethods.vkvg_set_font_size(handle, value); }
+               }
+               public string FontFace
+               {
+                       set { NativeMethods.vkvg_select_font_face(handle, value); }
+               }
+               public Operator Operator
+               {
+                       set { NativeMethods.vkvg_set_operator(handle, value); }
+                       get { return NativeMethods.vkvg_get_operator(handle); }
+               }
+               public FillRule FillRule
+               {
+                       set { NativeMethods.vkvg_set_fill_rule(handle, value); }
+                       get { return NativeMethods.vkvg_get_fill_rule(handle); }
+               }
+               public FontExtents FontExtents
+               {
+                       get
+                       {
+                               FontExtents f_extents;
+                               NativeMethods.vkvg_font_extents(handle, out f_extents);
+                               return f_extents;
+                       }
+               }
+               public Antialias Antialias {
+                       set;
+                       get;
+               }
+               public TextExtents TextExtents (ReadOnlySpan<char> s, int tabSize = 4) {
+                       TextExtents (s, tabSize, out TextExtents extents);                      
+                       return extents;
+               }
+               public void TextExtents (ReadOnlySpan<char> s, int tabSize, out TextExtents extents) {
+                       int size = s.Length * 4 + 1;
+                       Span<byte> bytes = size > 512 ? new byte[size] : stackalloc byte[size];
+                       int encodedBytes = Crow.Text.Encoding.ToUtf8 (s, bytes, tabSize);
+                       bytes[encodedBytes] = 0;
+                       TextExtents (bytes.Slice (0, encodedBytes + 1), out extents);
+               }               
+               public void TextExtents (Span<byte> bytes, out TextExtents extents) {
+                       NativeMethods.vkvg_text_extents (handle, ref bytes.GetPinnableReference (), out extents);
+               }
+               public Matrix Matrix
+               {
+                       get
+                       {
+                               Matrix m;
+                               NativeMethods.vkvg_get_matrix(handle, out m);
+                               return m;
+                       }
+                       set
+                       {
+                               NativeMethods.vkvg_set_matrix(handle, ref value);
+                       }
+               }
+               public void ShowText (ReadOnlySpan<char> s, int tabSize) {
+                       int size = s.Length * 4 + 1;
+                       Span<byte> bytes = size > 512 ? new byte[size] : stackalloc byte[size];
+                       int encodedBytes = Crow.Text.Encoding.ToUtf8 (s, bytes, tabSize);
+                       bytes[encodedBytes] = 0;
+                       ShowText (bytes.Slice (0, encodedBytes + 1));
+               }
+               public void ShowText (Span<byte> bytes) {
+                       NativeMethods.vkvg_show_text (handle, ref bytes.GetPinnableReference());
+               }
+
+               public void ShowText(TextRun textRun)
+               {
+                       NativeMethods.vkvg_show_text_run(handle, textRun.Handle);
+               }
+               public void Save()
+               {
+                       NativeMethods.vkvg_save(handle);
+               }
+               public void Restore()
+               {
+                       NativeMethods.vkvg_restore(handle);
+               }
+               public void Flush()
+               {
+                       NativeMethods.vkvg_flush(handle);
+               }
+               public void Clear()
+               {
+                       NativeMethods.vkvg_clear(handle);
+               }
+               public void Paint()
+               {
+                       NativeMethods.vkvg_paint(handle);
+               }
+               public void PaintWithAlpha (double alpha) => Paint();
+               public void Arc(float xc, float yc, float radius, float a1, float a2)
+               {
+                       NativeMethods.vkvg_arc(handle, xc, yc, radius, a1, a2);
+               }
+               public void Arc(double xc, double yc, double radius, double a1, double a2)
+               {
+                       NativeMethods.vkvg_arc(handle, (float)xc, (float)yc, (float)radius, (float)a1, (float)a2);
+               }
+               public void Arc (PointD center, double radius, double angle1, double angle2)
+               {
+                       NativeMethods.vkvg_arc (handle, (float)center.X, (float)center.Y, (float)radius, (float)angle1, (float)angle2);
+               }
+
+               public void ArcNegative (PointD center, double radius, double angle1, double angle2)
+               {
+                       NativeMethods.vkvg_arc_negative (handle, (float)center.X, (float)center.Y, (float)radius, (float)angle1, (float)angle2);
+               }               
+               public void ArcNegative(float xc, float yc, float radius, float a1, float a2)
+               {
+                       NativeMethods.vkvg_arc_negative(handle, xc, yc, radius, a1, a2);
+               }
+               public void Rectangle(float x, float y, float width, float height)
+               {
+                       NativeMethods.vkvg_rectangle(handle, x, y, width, height);
+               }
+               public void Scale(float sx, float sy)
+               {
+                       NativeMethods.vkvg_scale(handle, sx, sy);
+               }
+               public void Translate(float dx, float dy)
+               {
+                       NativeMethods.vkvg_translate(handle, dx, dy);
+               }
+               public void Rotate(float alpha)
+               {
+                       NativeMethods.vkvg_rotate(handle, alpha);
+               }
+               public void ArcNegative(double xc, double yc, double radius, double a1, double a2)
+               {
+                       NativeMethods.vkvg_arc_negative(handle, (float)xc, (float)yc, (float)radius, (float)a1, (float)a2);
+               }
+               public void Rectangle(double x, double y, double width, double height)
+               {
+                       NativeMethods.vkvg_rectangle(handle, (float)x, (float)y, (float)width, (float)height);
+               }
+               public void Scale(double sx, double sy)
+               {
+                       NativeMethods.vkvg_scale(handle, (float)sx, (float)sy);
+               }
+               public void Translate(double dx, double dy)
+               {
+                       NativeMethods.vkvg_translate(handle, (float)dx, (float)dy);
+               }
+               public void Translate(PointD p)
+               {
+                       NativeMethods.vkvg_translate(handle, (float)p.X, (float)p.Y);
+               }
+               public void Rotate(double alpha)
+               {
+                       NativeMethods.vkvg_rotate(handle, (float)alpha);
+               }
+
+               public void Fill()
+               {
+                       NativeMethods.vkvg_fill(handle);
+               }
+               public void FillPreserve()
+               {
+                       NativeMethods.vkvg_fill_preserve(handle);
+               }
+               public void Stroke()
+               {
+                       NativeMethods.vkvg_stroke(handle);
+               }
+               public void StrokePreserve()
+               {
+                       NativeMethods.vkvg_stroke_preserve(handle);
+               }
+               public void Clip()
+               {
+                       NativeMethods.vkvg_clip(handle);
+               }
+               public void ClipPreserve()
+               {
+                       NativeMethods.vkvg_clip_preserve(handle);
+               }
+               public void ResetClip()
+               {
+                       NativeMethods.vkvg_reset_clip(handle);
+               }
+               public void NewPath()
+               {
+                       NativeMethods.vkvg_new_path(handle);
+               }
+               public void NewSubPath()
+               {
+                       NativeMethods.vkvg_new_sub_path(handle);
+               }
+               public void ClosePath()
+               {
+                       NativeMethods.vkvg_close_path(handle);
+               }
+               public void MoveTo(PointD p)
+               {
+                       NativeMethods.vkvg_move_to(handle, (float)p.X, (float)p.Y);
+               }
+               public void MoveTo(Point p)
+               {
+                       NativeMethods.vkvg_move_to(handle, p.X, p.Y);
+               }
+               public void MoveTo(float x, float y)
+               {
+                       NativeMethods.vkvg_move_to(handle, x, y);
+               }
+               public void RelMoveTo(float x, float y)
+               {
+                       NativeMethods.vkvg_rel_move_to(handle, x, y);
+               }
+               public void LineTo(float x, float y)
+               {
+                       NativeMethods.vkvg_line_to(handle, x, y);
+               }
+               public void LineTo(Point p)
+               {
+                       NativeMethods.vkvg_line_to(handle, p.X, p.Y);
+               }
+               public void LineTo(PointD p)
+               {
+                       NativeMethods.vkvg_line_to(handle, (float)p.X, (float)p.Y);
+               }
+               public void RelLineTo(float x, float y)
+               {
+                       NativeMethods.vkvg_rel_line_to(handle, x, y);
+               }
+               public void CurveTo(float x1, float y1, float x2, float y2, float x3, float y3)
+               {
+                       NativeMethods.vkvg_curve_to(handle, x1, y1, x2, y2, x3, y3);
+               }
+               public void RelCurveTo(float x1, float y1, float x2, float y2, float x3, float y3)
+               {
+                       NativeMethods.vkvg_rel_curve_to(handle, x1, y1, x2, y2, x3, y3);
+               }
+
+               public void MoveTo(double x, double y)
+               {
+                       NativeMethods.vkvg_move_to(handle, (float)x, (float)y);
+               }
+               public void RelMoveTo(double x, double y)
+               {
+                       NativeMethods.vkvg_rel_move_to(handle, (float)x, (float)y);
+               }
+               public void LineTo(double x, double y)
+               {
+                       NativeMethods.vkvg_line_to(handle, (float)x, (float)y);
+               }
+               public void RelLineTo(double x, double y)
+               {
+                       NativeMethods.vkvg_rel_line_to(handle, (float)x, (float)y);
+               }
+               public void CurveTo(double x1, double y1, double x2, double y2, double x3, double y3)
+               {
+                       NativeMethods.vkvg_curve_to(handle, (float)x1, (float)y1, (float)x2, (float)y2, (float)x3, (float)y3);
+               }
+               public void RelCurveTo(double x1, double y1, double x2, double y2, double x3, double y3)
+               {
+                       NativeMethods.vkvg_rel_curve_to(handle, (float)x1, (float)y1, (float)x2, (float)y2, (float)x3, (float)y3);
+               }
+
+               public void SetSource(Pattern pat)
+               {
+                       NativeMethods.vkvg_set_source(handle, pat.Handle);
+               }
+               public void SetSource (Color color)
+               {
+                       NativeMethods.vkvg_set_source_rgba (handle, (float)(color.R / 255.0), (float)(color.G / 255.0), (float)(color.B / 255.0), (float)(color.A / 255.0));
+               }
+               public void SetSource(float r, float g, float b, float a = 1f)
+               {
+                       NativeMethods.vkvg_set_source_rgba(handle, r, g, b, a);
+               }
+               public void SetSource(double r, double g, double b, double a = 1.0)
+               {
+                       NativeMethods.vkvg_set_source_rgba(handle, (float)r, (float)g, (float)b, (float)a);
+               }
+               public void SetSource(Surface surf, float x = 0f, float y = 0f)
+               {
+                       NativeMethods.vkvg_set_source_surface(handle, surf.Handle, x, y);
+               }
+               public void SetSourceSurface(Surface surf, float x = 0f, float y = 0f)
+               {
+                       NativeMethods.vkvg_set_source_surface(handle, surf.Handle, x, y);
+               }
+               public void RenderSvg(IntPtr nsvgImage, string subId = null)
+               {
+                       NativeMethods.vkvg_render_svg(handle, nsvgImage, subId);
+               }
+               public Crow.Rectangle StrokeExtents () => default;
+               internal static byte[] TerminateUtf8(string s)
+               {
+                       // compute the byte count including the trailing \0
+                       var byteCount = Encoding.UTF8.GetMaxByteCount(s.Length + 1);
+                       var bytes = new byte[byteCount];
+                       Encoding.UTF8.GetBytes(s, 0, s.Length, bytes, 0);
+                       return bytes;
+               }
+
+               public float[] Dashes
+               {
+                       set
+                       {
+                               if (value == null)
+                                       NativeMethods.vkvg_set_dash(handle, null, 0, 0);
+                               else
+                                       NativeMethods.vkvg_set_dash(handle, value, (uint)value.Length, 0);
+                       }
+               }
+               
+
+               public void PushGroup () {
+
+               }
+               public void PopGroupToSource () {
+                       
+               }
+
+               #region IDisposable implementation
+               public void Dispose()
+               {
+                       Dispose(true);
+                       GC.SuppressFinalize(this);
+               }
+
+               protected virtual void Dispose(bool disposing)
+               {
+                       if (!disposing || handle == IntPtr.Zero)
+                               return;
+
+                       NativeMethods.vkvg_destroy(handle);
+                       handle = IntPtr.Zero;
+               }
+               #endregion
+       }
+}
+
diff --git a/Crow/src/GraphicBackends/vkvg/Device.cs b/Crow/src/GraphicBackends/vkvg/Device.cs
new file mode 100644 (file)
index 0000000..6ff0230
--- /dev/null
@@ -0,0 +1,50 @@
+// Copyright (c) 2018-2020  Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
+//
+// This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
+
+using System;
+
+namespace Crow.Drawing
+{
+       public class Device: IDisposable
+       {
+
+               IntPtr handle = IntPtr.Zero;
+
+               #region CTORS & DTOR
+               public Device (IntPtr instance, IntPtr phy, IntPtr dev, uint qFamIdx, SampleCount samples = SampleCount.Sample_1, uint qIndex = 0)
+               {
+                       handle = NativeMethods.vkvg_device_create_multisample (instance, phy, dev, qFamIdx, qIndex, samples, false);
+               }
+               ~Device ()
+               {
+                       Dispose (false);
+               }
+               #endregion
+
+               public void GetDpy (out int hdpy, out int vdpy) => NativeMethods.vkvg_device_get_dpy (handle, out hdpy, out vdpy);
+               public void SetDpy (int hdpy, int vdpy) => NativeMethods.vkvg_device_set_dpy (handle, hdpy, vdpy);
+               public void AddReference () => NativeMethods.vkvg_device_reference (handle);
+               public uint References () => NativeMethods.vkvg_device_get_reference_count (handle);
+
+               public IntPtr Handle => handle;
+
+               #region IDisposable implementation
+               public void Dispose ()
+               {
+                       Dispose (true);
+                       GC.SuppressFinalize (this);
+               }
+
+               protected virtual void Dispose (bool disposing)
+               {
+                       if (!disposing || handle == IntPtr.Zero)
+                               return;
+
+                       NativeMethods.vkvg_device_destroy (handle);
+                       handle = IntPtr.Zero;
+               }
+               #endregion
+       }
+}
+
diff --git a/Crow/src/GraphicBackends/vkvg/Enums.cs b/Crow/src/GraphicBackends/vkvg/Enums.cs
new file mode 100644 (file)
index 0000000..c76a4c3
--- /dev/null
@@ -0,0 +1,143 @@
+// Copyright (c) 2018-2020  Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
+//
+// This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
+
+using System;
+
+namespace Crow.Drawing
+{
+    public enum Status
+    {
+        Success = 0,
+        NoMemory,
+        InvalidRestore,
+        InvalidPopGroup,
+        NoCurrentPoint,
+        InvalidMatrix,
+        InvalidStatus,
+        NullPointer,
+        InvalidString,
+        InvalidPathData,
+        ReadError,
+        WriteError,
+        SurfaceFinished,
+        SurfaceTypeMismatch,
+        PatternTypeMismatch,
+        InvalidContent,
+        InvalidFormat,
+        InvalidVisual,
+        FileNotFound,
+        InvalidDash
+    }
+
+    public enum Direction
+    {
+        Horizontal = 0,
+        Vertical = 1
+    }
+
+    public enum Format
+    {
+        ARGB32,
+        RGB24,
+        A8,
+        A1
+    }
+
+    public enum Extend
+    {
+        None,
+        Repeat,
+        Reflect,
+        Pad
+    }
+
+    public enum Filter
+    {
+        Fast,
+        Good,
+        Best,
+        Nearest,
+        Bilinear,
+        Gaussian,
+    }
+
+    public enum PatternType
+    {
+        Solid,
+        Surface,
+        Linear,
+        Radial,
+        Mesh,
+        RasterSource,
+    }
+
+    public enum Operator
+    {
+        Clear,
+        Source,
+        Over,
+        In,
+        Out,
+        Atop,
+
+        Dest,
+        DestOver,
+        DestIn,
+        DestOut,
+        DestAtop,
+
+        Xor,
+        Add,
+        Saturate,
+    }
+
+    public enum FontSlant
+    {
+        Normal,
+        Italic,
+        Oblique
+    }
+    public enum FontWeight
+    {
+        Normal,
+        Bold,
+    }
+
+    public enum SampleCount
+    {
+        Sample_1 = 0x00000001,
+        Sample_2 = 0x00000002,
+        Sample_4 = 0x00000004,
+        Sample_8 = 0x00000008,
+        Sample_16 = 0x00000010,
+        Sample_32 = 0x00000020,
+        Sample_64 = 0x00000040
+    }
+
+    public enum LineCap
+    {
+        Butt,
+        Round,
+        Square
+    }
+
+    public enum LineJoin
+    {
+        Miter,
+        Round,
+        Bevel
+    }
+    public enum FillRule
+    {
+        EvenOdd,
+        NonZero,
+    }
+       public enum Antialias
+       {
+               Default,
+               None,
+               Grey,
+               Subpixel,
+       }
+}
\ No newline at end of file
diff --git a/Crow/src/GraphicBackends/vkvg/FontExtents.cs b/Crow/src/GraphicBackends/vkvg/FontExtents.cs
new file mode 100644 (file)
index 0000000..769b9a6
--- /dev/null
@@ -0,0 +1,106 @@
+//
+// from Mono.Cairo.FontExtents.cs
+//
+// Authors: Duncan Mak (duncan@ximian.com)
+//          Hisham Mardam Bey (hisham.mardambey@gmail.com)
+//
+// (C) Ximian, Inc. 2003
+//
+// This is a simplistic binding of the Cairo API to C#. All functions
+// in cairo.h are transcribed into their C# equivelants
+//
+// Copyright (C) 2004 Novell, Inc (http://www.novell.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.
+//
+// Copyright (c) 2018-2020  Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
+//
+// This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
+using System;
+using System.Runtime.InteropServices;
+
+namespace Crow.Drawing
+{
+       [StructLayout (LayoutKind.Sequential)]
+       public struct FontExtents
+       {
+               float ascent;
+               float descent;
+               float height;
+               float maxXAdvance;
+               float maxYAdvance;
+               
+               public float Ascent {
+                       get { return ascent; }
+                       set { ascent = value; }
+               }
+               
+               public float Descent {
+                       get { return descent; }
+                       set { descent = value; }
+               }
+               
+               public float Height {
+                       get { return height; }
+                       set { height = value; }
+               }
+               
+               public float MaxXAdvance {
+                       get { return maxXAdvance; }
+                       set { maxXAdvance = value; }
+               }
+               
+               public float MaxYAdvance {
+                       get { return maxYAdvance; }
+                       set { maxYAdvance = value; }
+               }
+
+               public FontExtents (float ascent, float descent, float height, float maxXAdvance, float maxYAdvance)
+               {
+                       this.ascent = ascent;
+                       this.descent = descent;
+                       this.height = height;
+                       this.maxXAdvance = maxXAdvance;
+                       this.maxYAdvance = maxYAdvance;
+               }
+
+               public override bool Equals (object obj)
+               {
+                       if (obj is FontExtents)
+                               return this == (FontExtents) obj;
+                       return false;
+               }
+
+               public override int GetHashCode ()
+               {
+                       return (int) Ascent ^ (int) Descent ^ (int) Height ^ (int) MaxXAdvance ^ (int) MaxYAdvance;
+               }
+
+               public static bool operator == (FontExtents extents, FontExtents other)
+               {
+                       return extents.Ascent == other.Ascent && extents.Descent == other.Descent && extents.Height == other.Height && extents.MaxXAdvance == other.MaxXAdvance && extents.MaxYAdvance == other.MaxYAdvance;
+               }
+
+               public static bool operator != (FontExtents extents, FontExtents other)
+               {
+                       return !(extents == other);
+               }
+       }
+}
diff --git a/Crow/src/GraphicBackends/vkvg/Matrix.cs b/Crow/src/GraphicBackends/vkvg/Matrix.cs
new file mode 100644 (file)
index 0000000..2dc541e
--- /dev/null
@@ -0,0 +1,92 @@
+// Copyright (c) 2018-2020  Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
+//
+// This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
+
+using System;
+namespace Crow.Drawing {
+       public struct Matrix {
+               float xx; float yx;
+               float xy; float yy;
+               float x0; float y0;
+
+               public float XX { get { return xx; } set { xx = value; } }
+               public float YX { get { return yx; } set { yx = value; } }
+               public float XY { get { return xy; } set { xy = value; } }
+               public float YY { get { return yy; } set { yy = value; } }
+               public float X0 { get { return x0; } set { x0 = value; } }
+               public float Y0 { get { return y0; } set { y0 = value; } }
+
+               public static Matrix Create (float xx, float yx, float xy, float yy, float x0, float y0) {
+                       Matrix tmp;
+                       NativeMethods.vkvg_matrix_init (out tmp, xx, yx, xy, yy, x0, y0);
+                       return tmp;
+               }
+               public static Matrix CreateTranslation (float tx, float ty) {
+                       Matrix tmp;
+                       NativeMethods.vkvg_matrix_init_translate (out tmp, tx, ty);
+                       return tmp;
+               }
+               public static Matrix CreateRotation (float radian) {
+                       Matrix tmp;
+                       NativeMethods.vkvg_matrix_init_rotate (out tmp, radian);
+                       return tmp;
+               }
+               public static Matrix CreateScale (float sx, float sy) {
+                       Matrix tmp;
+                       NativeMethods.vkvg_matrix_init_scale (out tmp, sx, sy);
+                       return tmp;
+               }
+               public static Matrix Identity {
+                       get {
+                               Matrix tmp;
+                               NativeMethods.vkvg_matrix_init_identity (out tmp);
+                               return tmp;
+                       }
+               }
+
+               public void Translate (float tx, float ty) {
+                       Matrix tmp = this;
+                       NativeMethods.vkvg_matrix_translate (ref tmp, tx, ty);
+                       xx = tmp.xx; yx = tmp.yx;
+                       xy = tmp.xy; yy = tmp.yy;
+                       x0 = tmp.x0; y0 = tmp.y0;
+               }
+               public void Rotate (float radian) {
+                       Matrix tmp = this;
+                       NativeMethods.vkvg_matrix_rotate (ref tmp, radian);
+                       xx = tmp.xx; yx = tmp.yx;
+                       xy = tmp.xy; yy = tmp.yy;
+                       x0 = tmp.x0; y0 = tmp.y0;
+               }
+               public void Scale (float sx, float sy) {
+                       Matrix tmp = this;
+                       NativeMethods.vkvg_matrix_scale (ref tmp, sx, sy);
+                       xx = tmp.xx; yx = tmp.yx;
+                       xy = tmp.xy; yy = tmp.yy;
+                       x0 = tmp.x0; y0 = tmp.y0;
+               }
+               public void Invert () {
+                       Matrix tmp = this;
+                       NativeMethods.vkvg_matrix_invert (ref tmp);
+                       xx = tmp.xx; yx = tmp.yx;
+                       xy = tmp.xy; yy = tmp.yy;
+                       x0 = tmp.x0; y0 = tmp.y0;
+               }
+               public void TransformDistance (ref float dx, ref float dy) {
+                       NativeMethods.vkvg_matrix_transform_distance (ref this, ref dx, ref dy);
+               }
+               public void TransformPoint (ref float px, ref float py) {
+                       NativeMethods.vkvg_matrix_transform_distance (ref this, ref px, ref py);
+               }
+
+               public static Matrix operator *(Matrix a, Matrix b) {
+                       Matrix tmp;
+                       NativeMethods.vkvg_matrix_multiply (out tmp, ref a, ref b);
+                       return tmp;
+               }
+
+               public override string ToString () {
+                       return string.Format ($"({xx};{yx};{xy};{yy};{x0};{y0})");
+               }
+       }
+}
diff --git a/Crow/src/GraphicBackends/vkvg/NativeMethods.cs b/Crow/src/GraphicBackends/vkvg/NativeMethods.cs
new file mode 100644 (file)
index 0000000..c87cb18
--- /dev/null
@@ -0,0 +1,275 @@
+// Copyright (c) 2018-2020  Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
+//
+// This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Crow.Drawing
+{
+    internal static class NativeMethods
+    {
+        const string libvkvg = "vkvg";
+
+        #region Device
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern IntPtr vkvg_device_create(IntPtr instance, IntPtr phy, IntPtr dev, uint qFamIdx, uint qIndex);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern IntPtr vkvg_device_destroy(IntPtr device);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern IntPtr vkvg_device_create_multisample(IntPtr inst, IntPtr phy, IntPtr vkdev, uint qFamIdx, uint qIndex, SampleCount samples, bool deferredResolve);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern IntPtr vkvg_device_reference(IntPtr dev);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern uint vkvg_device_get_reference_count(IntPtr dev);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_device_set_dpy(IntPtr dev, int hdpy, int vdpy);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_device_get_dpy(IntPtr dev, out int hdpy, out int vdpy);
+        #endregion
+
+        #region Context
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern IntPtr vkvg_create(IntPtr surface);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_destroy(IntPtr ctx);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_flush(IntPtr ctx);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_new_path(IntPtr ctx);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_new_sub_path(IntPtr ctx);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_close_path(IntPtr ctx);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_line_to(IntPtr ctx, float x, float y);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_rel_line_to(IntPtr ctx, float x, float y);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_move_to(IntPtr ctx, float x, float y);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_rel_move_to(IntPtr ctx, float x, float y);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_arc(IntPtr ctx, float xc, float yc, float radius, float a1, float a2);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_arc_negative(IntPtr ctx, float xc, float yc, float radius, float a1, float a2);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_curve_to(IntPtr ctx, float x1, float y1, float x2, float y2, float x3, float y3);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_rel_curve_to(IntPtr ctx, float x1, float y1, float x2, float y2, float x3, float y3);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_rectangle(IntPtr ctx, float x, float y, float width, float height);
+
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_scale(IntPtr ctx, float sx, float sy);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_translate(IntPtr ctx, float dx, float dy);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_rotate(IntPtr ctx, float alpha);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_transform(IntPtr ctx, ref Matrix matrix);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_set_matrix(IntPtr ctx, ref Matrix matrix);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_get_matrix(IntPtr ctx, out Matrix matrix);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_identity_matrix(IntPtr ctx);
+
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_stroke(IntPtr ctx);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_stroke_preserve(IntPtr ctx);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_clip(IntPtr ctx);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_clip_preserve(IntPtr ctx);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_reset_clip(IntPtr ctx);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_fill(IntPtr ctx);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_fill_preserve(IntPtr ctx);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_paint(IntPtr ctx);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_set_source_rgba(IntPtr ctx, float r, float g, float b, float a);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_set_line_width(IntPtr ctx, float width);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_set_line_cap(IntPtr ctx, LineCap cap);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_set_line_join(IntPtr ctx, LineJoin join);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_set_operator(IntPtr ctx, Operator op);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern FillRule vkvg_get_fill_rule(IntPtr ctx);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_set_fill_rule(IntPtr ctx, FillRule fr);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern Operator vkvg_get_operator(IntPtr ctx);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_set_source_surface(IntPtr ctx, IntPtr surf, float x, float y);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_set_source(IntPtr ctx, IntPtr pattern);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_font_extents(IntPtr ctx, out FontExtents extents);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_text_extents(IntPtr ctx, byte[] utf8, out TextExtents extents);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_text_extents(IntPtr cr, ref byte utf8, out TextExtents extents);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_select_font_face(IntPtr ctx, string name);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_set_font_size(IntPtr ctx, uint size);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_show_text(IntPtr ctx, byte [] utf8);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_show_text(IntPtr cr, ref byte utf8);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_save(IntPtr ctx);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_restore(IntPtr ctx);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_clear(IntPtr ctx);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern float vkvg_get_line_width(IntPtr ctx);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern LineCap vkvg_get_line_cap(IntPtr ctx);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern LineJoin vkvg_get_line_join(IntPtr ctx);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern IntPtr vkvg_get_source(IntPtr ctx);
+
+               [DllImport (libvkvg, CallingConvention = CallingConvention.Cdecl)]
+               internal static extern void vkvg_set_dash (IntPtr ctx, float[] dashes, uint dashCount, float offset);
+
+               //void vkvg_set_dash (VkvgContext ctx, const float* dashes, uint32_t num_dashes, float offset);
+               //void vkvg_get_dash (VkvgContext ctx, const float* dashes, uint32_t* num_dashes, float* offset
+
+          [DllImport (libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern IntPtr vkvg_reference(IntPtr ctx);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern uint vkvg_get_reference_count(IntPtr ctx);
+        #endregion
+
+        #region TextRun
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern IntPtr vkvg_text_run_create(IntPtr ctx, byte[] utf8);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_text_run_destroy(IntPtr textRun);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_show_text_run(IntPtr ctx, IntPtr textRun);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_text_run_get_extents(IntPtr textRun, out TextExtents extents);
+        #endregion
+
+        #region Pattern
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern IntPtr vkvg_pattern_create();
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern IntPtr vkvg_pattern_reference(IntPtr pat);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern uint vkvg_pattern_get_reference_count(IntPtr pat);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern IntPtr vkvg_pattern_create_rgba(float r, float g, float b, float a);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern IntPtr vkvg_pattern_create_rgb(float r, float g, float b);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern IntPtr vkvg_pattern_create_for_surface(IntPtr surf);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern IntPtr vkvg_pattern_create_linear(float x0, float y0, float x1, float y1);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern IntPtr vkvg_pattern_create_radial(float cx0, float cy0, float radius0,
+                                             float cx1, float cy1, float radius1);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_pattern_destroy(IntPtr pat);
+
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_pattern_add_color_stop(IntPtr pat, float offset, float r, float g, float b, float a);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_pattern_set_extend(IntPtr pat, Extend extend);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_pattern_set_filter(IntPtr pat, Filter filter);
+
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern Extend vkvg_pattern_get_extend(IntPtr pat);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern Filter vkvg_pattern_get_filter(IntPtr pat);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern PatternType vkvg_pattern_get_type(IntPtr pat);
+        #endregion
+
+        #region Matrices
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_matrix_init_identity(out Matrix matrix);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_matrix_init(out Matrix matrix,
+           float xx, float yx,
+           float xy, float yy,
+           float x0, float y0);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_matrix_init_translate(out Matrix matrix, float tx, float ty);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_matrix_init_scale(out Matrix matrix, float sx, float sy);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_matrix_init_rotate(out Matrix matrix, float radians);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_matrix_translate(ref Matrix matrix, float tx, float ty);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_matrix_scale(ref Matrix matrix, float sx, float sy);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_matrix_rotate(ref Matrix matrix, float radians);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_matrix_multiply(out Matrix result, ref Matrix a, ref Matrix b);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_matrix_transform_distance(ref Matrix matrix, ref float dx, ref float dy);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_matrix_transform_point(ref Matrix matrix, ref float x, ref float y);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_matrix_invert(ref Matrix matrix);
+        #endregion
+
+        #region Surface
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern IntPtr vkvg_surface_create(IntPtr device, uint width, uint height);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern IntPtr vkvg_surface_create_from_image(IntPtr dev, string filePath);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern IntPtr vkvg_surface_create_from_svg(IntPtr dev, string filePath);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern IntPtr vkvg_surface_create_from_svg_fragment(IntPtr dev, byte[] filePath);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern IntPtr vkvg_surface_create_from_bitmap(IntPtr dev, ref byte data, uint width, uint height);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_surface_destroy(IntPtr surf);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern IntPtr vkvg_surface_get_vk_image(IntPtr surf);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern int vkvg_surface_get_width(IntPtr surf);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern int vkvg_surface_get_height(IntPtr surf);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_surface_clear(IntPtr surf);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern IntPtr vkvg_surface_reference(IntPtr surf);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern uint vkvg_surface_get_reference_count(IntPtr surf);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_surface_write_to_png(IntPtr surf, [MarshalAs(UnmanagedType.LPStr)]string path);
+        #endregion
+
+        #region NSVG
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern IntPtr nsvg_load_file(IntPtr dev, string filePath);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern IntPtr nsvg_load(IntPtr dev, ref byte fragment);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void nsvg_destroy(IntPtr nsvgImage);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void nsvg_get_size(IntPtr nsvgImage, out int width, out int height);
+        [DllImport(libvkvg, CallingConvention = CallingConvention.Cdecl)]
+        internal static extern void vkvg_render_svg(IntPtr ctx, IntPtr nsvgImage, string subId);
+        #endregion
+    }
+}
+
diff --git a/Crow/src/GraphicBackends/vkvg/Pattern.cs b/Crow/src/GraphicBackends/vkvg/Pattern.cs
new file mode 100644 (file)
index 0000000..5740141
--- /dev/null
@@ -0,0 +1,92 @@
+// Copyright (c) 2018-2020  Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
+//
+// This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
+
+using System;
+namespace Crow.Drawing
+{
+    public class Pattern : IDisposable
+    {
+
+        IntPtr handle = IntPtr.Zero;
+
+        #region CTORS & DTOR
+        protected Pattern(IntPtr handle)
+        {
+            this.handle = handle;
+        }
+        public Pattern()
+        {
+            handle = NativeMethods.vkvg_pattern_create();
+        }
+        public Pattern(float r, float g, float b)
+        {
+            handle = NativeMethods.vkvg_pattern_create_rgb(r, g, b);
+        }
+        public Pattern(float r, float g, float b, float a)
+        {
+            handle = NativeMethods.vkvg_pattern_create_rgba(r, g, b, a);
+        }
+        public Pattern(Surface surf)
+        {
+            handle = NativeMethods.vkvg_pattern_create_for_surface(surf.Handle);
+        }
+
+        ~Pattern()
+        {
+            Dispose(false);
+        }
+        #endregion
+
+        public static Pattern CreateLinearGradient(float x0, float y0, float x1, float y1)
+        {
+            return new Pattern(NativeMethods.vkvg_pattern_create_linear(x0, y0, x1, y1));
+        }
+        public static Pattern CreateRadialGradient(float cx0, float cy0, float radius0,
+                                                     float cx1, float cy1, float radius1)
+        {
+            return new Pattern(NativeMethods.vkvg_pattern_create_radial(cx0, cy0, radius0, cx1, cy1, radius1));
+        }
+
+        public void AddReference()
+        {
+            NativeMethods.vkvg_pattern_reference(handle);
+        }
+        public uint References() => NativeMethods.vkvg_pattern_get_reference_count(handle);
+
+        public IntPtr Handle { get { return handle; } }
+
+        public Extend Extend
+        {
+            set { NativeMethods.vkvg_pattern_set_extend(handle, value); }
+            get { return NativeMethods.vkvg_pattern_get_extend(handle); }
+        }
+        public Filter Filter
+        {
+            set { NativeMethods.vkvg_pattern_set_filter(handle, value); }
+            get { return NativeMethods.vkvg_pattern_get_filter(handle); }
+        }
+
+        public void AddColorStop(float offset, float r, float g, float b, float a = 1f)
+        {
+            NativeMethods.vkvg_pattern_add_color_stop(handle, offset, r, g, b, a);
+        }
+
+        #region IDisposable implementation
+        public void Dispose()
+        {
+            Dispose(true);
+            GC.SuppressFinalize(this);
+        }
+
+        protected virtual void Dispose(bool disposing)
+        {
+            if (!disposing || handle == IntPtr.Zero)
+                return;
+
+            NativeMethods.vkvg_pattern_destroy(handle);
+            handle = IntPtr.Zero;
+        }
+        #endregion
+    }
+}
\ No newline at end of file
diff --git a/Crow/src/GraphicBackends/vkvg/Surface.cs b/Crow/src/GraphicBackends/vkvg/Surface.cs
new file mode 100644 (file)
index 0000000..654238d
--- /dev/null
@@ -0,0 +1,86 @@
+// Copyright (c) 2018-2020  Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
+//
+// This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
+
+using System;
+
+namespace Crow.Drawing
+{
+       public class Surface: IDisposable
+       {               
+               IntPtr handle = IntPtr.Zero;
+               Device vkvgDev;
+
+               public Surface (Device device, int width, int height)
+               {
+                       vkvgDev = device;
+                       if (width <= 0 || height <= 0)                          
+                               handle = NativeMethods.vkvg_surface_create (device.Handle, 1, 1);
+                       else
+                               handle = NativeMethods.vkvg_surface_create (device.Handle, (uint)width, (uint)height);
+               }
+               public Surface (Device device, Span<byte> data, int width, int heigth)
+               {
+                       vkvgDev = device;
+                       handle = NativeMethods.vkvg_surface_create_from_bitmap (device.Handle, ref data.GetPinnableReference(), (uint)width, (uint)heigth);
+               }
+               public Surface (Device device, string imgPath) {
+                       vkvgDev = device;
+                       handle = NativeMethods.vkvg_surface_create_from_image (device.Handle, imgPath);
+               }
+
+
+               Surface (IntPtr devHandle, int width, int heigth)
+               {
+                       handle = NativeMethods.vkvg_surface_create (devHandle, (uint)width, (uint)heigth);
+               }
+               ~Surface ()
+               {
+                       Dispose (false);
+               }
+
+               public IntPtr Handle => handle;
+               public IntPtr VkImage => NativeMethods.vkvg_surface_get_vk_image (handle);
+               public int Width => NativeMethods.vkvg_surface_get_width (handle);
+               public int Height => NativeMethods.vkvg_surface_get_height (handle);
+
+               public void AddReference () => NativeMethods.vkvg_surface_reference (handle);
+               public uint References () => NativeMethods.vkvg_surface_get_reference_count (handle);
+
+//             public Surface CreateSimilar (uint width, uint height) {
+//                     return new Surface (handle, width, height);
+//             }
+//             public Surface CreateSimilar (int width, int height) {
+//                     return new Surface (handle, (uint)width, (uint)height);
+//             }
+
+               public void Flush () {
+                       //throw new NotImplementedException ();
+               }
+
+               public void WriteToPng (string path) {
+                       NativeMethods.vkvg_surface_write_to_png (handle, path);
+               }
+               public void Clear () {
+                       NativeMethods.vkvg_surface_clear (handle);
+               }
+
+               #region IDisposable implementation
+               public void Dispose ()
+               {
+                       Dispose (true);
+                       GC.SuppressFinalize (this);
+               }
+
+               protected virtual void Dispose (bool disposing)
+               {
+                       if (!disposing || handle == IntPtr.Zero)
+                               return;
+
+                       NativeMethods.vkvg_surface_destroy (handle);
+                       handle = IntPtr.Zero;
+               }
+               #endregion
+       }
+}
+
diff --git a/Crow/src/GraphicBackends/vkvg/SvgHandle.cs b/Crow/src/GraphicBackends/vkvg/SvgHandle.cs
new file mode 100644 (file)
index 0000000..d923d89
--- /dev/null
@@ -0,0 +1,42 @@
+//Copyright GPL2
+using System;
+
+namespace Crow.Drawing {
+
+
+       public sealed class SvgHandle : IDisposable {
+
+               public IntPtr Raw;
+               
+               public  SvgHandle (Device dev, Span<byte> bytes)                
+               {
+                       /*int size = svgFragment.Length * 4 + 1;
+                       Span<byte> bytes = size > 512 ? new byte[size] : stackalloc byte[size];
+                       int encodedBytes = Crow.Text.Encoding.ToUtf8 (svgFragment, bytes);
+                       bytes[encodedBytes] = 0;*/
+                       Raw = NativeMethods.nsvg_load (dev.Handle, ref bytes.GetPinnableReference());
+               }
+               public SvgHandle (Device dev, string file_name)
+               {                       
+                       Raw = NativeMethods.nsvg_load_file (dev.Handle, file_name);
+               }
+
+               public void Render(Context cr) =>
+                       cr.RenderSvg (Raw);
+               
+               public void Render (Context cr, string id) =>
+                       cr.RenderSvg (Raw, id);
+               
+               public Size Dimensions {
+                       get {
+                               NativeMethods.nsvg_get_size (Raw, out int w, out int h);
+                               return new Size (w, h);
+                       }
+               }
+
+               public void Dispose() {                 
+                       NativeMethods.nsvg_destroy (Raw);
+               }
+
+       }
+}
diff --git a/Crow/src/GraphicBackends/vkvg/TextExtents.cs b/Crow/src/GraphicBackends/vkvg/TextExtents.cs
new file mode 100644 (file)
index 0000000..bd320e4
--- /dev/null
@@ -0,0 +1,72 @@
+// Copyright (c) 2018-2020  Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
+//
+// This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Crow.Drawing
+{
+       [StructLayout (LayoutKind.Sequential)]
+       public struct TextExtents
+       {
+               float xbearing;
+               float ybearing;
+               float width;
+               float height;
+               float xadvance;
+               float yadvance;
+               
+               public float XBearing {
+                       get { return xbearing; }
+                       set { xbearing = value; }
+               }
+               
+               public float YBearing {
+                       get { return ybearing; }
+                       set { ybearing = value; }
+               }
+               
+               public float Width {
+                       get { return width; }
+                       set { width = value; }
+               }
+               
+               public float Height {
+                       get { return height; }
+                       set { height = value; }
+               }
+               
+               public float XAdvance {
+                       get { return xadvance; }
+                       set { xadvance = value; }
+               }
+               
+               public float YAdvance {
+                       get { return yadvance; }
+                       set { yadvance = value; }
+               }
+
+               public override bool Equals (object obj)
+               {
+                       if (obj is TextExtents)
+                               return this == (TextExtents)obj;
+                       return false;
+               }
+
+               public override int GetHashCode ()
+               {
+                       return (int)XBearing ^ (int)YBearing ^ (int)Width ^ (int)Height ^ (int)XAdvance ^ (int)YAdvance;
+               }
+
+               public static bool operator == (TextExtents extents, TextExtents other)
+               {
+                       return extents.XBearing == other.XBearing && extents.YBearing == other.YBearing && extents.Width == other.Width && extents.Height == other.Height && extents.XAdvance == other.XAdvance && extents.YAdvance == other.YAdvance;
+               }
+
+               public static bool operator != (TextExtents extents, TextExtents other)
+               {
+                       return !(extents == other);
+               }
+       }
+}
diff --git a/Crow/src/GraphicBackends/vkvg/TextRun.cs b/Crow/src/GraphicBackends/vkvg/TextRun.cs
new file mode 100644 (file)
index 0000000..f455369
--- /dev/null
@@ -0,0 +1,54 @@
+// Copyright (c) 2018-2020  Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
+//
+// This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
+
+using System;
+namespace Crow.Drawing {
+       public class TextRun : IDisposable {
+
+               IntPtr handle = IntPtr.Zero;
+
+               #region CTORS & DTOR
+               protected TextRun(IntPtr handle) {
+                       this.handle = handle;
+               }
+               public TextRun(string text) {
+                       handle = NativeMethods.vkvg_text_run_create (handle, Context.TerminateUtf8(text));
+               }
+
+               ~TextRun() {
+                       Dispose (false);
+               }
+               #endregion
+
+               //public void AddReference () {
+               //      NativeMethods.vkvg_pattern_reference (handle);
+               //}
+               //public uint References () => NativeMethods.vkvg_pattern_get_reference_count (handle);
+
+               public IntPtr Handle { get { return handle; } }
+
+               public TextExtents Extents {
+                       get {
+                               TextExtents extents;
+                               NativeMethods.vkvg_text_run_get_extents (handle, out extents);
+                               return extents;
+                       }
+               }
+
+               #region IDisposable implementation
+               public void Dispose () {
+                       Dispose (true);
+                       GC.SuppressFinalize (this);
+               }
+
+               protected virtual void Dispose (bool disposing) {
+                       if (!disposing || handle == IntPtr.Zero)
+                               return;
+
+                       NativeMethods.vkvg_text_run_destroy (handle);
+                       handle = IntPtr.Zero;
+               }
+               #endregion
+       }
+}
\ No newline at end of file
diff --git a/Crow/src/GraphicBackends/vkvg/VulkanContext.cs b/Crow/src/GraphicBackends/vkvg/VulkanContext.cs
new file mode 100644 (file)
index 0000000..e27f369
--- /dev/null
@@ -0,0 +1,207 @@
+// Copyright (c) 2019-2021  Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
+//
+// This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+using System.Runtime.InteropServices;
+using Glfw;
+using vke;
+using Vulkan;
+using static Vulkan.Vk;
+using Device = vke.Device;
+
+namespace Crow.Drawing {
+       /// <summary>
+       /// Base class to build vulkan application.
+       /// Provide default swapchain with its command pool and buffers per image and the main present queue
+       /// </summary>
+       public class VulkanContext : IDisposable {
+
+               /** GLFW window native pointer. */
+               IntPtr hWin;
+               /**Vulkan Surface */
+               protected VkSurfaceKHR hSurf;
+               /**vke Instance encapsulating a VkInstance. */
+               protected Instance instance;    
+               /**vke Physical device associated with this window*/
+               protected PhysicalDevice phy;
+               /**vke logical device */                        
+               protected vke.Device dev;
+               protected PresentQueue presentQueue;
+               protected SwapChain swapChain;
+               protected CommandPool cmdPool;
+               protected PrimaryCommandBuffer[] cmds;
+               protected VkSemaphore[] drawComplete;
+               protected Fence drawFence;
+
+               protected uint fps { get; private set; }
+               protected bool updateViewRequested = true;
+
+               /// <summary>readonly GLFW window handle</summary>
+               public IntPtr WindowHandle => hWin;
+
+               uint frameCount;
+               Stopwatch frameChrono;
+
+               string[] EnabledInstanceExtensions => new string[] { Ext.I.VK_EXT_debug_utils };
+
+               string[] EnabledDeviceExtensions => new string[] { Ext.D.VK_KHR_swapchain };
+
+               uint width, height;
+               public void WaitIdle() => dev.WaitIdle ();
+               public VulkanContext (IntPtr hWin, uint _width, uint _height, bool vsync = false) {
+                       this.hWin = hWin;
+                       //Instance.VALIDATION = true;
+                       //Instance.RENDER_DOC_CAPTURE = true;
+
+                       SwapChain.IMAGES_USAGE = VkImageUsageFlags.ColorAttachment | VkImageUsageFlags.TransferDst;
+                       SwapChain.PREFERED_FORMAT = VkFormat.B8g8r8a8Unorm;
+
+                       List<string> instExts = new List<string> (Glfw3.GetRequiredInstanceExtensions ());
+                       if (EnabledInstanceExtensions != null)
+                               instExts.AddRange (EnabledInstanceExtensions);
+
+                       instance = new Instance (instExts.ToArray());
+                       hSurf = instance.CreateSurface (hWin);
+
+                       phy = instance.GetAvailablePhysicalDevice ().FirstOrDefault (p => p.HasSwapChainSupport);
+
+                       VkPhysicalDeviceFeatures enabledFeatures = default;
+
+                       //First create the c# device class
+                       dev = new vke.Device (phy);
+
+                       presentQueue = new PresentQueue (dev, VkQueueFlags.Graphics, hSurf);
+
+                       //activate the device to have effective queues created accordingly to what's available
+                       dev.Activate (enabledFeatures, EnabledDeviceExtensions);
+
+                       swapChain = new SwapChain (presentQueue as PresentQueue, _width, _height, SwapChain.PREFERED_FORMAT,
+                               vsync ? VkPresentModeKHR.FifoKHR : VkPresentModeKHR.ImmediateKHR);
+                       swapChain.Activate ();
+
+                       width = swapChain.Width;
+                       height = swapChain.Height;
+
+                       cmdPool = new CommandPool (dev, presentQueue.qFamIndex, VkCommandPoolCreateFlags.ResetCommandBuffer);
+                       cmds = cmdPool.AllocateCommandBuffer (swapChain.ImageCount);
+
+                       drawComplete = new VkSemaphore[swapChain.ImageCount];
+                       drawFence = new Fence (dev, true, "draw fence");
+
+                       for (int i = 0; i < swapChain.ImageCount; i++) {
+                               drawComplete[i] = dev.CreateSemaphore ();
+                               drawComplete[i].SetDebugMarkerName (dev, "Semaphore DrawComplete" + i);
+                       }
+
+                       cmdPool.SetName ("main CmdPool");                       
+               }
+
+               public Crow.Drawing.Device CreateVkvgDevice () => 
+                       new Crow.Drawing.Device (instance.Handle, phy.Handle, dev.VkDev.Handle, presentQueue.qFamIndex, SampleCount.Sample_8);
+
+               internal vke.Image blitSource;
+               
+               public void BuildBlitCommand (Crow.Drawing.Surface surf) {
+                       //Console.WriteLine ($"build blit w:{width} h:{height}");
+                       cmdPool.Reset();
+                       
+                       blitSource = new vke.Image (dev, new VkImage((ulong)surf.VkImage.ToInt64()), Vulkan.VkFormat.B8g8r8a8Unorm,
+                               Vulkan.VkImageUsageFlags.TransferSrc | Vulkan.VkImageUsageFlags.TransferDst | Vulkan.VkImageUsageFlags.ColorAttachment,
+                               width, height);
+
+                       for (int i = 0; i < swapChain.ImageCount; i++) {
+                               vke.Image blitDest = swapChain.images[i];
+                               vke.PrimaryCommandBuffer cmd = cmds[i];
+                               cmd.Start();
+                               
+                               blitDest.SetLayout (cmd, VkImageAspectFlags.Color,
+                                       VkImageLayout.Undefined, VkImageLayout.TransferDstOptimal,
+                                       VkPipelineStageFlags.BottomOfPipe, VkPipelineStageFlags.Transfer);
+
+                               blitSource.SetLayout (cmd, VkImageAspectFlags.Color,
+                                       VkImageLayout.ColorAttachmentOptimal, VkImageLayout.TransferSrcOptimal,
+                                       VkPipelineStageFlags.ColorAttachmentOutput, VkPipelineStageFlags.Transfer);
+
+                               blitSource.BlitTo (cmd, blitDest, VkFilter.Nearest);
+
+                               blitDest.SetLayout (cmd, VkImageAspectFlags.Color,
+                                       VkImageLayout.TransferDstOptimal, VkImageLayout.PresentSrcKHR,
+                                       VkPipelineStageFlags.Transfer, VkPipelineStageFlags.BottomOfPipe);
+
+                               blitSource.SetLayout (cmd, VkImageAspectFlags.Color,
+                                       VkImageLayout.TransferSrcOptimal, VkImageLayout.ColorAttachmentOptimal,
+                                       VkPipelineStageFlags.Transfer, VkPipelineStageFlags.ColorAttachmentOutput);
+
+                               cmd.End ();
+                       }
+               }
+               public void WaitAndResetDrawFence () {
+                       drawFence.Wait ();
+                       drawFence.Reset ();
+               }
+               /// <summary>
+               /// Main render method called each frame. get next swapchain image, process resize if needed, submit and present to the presentQueue.
+               /// Wait QueueIdle after presenting.
+               /// </summary>
+               public bool render () {
+                       WaitIdle();
+
+                       int idx = swapChain.GetNextImage ();
+                       if (idx < 0) {
+                               width = swapChain.Width;
+                               height = swapChain.Height;
+                               //Console.WriteLine ($"get next image failed w:{width} h:{height}");
+                               return false;
+                       }
+
+                       if (cmds[idx] == null)
+                               return false;
+                       WaitAndResetDrawFence();
+
+                       presentQueue.Submit (cmds[idx], swapChain.presentComplete, drawComplete[idx], drawFence);
+                       presentQueue.Present (swapChain, drawComplete[idx]);
+
+                       WaitIdle();
+                       return true;
+               }
+
+               #region IDisposable Support
+               protected bool isDisposed;
+
+               protected virtual void Dispose (bool disposing) {
+                       if (!isDisposed) {
+                               dev.WaitIdle ();
+
+                               for (int i = 0; i < swapChain.ImageCount; i++) {
+                                       dev.DestroySemaphore (drawComplete[i]);
+                                       cmds[i].Free ();
+                               }
+                               drawFence.Dispose ();
+                               swapChain.Dispose ();
+
+                               vkDestroySurfaceKHR (instance.Handle, hSurf, IntPtr.Zero);
+
+                               if (disposing) {
+                                       cmdPool.Dispose ();
+                                       dev.Dispose ();
+                                       instance.Dispose ();
+                               } else
+                                       Debug.WriteLine ("a VkWindow has not been correctly disposed");
+
+                               isDisposed = true;
+                       }
+               }
+
+               ~VulkanContext () {
+                       Dispose (false);
+               }
+               public void Dispose () {
+                       Dispose (true);
+                       GC.SuppressFinalize (this);
+               }
+               #endregion
+       }
+}
diff --git a/Crow/src/GraphicBackends/vkvg/tmp/FontOptions.cs b/Crow/src/GraphicBackends/vkvg/tmp/FontOptions.cs
new file mode 100644 (file)
index 0000000..1d9764f
--- /dev/null
@@ -0,0 +1,74 @@
+//from Mono.Cairo
+//fake FontOptions
+
+using System;
+
+namespace Crow.Drawing
+{
+       public enum SubpixelOrder
+       {
+               Default,
+               Rgb,
+               Bgr,
+               Vrgb,
+               Vbgr,
+       }
+       public enum HintMetrics
+       {
+               Default,
+               Off,
+               On,
+       }
+       public enum HintStyle
+       {
+               Default,
+               None,
+               Slight,
+               Medium,
+               Full,
+       }               
+       public class FontOptions : IDisposable
+       {
+               public FontOptions () { }
+
+
+               public FontOptions Copy () => default;
+
+
+               public IntPtr Handle {
+                       get ;
+               }
+
+       
+               public void Merge (FontOptions other)
+               {
+               }
+
+               public void Dispose() {}
+
+               public Antialias Antialias {
+                       get ;
+                       set ;
+               }
+
+               public HintMetrics HintMetrics {
+                       get ;
+                       set ;
+               }
+
+               public HintStyle HintStyle {
+                       get ;
+                       set ;
+               }
+
+               public Status Status {
+                       get ;
+               }
+
+               public SubpixelOrder SubpixelOrder {
+                       get ;
+                       set ;
+               }
+       }
+}
+
diff --git a/Crow/src/GraphicBackends/vkvg/tmp/Region.cs b/Crow/src/GraphicBackends/vkvg/tmp/Region.cs
new file mode 100644 (file)
index 0000000..83dc7f2
--- /dev/null
@@ -0,0 +1,133 @@
+// Copyright (c) 2021  Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
+//
+// This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
+
+using System.Collections.Generic;
+using System;
+using Crow.Drawing;
+
+namespace Crow {
+       public enum RegionOverlap {
+               In,
+               Out,
+               Part,
+       }       
+       public class Region : IDisposable
+       {
+               public List<Rectangle> list = new List<Rectangle>();
+               public int count => list.Count;
+               public int NumRectangles => list.Count;
+               public bool IsEmpty => list.Count == 0;
+               public Rectangle GetRectangle(int i) => list[i];
+
+               public void AddRectangle(Rectangle r)
+               {
+                       if (r == default)
+                               return;
+                       if (DoesNotContains (r)) {
+                               list.Add (r);
+                               boundsUpToDate = false;
+                       }
+               }
+               public void Reset()
+               {
+                       list = new List<Rectangle>();
+                       _bounds = default;
+                       boundsUpToDate = true;
+               }
+               public bool DoesNotContains(Rectangle r)
+               {
+                       foreach (Rectangle rInList in list)
+                               if (rInList.ContainsOrIsEqual(r))
+                                       return false;
+                       return true;
+               }
+               public bool OverlapOut (Rectangle r) {
+                       foreach (Rectangle rInList in list)
+                               if (rInList.Intersect(r))
+                                       return false;
+                       return true;
+               }
+
+               public bool intersect(Rectangle r)
+               {
+                       foreach (Rectangle rInList in list)
+                               if (rInList.Intersect(r))
+                                       return true;
+                       return false;
+               }
+               public void stroke(Context ctx, Color c)
+               {
+                       foreach (Rectangle r in list)
+                               ctx.Rectangle(r);
+
+                       ctx.SetSource(c);
+
+                       ctx.LineWidth = 2;
+                       ctx.Stroke ();
+               }
+               public void clearAndClip(Context ctx)
+               {
+                       if (list.Count == 0)
+                               return;
+                       foreach (Rectangle r in list)
+                               ctx.Rectangle(r);
+
+                       ctx.ClipPreserve();
+                       ctx.Operator = Operator.Clear;
+                       ctx.Fill();
+                       ctx.Operator = Operator.Over;
+               }
+
+               public void clip(Context ctx)
+               {
+                       foreach (Rectangle r in list)
+                               ctx.Rectangle(r);
+
+                       ctx.Clip();
+               }
+               public void UnionRectangle (Rectangle r) {
+                       /*if (r == default)
+                               System.Diagnostics.Debugger.Break ();*/
+                       AddRectangle (r);
+               }
+               Rectangle _bounds;
+               bool boundsUpToDate = true;
+               public Rectangle Bounds {
+                       get {
+                               if (!boundsUpToDate) {
+                                       if (list.Count > 0) {
+                                               _bounds = list [0];
+                                               for (int i = 1; i < list.Count; i++) {
+                                                       _bounds += list [i];
+                                               }
+                                       } else
+                                               _bounds = default;
+                                       boundsUpToDate = true;
+                               }
+                               return _bounds;
+                       }
+               }
+               public void clear(Context ctx)
+               {
+                       foreach (Rectangle r in list)
+                               ctx.Rectangle(r);
+                       ctx.Operator = Operator.Clear;
+                       ctx.Fill();
+                       ctx.Operator = Operator.Over;
+               }
+               public override string ToString ()
+               {
+                       string tmp = "";
+                       foreach (Rectangle r in list) {
+                               tmp += r.ToString ();
+                       }
+                       return tmp;
+               }
+
+               public void Dispose()
+               {
+                       
+               }
+       }
+}
index dece83e2ee4c5ae7e23ecefc23f3f02393b50613..a152e472e1b7b0c50bf5a84311b24b9e833093c4 100644 (file)
@@ -13,8 +13,9 @@ using System.Reflection;
 using System.Runtime.CompilerServices;
 using System.Runtime.InteropServices;
 using System.Threading;
-using Crow.Cairo;
+
 using Crow.IML;
+using Crow.Drawing;
 using Glfw;
 using Path = System.IO.Path;
 
@@ -146,12 +147,17 @@ namespace Crow
 
                        PerformanceMeasure.InitMeasures ();
 
+#if VKVG
+                       //force single threaded interface for vkvg until multithreading in vkvg is ok
+                       startUIThread = false;
+#endif
+
                        if (startUIThread) {
                                Thread t = new Thread (InterfaceThread) {
                                        IsBackground = true
                                };
                                t.Start ();
-                       }                       
+                       }
                }
                #endregion
 
@@ -179,7 +185,11 @@ namespace Crow
                        Glfw3.SetWindowSizeCallback (hWin, HandleWindowSizeDelegate);
                        Glfw3.SetWindowRefreshCallback (hWin, HandleWindowRefreshDelegate);
                }
-
+#if VKVG
+               VulkanContext vkCtx;
+               internal Device vkvgDevice;
+               vke.Image vkvgSurfaceImage;
+#endif
                protected void initSurface ()
                {
                        Glfw3.Init ();
@@ -195,6 +205,12 @@ namespace Crow
 
                        registerGlfwCallbacks ();
 
+#if VKVG
+                       vkCtx = new VulkanContext (hWin, (uint)clientRectangle.Width, (uint)clientRectangle.Height);
+                       vkvgDevice = vkCtx.CreateVkvgDevice ();
+                       surf = new Surface (vkvgDevice, clientRectangle.Width, clientRectangle.Height);                 
+                       vkCtx.BuildBlitCommand (surf);
+#else
                        switch (Environment.OSVersion.Platform) {
                        case PlatformID.MacOSX:
                                break;
@@ -216,6 +232,7 @@ namespace Crow
                        case PlatformID.WinCE:
                                throw new PlatformNotSupportedException ("Unable to create cairo surface.");
                        }
+#endif
                }
 
                public void SetWindowIcon (string path) {
@@ -244,8 +261,8 @@ namespace Crow
                                                image [i + 2] = Marshal.ReadByte (stbi.Handle, i);
                                                image [i + 3] = Marshal.ReadByte (stbi.Handle, i + 3);
                                        }
-                                       Glfw.Image icon = new Glfw.Image (stbi.Width, stbi.Height, image);
-                                       Glfw3.setWindowIcon (hWin, 1, ref icon);
+                                       Glfw.Image icon = new Glfw.Image ((uint)stbi.Width, (uint)stbi.Height, image);
+                                       Glfw3.SetWindowIcon (hWin, 1, ref icon);
                                        icon.Dispose();
                                }
 #endif
@@ -367,7 +384,12 @@ namespace Crow
                        Terminate ();
                }
                public virtual void Terminate () {}
-               public virtual void UpdateFrame () { Thread.Sleep (1); }
+               public virtual void UpdateFrame () {
+#if VKVG
+                       Update ();
+                       Thread.Sleep (UPDATE_INTERVAL);
+#endif
+               }
 
                public virtual void Quit () => Glfw3.SetWindowShouldClose (hWin, 1);
 
@@ -692,7 +714,7 @@ namespace Crow
                                                        string resId = $"#{pic.Substring (path.Length + 1).Replace (Path.DirectorySeparatorChar, '.')}";
                                                        using (Stream s = new FileStream (pic, FileMode.Open, FileAccess.Read)) {
                                                                if (resId.EndsWith (".svg", StringComparison.OrdinalIgnoreCase))
-                                                                       sharedPictures[resId] = SvgPicture.CreateSharedPicture (s);
+                                                                       sharedPictures[resId] = SvgPicture.CreateSharedPicture (this, s);
                                                                else
                                                                        sharedPictures[resId] = BmpPicture.CreateSharedPicture (s);
                                                        }
@@ -1024,11 +1046,25 @@ namespace Crow
 
                                clippingRegistration ();
 
-                               if (ctx == null) {
-                                       using (ctx = new Context (surf)) 
+
+                               if (!clipping.IsEmpty) {
+                                       if (ctx == null) {
+                                               using (ctx = new Context (surf)) 
+                                                       processDrawing (ctx);
+                                       }else
                                                processDrawing (ctx);
-                               }else
-                                       processDrawing (ctx);
+                               }
+
+#if VKVG
+                               if (IsDirty) {
+                                       if (vkCtx.render ())
+                                               IsDirty = false;
+                                       else {
+                                               resizeVulkanContext();
+                                       }
+                               }
+#endif                 
+                               
                        } finally {
 
                                PerformanceMeasure.End (PerformanceMeasure.Kind.Update);
@@ -1039,6 +1075,19 @@ namespace Crow
 
                        PerformanceMeasure.Notify ();
                }
+               void resizeVulkanContext () {
+                       vkCtx.WaitIdle();
+                       vkCtx.blitSource?.Dispose ();
+                       surf?.Dispose ();
+                       surf = new Surface (vkvgDevice, clientRectangle.Width, clientRectangle.Height);                         
+                       vkCtx.BuildBlitCommand (surf);
+                       vkCtx.WaitIdle();
+                       foreach (Widget g in GraphicTree)
+                               g.RegisterForLayouting (LayoutingType.All);
+
+                       registerRefreshClientRectangle ();
+
+               }
                /// <summary>Layouting loop, this is the first step of the udpate and process registered
                /// Layouting queue items. Failing LQI's are requeued in this cycle until MaxTry is reached which
                /// trigger an enqueue for the next Update Cycle</summary>
@@ -1095,7 +1144,7 @@ namespace Crow
 
                        ctx.ClipPreserve ();
                        ctx.Operator = Operator.Clear;
-                       ctx.Fill ();
+                       ctx.Fill ();                    
                        ctx.Operator = Operator.Over;                   
                }
         bool solidBackground = false;
@@ -1113,25 +1162,29 @@ namespace Crow
                /// <summary>Clipping Rectangles drive the drawing process. For compositing, each object under a clip rectangle should be
                /// repainted. If it contains also clip rectangles, its cache will be update, or if not cached a full redraw will take place</summary>
                protected virtual void processDrawing(Context ctx){
-
                        DbgLogger.StartEvent (DbgEvtType.ProcessDrawing);
 
                        if (DragImage != null)
                                clipping.UnionRectangle(DragImageBounds);
 
-                       if (!clipping.IsEmpty) {
+                       
                                PerformanceMeasure.Begin (PerformanceMeasure.Kind.Drawing);                             
 
+#if VKVG                               
+                               clear (ctx);
+#else
                                ctx.PushGroup ();
 
                                if (SolidBackground)
                                        clear (ctx);
+                               ctx.Flush();
+#endif
                                
                                for (int i = GraphicTree.Count -1; i >= 0 ; i--){
                                        Widget p = GraphicTree[i];
                                        if (!p.IsVisible)
                                                continue;
-                                       if (clipping.Contains (p.Slot) == RegionOverlap.Out)
+                                       if (clipping.OverlapOut (p.Slot))
                                                continue;
 
                                        //ctx.Save ();
@@ -1158,12 +1211,18 @@ namespace Crow
 
 #if DEBUG_CLIP_RECTANGLE
                                ctx.LineWidth = 1;
-                               ctx.SetSource(1,0,0,0.5);
+                               ctx.SetSource(1,1,0,0.5);
                                for (int i = 0; i < clipping.NumRectangles; i++)
                                        ctx.Rectangle(clipping.GetRectangle(i));
                                ctx.Stroke ();
+                               
 #endif
 
+#if VKVG
+                               ctx.Flush();
+                               //vkCtx.render ();
+                               //vkCtx.WaitIdle();
+#else
                                ctx.PopGroupToSource ();
 
                                if (!SolidBackground)
@@ -1172,15 +1231,16 @@ namespace Crow
                                ctx.Paint ();
 
                                surf.Flush ();
-
+#endif
                                
                                clipping.Reset ();
 
                                PerformanceMeasure.End (PerformanceMeasure.Kind.Drawing);
                                IsDirty = true;
-                       }
-
+                       
+#if !VKVG
                        drawTextCursor (ctx);
+#endif
 
                        debugHighlightFocus (ctx);
                        
@@ -1360,6 +1420,9 @@ namespace Crow
                        lock (UpdateMutex) {
                                clientRectangle = bounds;
 
+#if VKVG
+
+#else
                                switch (Environment.OSVersion.Platform) {
                                case PlatformID.MacOSX:
                                        break;
@@ -1381,11 +1444,11 @@ namespace Crow
                                case PlatformID.WinCE:
                                        throw new PlatformNotSupportedException ("Unable to create cairo surface.");
                                }
-
                                foreach (Widget g in GraphicTree)
                                        g.RegisterForLayouting (LayoutingType.All);
 
                                registerRefreshClientRectangle ();
+#endif
                        }
                }
 
diff --git a/Crow/src/Mono.Cairo b/Crow/src/Mono.Cairo
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/Crow/src/Mono.Cairo/Antialias.cs b/Crow/src/Mono.Cairo/Antialias.cs
deleted file mode 100644 (file)
index 64da644..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-//
-// Mono.Cairo.Antialias.cs
-//
-// Authors:
-//   Duncan Mak (duncan@ximian.com)
-//   Hisham Mardam Bey (hisham.mardambey@gmail.com)
-//
-// (C) Ximian, Inc. 2003
-// Copyright (C) 2004 Novell, Inc (http://www.novell.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;
-
-namespace Crow.Cairo
-{
-       
-       public enum Antialias
-       {
-               Default,
-               None,
-               Grey,
-               Subpixel,
-       }
-}
diff --git a/Crow/src/Mono.Cairo/Cairo.cs b/Crow/src/Mono.Cairo/Cairo.cs
deleted file mode 100644 (file)
index c32c00d..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-//
-// Cairo.cs - a simplistic binding of the Cairo API to C#.
-//
-// Authors: Duncan Mak (duncan@ximian.com)
-//          Hisham Mardam Bey (hisham.mardambey@gmail.com)
-//          John Luke (john.luke@gmail.com)
-//          Alp Toker (alp@atoker.com)
-//
-// (C) Ximian, Inc. 2003
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-// Copyright (C) 2005 John Luke
-// Copyright (C) 2006 Alp Toker
-//
-// 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 Crow.Cairo
-{
-       public static class CairoAPI {
-               static public int Version {
-                       get {
-                               return Cairo.NativeMethods.cairo_version ();
-                       }
-               }
-
-               static public string VersionString {
-                       get {
-                               IntPtr x = Cairo.NativeMethods.cairo_version_string ();
-                               return Marshal.PtrToStringAnsi (x);
-                       }
-               }
-       }
-}
diff --git a/Crow/src/Mono.Cairo/CairoDebug.cs b/Crow/src/Mono.Cairo/CairoDebug.cs
deleted file mode 100644 (file)
index a669d84..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-//
-// CairoDebug.cs
-//
-// Author:
-//   Michael Hutchinson (mhutch@xamarin.com)
-//
-// Copyright (C) 2013 Xamarin Inc. (http://www.xamarin.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;
-
-namespace Crow.Cairo {
-
-       static class CairoDebug
-       {
-               static System.Collections.Generic.Dictionary<IntPtr,string> traces;
-
-               public static readonly bool Enabled;
-
-               static CairoDebug ()
-               {
-                       var dbg = Environment.GetEnvironmentVariable ("MONO_CAIRO_DEBUG_DISPOSE");
-                       if (dbg == null)
-                               return;
-                       Enabled = true;
-                       traces = new System.Collections.Generic.Dictionary<IntPtr,string> ();
-               }
-
-               public static void OnAllocated (IntPtr obj)
-               {
-                       if (!Enabled)
-                               throw new InvalidOperationException ();
-
-                       traces[obj] = Environment.StackTrace;
-               }
-
-               public static void OnDisposed<T> (IntPtr obj, bool disposing)
-               {
-                       if (disposing && !Enabled)
-                               throw new InvalidOperationException ();
-
-                       if (Environment.HasShutdownStarted)
-                               return;
-
-                       if (!disposing) {
-                               System.Diagnostics.Debug.WriteLine ("{0} is leaking, programmer is missing a call to Dispose", typeof(T).FullName);
-                               if (Enabled) {
-                                       string val;
-                                       if (traces.TryGetValue (obj, out val)) {
-                                               System.Diagnostics.Debug.WriteLine ("Allocated from:");
-                                               System.Diagnostics.Debug.WriteLine (val);
-                                       }
-                               } else {
-                                       System.Diagnostics.Debug.WriteLine ("Set MONO_CAIRO_DEBUG_DISPOSE to track allocation traces");
-                               }
-                       }
-
-                       if (Enabled)
-                               traces.Remove (obj);
-               }
-       }
-
-}
diff --git a/Crow/src/Mono.Cairo/Content.cs b/Crow/src/Mono.Cairo/Content.cs
deleted file mode 100644 (file)
index f14305a..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-//
-// Mono.Cairo.Content.cs
-//
-// Authors:
-//   Duncan Mak (duncan@ximian.com)
-//   Hisham Mardam Bey (hisham.mardambey@gmail.com)
-//
-// (C) Ximian, Inc. 2003
-// Copyright (C) 2004 Novell, Inc (http://www.novell.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;
-
-namespace Crow.Cairo
-{
-       //[Flags]
-       
-       public enum Content
-       {
-               Color = 0x1000,
-               Alpha = 0x2000,
-               ColorAlpha = 0x3000,
-       }
-}
diff --git a/Crow/src/Mono.Cairo/Context.cs b/Crow/src/Mono.Cairo/Context.cs
deleted file mode 100644 (file)
index 5ed2bbd..0000000
+++ /dev/null
@@ -1,928 +0,0 @@
-//
-// Mono.Cairo.Context.cs
-//
-// Author:
-//   Duncan Mak (duncan@ximian.com)
-//   Miguel de Icaza (miguel@novell.com)
-//   Hisham Mardam Bey (hisham.mardambey@gmail.com)
-//   Alp Toker (alp@atoker.com)
-//
-// (C) Ximian Inc, 2003.
-// (C) Novell Inc, 2003.
-//
-// This is an OO wrapper API for the Cairo API.
-//
-// Copyright (C) 2004 Novell, Inc (http://www.novell.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;
-using System.Text;
-
-namespace Crow.Cairo { 
-
-       [Obsolete ("Renamed Cairo.Context per suggestion from cairo binding guidelines.")]
-       public class Graphics : Context {
-               public Graphics (IntPtr state) : base (state) {}
-               public Graphics (Surface surface) : base (surface) {}
-       }
-
-       public class Context : IDisposable
-       {
-               IntPtr handle = IntPtr.Zero;
-
-               static int native_glyph_size, c_compiler_long_size;
-
-               static Context ()
-               {
-                       //
-                       // This is used to determine what kind of structure
-                       // we should use to marshal Glyphs, as the public
-                       // definition in Cairo uses `long', which can be
-                       // 32 bits or 64 bits depending on the platform.
-                       //
-                       // We assume that sizeof(long) == sizeof(void*)
-                       // except in the case of Win64 where sizeof(long)
-                       // is 32 bits
-                       //
-                       int ptr_size = Marshal.SizeOf (typeof (IntPtr));
-
-                       PlatformID platform = Environment.OSVersion.Platform;
-                       if (platform == PlatformID.Win32NT ||
-                           platform == PlatformID.Win32S ||
-                           platform == PlatformID.Win32Windows ||
-                           platform == PlatformID.WinCE ||
-                           ptr_size == 4){
-                               c_compiler_long_size = 4;
-                               native_glyph_size = Marshal.SizeOf (typeof (NativeGlyph_4byte_longs));
-                       } else {
-                               c_compiler_long_size = 8;
-                               native_glyph_size = Marshal.SizeOf (typeof (Glyph));
-                       }
-               }
-
-               public Context (Surface surface) : this (NativeMethods.cairo_create (surface.Handle), true)
-               {
-               }
-
-
-               public Context (IntPtr handle, bool owner)
-               {
-                       this.handle = handle;
-                       if (!owner)
-                               NativeMethods.cairo_reference (handle);
-                       if (CairoDebug.Enabled)
-                               CairoDebug.OnAllocated (handle);
-               }
-
-               [Obsolete]
-               public Context (IntPtr state) : this (state, true)
-               {
-               }
-
-               ~Context ()
-               {
-                       Dispose (false);
-               }
-
-               public void Dispose ()
-               {
-                       Dispose (true);
-                       GC.SuppressFinalize (this);
-               }
-
-               protected virtual void Dispose (bool disposing)
-               {
-                       if (!disposing || CairoDebug.Enabled)
-                               CairoDebug.OnDisposed<Context> (handle, disposing);
-
-                       if (!disposing|| handle == IntPtr.Zero)
-                               return;
-
-                       NativeMethods.cairo_destroy (handle);
-                       handle = IntPtr.Zero;
-
-               }
-
-               public void Save ()
-               {
-                       NativeMethods.cairo_save (handle);
-               }
-
-               public void Restore ()
-               {
-                       NativeMethods.cairo_restore (handle);
-               }
-
-               public Antialias Antialias {
-                       get { return NativeMethods.cairo_get_antialias (handle); }
-                       set { NativeMethods.cairo_set_antialias (handle, value); }
-               }
-
-               public Cairo.Status Status {
-                       get {
-                               return NativeMethods.cairo_status (handle);
-                       }
-               }
-
-               public IntPtr Handle {
-                       get {
-                               return handle;
-                       }
-               }
-
-               public Operator Operator {
-                       set {
-                               NativeMethods.cairo_set_operator (handle, value);
-                       }
-
-                       get {
-                               return NativeMethods.cairo_get_operator (handle);
-                       }
-               }
-
-               public double Tolerance {
-                       get {
-                               return NativeMethods.cairo_get_tolerance (handle);
-                       }
-
-                       set {
-                               NativeMethods.cairo_set_tolerance (handle, value);
-                       }
-               }
-
-               public Cairo.FillRule FillRule {
-                       set {
-                               NativeMethods.cairo_set_fill_rule (handle, value);
-                       }
-
-                       get {
-                               return NativeMethods.cairo_get_fill_rule (handle);
-                       }
-               }
-
-               public double LineWidth {
-                       set {
-                               NativeMethods.cairo_set_line_width (handle, value);
-                       }
-
-                       get {
-                               return NativeMethods.cairo_get_line_width (handle);
-                       }
-               }
-
-               public Cairo.LineCap LineCap {
-                       set {
-                               NativeMethods.cairo_set_line_cap (handle, value);
-                       }
-
-                       get {
-                               return NativeMethods.cairo_get_line_cap (handle);
-                       }
-               }
-
-               public Cairo.LineJoin LineJoin {
-                       set {
-                               NativeMethods.cairo_set_line_join (handle, value);
-                       }
-
-                       get {
-                               return NativeMethods.cairo_get_line_join (handle);
-                       }
-               }
-
-               public void SetDash (double [] dashes, double offset = 0)
-               {
-                       NativeMethods.cairo_set_dash (handle, dashes, dashes.Length, offset);
-               }
-
-               [Obsolete("Use GetSource/SetSource")]
-               public Pattern Pattern {
-                       set {
-                               SetSource (value);
-                       }
-                       get {
-                               return GetSource ();
-                       }
-               }
-
-               //This is obsolete because it wasn't obvious it needed to be disposed
-               [Obsolete("Use GetSource/SetSource")]
-               public Pattern Source {
-                       set {
-                               SetSource (value);
-                       }
-                       get {
-                               return GetSource ();
-                       }
-               }
-
-               public void SetSource (Pattern source)
-               {
-                       NativeMethods.cairo_set_source (handle, source.Handle);
-               }
-
-               public Pattern GetSource ()
-               {
-                       var ptr = NativeMethods.cairo_get_source (handle);
-                       return Cairo.Pattern.Lookup (ptr, false);
-               }
-
-               public double MiterLimit {
-                       set {
-                               NativeMethods.cairo_set_miter_limit (handle, value);
-                       }
-
-                       get {
-                               return NativeMethods.cairo_get_miter_limit (handle);
-                       }
-               }
-
-               public PointD CurrentPoint {
-                       get {
-                               double x, y;
-                               NativeMethods.cairo_get_current_point (handle, out x, out y);
-                               return new PointD (x, y);
-                       }
-               }
-
-               public bool HasCurrentPoint {
-                       get {
-                               return NativeMethods.cairo_has_current_point (handle);
-                       }
-               }
-
-               [Obsolete ("Use GetTarget/SetTarget")]
-               public Cairo.Surface Target {
-                       set {
-                               if (handle != IntPtr.Zero)
-                                       NativeMethods.cairo_destroy (handle);
-
-                               handle = NativeMethods.cairo_create (value.Handle);
-                       }
-
-                       get {
-                               return GetTarget ();
-                       }
-               }
-
-               public Surface GetTarget ()
-               {
-                       return Surface.Lookup (NativeMethods.cairo_get_target (handle), false);
-               }
-
-               public void SetTarget (Surface target)
-               {
-                       if (handle != IntPtr.Zero)
-                               NativeMethods.cairo_destroy (handle);
-                       handle = NativeMethods.cairo_create (target.Handle);
-               }
-
-               [Obsolete("Use GetScaledFont/SetScaledFont")]
-               public ScaledFont ScaledFont {
-                       set {
-                               SetScaledFont (value);
-                       }
-
-                       get {
-                               return GetScaledFont ();
-                       }
-               }
-
-               public ScaledFont GetScaledFont ()
-               {
-                       return new ScaledFont (NativeMethods.cairo_get_scaled_font (handle), false);
-               }
-
-               public void SetScaledFont (ScaledFont font)
-               {
-                       NativeMethods.cairo_set_scaled_font (handle, font.Handle);
-               }
-
-               public uint ReferenceCount {
-                       get { return NativeMethods.cairo_get_reference_count (handle); }
-               }
-
-               public void SetSource (Color color)
-               {
-                       NativeMethods.cairo_set_source_rgba (handle, color.R / 255.0, color.G / 255.0, color.B / 255.0, color.A / 255.0);
-               }
-
-               public void SetSource (double r, double g, double b)
-               {
-                       NativeMethods.cairo_set_source_rgb (handle, r, g, b);
-               }
-
-               public void SetSource (double r, double g, double b, double a)
-               {
-                       NativeMethods.cairo_set_source_rgba (handle, r, g, b, a);
-               }
-
-               //[Obsolete ("Use SetSource method (with double parameters)")]
-               public void SetSource (Surface source, int x = 0, int y = 0)
-               {
-                       NativeMethods.cairo_set_source_surface (handle, source.Handle, x, y);
-               }
-
-               public void SetSource (Surface source, double x, double y)
-               {
-                       NativeMethods.cairo_set_source_surface (handle, source.Handle, x, y);
-               }
-
-               public void SetSource (Surface source)
-               {
-                       NativeMethods.cairo_set_source_surface (handle, source.Handle, 0, 0);
-               }
-
-#region Path methods
-
-               public void NewPath ()
-               {
-                       NativeMethods.cairo_new_path (handle);
-               }
-
-               public void NewSubPath ()
-               {
-                       NativeMethods.cairo_new_sub_path (handle);
-               }
-
-               public void MoveTo (PointD p)
-               {
-                       MoveTo (p.X, p.Y);
-               }
-
-               public void MoveTo (double x, double y)
-               {
-                       NativeMethods.cairo_move_to (handle, x, y);
-               }
-
-               public void LineTo (PointD p)
-               {
-                       LineTo (p.X, p.Y);
-               }
-
-               public void LineTo (double x, double y)
-               {
-                       NativeMethods.cairo_line_to (handle, x, y);
-               }
-
-               public void CurveTo (PointD p1, PointD p2, PointD p3)
-               {
-                       CurveTo (p1.X, p1.Y, p2.X, p2.Y, p3.X, p3.Y);
-               }
-
-               public void CurveTo (double x1, double y1, double x2, double y2, double x3, double y3)
-               {
-                       NativeMethods.cairo_curve_to (handle, x1, y1, x2, y2, x3, y3);
-               }
-
-               public void RelMoveTo (Distance d)
-               {
-                       RelMoveTo (d.Dx, d.Dy);
-               }
-
-               public void RelMoveTo (double dx, double dy)
-               {
-                       NativeMethods.cairo_rel_move_to (handle, dx, dy);
-               }
-
-               public void RelLineTo (Distance d)
-               {
-                       RelLineTo (d.Dx, d.Dy);
-               }
-
-               public void RelLineTo (double dx, double dy)
-               {
-                       NativeMethods.cairo_rel_line_to (handle, dx, dy);
-               }
-
-               public void RelCurveTo (Distance d1, Distance d2, Distance d3)
-               {
-                       RelCurveTo (d1.Dx, d1.Dy, d2.Dx, d2.Dy, d3.Dx, d3.Dy);
-               }
-
-               public void RelCurveTo (double dx1, double dy1, double dx2, double dy2, double dx3, double dy3)
-               {
-                       NativeMethods.cairo_rel_curve_to (handle, dx1, dy1, dx2, dy2, dx3, dy3);
-               }
-
-               public void Arc (double xc, double yc, double radius, double angle1, double angle2)
-               {
-                       NativeMethods.cairo_arc (handle, xc, yc, radius, angle1, angle2);
-               }
-               public void Arc (PointD center, double radius, double angle1, double angle2)
-               {
-                       NativeMethods.cairo_arc (handle, center.X, center.Y, radius, angle1, angle2);
-               }
-
-               public void ArcNegative (double xc, double yc, double radius, double angle1, double angle2)
-               {
-                       NativeMethods.cairo_arc_negative (handle, xc, yc, radius, angle1, angle2);
-               }
-               public void ArcNegative (PointD center, double radius, double angle1, double angle2)
-               {
-                       NativeMethods.cairo_arc_negative (handle, center.X, center.Y, radius, angle1, angle2);
-               }
-
-               public void Rectangle (Crow.Rectangle rectangle)
-               {
-                       Rectangle (rectangle.X, rectangle.Y, rectangle.Width, rectangle.Height);
-               }
-               public void Rectangle (Crow.RectangleD rectangle)
-               {
-                       Rectangle (rectangle.X, rectangle.Y, rectangle.Width, rectangle.Height);
-               }
-
-               public void Rectangle (PointD p, double width, double height)
-               {
-                       Rectangle (p.X, p.Y, width, height);
-               }
-
-               public void Rectangle (double x, double y, double width, double height)
-               {
-                       NativeMethods.cairo_rectangle (handle, x, y, width, height);
-               }
-
-               public void ClosePath ()
-               {
-                       NativeMethods.cairo_close_path (handle);
-               }
-
-               public Path CopyPath ()
-               {
-                       return new Path (NativeMethods.cairo_copy_path (handle));
-               }
-
-               public Path CopyPathFlat ()
-               {
-                       return new Path (NativeMethods.cairo_copy_path_flat (handle));
-               }
-
-               public void AppendPath (Path path)
-               {
-                       NativeMethods.cairo_append_path (handle, path.Handle);
-               }
-
-#endregion
-
-#region Painting Methods
-               public void Paint ()
-               {
-                       NativeMethods.cairo_paint (handle);
-               }
-
-               public void PaintWithAlpha (double alpha)
-               {
-                       NativeMethods.cairo_paint_with_alpha (handle, alpha);
-               }
-
-               public void Mask (Pattern pattern)
-               {
-                       NativeMethods.cairo_mask (handle, pattern.Handle);
-               }
-
-               public void MaskSurface (Surface surface, double surface_x, double surface_y)
-               {
-                       NativeMethods.cairo_mask_surface (handle, surface.Handle, surface_x, surface_y);
-               }
-
-               public void Stroke ()
-               {
-                       NativeMethods.cairo_stroke (handle);
-               }
-
-               public void StrokePreserve ()
-               {
-                       NativeMethods.cairo_stroke_preserve (handle);
-               }
-
-               public Crow.Rectangle StrokeExtents ()
-               {
-                       double x1, y1, x2, y2;
-                       NativeMethods.cairo_stroke_extents (handle, out x1, out y1, out x2, out y2);
-                       return new Crow.Rectangle ((int)x1, (int)y1, (int)(x2 - x1), (int)(y2 - y1));
-               }
-
-               public void Fill ()
-               {
-                       NativeMethods.cairo_fill (handle);
-               }
-
-               public Crow.Rectangle FillExtents ()
-               {
-                       double x1, y1, x2, y2;
-                       NativeMethods.cairo_fill_extents (handle, out x1, out y1, out x2, out y2);
-                       return new Crow.Rectangle ((int)x1, (int)y1, (int)(x2 - x1), (int)(y2 - y1));
-               }
-
-               public void FillPreserve ()
-               {
-                       NativeMethods.cairo_fill_preserve (handle);
-               }
-
-#endregion
-
-               public void Clip ()
-               {
-                       NativeMethods.cairo_clip (handle);
-               }
-
-               public void ClipPreserve ()
-               {
-                       NativeMethods.cairo_clip_preserve (handle);
-               }
-
-               public void ResetClip ()
-               {
-                       NativeMethods.cairo_reset_clip (handle);
-               }
-
-               public bool InClip (double x, double y)
-               {
-                       return NativeMethods.cairo_in_clip (handle, x, y);
-               }
-               public RectangleList GetClipRectangles (){
-                       return (RectangleList)Marshal.PtrToStructure (NativeMethods.cairo_copy_clip_rectangle_list (handle), typeof(RectangleList));
-               }
-               public void ClipExtendRectangle (){
-                       double x1, y1, x2, y2;
-                       NativeMethods.cairo_clip_extents (handle, out x1, out y1, out x2, out y2);
-                       NativeMethods.cairo_rectangle (handle, x1, y1, x2 - x1, y2 - y1); 
-               }
-               public bool InStroke (double x, double y)
-               {
-                       return NativeMethods.cairo_in_stroke (handle, x, y);
-               }
-
-               public bool InFill (double x, double y)
-               {
-                       return NativeMethods.cairo_in_fill (handle, x, y);
-               }
-
-               public Pattern PopGroup ()
-               {
-                       return Pattern.Lookup (NativeMethods.cairo_pop_group (handle), true);
-               }
-
-               public void PopGroupToSource ()
-               {
-                       NativeMethods.cairo_pop_group_to_source (handle);
-               }
-
-               public void PushGroup ()
-               {
-                       NativeMethods.cairo_push_group (handle);
-               }
-
-               public void PushGroup (Content content)
-               {
-                       NativeMethods.cairo_push_group_with_content (handle, content);
-               }
-
-               [Obsolete ("Use GetGroupTarget()")]
-               public Surface GroupTarget {
-                       get {
-                               return GetGroupTarget ();
-                       }
-               }
-
-               public Surface GetGroupTarget ()
-               {
-                       IntPtr surface = NativeMethods.cairo_get_group_target (handle);
-                       return Surface.Lookup (surface, false);
-               }
-
-               public void Rotate (double angle)
-               {
-                       NativeMethods.cairo_rotate (handle, angle);
-               }
-
-               public void Scale (double sx, double sy)
-               {
-                       NativeMethods.cairo_scale (handle, sx, sy);
-               }
-
-               public void Translate (double tx, double ty)
-               {
-                       NativeMethods.cairo_translate (handle, tx, ty);
-               }
-
-               public void Transform (Matrix m)
-               {
-                       NativeMethods.cairo_transform (handle, m);
-               }
-
-               [Obsolete("Use UserToDevice instead")]
-               public void TransformPoint (ref double x, ref double y)
-               {
-                       NativeMethods.cairo_user_to_device (handle, ref x, ref y);
-               }
-
-               [Obsolete("Use UserToDeviceDistance instead")]
-               public void TransformDistance (ref double dx, ref double dy)
-               {
-                       NativeMethods.cairo_user_to_device_distance (handle, ref dx, ref dy);
-               }
-
-               [Obsolete("Use InverseTransformPoint instead")]
-               public void InverseTransformPoint (ref double x, ref double y)
-               {
-                       NativeMethods.cairo_device_to_user (handle, ref x, ref y);
-               }
-
-               [Obsolete("Use DeviceToUserDistance instead")]
-               public void InverseTransformDistance (ref double dx, ref double dy)
-               {
-                       NativeMethods.cairo_device_to_user_distance (handle, ref dx, ref dy);
-               }
-
-               public void UserToDevice (ref double x, ref double y)
-               {
-                       NativeMethods.cairo_user_to_device (handle, ref x, ref y);
-               }
-
-               public void UserToDeviceDistance (ref double dx, ref double dy)
-               {
-                       NativeMethods.cairo_user_to_device_distance (handle, ref dx, ref dy);
-               }
-
-               public void DeviceToUser (ref double x, ref double y)
-               {
-                       NativeMethods.cairo_device_to_user (handle, ref x, ref y);
-               }
-
-               public void DeviceToUserDistance (ref double dx, ref double dy)
-               {
-                       NativeMethods.cairo_device_to_user_distance (handle, ref dx, ref dy);
-               }
-
-               public Matrix Matrix {
-                       set {
-                               NativeMethods.cairo_set_matrix (handle, value);
-                       }
-
-                       get {
-                               Matrix m = new Matrix();
-                               NativeMethods.cairo_get_matrix (handle, m);
-                               return m;
-                       }
-               }
-
-               public void SetFontSize (double scale)
-               {
-                       NativeMethods.cairo_set_font_size (handle, scale);
-               }
-
-               public void IdentityMatrix ()
-               {
-                       NativeMethods.cairo_identity_matrix (handle);
-               }
-
-               [Obsolete ("Use SetFontSize() instead.")]
-               public void FontSetSize (double scale)
-               {
-                       SetFontSize (scale);
-               }
-
-               [Obsolete ("Use SetFontSize() instead.")]
-               public double FontSize {
-                       set { SetFontSize (value); }
-               }
-
-               public Matrix FontMatrix {
-                       get {
-                               Matrix m;
-                               NativeMethods.cairo_get_font_matrix (handle, out m);
-                               return m;
-                       }
-                       set { NativeMethods.cairo_set_font_matrix (handle, value); }
-               }
-
-               public FontOptions FontOptions {
-                       get {
-                               FontOptions options = new FontOptions ();
-                               NativeMethods.cairo_get_font_options (handle, options.Handle);
-                               return options;
-                       }
-                       set { NativeMethods.cairo_set_font_options (handle, value.Handle); }
-               }
-
-               [StructLayout(LayoutKind.Sequential)]
-               internal struct NativeGlyph_4byte_longs {
-                       public int index;
-                       public double x;
-                       public double y;
-
-                       public NativeGlyph_4byte_longs (Glyph source)
-                       {
-                               index = (int) source.index;
-                               x = source.x;
-                               y = source.y;
-                       }
-               }
-
-               static internal IntPtr FromGlyphToUnManagedMemory(Glyph [] glyphs)
-               {
-                       IntPtr dest = Marshal.AllocHGlobal (native_glyph_size * glyphs.Length);
-                       long pos = dest.ToInt64();
-
-                       if (c_compiler_long_size == 8){
-                               foreach (Glyph g in glyphs){
-                                       Marshal.StructureToPtr (g, (IntPtr)pos, false);
-                                       pos += native_glyph_size;
-                               }
-                       } else {
-                               foreach (Glyph g in glyphs){
-                                       NativeGlyph_4byte_longs n = new NativeGlyph_4byte_longs (g);
-
-                                       Marshal.StructureToPtr (n, (IntPtr)pos, false);
-                                       pos += native_glyph_size;
-                               }
-                       }
-
-                       return dest;
-               }
-
-               public void ShowGlyphs (Glyph[] glyphs)
-               {
-                       IntPtr ptr;
-
-                       ptr = FromGlyphToUnManagedMemory (glyphs);
-
-                       NativeMethods.cairo_show_glyphs (handle, ptr, glyphs.Length);
-
-                       Marshal.FreeHGlobal (ptr);
-               }
-
-               [Obsolete("The matrix argument was never used, use ShowGlyphs(Glyphs []) instead")]
-               public void ShowGlyphs (Matrix matrix, Glyph[] glyphs)
-               {
-                       ShowGlyphs (glyphs);
-               }
-
-               [Obsolete("The matrix argument was never used, use GlyphPath(Glyphs []) instead")]
-               public void GlyphPath (Matrix matrix, Glyph[] glyphs)
-               {
-                       GlyphPath (glyphs);
-               }
-
-               public void GlyphPath (Glyph[] glyphs)
-               {
-                       IntPtr ptr;
-
-                       ptr = FromGlyphToUnManagedMemory (glyphs);
-
-                       NativeMethods.cairo_glyph_path (handle, ptr, glyphs.Length);
-
-                       Marshal.FreeHGlobal (ptr);
-
-               }
-
-               public FontExtents FontExtents {
-                       get {
-                               FontExtents f_extents;
-                               NativeMethods.cairo_font_extents (handle, out f_extents);
-                               return f_extents;
-                       }
-               }
-
-               public void CopyPage ()
-               {
-                       NativeMethods.cairo_copy_page (handle);
-               }
-
-               [Obsolete ("Use SelectFontFace() instead.")]
-               public void FontFace (string family, FontSlant slant, FontWeight weight)
-               {
-                       SelectFontFace (family, slant, weight);
-               }
-
-               [Obsolete("Use GetFontFace/SetFontFace")]
-               public FontFace ContextFontFace {
-                       get {
-                               return GetContextFontFace ();
-                       }
-                       set {
-                               SetContextFontFace (value);
-                       }
-               }
-
-               public FontFace GetContextFontFace ()
-               {
-                       return Cairo.FontFace.Lookup (NativeMethods.cairo_get_font_face (handle), false);
-               }
-
-               public void SetContextFontFace (FontFace value)
-               {
-                       NativeMethods.cairo_set_font_face (handle, value == null ? IntPtr.Zero : value.Handle);
-               }
-
-               public void SelectFontFace (string family, FontSlant slant, FontWeight weight)
-               {
-                       NativeMethods.cairo_select_font_face (handle, family, slant, weight);
-               }
-
-               public void ShowPage ()
-               {
-                       NativeMethods.cairo_show_page (handle);
-               }
-
-               private static byte[] TerminateUtf8(byte[] utf8)
-               {
-                       if (utf8.Length > 0 && utf8[utf8.Length - 1] == 0)
-                               return utf8;
-                       var termedArray = new byte[utf8.Length + 1];
-                       Array.Copy(utf8, termedArray, utf8.Length);
-                       termedArray[utf8.Length] = 0;
-                       return termedArray;
-               }
-
-               private static byte[] TerminateUtf8(string s)
-               {
-                       // compute the byte count including the trailing \0
-                       var byteCount = Encoding.UTF8.GetMaxByteCount(s.Length + 1);
-                       var bytes = new byte[byteCount];
-                       Encoding.UTF8.GetBytes(s, 0, s.Length, bytes, 0);
-                       return bytes;
-               }
-
-               public void ShowText(string str)
-               {
-                       NativeMethods.cairo_show_text (handle, TerminateUtf8 (str));
-               }
-
-
-               public void TextPath(string str)
-               {
-                       NativeMethods.cairo_text_path (handle, TerminateUtf8(str));
-               }
-
-               public void TextPath(byte[] utf8)
-               {
-                       NativeMethods.cairo_text_path (handle, TerminateUtf8(utf8));
-               }
-
-               public TextExtents TextExtents(string s)
-               {
-                       TextExtents extents;
-                       NativeMethods.cairo_text_extents (handle, TerminateUtf8(s), out extents);
-                       return extents;
-               }
-               public void ShowText (ReadOnlySpan<char> s, int tabSize) {
-                       int size = s.Length * 4 + 1;
-                       Span<byte> bytes = size > 512 ? new byte[size] : stackalloc byte[size];
-                       int encodedBytes = Crow.Text.Encoding.ToUtf8 (s, bytes, tabSize);
-                       bytes[encodedBytes] = 0;
-                       ShowText (bytes.Slice (0, encodedBytes + 1));
-               }
-               public TextExtents TextExtents (ReadOnlySpan<char> s, int tabSize) {
-                       TextExtents (s, tabSize, out TextExtents extents);                      
-                       return extents;
-               }
-               public void TextExtents (ReadOnlySpan<char> s, int tabSize, out TextExtents extents) {
-                       int size = s.Length * 4 + 1;
-                       Span<byte> bytes = size > 512 ? new byte[size] : stackalloc byte[size];
-                       int encodedBytes = Crow.Text.Encoding.ToUtf8 (s, bytes, tabSize);
-                       bytes[encodedBytes] = 0;
-                       TextExtents (bytes.Slice (0, encodedBytes + 1), out extents);
-               }
-               public void ShowText (Span<byte> bytes) {
-                       NativeMethods.cairo_show_text (handle, ref bytes.GetPinnableReference());
-               }
-               public void TextExtents (Span<byte> bytes, out TextExtents extents) {
-                       NativeMethods.cairo_text_extents (handle, ref bytes.GetPinnableReference (), out extents);
-               }
-
-               public TextExtents GlyphExtents (Glyph[] glyphs)
-               {
-                       IntPtr ptr = FromGlyphToUnManagedMemory (glyphs);
-
-                       TextExtents extents;
-
-                       NativeMethods.cairo_glyph_extents (handle, ptr, glyphs.Length, out extents);
-
-                       Marshal.FreeHGlobal (ptr);
-
-                       return extents;
-               }
-       }
-}
diff --git a/Crow/src/Mono.Cairo/DRMDevice.cs b/Crow/src/Mono.Cairo/DRMDevice.cs
deleted file mode 100644 (file)
index 05e142c..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-//
-// Mono.Cairo.Device.cs
-//
-// Authors:
-//                     JP Bruyère (jp_bruyere@hotmail.com)
-//
-// This is an OO wrapper API for the Cairo API
-//
-// Copyright (C) 2016 JP Bruyère
-//
-// 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;
-
-namespace Crow.Cairo
-{
-       public class DRMDevice : Device
-       {
-               public DRMDevice () : base (NativeMethods.cairo_drm_device_default (), true)
-               {
-               }
-               public DRMDevice (int fd) : base (NativeMethods.cairo_drm_device_get_for_fd (fd), true)
-               {
-               }
-               public DRMDevice (IntPtr udev_device) : base (NativeMethods.cairo_drm_device_get (udev_device), true)
-               {
-               }
-
-               public int FileDescriptor {
-                       get { return NativeMethods.cairo_drm_device_get_fd (Handle); }
-               }
-
-               public void DeviceThrottle () { NativeMethods.cairo_drm_device_throttle (Handle);}
-       }
-}
-
diff --git a/Crow/src/Mono.Cairo/DRMSurface.cs b/Crow/src/Mono.Cairo/DRMSurface.cs
deleted file mode 100644 (file)
index f624967..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-//
-// Mono.Cairo.GLSurface.cs
-//
-// Authors:
-//                     JP Bruyère (jp_bruyere@hotmail.com)
-//
-// This is an OO wrapper API for the Cairo API
-//
-// Copyright (C) 2016 JP Bruyère
-//
-// 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;
-
-namespace Crow.Cairo {
-
-       public class DRMSurface : Surface
-       {
-               
-               public DRMSurface (IntPtr ptr, bool own) : base (ptr, own)
-               {}
-
-               public DRMSurface (DRMDevice device, Format format, int width, int height)
-                       : base (NativeMethods.cairo_drm_surface_create (device.Handle, format, width, height), true)
-               {}
-
-               public DRMSurface (DRMDevice device, uint name, Format format, int width, int height, int stride)
-                       : base (NativeMethods.cairo_drm_surface_create_for_name (device.Handle, name, format, width, height, stride), true)
-               {}
-
-               public DRMSurface (DRMDevice device, IntPtr imageSurface)
-                       : base (NativeMethods.cairo_drm_surface_create_from_cacheable_image (device.Handle, imageSurface), true)
-               {}
-       }
-}
diff --git a/Crow/src/Mono.Cairo/Device.cs b/Crow/src/Mono.Cairo/Device.cs
deleted file mode 100644 (file)
index 484264f..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-//
-// Mono.Cairo.Device.cs
-//
-// Authors:
-//                     JP Bruyère (jp_bruyere@hotmail.com)
-//
-// This is an OO wrapper API for the Cairo API
-//
-// Copyright (C) 2016 JP Bruyère
-//
-// 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;
-
-namespace Crow.Cairo
-{
-       public class Device : IDisposable
-       {
-               IntPtr handle = IntPtr.Zero;
-
-               protected Device()
-               {
-               }
-
-               protected Device (IntPtr ptr) : this (ptr, true)
-               {
-               }
-
-               protected Device (IntPtr handle, bool owner)
-               {
-                       this.handle = handle;
-                       if (!owner)
-                               NativeMethods.cairo_device_reference (handle);
-                       if (CairoDebug.Enabled)
-                               CairoDebug.OnAllocated (handle);
-               }
-
-               ~Device ()
-               {
-                       Dispose (false);
-               }
-
-               public IntPtr Handle {
-                       get {
-                               return handle;
-                       }
-               }
-               public string Status {
-                       get {
-                return System.Runtime.InteropServices.Marshal.PtrToStringAuto(NativeMethods.cairo_status_to_string (NativeMethods.cairo_device_status (handle)));
-                       }
-               }
-               public void SetThreadAware (bool value){
-                       NativeMethods.cairo_gl_device_set_thread_aware (handle, value ? 1 : 0);
-               }
-               public Status Acquire()
-               {
-                       return NativeMethods.cairo_device_acquire (handle);
-               }
-               public void Release()
-               {
-                       NativeMethods.cairo_device_release (handle);
-               }
-
-               public void Dispose ()
-               {
-                       Dispose (true);
-                       GC.SuppressFinalize (this);
-               }
-
-               protected virtual void Dispose (bool disposing)
-               {
-                       if (!disposing || CairoDebug.Enabled)
-                               CairoDebug.OnDisposed<Device> (handle, disposing);
-
-                       if (!disposing || handle == IntPtr.Zero)
-                               return;
-
-                       NativeMethods.cairo_device_destroy (handle);
-                       handle = IntPtr.Zero;
-               }
-       }
-}
-
diff --git a/Crow/src/Mono.Cairo/DirectFBSurface.cs b/Crow/src/Mono.Cairo/DirectFBSurface.cs
deleted file mode 100644 (file)
index 6443157..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-//
-// Mono.Cairo.DirectFBSurface.cs
-//
-// Authors:
-//    Alp Toker
-//
-// (C) Alp Toker, 2006.
-//
-// 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;
-
-namespace Crow.Cairo {
-       public class DirectFBSurface : Surface
-       {
-               internal DirectFBSurface (IntPtr handle, bool owns) : base (handle, owns)
-               {
-               }
-
-               public DirectFBSurface (IntPtr dfb, IntPtr dfb_surface)
-                       : base (NativeMethods.cairo_directfb_surface_create (dfb, dfb_surface), true)
-               {
-               }
-       }
-}
diff --git a/Crow/src/Mono.Cairo/Distance.cs b/Crow/src/Mono.Cairo/Distance.cs
deleted file mode 100644 (file)
index d716ab1..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-//
-// Mono.Cairo.Context.cs
-//
-// Author:
-//   Duncan Mak (duncan@ximian.com)
-//   Miguel de Icaza (miguel@novell.com)
-//   Hisham Mardam Bey (hisham.mardambey@gmail.com)
-//   Alp Toker (alp@atoker.com)
-//
-// (C) Ximian Inc, 2003.
-// (C) Novell Inc, 2003.
-//
-// This is an OO wrapper API for the Cairo API.
-//
-// Copyright (C) 2004 Novell, Inc (http://www.novell.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.
-//
-
-namespace Crow.Cairo {
-
-       public struct Distance
-       {
-               public Distance (double dx, double dy)
-               {
-                       this.dx = dx;
-                       this.dy = dy;
-               }
-
-               double dx, dy;
-               public double Dx {
-                       get { return dx; }
-                       set { dx = value; }
-               }
-
-               public double Dy {
-                       get { return dy; }
-                       set { dy = value; }
-               }
-       }
-}
diff --git a/Crow/src/Mono.Cairo/EGLDevice.cs b/Crow/src/Mono.Cairo/EGLDevice.cs
deleted file mode 100644 (file)
index 44590c7..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-//
-// Mono.Cairo.Device.cs
-//
-// Authors:
-//                     JP Bruyère (jp_bruyere@hotmail.com)
-//
-// This is an OO wrapper API for the Cairo API
-//
-// Copyright (C) 2016 JP Bruyère
-//
-// 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;
-
-namespace Crow.Cairo
-{
-       public class EGLDevice : Device
-       {
-               public EGLDevice (IntPtr dpy, IntPtr gl_ctx) : base (NativeMethods.cairo_egl_device_create (dpy, gl_ctx), true)
-               {
-               }
-       }
-}
-
diff --git a/Crow/src/Mono.Cairo/Extend.cs b/Crow/src/Mono.Cairo/Extend.cs
deleted file mode 100644 (file)
index 4af536d..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-//
-// Mono.Cairo.Extend.cs
-//
-// Authors:
-//   Duncan Mak (duncan@ximian.com)
-//   Hisham Mardam Bey (hisham.mardambey@gmail.com)
-//   John Luke (john.luke@gmail.com)
-//
-// (C) Ximian, Inc. 2003
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-// Copyright (C) 2005 John Luke
-//
-// 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;
-
-namespace Crow.Cairo
-{
-       
-       public enum Extend
-       {
-               None,
-               Repeat,
-               Reflect,
-               Pad,
-       }
-}
diff --git a/Crow/src/Mono.Cairo/FillRule.cs b/Crow/src/Mono.Cairo/FillRule.cs
deleted file mode 100644 (file)
index 80f61ed..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-//
-// Mono.Cairo.FillRule.cs
-//
-// Authors:
-//   Duncan Mak (duncan@ximian.com)
-//   Hisham Mardam Bey (hisham.mardambey@gmail.com)
-//
-// (C) Ximian, Inc. 2003
-// Copyright (C) 2004 Novell, Inc (http://www.novell.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;
-
-namespace Crow.Cairo
-{
-       
-       public enum FillRule
-       {
-               Winding,
-               EvenOdd
-       }
-}
diff --git a/Crow/src/Mono.Cairo/Filter.cs b/Crow/src/Mono.Cairo/Filter.cs
deleted file mode 100644 (file)
index a73ea58..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-//
-// Mono.Cairo.Filter.cs
-//
-// Authors:
-//   Duncan Mak (duncan@ximian.com)
-//   Hisham Mardam Bey (hisham.mardambey@gmail.com)
-//
-// (C) Ximian, Inc. 2003
-// Copyright (C) 2004 Novell, Inc (http://www.novell.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;
-
-namespace Crow.Cairo
-{
-       
-       public enum Filter
-       {
-               Fast,
-               Good,
-               Best,
-               Nearest,
-               Bilinear,
-               Gaussian,
-       }
-}
diff --git a/Crow/src/Mono.Cairo/FontExtents.cs b/Crow/src/Mono.Cairo/FontExtents.cs
deleted file mode 100644 (file)
index ea26d9b..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-//
-// Mono.Cairo.FontExtents.cs
-//
-// Authors: Duncan Mak (duncan@ximian.com)
-//          Hisham Mardam Bey (hisham.mardambey@gmail.com)
-//
-// (C) Ximian, Inc. 2003
-//
-// This is a simplistic binding of the Cairo API to C#. All functions
-// in cairo.h are transcribed into their C# equivelants
-//
-// Copyright (C) 2004 Novell, Inc (http://www.novell.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 Crow.Cairo
-{
-       [StructLayout (LayoutKind.Sequential)]
-       public struct FontExtents
-       {
-               double ascent;
-               double descent;
-               double height;
-               double maxXAdvance;
-               double maxYAdvance;
-               
-               public double Ascent {
-                       get { return ascent; }
-                       set { ascent = value; }
-               }
-               
-               public double Descent {
-                       get { return descent; }
-                       set { descent = value; }
-               }
-               
-               public double Height {
-                       get { return height; }
-                       set { height = value; }
-               }
-               
-               public double MaxXAdvance {
-                       get { return maxXAdvance; }
-                       set { maxXAdvance = value; }
-               }
-               
-               public double MaxYAdvance {
-                       get { return maxYAdvance; }
-                       set { maxYAdvance = value; }
-               }
-
-               public FontExtents (double ascent, double descent, double height, double maxXAdvance, double maxYAdvance)
-               {
-                       this.ascent = ascent;
-                       this.descent = descent;
-                       this.height = height;
-                       this.maxXAdvance = maxXAdvance;
-                       this.maxYAdvance = maxYAdvance;
-               }
-
-               public override bool Equals (object obj)
-               {
-                       if (obj is FontExtents)
-                               return this == (FontExtents) obj;
-                       return false;
-               }
-
-               public override int GetHashCode ()
-               {
-                       return (int) Ascent ^ (int) Descent ^ (int) Height ^ (int) MaxXAdvance ^ (int) MaxYAdvance;
-               }
-
-               public static bool operator == (FontExtents extents, FontExtents other)
-               {
-                       return extents.Ascent == other.Ascent && extents.Descent == other.Descent && extents.Height == other.Height && extents.MaxXAdvance == other.MaxXAdvance && extents.MaxYAdvance == other.MaxYAdvance;
-               }
-
-               public static bool operator != (FontExtents extents, FontExtents other)
-               {
-                       return !(extents == other);
-               }
-       }
-}
diff --git a/Crow/src/Mono.Cairo/FontFace.cs b/Crow/src/Mono.Cairo/FontFace.cs
deleted file mode 100644 (file)
index 64c428e..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-//
-// Mono.Cairo.FontFace.cs
-//
-// Author:
-//   Alp Toker (alp@atoker.com)
-//   Miguel de Icaza (miguel@novell.com)
-//
-// (C) Ximian Inc, 2003.
-//
-// This is an OO wrapper API for the Cairo API.
-//
-// Copyright (C) 2004, 2007 Novell, Inc (http://www.novell.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;
-
-namespace Crow.Cairo
-{
-       public class FontFace : IDisposable
-       {
-               IntPtr handle;
-
-               internal static FontFace Lookup (IntPtr handle, bool owner)
-               {
-                       if (handle == IntPtr.Zero)
-                               return null;
-                       return new FontFace (handle, owner);
-               }
-
-               ~FontFace ()
-               {
-                       Dispose (false);
-               }
-
-               public void Dispose ()
-               {
-                       Dispose (true);
-                       GC.SuppressFinalize (this);
-               }
-
-               protected virtual void Dispose (bool disposing)
-               {
-                       if (!disposing || CairoDebug.Enabled)
-                               CairoDebug.OnDisposed<FontFace> (handle, disposing);
-
-                       if (!disposing|| handle == IntPtr.Zero)
-                               return;
-
-                       NativeMethods.cairo_font_face_destroy (handle);
-                       handle = IntPtr.Zero;
-               }
-
-               [Obsolete]
-               public FontFace (IntPtr handle) : this (handle, true)
-               {
-               }
-
-               public FontFace (IntPtr handle, bool owned)
-               {
-                       this.handle = handle;
-                       if (!owned)
-                               NativeMethods.cairo_font_face_reference (handle);
-                       if (CairoDebug.Enabled)
-                               CairoDebug.OnAllocated (handle);
-               }
-
-               public IntPtr Handle {
-                       get {
-                               return handle;
-                       }
-               }
-
-               public Status Status {
-                       get {
-                               return NativeMethods.cairo_font_face_status (handle);
-                       }
-               }
-               
-               public FontType FontType {
-                       get {
-                               return NativeMethods.cairo_font_face_get_type (handle);
-                       }
-               }
-
-               public uint ReferenceCount {
-                       get { return NativeMethods.cairo_font_face_get_reference_count (handle); }
-               }
-       }
-}
-
diff --git a/Crow/src/Mono.Cairo/FontOptions.cs b/Crow/src/Mono.Cairo/FontOptions.cs
deleted file mode 100644 (file)
index f90a3a4..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-//
-// Mono.Cairo.FontOptions.cs
-//
-// Author:
-//   John Luke (john.luke@gmail.com)
-//
-// (C) John Luke 2005.
-//
-// 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;
-
-namespace Crow.Cairo
-{
-       public class FontOptions : IDisposable
-       {
-               IntPtr handle;
-
-               public FontOptions () : this (NativeMethods.cairo_font_options_create ())
-               {
-               }
-
-               ~FontOptions ()
-               {
-                       Dispose (false);
-               }
-
-               internal FontOptions (IntPtr handle)
-               {
-                       this.handle = handle;
-                       if (CairoDebug.Enabled)
-                               CairoDebug.OnAllocated (handle);
-               }
-
-               public FontOptions Copy ()
-               {
-                       return new FontOptions (NativeMethods.cairo_font_options_copy (handle));
-               }
-
-               [Obsolete ("Use Dispose()")]
-               public void Destroy ()
-               {
-                       Dispose ();
-               }
-
-               public void Dispose ()
-               {
-                       Dispose (true);
-                       GC.SuppressFinalize (this);
-               }
-
-               protected virtual void Dispose (bool disposing)
-               {
-                       if (!disposing || CairoDebug.Enabled)
-                               CairoDebug.OnDisposed<FontOptions> (handle, disposing);
-
-                       if (!disposing|| handle == IntPtr.Zero)
-                               return;
-
-                       NativeMethods.cairo_font_options_destroy (handle);
-                       handle = IntPtr.Zero;
-               }
-
-               public static bool operator == (FontOptions options, FontOptions other)
-               {
-                       return Equals (options, other);
-               }
-
-               public static bool operator != (FontOptions options, FontOptions other)
-               {
-                       return !(options == other);
-               }
-
-               public override bool Equals (object other)
-               {
-                       return Equals (other as FontOptions);
-               }
-
-               bool Equals (FontOptions options)
-               {
-                       return options != null && NativeMethods.cairo_font_options_equal (Handle, options.Handle);
-               }
-
-               public IntPtr Handle {
-                       get { return handle; }
-               }
-
-               public override int GetHashCode ()
-               {
-                       return (int) NativeMethods.cairo_font_options_hash (handle);
-               }
-               
-               public void Merge (FontOptions other)
-               {
-                       if (other == null)
-                               throw new ArgumentNullException ("other");
-                       NativeMethods.cairo_font_options_merge (handle, other.Handle);
-               }
-
-               public Antialias Antialias {
-                       get { return NativeMethods.cairo_font_options_get_antialias (handle); }
-                       set { NativeMethods.cairo_font_options_set_antialias (handle, value); }
-               }
-
-               public HintMetrics HintMetrics {
-                       get { return NativeMethods.cairo_font_options_get_hint_metrics (handle);}
-                       set { NativeMethods.cairo_font_options_set_hint_metrics (handle, value); }
-               }
-
-               public HintStyle HintStyle {
-                       get { return NativeMethods.cairo_font_options_get_hint_style (handle);}
-                       set { NativeMethods.cairo_font_options_set_hint_style (handle, value); }
-               }
-
-               public Status Status {
-                       get { return NativeMethods.cairo_font_options_status (handle); }
-               }
-
-               public SubpixelOrder SubpixelOrder {
-                       get { return NativeMethods.cairo_font_options_get_subpixel_order (handle);}
-                       set { NativeMethods.cairo_font_options_set_subpixel_order (handle, value); }
-               }
-       }
-}
-
diff --git a/Crow/src/Mono.Cairo/FontSlant.cs b/Crow/src/Mono.Cairo/FontSlant.cs
deleted file mode 100644 (file)
index b3d8a1a..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-//
-// Mono.Cairo.FontSlant.cs
-//
-// Authors:
-//   Duncan Mak (duncan@ximian.com)
-//   Hisham Mardam Bey (hisham.mardambey@gmail.com)
-//
-// (C) Ximian, Inc. 2003
-// Copyright (C) 2004 Novell, Inc (http://www.novell.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;
-
-namespace Crow.Cairo
-{
-       
-       public enum FontSlant
-       {
-               Normal,
-               Italic,
-               Oblique
-       }
-}
diff --git a/Crow/src/Mono.Cairo/FontType.cs b/Crow/src/Mono.Cairo/FontType.cs
deleted file mode 100644 (file)
index 5db44d4..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-//
-// Mono.Cairo.FontType.cs
-//
-// Authors:
-//    John Luke
-//
-// (C) John Luke, 2006.
-//
-// 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;
-
-namespace Crow.Cairo {
-
-       
-       public enum FontType
-       {
-               Toy,
-               FreeType,
-               Win32,
-               Atsui,
-       }
-}
diff --git a/Crow/src/Mono.Cairo/FontWeight.cs b/Crow/src/Mono.Cairo/FontWeight.cs
deleted file mode 100644 (file)
index 0b8fc6a..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-//
-// Mono.Cairo.FontWeight.cs
-//
-// Authors:
-//   Duncan Mak (duncan@ximian.com)
-//   Hisham Mardam Bey (hisham.mardambey@gmail.com)
-//
-// (C) Ximian, Inc. 2003
-// Copyright (C) 2004 Novell, Inc (http://www.novell.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;
-
-namespace Crow.Cairo
-{
-       
-       public enum FontWeight
-       {
-               Normal,
-               Bold,
-       }
-}
diff --git a/Crow/src/Mono.Cairo/Format.cs b/Crow/src/Mono.Cairo/Format.cs
deleted file mode 100644 (file)
index 54c8be1..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-//
-// Mono.Cairo.Format.cs
-//
-// Authors: Duncan Mak (duncan@ximian.com)
-//          Hisham Mardam Bey (hisham.mardambey@gmail.com)
-//
-// (C) Ximian, Inc. 2003
-// Copyright (C) 2004 Novell, Inc (http://www.novell.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;
-
-namespace Crow.Cairo
-{
-       
-       public enum Format
-       {
-               Argb32  = 0,
-               Rgb24   = 1,
-               A8      = 2,
-               A1      = 3,
-               Rgb16565 = 4,
-
-               //[Obsolete ("Use Argb32")]
-               ARGB32 = Argb32,
-               //[Obsolete ("Use Rgb24")]
-               RGB24   = Rgb24,
-       }
-}
diff --git a/Crow/src/Mono.Cairo/GLSurface.cs b/Crow/src/Mono.Cairo/GLSurface.cs
deleted file mode 100644 (file)
index 60384b0..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-//
-// Mono.Cairo.GLSurface.cs
-//
-// Authors:
-//                     JP Bruyère (jp_bruyere@hotmail.com)
-//
-// This is an OO wrapper API for the Cairo API
-//
-// Copyright (C) 2016 JP Bruyère
-//
-// 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;
-
-namespace Crow.Cairo {
-
-       public class GLSurface : Surface
-       {
-               
-               public GLSurface (IntPtr ptr, bool own) : base (ptr, own)
-               {}
-
-               public GLSurface (Device device, Cairo.Content content, uint tex, int width, int height)
-                       : base (NativeMethods.cairo_gl_surface_create_for_texture (device.Handle, (uint)content, tex, width, height), true)
-               {}
-
-               public GLSurface (EGLDevice device, IntPtr eglSurf, int width, int height)
-                       : base (NativeMethods.cairo_gl_surface_create_for_egl (device.Handle, eglSurf, width, height), true)
-               {}
-
-               public GLSurface (GLXDevice device, IntPtr window, int width, int height)
-                       : base (NativeMethods.cairo_gl_surface_create_for_window (device.Handle, window, width, height),true)
-               {}
-
-               public GLSurface (WGLDevice device, IntPtr hdc, int width, int height)
-                       : base (NativeMethods.cairo_gl_surface_create_for_dc (device.Handle, hdc, width, height), true)
-               {}
-
-               public void SwapBuffers(){
-                       NativeMethods.cairo_gl_surface_swapbuffers (this.Handle);
-               }
-       }
-}
diff --git a/Crow/src/Mono.Cairo/GLXDevice.cs b/Crow/src/Mono.Cairo/GLXDevice.cs
deleted file mode 100644 (file)
index 00cbce1..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-//
-// Mono.Cairo.Device.cs
-//
-// Authors:
-//                     JP Bruyère (jp_bruyere@hotmail.com)
-//
-// This is an OO wrapper API for the Cairo API
-//
-// Copyright (C) 2016 JP Bruyère
-//
-// 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;
-
-namespace Crow.Cairo
-{
-       public class GLXDevice : Device
-       {
-               public GLXDevice (IntPtr dpy, IntPtr gl_ctx) : base (NativeMethods.cairo_glx_device_create (dpy, gl_ctx), true)
-               {
-               }
-
-               public IntPtr Display {
-                       get { return NativeMethods.cairo_glx_device_get_display (Handle); }
-               }
-
-               public IntPtr Context {
-                       get { return NativeMethods.cairo_glx_device_get_context (Handle); }
-               }
-       }
-}
-
diff --git a/Crow/src/Mono.Cairo/GlitzSurface.cs b/Crow/src/Mono.Cairo/GlitzSurface.cs
deleted file mode 100644 (file)
index 4aa2498..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-//
-// Mono.Cairo.GlitzSurface.cs
-//
-// Authors:
-//    Alp Toker
-//
-// (C) Alp Toker, 2006.
-//
-// 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;
-
-namespace Crow.Cairo {
-       public class GlitzSurface : Surface
-       {
-               internal GlitzSurface (IntPtr handle, bool owns) : base (handle, owns)
-               {
-               }
-
-               public GlitzSurface (IntPtr glitz_surface)
-                       : base (NativeMethods.cairo_glitz_surface_create (glitz_surface), true)
-               {
-               }
-       }
-}
diff --git a/Crow/src/Mono.Cairo/Glyph.cs b/Crow/src/Mono.Cairo/Glyph.cs
deleted file mode 100644 (file)
index ad51156..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-//
-// Mono.Cairo.Glyph.cs
-//
-// Authors: Duncan Mak (duncan@ximian.com)
-//          Hisham Mardam Bey (hisham.mardambey@gmail.com)
-//
-// (C) Ximian, Inc. 2003
-// Copyright (C) 2004 Novell, Inc (http://www.novell.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 Crow.Cairo
-{
-       [StructLayout(LayoutKind.Sequential)]
-       public struct Glyph
-       {
-               internal long index;
-               internal double x;
-               internal double y;
-               
-               public Glyph (long index, double x, double y)
-               {
-                       this.index = index;
-                       this.x = x;
-                       this.y = y;
-               }
-               
-               public long Index {
-                       get { return index; }
-                       set { index = value; }
-               }
-               
-               public double X {
-                       get { return x; }
-                       set { x = value; }
-               }
-               
-               public double Y {
-                       get { return y; }
-                       set { y = value; }
-               }
-
-               public override bool Equals (object obj)
-               {
-                       if (obj is Glyph)
-                               return this == (Glyph)obj;
-                       return false;
-               }
-
-               public override int GetHashCode ()
-               {
-                       return (int) Index ^ (int) X ^ (int) Y;
-               }
-
-               internal static IntPtr GlyphsToIntPtr (Glyph[] glyphs)
-               {
-                       int size = Marshal.SizeOf (glyphs[0]);
-                       IntPtr dest = Marshal.AllocHGlobal (size * glyphs.Length);
-                       long pos = dest.ToInt64 ();
-                       for (int i = 0; i < glyphs.Length; i++, pos += size)
-                               Marshal.StructureToPtr (glyphs[i], (IntPtr) pos, false);
-                       return dest;
-               }
-
-               public static bool operator == (Glyph glyph, Glyph other)
-               {
-                       return glyph.Index == other.Index && glyph.X == other.X && glyph.Y == other.Y;
-               }
-
-               public static bool operator != (Glyph glyph, Glyph other)
-               {
-                       return !(glyph == other);
-               }
-       }
-}
diff --git a/Crow/src/Mono.Cairo/Gradient.cs b/Crow/src/Mono.Cairo/Gradient.cs
deleted file mode 100644 (file)
index a1799e3..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-//
-// Mono.Cairo.Gradient.cs
-//
-// Author: Jordi Mas (jordi@ximian.com)
-//         Hisham Mardam Bey (hisham.mardambey@gmail.com)
-// (C) Ximian Inc, 2004.
-//
-// Copyright (C) 2004 Novell, Inc (http://www.novell.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 Color = Crow.Color;
-namespace Crow.Cairo {
-
-       public class Gradient : Pattern
-       {
-               protected Gradient (IntPtr handle, bool owned) : base (handle, owned)
-               {
-               }
-
-               [Obsolete]
-               protected Gradient ()
-               {
-               }
-
-               public int ColorStopCount {
-                       get {
-                               int cnt;
-                               NativeMethods.cairo_pattern_get_color_stop_count (Handle, out cnt);
-                               return cnt;
-                       }
-               }
-
-               public Status AddColorStop (double offset, Color c)
-               {
-                       NativeMethods.cairo_pattern_add_color_stop_rgba (Handle, offset, c.R / 255.0, c.G / 255.0, c.B / 255.0, c.A / 255.0);
-                       return Status;
-               }
-
-               public Status AddColorStopRgb (double offset, Color c)
-               {
-                       NativeMethods.cairo_pattern_add_color_stop_rgb (Handle, offset, c.R / 255.0, c.G / 255.0 / 255.0, c.B / 255.0);
-                       return Status;
-               }
-       }
-}
-
diff --git a/Crow/src/Mono.Cairo/HintMetrics.cs b/Crow/src/Mono.Cairo/HintMetrics.cs
deleted file mode 100644 (file)
index d830f3e..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-//
-// Mono.Cairo.HintMetrics.cs
-//
-// Authors: Duncan Mak (duncan@ximian.com)
-//          Hisham Mardam Bey (hisham.mardambey@gmail.com)
-//
-// (C) Ximian, Inc. 2003
-// Copyright (C) 2004 Novell, Inc (http://www.novell.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;
-
-namespace Crow.Cairo
-{
-       
-       public enum HintMetrics
-       {
-               Default,
-               Off,
-               On,
-       }
-}
diff --git a/Crow/src/Mono.Cairo/HintStyle.cs b/Crow/src/Mono.Cairo/HintStyle.cs
deleted file mode 100644 (file)
index 343daf3..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-//
-// Mono.Cairo.HintStyle.cs
-//
-// Authors: Duncan Mak (duncan@ximian.com)
-//          Hisham Mardam Bey (hisham.mardambey@gmail.com)
-//
-// (C) Ximian, Inc. 2003
-// Copyright (C) 2004 Novell, Inc (http://www.novell.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;
-
-namespace Crow.Cairo
-{
-       
-       public enum HintStyle
-       {
-               Default,
-               None,
-               Slight,
-               Medium,
-               Full,
-       }
-}
diff --git a/Crow/src/Mono.Cairo/ImageSurface.cs b/Crow/src/Mono.Cairo/ImageSurface.cs
deleted file mode 100644 (file)
index 7c70569..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-//
-// Mono.Cairo.ImageSurface.cs
-//
-// Authors:
-//    Duncan Mak
-//    Miguel de Icaza.
-//
-// (C) Ximian Inc, 2003.
-// (C) Novell, Inc. 2003.
-//
-// This is an OO wrapper API for the Cairo API
-//
-// Copyright (C) 2004 Novell, Inc (http://www.novell.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 Crow.Cairo {
-
-       public class ImageSurface : Surface
-       {
-               internal ImageSurface (IntPtr handle, bool owns) : base (handle, owns)
-               {
-               }
-
-               public ImageSurface (Format format, int width, int height)
-                       : base (NativeMethods.cairo_image_surface_create (format, width, height), true)
-               {
-               }
-
-               [Obsolete ("Use ImageSurface (byte[] data, Cairo.Format format, int width, int height, int stride)")]
-               public ImageSurface (ref byte[] data, Cairo.Format format, int width, int height, int stride)
-                       : this (data, format, width, height, stride)
-               {
-               }
-
-               public ImageSurface (byte[] data, Format format, int width, int height, int stride)
-                       : base (NativeMethods.cairo_image_surface_create_for_data (data, format, width, height, stride), true)
-               {
-               }
-
-               public ImageSurface (IntPtr data, Format format, int width, int height, int stride)
-                       : base (NativeMethods.cairo_image_surface_create_for_data (data, format, width, height, stride), true)
-               {
-               }
-
-               public ImageSurface (string filename)
-                       : base (NativeMethods.cairo_image_surface_create_from_png (filename), true)
-               {
-               }
-
-               public override int Width => NativeMethods.cairo_image_surface_get_width (Handle);
-               public override int Height => NativeMethods.cairo_image_surface_get_height (Handle);            
-
-               public byte[] Data {
-                       get {
-                               IntPtr ptr = NativeMethods.cairo_image_surface_get_data (Handle);
-                               int length = Height * Stride;
-                               byte[] data = new byte[length];
-                               Marshal.Copy (ptr, data, 0, length);
-                               return data;
-                       }
-               }
-
-               public IntPtr DataPtr {
-                       get {
-                               return NativeMethods.cairo_image_surface_get_data (Handle);
-                       }
-               }
-
-               public Format Format {
-                       get { return NativeMethods.cairo_image_surface_get_format (Handle); }
-               }
-
-               public int Stride {
-                       get { return NativeMethods.cairo_image_surface_get_stride (Handle); }
-               }
-       }
-}
diff --git a/Crow/src/Mono.Cairo/LineCap.cs b/Crow/src/Mono.Cairo/LineCap.cs
deleted file mode 100644 (file)
index 1560cda..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-//
-// Mono.Cairo.LineCap.cs
-//
-// Authors: Duncan Mak (duncan@ximian.com)
-//          Hisham Mardam Bey (hisham.mardambey@gmail.com)
-//
-// (C) Ximian, Inc. 2003
-// Copyright (C) 2004 Novell, Inc (http://www.novell.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;
-
-namespace Crow.Cairo
-{
-       
-       public enum LineCap
-       {
-               Butt,
-               Round,
-               Square,
-       }
-}
diff --git a/Crow/src/Mono.Cairo/LineJoin.cs b/Crow/src/Mono.Cairo/LineJoin.cs
deleted file mode 100644 (file)
index 1d5389b..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-//
-// Mono.Cairo.LineJoin.cs
-//
-// Authors: Duncan Mak (duncan@ximian.com)
-//          Hisham Mardam Bey (hisham.mardambey@gmail.com)
-//
-// (C) Ximian, Inc. 2003
-// Copyright (C) 2004 Novell, Inc (http://www.novell.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;
-
-namespace Crow.Cairo
-{
-       
-       public enum LineJoin
-       {
-               Miter,
-               Round,
-               Bevel
-       }
-}
-
diff --git a/Crow/src/Mono.Cairo/LinearGradient.cs b/Crow/src/Mono.Cairo/LinearGradient.cs
deleted file mode 100644 (file)
index 100d1e6..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-//
-// Mono.Cairo.LinearGradient.cs
-//
-// Author: Jordi Mas (jordi@ximian.com)
-//         Hisham Mardam Bey (hisham.mardambey@gmail.com)
-// (C) Ximian Inc, 2004.
-//
-// Copyright (C) 2004 Novell, Inc (http://www.novell.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;
-
-namespace Crow.Cairo {
-
-       public class LinearGradient : Gradient
-       {
-               internal LinearGradient (IntPtr handle, bool owned) : base (handle, owned)
-               {
-               }
-
-               public LinearGradient (double x0, double y0, double x1, double y1)
-                       : base (NativeMethods.cairo_pattern_create_linear (x0, y0, x1, y1), true)
-               {
-               }
-
-               public PointD[] LinearPoints {
-                       get {
-                               double x0, y0, x1, y1;
-                               PointD[] points = new PointD [2];
-
-                               NativeMethods.cairo_pattern_get_linear_points (Handle, out x0, out y0, out x1, out y1);
-
-                               points[0] = new PointD (x0, y0);
-                               points[1] = new PointD (x1, y1);
-                               return points;
-                       }
-               }
-       }
-}
-
diff --git a/Crow/src/Mono.Cairo/Matrix.cs b/Crow/src/Mono.Cairo/Matrix.cs
deleted file mode 100644 (file)
index 7d5a6ac..0000000
+++ /dev/null
@@ -1,193 +0,0 @@
-//
-// Mono.Cairo.Matrix.cs
-//
-// Author: Duncan Mak
-//         Hisham Mardam Bey (hisham.mardambey@gmail.com)
-//         Idan Gazit (idan@fastmail.fm)
-//
-// (C) Ximian Inc, 2003 - 2005.
-//
-// This is an OO wrapper API for the Cairo API
-//
-// Copyright (C) 2004 Novell, Inc (http://www.novell.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 Crow.Cairo {
-
-       [StructLayout(LayoutKind.Sequential)]
-       public class Matrix //: ICloneable
-       {
-               public double Xx;
-               public double Yx;
-               public double Xy;
-               public double Yy;
-               public double X0;
-               public double Y0;
-
-               public Matrix (double xx, double yx, double xy, double yy,
-                               double x0, double y0)
-               {
-                       this.Xx = xx; this.Yx = yx; this.Xy = xy;
-                       this.Yy = yy; this.X0 = x0; this.Y0 = y0;
-               }
-
-               public Matrix ()
-               {
-                       this.InitIdentity ();
-               }
-
-               public bool IsIdentity ()
-               {
-                       return (this == new Matrix ());
-               }
-
-               public void InitIdentity ()
-               {
-                       // this.Init(1,0,0,1,0,0);
-                       NativeMethods.cairo_matrix_init_identity (this);
-               }
-
-               public void Init (double xx, double yx, double xy, double yy,
-                                 double x0, double y0)
-               {
-                       this.Xx = xx; this.Yx = yx; this.Xy = xy;
-                       this.Yy = yy; this.X0 = x0; this.Y0 = y0;
-               }
-
-               public void InitTranslate (double tx, double ty)
-               {
-                       //this.Init (1, 0, 0, 1, tx, ty);
-                       NativeMethods.cairo_matrix_init_translate (this, tx, ty);
-               }
-
-               public void Translate (double tx, double ty)
-               {
-                       NativeMethods.cairo_matrix_translate (this, tx, ty);
-               }
-
-               public void InitScale (double sx, double sy)
-               {
-                       //this.Init (sx, 0, 0, sy, 0, 0);
-                       NativeMethods.cairo_matrix_init_scale (this, sx, sy);
-               }
-
-               public void Scale (double sx, double sy)
-               {
-                       NativeMethods.cairo_matrix_scale (this, sx, sy);
-               }
-
-               public void InitRotate (double radians)
-               {
-                       /*
-                       double s, c;
-                       s = Math.Sin (radians);
-                       c = Math.Cos (radians);
-                       this.Init (c, s, -s, c, 0, 0);
-                       */
-                       NativeMethods.cairo_matrix_init_rotate (this, radians);
-               }
-
-               public void Rotate (double radians)
-               {
-                       NativeMethods.cairo_matrix_rotate (this, radians);
-               }
-
-               public Cairo.Status Invert ()
-               {
-                       return NativeMethods.cairo_matrix_invert (this);
-               }
-
-               public void Multiply (Matrix b)
-               {
-                       Matrix a = (Matrix) this.Clone ();
-                       NativeMethods.cairo_matrix_multiply (this, a, b);
-               }
-
-               public static Matrix Multiply (Matrix a, Matrix b) {
-                       Matrix result = new Matrix ();
-                       NativeMethods.cairo_matrix_multiply (result, a, b);
-                       return result;
-               }
-
-
-               public void TransformDistance (ref double dx, ref double dy)
-               {
-                       NativeMethods.cairo_matrix_transform_distance (this, ref dx, ref dy);
-               }
-
-               public void TransformPoint (ref double x, ref double y)
-               {
-                       NativeMethods.cairo_matrix_transform_point (this, ref x, ref y);
-               }
-
-               public override String ToString ()
-               {
-                       String s = String.Format ("xx:{0:##0.0#} yx:{1:##0.0#} xy:{2:##0.0#} yy:{3:##0.0#} x0:{4:##0.0#} y0:{5:##0.0#}",
-                               this.Xx, this.Yx, this.Xy, this.Yy, this.X0, this.Y0);
-                       return s;
-               }
-
-               public static bool operator == (Matrix lhs, Matrix rhs)
-               {
-                       return (lhs.Xx == rhs.Xx &&
-                               lhs.Xy == rhs.Xy &&
-                               lhs.Yx == rhs.Yx &&
-                               lhs.Yy == rhs.Yy &&
-                               lhs.X0 == rhs.X0 &&
-                               lhs.Y0 == rhs.Y0 );
-               }
-
-               public static bool operator != (Matrix lhs, Matrix rhs)
-               {
-                       return !(lhs==rhs);
-               }
-
-
-
-               public override bool Equals(object o)
-               {
-                       if (! (o is Matrix))
-                               return false;
-                       else
-                               return (this == (Matrix) o);
-               }
-
-               public override int GetHashCode()
-               {
-                       return  (int)this.Xx ^ (int)this.Xx>>32 ^
-                               (int)this.Xy ^ (int)this.Xy>>32 ^
-                               (int)this.Yx ^ (int)this.Yx>>32 ^
-                               (int)this.Yy ^ (int)this.Yy>>32 ^
-                               (int)this.X0 ^ (int)this.X0>>32 ^
-                               (int)this.Y0 ^ (int)this.Y0>>32;
-               }
-
-               public object Clone()
-               {
-                       return this.MemberwiseClone ();
-               }
-
-       }
-}
diff --git a/Crow/src/Mono.Cairo/MeshPattern.cs b/Crow/src/Mono.Cairo/MeshPattern.cs
deleted file mode 100644 (file)
index 83da70b..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-//
-// Mono.Cairo.Pattern.cs
-//
-// Author: Jordi Mas (jordi@ximian.com)
-//         Hisham Mardam Bey (hisham.mardambey@gmail.com)
-// (C) Ximian Inc, 2004.
-//
-// Copyright (C) 2004 Novell, Inc (http://www.novell.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;
-
-namespace Crow.Cairo {
-
-       public class MeshPattern : Pattern
-       {
-               internal MeshPattern (IntPtr handle, bool owned) : base (handle, owned)
-               {
-               }
-
-               public MeshPattern ()
-                       : base (NativeMethods.cairo_pattern_create_mesh(), true)
-               {
-               }
-
-               //no idea why this is here, the base one is identical, but we can't remove it now
-               public new Extend Extend {
-                       set { NativeMethods.cairo_pattern_set_extend (Handle, value); }
-                       get { return NativeMethods.cairo_pattern_get_extend (Handle); }
-               }
-
-               public Filter Filter {
-                       set { NativeMethods.cairo_pattern_set_filter (Handle, value); }
-                       get { return NativeMethods.cairo_pattern_get_filter (Handle); }
-               }
-
-               public void BeginPatch(){
-                       NativeMethods.cairo_mesh_pattern_begin_patch (Handle);
-               }
-               public void EndPatch(){
-                       NativeMethods.cairo_mesh_pattern_end_patch (Handle);
-               }
-               public void MoveTo(double x, double y){
-                       NativeMethods.cairo_mesh_pattern_move_to (Handle, x, y);
-               }
-               public void MoveTo (PointD p) {
-                       NativeMethods.cairo_mesh_pattern_move_to (Handle, p.X, p.Y);
-               }
-               public void LineTo(double x, double y){
-                       NativeMethods.cairo_mesh_pattern_line_to (Handle, x, y);
-               }
-               public void LineTo (PointD p) {
-                       NativeMethods.cairo_mesh_pattern_line_to (Handle, p.X, p.Y);
-               }
-               public void CurveTo(double x1, double y1, double x2, double y2, double x3, double y3)
-               {
-                       NativeMethods.cairo_mesh_pattern_curve_to (Handle, x1, y1, x2, y2, x3, y3);
-               }
-               public void SetControlPoint(uint point_num, double x, double y){
-                       NativeMethods.cairo_mesh_pattern_set_control_point (Handle, point_num, x, y);
-               }
-               public void SetControlPoint (uint point_num, PointD p) {
-                       NativeMethods.cairo_mesh_pattern_set_control_point (Handle, point_num, p.X, p.Y);
-               }
-               public void SetCornerColorRGB(uint corner_num, double r, double g, double b){
-                       NativeMethods.cairo_mesh_pattern_set_corner_color_rgb (Handle, corner_num, r, g, b);
-               }
-               public void SetCornerColorRGBA(uint corner_num, double r, double g, double b, double a){
-                       NativeMethods.cairo_mesh_pattern_set_corner_color_rgba (Handle, corner_num, r, g, b, a);
-               }
-               public void SetCornerColor (uint corner_num, Color c) {
-                       NativeMethods.cairo_mesh_pattern_set_corner_color_rgba (Handle, corner_num, c.R, c.G, c.B, c.A);
-               }
-               public uint PatchCount {
-                       get {
-                               uint count = 0;
-                               NativeMethods.cairo_mesh_pattern_get_patch_count(Handle, out count);
-                               return count;
-                       }       
-               }
-               public Path GetPath(uint patch_num){
-                       return new Path(NativeMethods.cairo_mesh_pattern_get_path(Handle, patch_num));
-               }
-               public PointD GetControlPoint(uint point_num, uint patch_num = 0) {
-                       NativeMethods.cairo_mesh_pattern_get_control_point (Handle, patch_num, point_num, out double x, out double y);
-                       return new PointD (x, y);
-               }
-               public void GetCornerColorRGBA(){
-                       
-               }
-       }
-}
-
diff --git a/Crow/src/Mono.Cairo/NativeMethods-internal.cs b/Crow/src/Mono.Cairo/NativeMethods-internal.cs
deleted file mode 100644 (file)
index 6e6d507..0000000
+++ /dev/null
@@ -1,1026 +0,0 @@
-//
-// Cairo.cs - a simplistic binding of the Cairo API to C#.
-//
-// Authors: Duncan Mak (duncan@ximian.com)
-//          Hisham Mardam Bey (hisham.mardambey@gmail.com)
-//          John Luke (john.luke@gmail.com)
-//          Alp Toker (alp@atoker.com)
-//
-// (C) Ximian, Inc. 2003
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-// Copyright (C) 2005 John Luke
-// Copyright (C) 2006 Alp Toker
-//
-// 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;
-using System.Runtime.CompilerServices;
-
-namespace Cairo
-{
-       // sort the functions like in the following page so it is easier to find what is missing
-       // http://cairographics.org/manual/index-all.html
-
-       public static class NativeMethods
-       {
-               #if MONOTOUCH
-               const string cairo = "__Internal";
-               #else
-               const string cairo = "libcairo-2.dll";
-               #endif
-
-               //[MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               //public static extern void cairo_append_path (IntPtr cr, Path path);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_arc (IntPtr cr, double xc, double yc, double radius, double angle1, double angle2);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_arc_negative (IntPtr cr, double xc, double yc, double radius, double angle1, double angle2);
-
-               //              [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               //              public static extern IntPtr cairo_atsui_font_face_create_for_atsu_font_id (IntPtr font_id);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_clip (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_clip_preserve (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_clip_extents (IntPtr cr, out double x1, out double y1, out double x2, out double y2);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_close_path (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_copy_page (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_copy_path (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_copy_path_flat (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_append_path (IntPtr cr, IntPtr path);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_create (IntPtr target);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_curve_to (IntPtr cr, double x1, double y1, double x2, double y2, double x3, double y3);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_debug_reset_static_data ();
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_destroy (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_device_to_user (IntPtr cr, ref double x, ref double y);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_device_to_user_distance (IntPtr cr, ref double dx, ref double dy);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_fill (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_fill_extents (IntPtr cr, out double x1, out double y1, out double x2, out double y2);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_fill_preserve (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_font_extents (IntPtr cr, out FontExtents extents);
-
-               #region FontFace
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_font_face_destroy (IntPtr font_face);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern FontType cairo_font_face_get_type (IntPtr font_face);
-
-               //[MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               //public static extern void cairo_font_face_get_user_data (IntPtr font_face);
-
-               //[MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               //public static extern void cairo_font_face_set_user_data (IntPtr font_face);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_font_face_reference (IntPtr font_face);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Status cairo_font_face_status (IntPtr font_face);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern uint cairo_font_face_get_reference_count (IntPtr surface);
-               #endregion
-
-               #region FontOptions
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_font_options_copy (IntPtr original);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_font_options_create ();
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_font_options_destroy (IntPtr options);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern bool cairo_font_options_equal (IntPtr options, IntPtr other);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Antialias cairo_font_options_get_antialias (IntPtr options);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern HintMetrics cairo_font_options_get_hint_metrics (IntPtr options);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern HintStyle cairo_font_options_get_hint_style (IntPtr options);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern SubpixelOrder cairo_font_options_get_subpixel_order (IntPtr options);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern long cairo_font_options_hash (IntPtr options);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_font_options_merge (IntPtr options, IntPtr other);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_font_options_set_antialias (IntPtr options, Antialias aa);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_font_options_set_hint_metrics (IntPtr options, HintMetrics metrics);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_font_options_set_hint_style (IntPtr options, HintStyle style);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_font_options_set_subpixel_order (IntPtr options, SubpixelOrder order);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Status cairo_font_options_status (IntPtr options);
-               #endregion
-
-               #region Freetype / FontConfig
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_ft_font_face_create_for_ft_face (IntPtr face, int load_flags);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_ft_font_face_create_for_pattern (IntPtr fc_pattern);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_ft_font_options_substitute (FontOptions options, IntPtr pattern);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_ft_scaled_font_lock_face (IntPtr scaled_font);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_ft_scaled_font_unlock_face (IntPtr scaled_font);
-               #endregion
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Antialias cairo_get_antialias (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_get_current_point (IntPtr cr, out double x, out double y);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern FillRule cairo_get_fill_rule (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_get_font_face (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_get_font_matrix (IntPtr cr, out Matrix matrix);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_get_font_options (IntPtr cr, IntPtr options);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_get_group_target (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern LineCap cairo_get_line_cap (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern LineJoin cairo_get_line_join (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern double cairo_get_line_width (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_get_matrix (IntPtr cr, Matrix matrix);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern double cairo_get_miter_limit (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Operator cairo_get_operator (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern uint cairo_get_reference_count (IntPtr surface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_get_source (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_get_target (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern double cairo_get_tolerance (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_glitz_surface_create (IntPtr surface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_glyph_extents (IntPtr cr, IntPtr glyphs, int num_glyphs, out TextExtents extents);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_glyph_path (IntPtr cr, IntPtr glyphs, int num_glyphs);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               [return: MarshalAs (UnmanagedType.U1)]
-               public static extern bool cairo_has_current_point (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_identity_matrix (IntPtr cr);
-
-               #region Image Surface
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_image_surface_create (Cairo.Format format, int width, int height);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               public static extern IntPtr cairo_image_surface_create_for_data (byte[] data, Cairo.Format format, int width, int height, int stride);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_image_surface_create_for_data (IntPtr data, Cairo.Format format, int width, int height, int stride);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_image_surface_create_from_png  (string filename);
-
-               //[MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               //public static extern IntPtr cairo_image_surface_create_from_png_stream  (string filename);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_image_surface_get_data (IntPtr surface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Format cairo_image_surface_get_format (IntPtr surface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern int cairo_image_surface_get_height (IntPtr surface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern int cairo_image_surface_get_stride (IntPtr surface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern int cairo_image_surface_get_width  (IntPtr surface);
-               #endregion
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               [return: MarshalAs (UnmanagedType.U1)]
-               public static extern bool cairo_in_clip (IntPtr cr, double x, double y);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               [return: MarshalAs (UnmanagedType.U1)]
-               public static extern bool cairo_in_fill (IntPtr cr, double x, double y);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               [return: MarshalAs (UnmanagedType.U1)]
-               public static extern bool cairo_in_stroke (IntPtr cr, double x, double y);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_line_to (IntPtr cr, double x, double y);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_mask (IntPtr cr, IntPtr pattern);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_mask_surface (IntPtr cr, IntPtr surface, double x, double y);
-
-               #region Matrix
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_matrix_init (Matrix matrix, double xx, double yx, double xy, double yy, double x0, double y0);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_matrix_init_identity (Matrix matrix);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_matrix_init_rotate (Matrix matrix, double radians);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_matrix_init_scale (Matrix matrix, double sx, double sy);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_matrix_init_translate (Matrix matrix, double tx, double ty);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Status cairo_matrix_invert (Matrix matrix);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_matrix_multiply (Matrix result, Matrix a, Matrix b);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_matrix_scale (Matrix matrix, double sx, double sy);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_matrix_rotate (Matrix matrix, double radians);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_matrix_transform_distance (Matrix matrix, ref double dx, ref double dy);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_matrix_transform_point (Matrix matrix, ref double x, ref double y);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_matrix_translate (Matrix matrix, double tx, double ty);
-               #endregion
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_move_to (IntPtr cr, double x, double y);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_new_path (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_new_sub_path (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_paint (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_paint_with_alpha (IntPtr cr, double alpha);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_path_destroy (IntPtr path);
-
-               #region Pattern
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_pattern_add_color_stop_rgb (IntPtr pattern, double offset, double red, double green, double blue);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_pattern_add_color_stop_rgba (IntPtr pattern, double offset, double red, double green, double blue, double alpha);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Status cairo_pattern_get_color_stop_count (IntPtr pattern, out int count);
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Status cairo_pattern_get_color_stop_rgba (IntPtr pattern, int index, out double offset, out double red, out double green, out double blue, out double alpha);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_pattern_create_for_surface (IntPtr surface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Status cairo_pattern_get_surface (IntPtr pattern, out IntPtr surface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_pattern_create_linear (double x0, double y0, double x1, double y1);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Status cairo_pattern_get_linear_points (IntPtr pattern, out double x0, out double y0, out double x1, out double y1);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_pattern_create_radial (double cx0, double cy0, double radius0, double cx1, double cy1, double radius1);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Status cairo_pattern_get_radial_circles (IntPtr pattern, out double x0, out double y0, out double r0, out double x1, out double y1, out double r1);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_pattern_create_rgb (double r, double g, double b);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_pattern_create_rgba (double r, double g, double b, double a);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Status cairo_pattern_get_rgba (IntPtr pattern, out double red, out double green, out double blue, out double alpha);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_pattern_destroy (IntPtr pattern);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Extend cairo_pattern_get_extend (IntPtr pattern);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Filter cairo_pattern_get_filter (IntPtr pattern);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_pattern_get_matrix (IntPtr pattern, Matrix matrix);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern PatternType cairo_pattern_get_type (IntPtr pattern);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_pattern_reference (IntPtr pattern);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_pattern_set_extend (IntPtr pattern, Extend extend);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_pattern_set_filter (IntPtr pattern, Filter filter);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_pattern_set_matrix (IntPtr pattern, Matrix matrix);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Status cairo_pattern_status (IntPtr pattern);
-               #endregion
-
-               #region PdfSurface
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_pdf_surface_create (string filename, double width, double height);
-
-               //[MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               //public static extern IntPtr cairo_pdf_surface_create_for_stream (string filename, double width, double height);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_pdf_surface_set_size (IntPtr surface, double x, double y);
-               #endregion
-
-               #region PostscriptSurface
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_ps_surface_create (string filename, double width, double height);
-
-               //[MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               //public static extern IntPtr cairo_ps_surface_create_for_stream (string filename, double width, double height);
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_ps_surface_dsc_begin_page_setup (IntPtr surface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_ps_surface_dsc_begin_setup (IntPtr surface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_ps_surface_dsc_comment (IntPtr surface, string comment);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_ps_surface_set_size (IntPtr surface, double x, double y);
-               #endregion
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_pop_group (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_pop_group_to_source (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_push_group (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_push_group_with_content (IntPtr cr, Content content);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_quartz_surface_create (IntPtr context, bool flipped, int width, int height);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_rectangle (IntPtr cr, double x, double y, double width, double height);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_reference (IntPtr cr);
-
-               #region Regions
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern bool cairo_region_contains_point (IntPtr region, int x, int y);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern RegionOverlap cairo_region_contains_rectangle (IntPtr region, ref Crow.Rectangle rectangle);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_region_copy (IntPtr original);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_region_create ();
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_region_create_rectangle (ref Crow.Rectangle rect);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_region_create_rectangles (IntPtr rects, int count);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_region_destroy (IntPtr region);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern bool cairo_region_equal (IntPtr a, IntPtr b);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_region_get_extents (IntPtr region, out Crow.Rectangle extents);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_region_get_rectangle (IntPtr region, int nth, out Crow.Rectangle rectangle);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Status cairo_region_intersect (IntPtr dst, IntPtr other);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Status cairo_region_intersect_rectangle (IntPtr dst, ref Crow.Rectangle rectangle);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern bool cairo_region_is_empty (IntPtr region);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern int cairo_region_num_rectangles (IntPtr region);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_region_reference (IntPtr region);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Status cairo_region_status (IntPtr region);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Status cairo_region_subtract (IntPtr dst, IntPtr other);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Status cairo_region_subtract_rectangle (IntPtr dst, ref Crow.Rectangle rectangle);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_region_translate (IntPtr region, int dx, int dy);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Status cairo_region_union (IntPtr dst, IntPtr other);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Status cairo_region_union_rectangle (IntPtr dst, ref Crow.Rectangle rectangle);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Status cairo_region_xor (IntPtr dst, IntPtr other);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Status cairo_region_xor_rectangle (IntPtr dst, ref Crow.Rectangle rectangle);
-               #endregion
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_rel_curve_to (IntPtr cr, double dx1, double dy1, double dx2, double dy2, double dx3, double dy3);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_rel_line_to (IntPtr cr, double dx, double dy);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_rel_move_to (IntPtr cr, double dx, double dy);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_reset_clip (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_restore (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_rotate (IntPtr cr, double angle);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_save (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_scale (IntPtr cr, double sx, double sy);
-
-               #region ScaledFont
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_scaled_font_create (IntPtr fontFace, Matrix matrix, Matrix ctm, IntPtr options);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_scaled_font_destroy (IntPtr scaled_font);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_scaled_font_extents (IntPtr scaled_font, out FontExtents extents);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_scaled_font_get_ctm (IntPtr scaled_font, out Matrix matrix);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_scaled_font_get_font_face (IntPtr scaled_font);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_scaled_font_get_font_matrix (IntPtr scaled_font, out Matrix matrix);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_scaled_font_get_font_options (IntPtr scaled_font);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern FontType cairo_scaled_font_get_type (IntPtr scaled_font);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_scaled_font_glyph_extents (IntPtr scaled_font, IntPtr glyphs, int num_glyphs, out TextExtents extents);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_scaled_font_reference (IntPtr scaled_font);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Status cairo_scaled_font_status (IntPtr scaled_font);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_set_scaled_font (IntPtr cr, IntPtr scaled_font);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_get_scaled_font (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               public static extern void cairo_scaled_font_text_extents (IntPtr scaled_font, byte[] utf8, out TextExtents extents);
-               #endregion
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_select_font_face (IntPtr cr, string family, FontSlant slant, FontWeight weight);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_set_antialias (IntPtr cr, Antialias antialias);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               public static extern void cairo_set_dash (IntPtr cr, double [] dashes, int ndash, double offset);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_get_dash (IntPtr cr, IntPtr dashes, out double offset);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern int cairo_get_dash_count (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_set_fill_rule (IntPtr cr, Cairo.FillRule fill_rule);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_set_font_face (IntPtr cr, IntPtr fontFace);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               public static extern void cairo_set_font_matrix (IntPtr cr, Matrix matrix);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_set_font_options (IntPtr cr, IntPtr options);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_set_font_size (IntPtr cr, double size);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_set_line_cap (IntPtr cr, LineCap line_cap);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_set_line_join (IntPtr cr, LineJoin line_join);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_set_line_width (IntPtr cr, double width);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_set_matrix (IntPtr cr, Matrix matrix);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_set_miter_limit (IntPtr cr, double limit);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_set_operator (IntPtr cr, Cairo.Operator op);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_set_source (IntPtr cr, IntPtr pattern);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_set_source_rgb (IntPtr cr, double red, double green, double blue);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_set_source_rgba (IntPtr cr, double red, double green, double blue, double alpha);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_set_source_surface (IntPtr cr, IntPtr surface, double x, double y);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_set_tolerance (IntPtr cr, double tolerance);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_show_glyphs (IntPtr ct, IntPtr glyphs, int num_glyphs);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_show_page (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_show_text (IntPtr cr, string str);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Status cairo_status (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_status_to_string (Status status);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_stroke (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_stroke_extents (IntPtr cr, out double x1, out double y1, out double x2, out double y2);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_stroke_preserve (IntPtr cr);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_rectangle_list_destroy (IntPtr rectangle_list);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_copy_clip_rectangle_list (IntPtr cr);
-
-               #region Surface
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_surface_create_similar (IntPtr surface, Cairo.Content content, int width, int height);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_surface_destroy (IntPtr surface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_surface_finish (IntPtr surface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_surface_flush (IntPtr surface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Content cairo_surface_get_content (IntPtr surface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_surface_get_device_offset (IntPtr surface, out double x, out double y);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_surface_get_font_options (IntPtr surface, IntPtr FontOptions);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern uint cairo_surface_get_reference_count (IntPtr surface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern SurfaceType cairo_surface_get_type (IntPtr surface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_surface_mark_dirty (IntPtr surface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_surface_mark_dirty_rectangle (IntPtr surface, int x, int y, int width, int height);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_surface_reference (IntPtr surface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_surface_set_device_offset (IntPtr surface, double x, double y);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_surface_set_fallback_resolution (IntPtr surface, double x, double y);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Status cairo_surface_status (IntPtr surface);
-               #endregion
-
-               #region SVG surface
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_surface_write_to_png (IntPtr surface, string filename);
-
-               //[MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               //public static extern void cairo_surface_write_to_png_stream (IntPtr surface, WriteFunc writeFunc);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_svg_surface_create (string fileName, double width, double height);
-
-               //[MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               //public static extern IntPtr cairo_svg_surface_create_for_stream (double width, double height);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_svg_surface_restrict_to_version (IntPtr surface, SvgVersion version);
-               #endregion
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_text_extents (IntPtr cr, string txt, out TextExtents extents);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               public static extern void cairo_text_path (IntPtr ct, byte[] utf8);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_transform (IntPtr cr, Matrix matrix);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_translate (IntPtr cr, double tx, double ty);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_user_to_device (IntPtr cr, ref double x, ref double y);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_user_to_device_distance (IntPtr cr, ref double dx, ref double dy);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern int cairo_version ();
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_version_string ();
-
-               #region DirectFBSurface
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_directfb_surface_create (IntPtr dfb, IntPtr surface);
-               #endregion
-
-               #region win32 fonts
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_win32_font_face_create_for_logfontw (IntPtr logfontw);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_win32_scaled_font_done_font (IntPtr scaled_font);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern double cairo_win32_scaled_font_get_metrics_factor (IntPtr scaled_font);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Status cairo_win32_scaled_font_select_font (IntPtr scaled_font, IntPtr hdc);
-               #endregion
-
-               #region win32 surface
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_win32_surface_create (IntPtr hdc);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_win32_surface_create_with_ddb (IntPtr hdc, Format format, int width, int height);
-               #endregion
-
-               #region XcbSurface
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_xcb_surface_create (IntPtr connection, uint drawable, IntPtr visual, int width, int height);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_xcb_surface_create_for_bitmap (IntPtr connection, uint bitmap, IntPtr screen, int width, int height);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_xcb_surface_set_size (IntPtr surface, int width, int height);
-               #endregion
-
-               #region XlibSurface
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_xlib_surface_create (IntPtr display, IntPtr drawable, IntPtr visual, int width, int height);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_xlib_surface_create_for_bitmap (IntPtr display, IntPtr bitmap, IntPtr screen, int width, int height);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern int cairo_xlib_surface_get_depth (IntPtr surface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_xlib_surface_get_display (IntPtr surface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_xlib_surface_get_drawable (IntPtr surface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern int cairo_xlib_surface_get_height (IntPtr surface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_xlib_surface_get_screen (IntPtr surface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_xlib_surface_get_visual (IntPtr surface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern int cairo_xlib_surface_get_width (IntPtr surface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_xlib_surface_set_drawable (IntPtr surface, IntPtr drawable, int width, int height);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_xlib_surface_set_size (IntPtr surface, int width, int height);
-               #endregion
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_gl_device_set_thread_aware(IntPtr device, int value);
-
-               #region GLSurface
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_gl_surface_create (IntPtr device, uint content, int width, int height);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_gl_surface_create_for_texture (IntPtr device, uint content, uint tex, int width, int height);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_gl_surface_set_size (IntPtr surface, int width, int height);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern int cairo_gl_surface_get_width (IntPtr surface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern int cairo_gl_surface_get_height (IntPtr surface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_gl_surface_swapbuffers (IntPtr surf);
-               #endregion
-
-               #region GLX Functions
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_glx_device_create (IntPtr dpy, IntPtr gl_ctx);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_glx_device_get_display (IntPtr device);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_glx_device_get_context (IntPtr device);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_gl_surface_create_for_window (IntPtr device, IntPtr window, int width, int height);
-               #endregion
-
-               #region WGL Fucntions
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_wgl_device_create (IntPtr hglrc);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_wgl_device_get_context (IntPtr device);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_gl_surface_create_for_dc (IntPtr device, IntPtr hdc, int width, int height);
-               #endregion
-
-               #region EGL Functions
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_egl_device_create (IntPtr dpy, IntPtr gl_ctx);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_gl_surface_create_for_egl (IntPtr device, IntPtr eglSurface, int width, int height);
-               #endregion
-
-               #region DRM Functions
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_drm_device_get (IntPtr udev_device);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_drm_device_get_for_fd (int fd);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_drm_device_default ();
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern int cairo_drm_device_get_fd (IntPtr cairo_device);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern  void cairo_drm_device_throttle (IntPtr cairo_device);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_drm_surface_create (IntPtr cairo_device, Format format,       int width, int height);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_drm_surface_create_for_name (IntPtr cairo_device, uint name, Format format,   int width, int height, int stride);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_drm_surface_create_from_cacheable_image (IntPtr cairo_device, IntPtr imageSurface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Status cairo_drm_surface_enable_scan_out (IntPtr drmSurface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_drm_surface_get_handle (IntPtr drmSurface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_drm_surface_get_name (IntPtr drmSurface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Format cairo_drm_surface_get_format (IntPtr drmSurface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern int cairo_drm_surface_get_width (IntPtr drmSurface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern int cairo_drm_surface_get_height (IntPtr drmSurface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern int cairo_drm_surface_get_stride (IntPtr drmSurface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_drm_surface_map_to_image (IntPtr drmSurface);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void       cairo_drm_surface_unmap (IntPtr drmSurface,     IntPtr imageSurface);
-               #endregion
-
-               #region Device
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Status cairo_device_acquire(IntPtr device);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_device_destroy (IntPtr device);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern IntPtr cairo_device_reference (IntPtr device);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void cairo_device_release(IntPtr device);
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern Status cairo_device_status(IntPtr device);
-               #endregion
-
-
-
-               [MethodImplAttribute(MethodImplOptions.InternalCall)][System.Security.SecuritySafeCriticalAttribute]
-               public static extern void crow_cairo_region_clear(IntPtr ctx, IntPtr reg);
-
-       }
-}
\ No newline at end of file
diff --git a/Crow/src/Mono.Cairo/NativeMethods.cs b/Crow/src/Mono.Cairo/NativeMethods.cs
deleted file mode 100644 (file)
index 4f93c41..0000000
+++ /dev/null
@@ -1,1071 +0,0 @@
-//
-// Cairo.cs - a simplistic binding of the Cairo API to C#.
-//
-// Authors: Duncan Mak (duncan@ximian.com)
-//          Hisham Mardam Bey (hisham.mardambey@gmail.com)
-//          John Luke (john.luke@gmail.com)
-//          Alp Toker (alp@atoker.com)
-//
-// (C) Ximian, Inc. 2003
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-// Copyright (C) 2005 John Luke
-// Copyright (C) 2006 Alp Toker
-//
-// 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 Crow.Cairo
-{
-       // sort the functions like in the following page so it is easier to find what is missing
-       // http://cairographics.org/manual/index-all.html
-
-       internal static class NativeMethods
-       {
-#if MONOTOUCH
-               const string cairo = "__Internal";
-#else
-       const string cairo = "cairo";
-#endif
-
-        //[DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-        //internal static extern void cairo_append_path (IntPtr cr, Path path);
-
-        [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_arc (IntPtr cr, double xc, double yc, double radius, double angle1, double angle2);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_arc_negative (IntPtr cr, double xc, double yc, double radius, double angle1, double angle2);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_atsui_font_face_create_for_atsu_font_id (IntPtr font_id);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_clip (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_clip_preserve (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_clip_extents (IntPtr cr, out double x1, out double y1, out double x2, out double y2);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_close_path (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_copy_page (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_copy_path (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_copy_path_flat (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_append_path (IntPtr cr, IntPtr path);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_create (IntPtr target);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_curve_to (IntPtr cr, double x1, double y1, double x2, double y2, double x3, double y3);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_debug_reset_static_data ();
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_destroy (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_device_to_user (IntPtr cr, ref double x, ref double y);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_device_to_user_distance (IntPtr cr, ref double dx, ref double dy);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_fill (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_fill_extents (IntPtr cr, out double x1, out double y1, out double x2, out double y2);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_fill_preserve (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_font_extents (IntPtr cr, out FontExtents extents);
-
-               #region FontFace
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_font_face_destroy (IntPtr font_face);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern FontType cairo_font_face_get_type (IntPtr font_face);
-
-               //[DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               //internal static extern void cairo_font_face_get_user_data (IntPtr font_face);
-
-               //[DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               //internal static extern void cairo_font_face_set_user_data (IntPtr font_face);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_font_face_reference (IntPtr font_face);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_font_face_status (IntPtr font_face);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern uint cairo_font_face_get_reference_count (IntPtr surface);
-               #endregion
-
-               #region FontOptions
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_font_options_copy (IntPtr original);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_font_options_create ();
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_font_options_destroy (IntPtr options);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               [return: MarshalAs (UnmanagedType.U1)]
-               internal static extern bool cairo_font_options_equal (IntPtr options, IntPtr other);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Antialias cairo_font_options_get_antialias (IntPtr options);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern HintMetrics cairo_font_options_get_hint_metrics (IntPtr options);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern HintStyle cairo_font_options_get_hint_style (IntPtr options);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern SubpixelOrder cairo_font_options_get_subpixel_order (IntPtr options);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern long cairo_font_options_hash (IntPtr options);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_font_options_merge (IntPtr options, IntPtr other);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_font_options_set_antialias (IntPtr options, Antialias aa);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_font_options_set_hint_metrics (IntPtr options, HintMetrics metrics);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_font_options_set_hint_style (IntPtr options, HintStyle style);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_font_options_set_subpixel_order (IntPtr options, SubpixelOrder order);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_font_options_status (IntPtr options);
-               #endregion
-
-               #region Freetype / FontConfig
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_ft_font_face_create_for_ft_face (IntPtr face, int load_flags);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_ft_font_face_create_for_pattern (IntPtr fc_pattern);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_ft_font_options_substitute (FontOptions options, IntPtr pattern);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_ft_scaled_font_lock_face (IntPtr scaled_font);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_ft_scaled_font_unlock_face (IntPtr scaled_font);
-               #endregion
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Antialias cairo_get_antialias (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_get_current_point (IntPtr cr, out double x, out double y);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern FillRule cairo_get_fill_rule (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_get_font_face (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_get_font_matrix (IntPtr cr, out Matrix matrix);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_get_font_options (IntPtr cr, IntPtr options);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_get_group_target (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern LineCap cairo_get_line_cap (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern LineJoin cairo_get_line_join (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern double cairo_get_line_width (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_get_matrix (IntPtr cr, Matrix matrix);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern double cairo_get_miter_limit (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Operator cairo_get_operator (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern uint cairo_get_reference_count (IntPtr surface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_get_source (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_get_target (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern double cairo_get_tolerance (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_glitz_surface_create (IntPtr surface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_glyph_extents (IntPtr cr, IntPtr glyphs, int num_glyphs, out TextExtents extents);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_glyph_path (IntPtr cr, IntPtr glyphs, int num_glyphs);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               [return: MarshalAs (UnmanagedType.U1)]
-               internal static extern bool cairo_has_current_point (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_identity_matrix (IntPtr cr);
-
-               #region Image Surface
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_image_surface_create (Cairo.Format format, int width, int height);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_image_surface_create_for_data (byte[] data, Cairo.Format format, int width, int height, int stride);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_image_surface_create_for_data (IntPtr data, Cairo.Format format, int width, int height, int stride);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_image_surface_create_from_png  (string filename);
-
-               //[DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               //internal static extern IntPtr cairo_image_surface_create_from_png_stream  (string filename);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_image_surface_get_data (IntPtr surface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Format cairo_image_surface_get_format (IntPtr surface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern int cairo_image_surface_get_height (IntPtr surface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern int cairo_image_surface_get_stride (IntPtr surface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern int cairo_image_surface_get_width  (IntPtr surface);
-               #endregion
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               [return: MarshalAs (UnmanagedType.U1)]
-               internal static extern bool cairo_in_clip (IntPtr cr, double x, double y);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               [return: MarshalAs (UnmanagedType.U1)]
-               internal static extern bool cairo_in_fill (IntPtr cr, double x, double y);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               [return: MarshalAs (UnmanagedType.U1)]
-               internal static extern bool cairo_in_stroke (IntPtr cr, double x, double y);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_line_to (IntPtr cr, double x, double y);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_mask (IntPtr cr, IntPtr pattern);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_mask_surface (IntPtr cr, IntPtr surface, double x, double y);
-
-               #region Matrix
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_matrix_init (Matrix matrix, double xx, double yx, double xy, double yy, double x0, double y0);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_matrix_init_identity (Matrix matrix);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_matrix_init_rotate (Matrix matrix, double radians);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_matrix_init_scale (Matrix matrix, double sx, double sy);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_matrix_init_translate (Matrix matrix, double tx, double ty);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_matrix_invert (Matrix matrix);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_matrix_multiply (Matrix result, Matrix a, Matrix b);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_matrix_scale (Matrix matrix, double sx, double sy);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_matrix_rotate (Matrix matrix, double radians);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_matrix_transform_distance (Matrix matrix, ref double dx, ref double dy);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_matrix_transform_point (Matrix matrix, ref double x, ref double y);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_matrix_translate (Matrix matrix, double tx, double ty);
-               #endregion
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_move_to (IntPtr cr, double x, double y);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_new_path (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_new_sub_path (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_paint (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_paint_with_alpha (IntPtr cr, double alpha);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_path_destroy (IntPtr path);
-
-               #region Pattern
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_pattern_add_color_stop_rgb (IntPtr pattern, double offset, double red, double green, double blue);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_pattern_add_color_stop_rgba (IntPtr pattern, double offset, double red, double green, double blue, double alpha);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_pattern_get_color_stop_count (IntPtr pattern, out int count);
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_pattern_get_color_stop_rgba (IntPtr pattern, int index, out double offset, out double red, out double green, out double blue, out double alpha);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_pattern_create_for_surface (IntPtr surface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_pattern_get_surface (IntPtr pattern, out IntPtr surface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_pattern_create_linear (double x0, double y0, double x1, double y1);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_pattern_get_linear_points (IntPtr pattern, out double x0, out double y0, out double x1, out double y1);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_pattern_create_radial (double cx0, double cy0, double radius0, double cx1, double cy1, double radius1);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_pattern_get_radial_circles (IntPtr pattern, out double x0, out double y0, out double r0, out double x1, out double y1, out double r1);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_pattern_create_rgb (double r, double g, double b);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_pattern_create_rgba (double r, double g, double b, double a);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_pattern_get_rgba (IntPtr pattern, out double red, out double green, out double blue, out double alpha);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_pattern_destroy (IntPtr pattern);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Extend cairo_pattern_get_extend (IntPtr pattern);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Filter cairo_pattern_get_filter (IntPtr pattern);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_pattern_get_matrix (IntPtr pattern, Matrix matrix);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern PatternType cairo_pattern_get_type (IntPtr pattern);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_pattern_reference (IntPtr pattern);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_pattern_set_extend (IntPtr pattern, Extend extend);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_pattern_set_filter (IntPtr pattern, Filter filter);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_pattern_set_matrix (IntPtr pattern, Matrix matrix);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_pattern_status (IntPtr pattern);
-
-               //mesh pattern
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_pattern_create_mesh ();
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_mesh_pattern_begin_patch (IntPtr pattern);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_mesh_pattern_end_patch (IntPtr pattern);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_mesh_pattern_move_to (IntPtr pattern, double x, double y);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_mesh_pattern_line_to (IntPtr pattern, double x, double y);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_mesh_pattern_curve_to (IntPtr pattern, double x1, double y1,
-                       double x2, double y2, double x3, double y3);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_mesh_pattern_set_control_point (IntPtr pattern, uint point_num, double x, double y);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_mesh_pattern_set_corner_color_rgb (IntPtr pattern, uint corner_num,
-                       double r, double g, double b);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_mesh_pattern_set_corner_color_rgba (IntPtr pattern, uint corner_num,
-                       double r, double g, double b, double a);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_mesh_pattern_get_patch_count (IntPtr pattern, out uint count);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_mesh_pattern_get_path (IntPtr pattern, uint patch_num);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_mesh_pattern_get_control_point (IntPtr pattern,
-                       uint patch_num, uint point_num, out double x, out double y);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_mesh_pattern_get_corner_color_rgba (IntPtr pattern,
-                       uint patch_num, uint point_num, out double r, out double g, out double b, out double a);
-               #endregion
-
-               #region PdfSurface
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_pdf_surface_create (string filename, double width, double height);
-
-               //[DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               //internal static extern IntPtr cairo_pdf_surface_create_for_stream (string filename, double width, double height);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_pdf_surface_set_size (IntPtr surface, double x, double y);
-               #endregion
-
-               #region PostscriptSurface
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_ps_surface_create (string filename, double width, double height);
-
-               //[DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               //internal static extern IntPtr cairo_ps_surface_create_for_stream (string filename, double width, double height);
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_ps_surface_dsc_begin_page_setup (IntPtr surface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_ps_surface_dsc_begin_setup (IntPtr surface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_ps_surface_dsc_comment (IntPtr surface, string comment);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_ps_surface_set_size (IntPtr surface, double x, double y);
-               #endregion
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_pop_group (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_pop_group_to_source (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_push_group (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_push_group_with_content (IntPtr cr, Content content);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_quartz_surface_create (IntPtr context, bool flipped, int width, int height);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_rectangle (IntPtr cr, double x, double y, double width, double height);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_reference (IntPtr cr);
-
-               #region Regions
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern bool cairo_region_contains_point (IntPtr region, int x, int y);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern RegionOverlap cairo_region_contains_rectangle (IntPtr region, ref Crow.Rectangle rectangle);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_region_copy (IntPtr original);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_region_create ();
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_region_create_rectangle (ref Crow.Rectangle rect);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_region_create_rectangles (IntPtr rects, int count);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_region_destroy (IntPtr region);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern bool cairo_region_equal (IntPtr a, IntPtr b);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_region_get_extents (IntPtr region, out Crow.Rectangle extents);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_region_get_rectangle (IntPtr region, int nth, out Crow.Rectangle rectangle);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_region_intersect (IntPtr dst, IntPtr other);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_region_intersect_rectangle (IntPtr dst, ref Crow.Rectangle rectangle);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern bool cairo_region_is_empty (IntPtr region);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern int cairo_region_num_rectangles (IntPtr region);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_region_reference (IntPtr region);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_region_status (IntPtr region);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_region_subtract (IntPtr dst, IntPtr other);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_region_subtract_rectangle (IntPtr dst, ref Crow.Rectangle rectangle);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_region_translate (IntPtr region, int dx, int dy);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_region_union (IntPtr dst, IntPtr other);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_region_union_rectangle (IntPtr dst, ref Crow.Rectangle rectangle);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_region_xor (IntPtr dst, IntPtr other);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_region_xor_rectangle (IntPtr dst, ref Crow.Rectangle rectangle);
-               #endregion
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_rel_curve_to (IntPtr cr, double dx1, double dy1, double dx2, double dy2, double dx3, double dy3);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_rel_line_to (IntPtr cr, double dx, double dy);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_rel_move_to (IntPtr cr, double dx, double dy);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_reset_clip (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_restore (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_rotate (IntPtr cr, double angle);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_save (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_scale (IntPtr cr, double sx, double sy);
-
-               #region ScaledFont
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_scaled_font_create (IntPtr fontFace, Matrix matrix, Matrix ctm, IntPtr options);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_scaled_font_destroy (IntPtr scaled_font);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_scaled_font_extents (IntPtr scaled_font, out FontExtents extents);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_scaled_font_get_ctm (IntPtr scaled_font, out Matrix matrix);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_scaled_font_get_font_face (IntPtr scaled_font);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_scaled_font_get_font_matrix (IntPtr scaled_font, out Matrix matrix);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_scaled_font_get_font_options (IntPtr scaled_font);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern FontType cairo_scaled_font_get_type (IntPtr scaled_font);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_scaled_font_glyph_extents (IntPtr scaled_font, IntPtr glyphs, int num_glyphs, out TextExtents extents);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_scaled_font_reference (IntPtr scaled_font);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_scaled_font_status (IntPtr scaled_font);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_set_scaled_font (IntPtr cr, IntPtr scaled_font);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_get_scaled_font (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_scaled_font_text_extents (IntPtr scaled_font, byte[] utf8, out TextExtents extents);
-               #endregion
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_select_font_face (IntPtr cr, string family, FontSlant slant, FontWeight weight);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_set_antialias (IntPtr cr, Antialias antialias);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_set_dash (IntPtr cr, double [] dashes, int ndash, double offset);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_get_dash (IntPtr cr, IntPtr dashes, out double offset);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern int cairo_get_dash_count (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_set_fill_rule (IntPtr cr, Cairo.FillRule fill_rule);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_set_font_face (IntPtr cr, IntPtr fontFace);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_set_font_matrix (IntPtr cr, Matrix matrix);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_set_font_options (IntPtr cr, IntPtr options);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_set_font_size (IntPtr cr, double size);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_set_line_cap (IntPtr cr, LineCap line_cap);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_set_line_join (IntPtr cr, LineJoin line_join);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_set_line_width (IntPtr cr, double width);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_set_matrix (IntPtr cr, Matrix matrix);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_set_miter_limit (IntPtr cr, double limit);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_set_operator (IntPtr cr, Cairo.Operator op);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_set_source (IntPtr cr, IntPtr pattern);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_set_source_rgb (IntPtr cr, double red, double green, double blue);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_set_source_rgba (IntPtr cr, double red, double green, double blue, double alpha);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_set_source_surface (IntPtr cr, IntPtr surface, double x, double y);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_set_tolerance (IntPtr cr, double tolerance);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_show_glyphs (IntPtr ct, IntPtr glyphs, int num_glyphs);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_show_page (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_status (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_status_to_string (Status status);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_stroke (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_stroke_extents (IntPtr cr, out double x1, out double y1, out double x2, out double y2);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_stroke_preserve (IntPtr cr);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_rectangle_list_destroy (IntPtr rectangle_list);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_copy_clip_rectangle_list (IntPtr cr);
-
-               #region Surface
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_surface_create_similar (IntPtr surface, Cairo.Content content, int width, int height);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_surface_destroy (IntPtr surface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_surface_finish (IntPtr surface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_surface_flush (IntPtr surface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Content cairo_surface_get_content (IntPtr surface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_surface_get_device_offset (IntPtr surface, out double x, out double y);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_surface_get_font_options (IntPtr surface, IntPtr FontOptions);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern uint cairo_surface_get_reference_count (IntPtr surface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern SurfaceType cairo_surface_get_type (IntPtr surface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_surface_mark_dirty (IntPtr surface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_surface_mark_dirty_rectangle (IntPtr surface, int x, int y, int width, int height);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_surface_reference (IntPtr surface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_surface_set_device_offset (IntPtr surface, double x, double y);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_surface_set_fallback_resolution (IntPtr surface, double x, double y);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_surface_status (IntPtr surface);
-               #endregion
-
-               #region SVG surface
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_surface_write_to_png (IntPtr surface, string filename);
-
-               //[DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               //internal static extern void cairo_surface_write_to_png_stream (IntPtr surface, WriteFunc writeFunc);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_svg_surface_create (string fileName, double width, double height);
-
-               //[DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               //internal static extern IntPtr cairo_svg_surface_create_for_stream (double width, double height);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_svg_surface_restrict_to_version (IntPtr surface, SvgVersion version);
-               #endregion
-
-               [DllImport (cairo, CallingConvention = CallingConvention.Cdecl)]
-               internal static extern void cairo_show_text (IntPtr cr, byte[] text);
-
-               [DllImport (cairo, CallingConvention = CallingConvention.Cdecl)]
-               internal static extern void cairo_text_extents (IntPtr cr, byte[] utf8, out TextExtents extents);
-
-               [DllImport (cairo, CallingConvention = CallingConvention.Cdecl)]
-               internal static extern void cairo_show_text (IntPtr cr, ref byte utf8);
-
-               [DllImport (cairo, CallingConvention = CallingConvention.Cdecl)]
-               internal static extern void cairo_text_extents (IntPtr cr, ref byte utf8, out TextExtents extents);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_text_path (IntPtr ct, byte[] utf8);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_transform (IntPtr cr, Matrix matrix);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_translate (IntPtr cr, double tx, double ty);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_user_to_device (IntPtr cr, ref double x, ref double y);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_user_to_device_distance (IntPtr cr, ref double dx, ref double dy);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern int cairo_version ();
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_version_string ();
-
-               #region DirectFBSurface
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_directfb_surface_create (IntPtr dfb, IntPtr surface);
-               #endregion
-
-               #region win32 fonts
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_win32_font_face_create_for_logfontw (IntPtr logfontw);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_win32_scaled_font_done_font (IntPtr scaled_font);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern double cairo_win32_scaled_font_get_metrics_factor (IntPtr scaled_font);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_win32_scaled_font_select_font (IntPtr scaled_font, IntPtr hdc);
-               #endregion
-
-               #region win32 surface
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_win32_surface_create (IntPtr hdc);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_win32_surface_create_with_ddb (IntPtr hdc, Format format, int width, int height);
-               #endregion
-
-               #region XcbSurface
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_xcb_surface_create (IntPtr connection, uint drawable, IntPtr visual, int width, int height);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_xcb_surface_create_for_bitmap (IntPtr connection, uint bitmap, IntPtr screen, int width, int height);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_xcb_surface_set_size (IntPtr surface, int width, int height);
-               #endregion
-
-               #region XlibSurface
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_xlib_surface_create (IntPtr display, IntPtr drawable, IntPtr visual, int width, int height);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_xlib_surface_create_for_bitmap (IntPtr display, IntPtr bitmap, IntPtr screen, int width, int height);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern int cairo_xlib_surface_get_depth (IntPtr surface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_xlib_surface_get_display (IntPtr surface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_xlib_surface_get_drawable (IntPtr surface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern int cairo_xlib_surface_get_height (IntPtr surface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_xlib_surface_get_screen (IntPtr surface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_xlib_surface_get_visual (IntPtr surface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern int cairo_xlib_surface_get_width (IntPtr surface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_xlib_surface_set_drawable (IntPtr surface, IntPtr drawable, int width, int height);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_xlib_surface_set_size (IntPtr surface, int width, int height);
-               #endregion
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_gl_device_set_thread_aware(IntPtr device, int value);
-
-               #region GLSurface
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_gl_surface_create (IntPtr device, uint content, int width, int height);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_gl_surface_create_for_texture (IntPtr device, uint content, uint tex, int width, int height);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_gl_surface_set_size (IntPtr surface, int width, int height);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern int cairo_gl_surface_get_width (IntPtr surface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern int cairo_gl_surface_get_height (IntPtr surface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_gl_surface_swapbuffers (IntPtr surf);
-               #endregion
-
-               #region GLX Functions
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_glx_device_create (IntPtr dpy, IntPtr gl_ctx);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_glx_device_get_display (IntPtr device);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_glx_device_get_context (IntPtr device);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_gl_surface_create_for_window (IntPtr device, IntPtr window, int width, int height);
-               #endregion
-
-               #region WGL Fucntions
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_wgl_device_create (IntPtr hglrc);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_wgl_device_get_context (IntPtr device);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_gl_surface_create_for_dc (IntPtr device, IntPtr hdc, int width, int height);
-               #endregion
-
-               #region EGL Functions
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_egl_device_create (IntPtr dpy, IntPtr gl_ctx);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_gl_surface_create_for_egl (IntPtr device, IntPtr eglSurface, int width, int height);
-               #endregion
-
-               #region DRM Functions
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_drm_device_get (IntPtr udev_device);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_drm_device_get_for_fd (int fd);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_drm_device_default ();
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern int cairo_drm_device_get_fd (IntPtr cairo_device);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern  void cairo_drm_device_throttle (IntPtr cairo_device);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_drm_surface_create (IntPtr cairo_device, Format format,     int width, int height);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_drm_surface_create_for_name (IntPtr cairo_device, uint name, Format format, int width, int height, int stride);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_drm_surface_create_from_cacheable_image (IntPtr cairo_device, IntPtr imageSurface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_drm_surface_enable_scan_out (IntPtr drmSurface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_drm_surface_get_handle (IntPtr drmSurface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_drm_surface_get_name (IntPtr drmSurface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Format cairo_drm_surface_get_format (IntPtr drmSurface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern int cairo_drm_surface_get_width (IntPtr drmSurface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern int cairo_drm_surface_get_height (IntPtr drmSurface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern int cairo_drm_surface_get_stride (IntPtr drmSurface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_drm_surface_map_to_image (IntPtr drmSurface);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void     cairo_drm_surface_unmap (IntPtr drmSurface,     IntPtr imageSurface);
-               #endregion
-
-               #region Device
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_device_acquire(IntPtr device);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_device_destroy (IntPtr device);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern IntPtr cairo_device_reference (IntPtr device);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_device_release(IntPtr device);
-
-               [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern Status cairo_device_status(IntPtr device);
-               #endregion
-       }
-}
\ No newline at end of file
diff --git a/Crow/src/Mono.Cairo/Operator.cs b/Crow/src/Mono.Cairo/Operator.cs
deleted file mode 100644 (file)
index 1c11ccc..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-//
-// Mono.Cairo.Operator.cs
-//
-// Authors: Duncan Mak (duncan@ximian.com)
-//          Hisham Mardam Bey (hisham.mardambey@gmail.com)
-//          John Luke (john.luke@gmail.com)
-//
-// (C) Ximian, Inc. 2003
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-// Copyright (C) 2005 John Luke
-//
-// 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;
-
-namespace Crow.Cairo
-{
-       
-       public enum Operator
-       {
-               Clear,
-               Source,
-               Over,
-               In,
-               Out,
-               Atop,
-
-               Dest,
-               DestOver,
-               DestIn,
-               DestOut,
-               DestAtop,
-               
-               Xor,
-               Add,
-               Saturate,
-               Multiply,
-               Screen,
-               Overlay,
-               Darken,
-               Lighten,
-
-       }
-}
diff --git a/Crow/src/Mono.Cairo/PSSurface.cs b/Crow/src/Mono.Cairo/PSSurface.cs
deleted file mode 100644 (file)
index cf90794..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-//
-// Mono.Cairo.PostscriptSurface.cs
-//
-// Authors:
-//    John Luke
-//
-// (C) John Luke, 2006.
-//
-// 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;
-
-namespace Crow.Cairo {
-
-       public class PSSurface : Surface
-       {
-               internal PSSurface (IntPtr handle, bool owns) : base (handle, owns)
-               {
-               }
-
-               public PSSurface (string filename, double width, double height)
-                       : base (NativeMethods.cairo_ps_surface_create (filename, width, height), true)
-               {
-               }
-
-               public void BeginPageSetup ()
-               {
-                       NativeMethods.cairo_ps_surface_dsc_begin_page_setup (Handle);
-               }
-
-               public void BeginSetup ()
-               {
-                       NativeMethods.cairo_ps_surface_dsc_begin_setup (Handle);
-               }
-
-               public void DscComment (string comment)
-               {
-                       NativeMethods.cairo_ps_surface_dsc_comment (Handle, comment);
-               }
-
-               public void SetSize (double width, double height)
-               {
-                       NativeMethods.cairo_ps_surface_set_size (Handle, width, height);
-               }
-       }
-}
diff --git a/Crow/src/Mono.Cairo/Path.cs b/Crow/src/Mono.Cairo/Path.cs
deleted file mode 100644 (file)
index a55f03b..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-//
-// Mono.Cairo.Context.cs
-//
-// Author:
-//   Miguel de Icaza (miguel@novell.com)
-//
-// This is an OO wrapper API for the Cairo API.
-//
-// Copyright 2007 Novell, Inc (http://www.novell.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;
-using Crow.Cairo;
-
-namespace Crow.Cairo {
-
-       public class Path : IDisposable
-       {
-               IntPtr handle = IntPtr.Zero;
-
-               internal Path (IntPtr handle)
-               {
-                       this.handle = handle;
-                       if (CairoDebug.Enabled)
-                               CairoDebug.OnAllocated (handle);
-               }
-
-               ~Path ()
-               {
-                       Dispose (false);
-               }
-
-               public IntPtr Handle { get { return handle; } }
-
-               public void Dispose ()
-               {
-                       Dispose (true);
-                       GC.SuppressFinalize (this);
-               }
-
-               protected virtual void Dispose (bool disposing)
-               {
-                       if (!disposing || CairoDebug.Enabled)
-                               CairoDebug.OnDisposed<Path> (handle, disposing);
-
-                       if (!disposing|| handle == IntPtr.Zero)
-                               return;
-
-                       NativeMethods.cairo_path_destroy (handle);
-                       handle = IntPtr.Zero;
-               }
-       }
-}
diff --git a/Crow/src/Mono.Cairo/Pattern.cs b/Crow/src/Mono.Cairo/Pattern.cs
deleted file mode 100644 (file)
index 3e933a1..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-//
-// Mono.Cairo.Pattern.cs
-//
-// Author: Jordi Mas (jordi@ximian.com)
-//         Hisham Mardam Bey (hisham.mardambey@gmail.com)
-// (C) Ximian Inc, 2004.
-//
-// Copyright (C) 2004 Novell, Inc (http://www.novell.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.Collections;
-
-namespace Crow.Cairo {
-   
-       public class Pattern : IDisposable
-       {
-               [Obsolete]
-               protected IntPtr pattern = IntPtr.Zero;
-
-               public static Pattern Lookup (IntPtr pattern, bool owner)
-               {
-                       if (pattern == IntPtr.Zero)
-                               return null;
-                       
-                       PatternType pt = NativeMethods.cairo_pattern_get_type (pattern);
-                       switch (pt) {
-                       case PatternType.Solid:
-                               return new SolidPattern (pattern, owner);
-                       case PatternType.Surface:
-                               return new SurfacePattern (pattern, owner);
-                       case PatternType.Linear:
-                               return new LinearGradient (pattern, owner);
-                       case PatternType.Radial:
-                               return new RadialGradient (pattern, owner);
-                       default:
-                               return new Pattern (pattern, owner);
-                       }
-               }
-
-               [Obsolete]
-               protected Pattern ()
-               {
-               }
-               
-               internal Pattern (IntPtr handle, bool owned)
-               {
-                       Handle = handle;
-                       if (!owned)
-                               NativeMethods.cairo_pattern_reference (handle);
-                       if (CairoDebug.Enabled)
-                               CairoDebug.OnAllocated (handle);
-               }
-
-               ~Pattern ()
-               {
-                       Dispose (false);
-               }
-               
-               [Obsolete ("Use the SurfacePattern constructor")]
-               public Pattern (Surface surface)
-                       : this ( NativeMethods.cairo_pattern_create_for_surface (surface.Handle), true)
-               {
-               }
-               
-               [Obsolete]
-               protected void Reference ()
-               {
-                       NativeMethods.cairo_pattern_reference (pattern);
-               }
-
-               public void Dispose ()
-               {
-                       Dispose (true);
-                       GC.SuppressFinalize (this);
-               }
-
-               protected virtual void Dispose (bool disposing)
-               {
-                       if (!disposing || CairoDebug.Enabled)
-                               CairoDebug.OnDisposed<Pattern> (Handle, disposing);
-
-                       if (!disposing|| Handle == IntPtr.Zero)
-                               return;
-
-                       NativeMethods.cairo_pattern_destroy (Handle);
-                       Handle = IntPtr.Zero;
-               }
-
-               [Obsolete ("Use Dispose()")]
-               public void Destroy ()
-               {
-                       Dispose ();
-               }
-
-               public Status Status
-               {
-                       get { return NativeMethods.cairo_pattern_status (Handle); }
-               }
-
-               public Extend Extend
-               {
-                       get { return NativeMethods.cairo_pattern_get_extend (Handle); }
-                       set { NativeMethods.cairo_pattern_set_extend (Handle, value); }
-               }
-
-               public Matrix Matrix {
-                       set {
-                               NativeMethods.cairo_pattern_set_matrix (Handle, value);
-                       }
-
-                       get {
-                               Matrix m = new Matrix ();
-                               NativeMethods.cairo_pattern_get_matrix (Handle, m);
-                               return m;
-                       }
-               }
-
-#pragma warning disable 612
-               public IntPtr Handle {
-                       get { return pattern; }
-                       private set { pattern = value; }
-               }
-#pragma warning restore 612
-
-               [Obsolete]
-               public IntPtr Pointer {
-                       get { return pattern; }
-               }
-
-               public PatternType PatternType {
-                       get { return NativeMethods.cairo_pattern_get_type (Handle); }
-               }
-       }
-}
-
diff --git a/Crow/src/Mono.Cairo/PatternType.cs b/Crow/src/Mono.Cairo/PatternType.cs
deleted file mode 100644 (file)
index deac3ab..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-//
-// Mono.Cairo.PatternType.cs
-//
-// Authors:
-//    John Luke
-//
-// (C) John Luke, 2006.
-//
-// 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;
-
-namespace Crow.Cairo {
-
-       
-       public enum PatternType
-       {
-               Solid,
-               Surface,
-               Linear,
-               Radial,
-               Mesh,
-               RasterSource
-       }
-}
-
diff --git a/Crow/src/Mono.Cairo/PdfSurface.cs b/Crow/src/Mono.Cairo/PdfSurface.cs
deleted file mode 100644 (file)
index 09a2d12..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-//
-// Mono.Cairo.PdfSurface.cs
-//
-// Authors:
-//    John Luke
-//
-// (C) John Luke, 2006.
-//
-// 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;
-
-namespace Crow.Cairo {
-
-       public class PdfSurface : Surface
-       {
-               internal PdfSurface (IntPtr handle, bool owns) : base (handle, owns)
-               {
-               }
-
-               public PdfSurface (string filename, double width, double height)
-                       : base (NativeMethods.cairo_pdf_surface_create (filename, width, height), true)
-               {
-               }
-
-               public void SetSize (double width, double height)
-               {
-                       NativeMethods.cairo_pdf_surface_set_size (Handle, width, height);
-               }
-       }
-}
-
diff --git a/Crow/src/Mono.Cairo/RadialGradient.cs b/Crow/src/Mono.Cairo/RadialGradient.cs
deleted file mode 100644 (file)
index 6abe267..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-//
-// Mono.Cairo.Pattern.cs
-//
-// Author: Jordi Mas (jordi@ximian.com)
-//         Hisham Mardam Bey (hisham.mardambey@gmail.com)
-// (C) Ximian Inc, 2004.
-//
-// Copyright (C) 2004 Novell, Inc (http://www.novell.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;
-
-namespace Crow.Cairo {
-
-       public class RadialGradient : Gradient
-       {
-               internal RadialGradient (IntPtr handle, bool owned) : base (handle, owned)
-               {
-               }
-
-               public RadialGradient (double cx0, double cy0, double radius0, double cx1, double cy1, double radius1)
-                       : base (NativeMethods.cairo_pattern_create_radial (cx0, cy0, radius0, cx1, cy1, radius1), true)
-               {
-               }
-       }
-}
-
diff --git a/Crow/src/Mono.Cairo/Region.cs b/Crow/src/Mono.Cairo/Region.cs
deleted file mode 100644 (file)
index f2c111d..0000000
+++ /dev/null
@@ -1,202 +0,0 @@
-// Copyright (C) 2011 Novell, Inc (http://www.novell.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 Crow.Cairo
-{
-       [StructLayout(LayoutKind.Sequential)]
-       public struct RectangleList {
-               public Status Status;
-               public IntPtr Rectangles;
-               public int NumRectangles;
-       }
-
-       public enum RegionOverlap {
-               In,
-               Out,
-               Part,
-       }
-
-       public class Region : IDisposable {
-
-               IntPtr handle;
-               public IntPtr Handle {
-                       get { return handle; }
-               }
-
-               [Obsolete]
-               public Region (IntPtr handle) : this (handle, false) {}
-
-               public Region (IntPtr handle, bool owned)
-               {
-                       this.handle = handle;
-                       if (!owned)
-                               NativeMethods.cairo_region_reference (handle);
-                       if (CairoDebug.Enabled)
-                               CairoDebug.OnAllocated (handle);
-               }
-
-               public Region () : this (NativeMethods.cairo_region_create () , true)
-               {
-               }
-
-               public Region (Crow.Rectangle rect)
-               {
-                       handle = NativeMethods.cairo_region_create_rectangle (ref rect);
-               }
-
-               public Region (RectangleList rects)
-               {
-                       handle = NativeMethods.cairo_region_create_rectangles (rects.Rectangles, rects.NumRectangles);
-               }
-
-               public Region Copy ()
-               {
-                       return new Region (NativeMethods.cairo_region_copy (Handle), true);
-               }
-
-               #region IDisposable
-               ~Region ()
-               {
-                       Dispose (false);
-               }
-
-               public void Dispose ()
-               {
-                       Dispose (true);
-                       GC.SuppressFinalize (this);
-               }
-
-               protected virtual void Dispose (bool disposing)
-               {
-                       if (!disposing || CairoDebug.Enabled)
-                               CairoDebug.OnDisposed<Region> (handle, disposing);
-
-                       if (!disposing|| handle == IntPtr.Zero)
-                               return;
-
-                       NativeMethods.cairo_region_destroy (Handle);
-                       handle = IntPtr.Zero;
-               }
-               #endregion
-
-               public override bool Equals (object obj)
-               {
-                       return (obj is Region) && NativeMethods.cairo_region_equal (Handle, (obj as Region).Handle);
-               }
-
-               public override int GetHashCode ()
-               {
-                       return Handle.GetHashCode ();
-               }
-
-               public Status Status {
-                       get { return NativeMethods.cairo_region_status (Handle); }
-               }
-
-               public Crow.Rectangle Extents {
-                       get {
-                               Crow.Rectangle result;
-                               NativeMethods.cairo_region_get_extents (Handle, out result);
-                               return result;
-                       }
-               }
-
-               public int NumRectangles {
-                       get { return NativeMethods.cairo_region_num_rectangles (Handle); }
-               }
-
-               public Crow.Rectangle GetRectangle (int nth)
-               {
-                       Crow.Rectangle val;
-                       NativeMethods.cairo_region_get_rectangle (Handle, nth, out val);
-                       return val;
-               }
-
-               public bool IsEmpty {
-                       get { return NativeMethods.cairo_region_is_empty (Handle); }
-               }
-
-               public RegionOverlap Contains (Crow.Rectangle rectangle)
-               {
-                       return NativeMethods.cairo_region_contains_rectangle (Handle, ref rectangle);
-               }
-
-               public bool Contains (int x, int y)
-               {
-                       return NativeMethods.cairo_region_contains_point (Handle, x, y);
-               }
-
-               public void Translate (int dx, int dy)
-               {
-                       NativeMethods.cairo_region_translate (Handle, dx, dy);
-               }
-
-               public Status Subtract (Region other)
-               {
-                       return NativeMethods.cairo_region_subtract (Handle, other.Handle);
-               }
-
-               public Status SubtractRectangle (Crow.Rectangle rectangle)
-               {
-                       return NativeMethods.cairo_region_subtract_rectangle (Handle, ref rectangle);
-               }
-
-               public Status Intersect (Region other)
-               {
-                       return NativeMethods.cairo_region_intersect (Handle, other.Handle);
-               }
-
-               public Status IntersectRectangle (Crow.Rectangle rectangle)
-               {
-                       return NativeMethods.cairo_region_intersect_rectangle (Handle, ref rectangle);
-               }
-
-               public Status Union (Region other)
-               {
-                       return NativeMethods.cairo_region_union (Handle, other.Handle);
-               }
-
-               public Status UnionRectangle (Crow.Rectangle rectangle)
-               {
-                       return NativeMethods.cairo_region_union_rectangle (Handle, ref rectangle);
-               }
-
-               public Status Xor (Region other)
-               {
-                       return NativeMethods.cairo_region_xor (Handle, other.Handle);
-               }
-
-               public Status XorRectangle (Crow.Rectangle rectangle)
-               {
-                       return NativeMethods.cairo_region_xor_rectangle (Handle, ref rectangle);
-               }
-               public void Reset () {
-                       if (IsEmpty)
-                               return;
-                       NativeMethods.cairo_region_destroy (Handle);
-                       handle = NativeMethods.cairo_region_create ();                  
-               }
-       }
-}
diff --git a/Crow/src/Mono.Cairo/ScaledFont.cs b/Crow/src/Mono.Cairo/ScaledFont.cs
deleted file mode 100644 (file)
index 594d1be..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-//
-// 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 Crow.Cairo {
-   
-       public class ScaledFont : IDisposable
-       {
-               protected IntPtr handle = IntPtr.Zero;
-
-               internal ScaledFont (IntPtr handle, bool owner)
-               {
-                       this.handle = handle;
-                       if (!owner)
-                               NativeMethods.cairo_scaled_font_reference (handle);
-                       if (CairoDebug.Enabled)
-                               CairoDebug.OnAllocated (handle);
-               }
-
-               public ScaledFont (FontFace fontFace, Matrix matrix, Matrix ctm, FontOptions options)
-                       : this (NativeMethods.cairo_scaled_font_create (fontFace.Handle, matrix, ctm, options.Handle), true)
-               {
-               }
-
-               ~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); }
-               }
-
-               public void Dispose ()
-               {
-                       Dispose (true);
-                       GC.SuppressFinalize (this);
-               }
-
-               protected virtual void Dispose (bool disposing)
-               {
-                       if (!disposing || CairoDebug.Enabled)
-                               CairoDebug.OnDisposed<ScaledFont> (handle, disposing);
-
-                       if (!disposing|| handle == IntPtr.Zero)
-                               return;
-
-                       NativeMethods.cairo_scaled_font_destroy (handle);
-                       handle = IntPtr.Zero;
-               }
-
-               [Obsolete]
-               protected void Reference ()
-               {
-                       NativeMethods.cairo_scaled_font_reference (handle);
-               }
-       }
-}
-
diff --git a/Crow/src/Mono.Cairo/SolidPattern.cs b/Crow/src/Mono.Cairo/SolidPattern.cs
deleted file mode 100644 (file)
index 6cd89f8..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-//
-// Mono.Cairo.Pattern.cs
-//
-// Author: Jordi Mas (jordi@ximian.com)
-//         Hisham Mardam Bey (hisham.mardambey@gmail.com)
-// (C) Ximian Inc, 2004.
-//
-// Copyright (C) 2004 Novell, Inc (http://www.novell.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 Color = Crow.Color;
-namespace Crow.Cairo {
-
-       public class SolidPattern : Pattern
-       {
-               internal SolidPattern (IntPtr handle, bool owned) : base (handle, owned)
-               {
-               }
-
-               public SolidPattern (Color color)
-                       : base (NativeMethods.cairo_pattern_create_rgba (color.R, color.G, color.B, color.A), true)
-               {
-               }
-
-               public SolidPattern (double r, double g, double b)
-                       : base (NativeMethods.cairo_pattern_create_rgb (r, g, b), true)
-               {
-               }
-
-               public SolidPattern (double r, double g, double b, double a)
-                       : base (NativeMethods.cairo_pattern_create_rgba (r, g, b, a), true)
-               {
-               }
-
-               public SolidPattern (Color color, bool solid)
-                       : base (solid
-                                       ? NativeMethods.cairo_pattern_create_rgb (color.R, color.G, color.B)
-                                       : NativeMethods.cairo_pattern_create_rgba (color.R, color.G, color.B, color.A),
-                               true)
-               {
-               }
-
-               public Color Color {
-                       get {
-                               double red, green, blue, alpha;
-                               NativeMethods.cairo_pattern_get_rgba  (Handle, out red, out green, out blue, out alpha);
-                               return new Color (red, green, blue, alpha);
-                       }
-               }
-       }
-}
-
diff --git a/Crow/src/Mono.Cairo/Status.cs b/Crow/src/Mono.Cairo/Status.cs
deleted file mode 100644 (file)
index 2df1558..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-//
-// Mono.Cairo.Status.cs
-//
-// Authors:
-//   Duncan Mak (duncan@ximian.com)
-//   Hisham Mardam Bey (hisham.mardambey@gmail.com)
-//   John Luke (john.luke@gmail.com)
-//   Alp Toker (alp@atoker.com)
-//
-// Copyright (C) 2004 Novell, Inc (http://www.novell.com)
-// Copyright (C) 2005 John Luke
-//
-// 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;
-
-namespace Crow.Cairo
-{
-       
-       public enum Status
-       {
-               Success = 0,
-               NoMemory,
-               InvalidRestore,
-               InvalidPopGroup,
-               NoCurrentPoint,
-               InvalidMatrix,
-               InvalidStatus,
-               NullPointer,
-               InvalidString,
-               InvalidPathData,
-               ReadError,
-               WriteError,
-               SurfaceFinished,
-               SurfaceTypeMismatch,
-               PatternTypeMismatch,
-               InvalidContent,
-               InvalidFormat,
-               InvalidVisual,
-               FileNotFound,
-               InvalidDash,
-               InvalidDscComment,
-               InvalidIndex,
-               ClipNotRepresentable,
-       }
-}
diff --git a/Crow/src/Mono.Cairo/SubpixelOrder.cs b/Crow/src/Mono.Cairo/SubpixelOrder.cs
deleted file mode 100644 (file)
index 95f3cbe..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-//
-// Mono.Cairo.Cairo.cs
-//
-// Authors:
-//   John Luke (john.luke@gmail.com)
-//
-// Copyright (C) John Luke 2005
-//
-// 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;
-
-namespace Crow.Cairo
-{
-       
-       public enum SubpixelOrder
-       {
-               Default,
-               Rgb,
-               Bgr,
-               Vrgb,
-               Vbgr,
-       }
-}
diff --git a/Crow/src/Mono.Cairo/Surface.cs b/Crow/src/Mono.Cairo/Surface.cs
deleted file mode 100644 (file)
index 56c1553..0000000
+++ /dev/null
@@ -1,229 +0,0 @@
-//
-// Mono.Cairo.Surface.cs
-//
-// Authors:
-//    Duncan Mak
-//    Miguel de Icaza.
-//    Alp Toker
-//
-// (C) Ximian Inc, 2003.
-// (C) Novell, Inc. 2003.
-//
-// This is an OO wrapper API for the Cairo API
-//
-// Copyright (C) 2004 Novell, Inc (http://www.novell.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.Collections;
-
-namespace Crow.Cairo {
-
-       public class Surface : IDisposable
-       {
-               IntPtr handle = IntPtr.Zero;
-
-               [Obsolete]
-               protected Surface()
-               {
-               }
-
-               [Obsolete]
-               protected Surface (IntPtr ptr) : this (ptr, true)
-               {
-               }
-
-               protected Surface (IntPtr handle, bool owner)
-               {
-                       this.handle = handle;
-                       if (!owner)
-                               NativeMethods.cairo_surface_reference (handle);
-                       if (CairoDebug.Enabled)
-                               CairoDebug.OnAllocated (handle);
-               }
-
-               public static Surface Lookup (IntPtr surface, bool owned)
-               {
-                       SurfaceType st = NativeMethods.cairo_surface_get_type (surface);
-                       switch (st) {
-                       case SurfaceType.Image:
-                               return new ImageSurface (surface, owned);
-                       case SurfaceType.Xlib:
-                               return new XlibSurface (surface, owned);
-                       case SurfaceType.Xcb:
-                               return new XcbSurface (surface, owned);
-                       case SurfaceType.Glitz:
-                               return new GlitzSurface (surface, owned);
-                       case SurfaceType.Win32:
-                               return new Win32Surface (surface, owned);
-                       case SurfaceType.Pdf:
-                               return new PdfSurface (surface, owned);
-                       case SurfaceType.PS:
-                               return new PSSurface (surface, owned);
-                       case SurfaceType.DirectFB:
-                               return new DirectFBSurface (surface, owned);
-                       case SurfaceType.Svg:
-                               return new SvgSurface (surface, owned);
-                       case SurfaceType.GL:
-                               return new GLSurface (surface, owned);
-                       default:
-                               return new Surface (surface, owned);
-                       }
-               }
-
-               [Obsolete ("Use an ImageSurface constructor instead.")]
-               public static Cairo.Surface CreateForImage (
-                       ref byte[] data, Cairo.Format format, int width, int height, int stride)
-               {
-                       IntPtr p = NativeMethods.cairo_image_surface_create_for_data (
-                               data, format, width, height, stride);
-
-                       return new Cairo.Surface (p, true);
-               }
-
-               [Obsolete ("Use an ImageSurface constructor instead.")]
-               public static Cairo.Surface CreateForImage (
-                       Cairo.Format format, int width, int height)
-               {
-                       IntPtr p = NativeMethods.cairo_image_surface_create (
-                               format, width, height);
-
-                       return new Cairo.Surface (p, true);
-               }
-
-
-               public Cairo.Surface CreateSimilar (
-                       Cairo.Content content, int width, int height)
-               {
-                       IntPtr p = NativeMethods.cairo_surface_create_similar (
-                               this.Handle, content, width, height);
-
-                       return Surface.Lookup(p, true);
-               }
-
-               ~Surface ()
-               {
-                       Dispose (false);
-               }
-
-
-               public void Dispose ()
-               {
-                       Dispose (true);
-                       GC.SuppressFinalize (this);
-               }
-
-               protected virtual void Dispose (bool disposing)
-               {
-                       if (!disposing || CairoDebug.Enabled)
-                               CairoDebug.OnDisposed<Surface> (handle, disposing);
-
-                       if (!disposing|| handle == IntPtr.Zero)
-                               return;
-
-                       NativeMethods.cairo_surface_destroy (handle);
-                       handle = IntPtr.Zero;
-               }
-               public virtual void SetSize (int width, int height) {                   
-               }
-
-               public Status Finish ()
-               {
-                       NativeMethods.cairo_surface_finish (handle);
-                       return Status;
-               }
-
-               public void Flush ()
-               {
-                       NativeMethods.cairo_surface_flush (handle);
-               }
-
-               public void MarkDirty ()
-               {
-                       NativeMethods.cairo_surface_mark_dirty (Handle);
-               }
-
-               public void MarkDirty (Crow.Rectangle rectangle)
-               {
-                       NativeMethods.cairo_surface_mark_dirty_rectangle (Handle, rectangle.X, rectangle.Y, rectangle.Width, rectangle.Height);
-               }
-               public virtual int Width => -1;
-               public virtual int Height => -1;
-
-               public IntPtr Handle {
-                       get {
-                               return handle;
-                       }
-               }
-
-               public PointD DeviceOffset {
-                       get {
-                               double x, y;
-                               NativeMethods.cairo_surface_get_device_offset (handle, out x, out y);
-                               return new PointD (x, y);
-                       }
-
-                       set {
-                               NativeMethods.cairo_surface_set_device_offset (handle, value.X, value.Y);
-                       }
-               }
-
-               [Obsolete ("Use Dispose()")]
-               public void Destroy()
-               {
-                       Dispose ();
-               }
-
-               public void SetFallbackResolution (double x, double y)
-               {
-                       NativeMethods.cairo_surface_set_fallback_resolution (handle, x, y);
-               }
-
-               public void WriteToPng (string filename)
-               {
-                       NativeMethods.cairo_surface_write_to_png (handle, filename);
-               }
-
-               [Obsolete ("Use Handle instead.")]
-               public IntPtr Pointer {
-                       get {
-                               return handle;
-                       }
-               }
-
-               public Status Status {
-                       get { return NativeMethods.cairo_surface_status (handle); }
-               }
-
-               public Content Content {
-                       get { return NativeMethods.cairo_surface_get_content (handle); }
-               }
-
-               public SurfaceType SurfaceType {
-                       get { return NativeMethods.cairo_surface_get_type (handle); }
-               }
-
-               public uint ReferenceCount {
-                       get { return NativeMethods.cairo_surface_get_reference_count (handle); }
-               }
-       }
-}
diff --git a/Crow/src/Mono.Cairo/SurfacePattern.cs b/Crow/src/Mono.Cairo/SurfacePattern.cs
deleted file mode 100644 (file)
index 53a90d3..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-//
-// Mono.Cairo.Pattern.cs
-//
-// Author: Jordi Mas (jordi@ximian.com)
-//         Hisham Mardam Bey (hisham.mardambey@gmail.com)
-// (C) Ximian Inc, 2004.
-//
-// Copyright (C) 2004 Novell, Inc (http://www.novell.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;
-
-namespace Crow.Cairo {
-
-       public class SurfacePattern : Pattern
-       {
-               internal SurfacePattern (IntPtr handle, bool owned) : base (handle, owned)
-               {
-               }
-
-               public SurfacePattern (Surface surface)
-                       : base (NativeMethods.cairo_pattern_create_for_surface (surface.Handle), true)
-               {
-               }
-
-               //no idea why this is here, the base one is identical, but we can't remove it now
-               public new Extend Extend {
-                       set { NativeMethods.cairo_pattern_set_extend (Handle, value); }
-                       get { return NativeMethods.cairo_pattern_get_extend (Handle); }
-               }
-
-               public Filter Filter {
-                       set { NativeMethods.cairo_pattern_set_filter (Handle, value); }
-                       get { return NativeMethods.cairo_pattern_get_filter (Handle); }
-               }
-       }
-}
-
diff --git a/Crow/src/Mono.Cairo/SurfaceType.cs b/Crow/src/Mono.Cairo/SurfaceType.cs
deleted file mode 100644 (file)
index bd992db..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-//
-// Mono.Cairo.SurfaceType.cs
-//
-// Authors:
-//    John Luke
-//
-// (C) John Luke, 2006.
-//
-// 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;
-
-namespace Crow.Cairo {
-
-       
-       public enum SurfaceType
-       {
-               Image,
-               Pdf,
-               PS,
-               Xlib,
-               Xcb,
-               Glitz,
-               Quartz,
-               Win32,
-               BeOS,
-               DirectFB,
-               Svg,
-               OS2,
-               Win32Printing,
-               QuartzImage,
-               Script,
-               Qt,
-               Recording,
-               VG,
-               GL,
-               Drm,
-               Tee,
-               Xml,
-               Skia,
-               SubSurface
-       }
-}
diff --git a/Crow/src/Mono.Cairo/SvgSurface.cs b/Crow/src/Mono.Cairo/SvgSurface.cs
deleted file mode 100644 (file)
index c7d7298..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-//
-// Mono.Cairo.SvgSurface.cs
-//
-// Authors:
-//    John Luke
-//
-// (C) John Luke, 2006.
-//
-// 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;
-
-namespace Crow.Cairo {
-
-       public class SvgSurface : Surface
-       {
-               internal SvgSurface (IntPtr handle, bool owns) : base (handle, owns)
-               {
-               }
-
-               public SvgSurface (string filename, double width, double height)
-                       : base (NativeMethods.cairo_svg_surface_create (filename, width, height), true)
-               {
-               }
-
-               public void RestrictToVersion (SvgVersion version)
-               {
-                       NativeMethods.cairo_svg_surface_restrict_to_version (Handle, version);
-               }
-       }
-}
-
diff --git a/Crow/src/Mono.Cairo/SvgVersion.cs b/Crow/src/Mono.Cairo/SvgVersion.cs
deleted file mode 100644 (file)
index 916fb86..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-//
-// Mono.Cairo.SvgVersion.cs
-//
-// Authors:
-//    John Luke
-//
-// (C) John Luke, 2006.
-//
-// 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;
-
-namespace Crow.Cairo {
-
-       
-       public enum SvgVersion
-       {
-               // FIXME: yuck
-               OnePointOne = 0,
-               OnePointTwo,
-       }
-}
-
diff --git a/Crow/src/Mono.Cairo/TextExtents.cs b/Crow/src/Mono.Cairo/TextExtents.cs
deleted file mode 100644 (file)
index 965ca04..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-//
-// Mono.Cairo.TextExtents.cs
-//
-// Authors:
-//   Duncan Mak (duncan@ximian.com)
-//   Hisham Mardam Bey (hisham.mardambey@gmail.com)
-//
-// (C) Ximian, Inc. 2003
-// Copyright (C) 2004 Novell, Inc (http://www.novell.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 Crow.Cairo
-{
-       [StructLayout (LayoutKind.Sequential)]
-       public struct TextExtents
-       {
-               double xbearing;
-               double ybearing;
-               double width;
-               double height;
-               double xadvance;
-               double yadvance;
-               
-               public double XBearing {
-                       get { return xbearing; }
-                       set { xbearing = value; }
-               }
-               
-               public double YBearing {
-                       get { return ybearing; }
-                       set { ybearing = value; }
-               }
-               
-               public double Width {
-                       get { return width; }
-                       set { width = value; }
-               }
-               
-               public double Height {
-                       get { return height; }
-                       set { height = value; }
-               }
-               
-               public double XAdvance {
-                       get { return xadvance; }
-                       set { xadvance = value; }
-               }
-               
-               public double YAdvance {
-                       get { return yadvance; }
-                       set { yadvance = value; }
-               }
-
-               public override bool Equals (object obj)
-               {
-                       if (obj is TextExtents)
-                               return this == (TextExtents)obj;
-                       return false;
-               }
-
-               public override int GetHashCode ()
-               {
-                       return (int)XBearing ^ (int)YBearing ^ (int)Width ^ (int)Height ^ (int)XAdvance ^ (int)YAdvance;
-               }
-
-               public static bool operator == (TextExtents extents, TextExtents other)
-               {
-                       return extents.XBearing == other.XBearing && extents.YBearing == other.YBearing && extents.Width == other.Width && extents.Height == other.Height && extents.XAdvance == other.XAdvance && extents.YAdvance == other.YAdvance;
-               }
-
-               public static bool operator != (TextExtents extents, TextExtents other)
-               {
-                       return !(extents == other);
-               }
-       }
-}
diff --git a/Crow/src/Mono.Cairo/WGLDevice.cs b/Crow/src/Mono.Cairo/WGLDevice.cs
deleted file mode 100644 (file)
index 308cfad..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-//
-// Mono.Cairo.Device.cs
-//
-// Authors:
-//                     JP Bruyère (jp_bruyere@hotmail.com)
-//
-// This is an OO wrapper API for the Cairo API
-//
-// Copyright (C) 2016 JP Bruyère
-//
-// 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;
-
-namespace Crow.Cairo
-{
-       public class WGLDevice : Device
-       {
-               public WGLDevice (IntPtr hglrc) : base (NativeMethods.cairo_wgl_device_create (hglrc), true)
-               {
-               }
-
-               public IntPtr Context {
-                       get { return NativeMethods.cairo_wgl_device_get_context (Handle); }
-               }
-       }
-}
-
diff --git a/Crow/src/Mono.Cairo/Win32Surface.cs b/Crow/src/Mono.Cairo/Win32Surface.cs
deleted file mode 100644 (file)
index 4776a19..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-//
-// Mono.Cairo.Win32Surface.cs
-//
-// Authors:
-//    John Luke
-//
-// (C) John Luke, 2006.
-//
-// 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;
-
-namespace Crow.Cairo {
-       
-       public class Win32Surface : Surface
-       {
-               internal Win32Surface (IntPtr handle, bool owns) : base (handle, owns)
-               {
-               }
-               
-               public Win32Surface (IntPtr hdc)
-                       : base (NativeMethods.cairo_win32_surface_create (hdc), true)
-               {
-               }
-       }
-}
diff --git a/Crow/src/Mono.Cairo/XcbSurface.cs b/Crow/src/Mono.Cairo/XcbSurface.cs
deleted file mode 100644 (file)
index 32a6784..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-//
-// Mono.Cairo.XcbSurface.cs
-//
-// Authors:
-//    Alp Toker
-//
-// (C) Alp Toker, 2006.
-//
-// 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;
-
-namespace Crow.Cairo {
-       public class XcbSurface : Surface
-       {
-               internal XcbSurface (IntPtr handle, bool owns) : base (handle, owns)
-               {
-               }
-
-               public XcbSurface (IntPtr connection, uint drawable, IntPtr visual, int width, int height)
-                       : base (NativeMethods.cairo_xcb_surface_create (connection, drawable, visual, width, height), true)
-               {
-               }
-
-               public static XcbSurface FromBitmap (IntPtr connection, uint bitmap, IntPtr screen, int width, int height)
-               {
-                       IntPtr ptr = NativeMethods.cairo_xcb_surface_create_for_bitmap (connection, bitmap, screen, width, height);
-                       return new XcbSurface (ptr, true);
-               }
-               public override void SetSize (int width, int height)
-               {                       
-                       NativeMethods.cairo_xcb_surface_set_size (Handle, width, height);
-               }
-       }
-}
diff --git a/Crow/src/Mono.Cairo/XlibSurface.cs b/Crow/src/Mono.Cairo/XlibSurface.cs
deleted file mode 100644 (file)
index 18e810b..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-//
-// Mono.Cairo.XlibSurface.cs
-//
-// Authors:
-//    Duncan Mak
-//    Miguel de Icaza.
-//       JP Bruyère
-//
-// (C) Ximian Inc, 2003.
-// (C) Novell, Inc. 2003.
-// (C) JP Bruyère 2021
-//
-// This is an OO wrapper API for the Cairo API
-//
-// Copyright (C) 2004 Novell, Inc (http://www.novell.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;
-
-namespace Crow.Cairo {
-
-       public class XlibSurface : Surface
-       {
-               public XlibSurface (IntPtr display, IntPtr drawable, IntPtr visual, int width, int height)
-                       : base (NativeMethods.cairo_xlib_surface_create (display, drawable, visual, width, height), true)
-               {
-               }
-
-               public XlibSurface (IntPtr ptr, bool own) : base (ptr, own)
-               {
-               }
-
-               public static XlibSurface FromBitmap (IntPtr display, IntPtr bitmap, IntPtr screen, int width, int height)
-               {
-                       IntPtr ptr = NativeMethods.cairo_xlib_surface_create_for_bitmap (display, bitmap, screen, width, height);
-                       return new XlibSurface(ptr, true);
-               }
-
-               public void SetDrawable (IntPtr drawable, int width, int height)
-               {
-                       NativeMethods.cairo_xlib_surface_set_drawable (Handle, drawable, width, height);
-               }
-
-               public override void SetSize (int width, int height)
-               {
-                       NativeMethods.cairo_xlib_surface_set_size (Handle, width, height);
-               }
-
-               public int Depth => NativeMethods.cairo_xlib_surface_get_depth (Handle);
-               public IntPtr Display => NativeMethods.cairo_xlib_surface_get_display (Handle);
-               public IntPtr Drawable => NativeMethods.cairo_xlib_surface_get_drawable (Handle);
-               public override int Width => NativeMethods.cairo_xlib_surface_get_width (Handle);               
-               public override int Height => NativeMethods.cairo_xlib_surface_get_height (Handle);             
-
-               public IntPtr Screen => NativeMethods.cairo_xlib_surface_get_screen (Handle);
-               public IntPtr Visual=> NativeMethods.cairo_xlib_surface_get_visual (Handle);
-       }
-}
index 19f3ebd07b3d42d0b2c68d58e0afd677f702f723..d72f1de7871d6c70e6cfe7572117572fadb96c3d 100644 (file)
@@ -2,7 +2,7 @@
 //
 // This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
 using System;
-using Crow.Cairo;
+using Crow.Drawing;
 
 namespace Crow
 {
index c702d9ac4440fb951a8334da1cf68552877f390b..473581002a37c484b0874850cece052159dcaec0 100644 (file)
@@ -3,7 +3,7 @@
 // This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
 using System;
 using System.ComponentModel;
-using Crow.Cairo;
+using Crow.Drawing;
 
 namespace Crow
 {
@@ -104,15 +104,15 @@ namespace Crow
                {
                        drawborder2 (gr);
 
-                       gr.Save ();
+                       /*gr.Save ();
                        if (ClipToClientRect) {
                                CairoHelpers.CairoRectangle (gr, ClientRectangle, Math.Max (0.0, CornerRadius - Margin));
                                gr.Clip ();
-                       }
+                       }*/
+
+                       child?.Paint (gr);
 
-                       if (child != null)
-                               child.Paint (gr);
-                       gr.Restore ();
+                       //gr.Restore ();
                }
                void drawborder2(Context gr){
                        Rectangle rBack = new Rectangle (Slot.Size);
index 6e3e67c6b4329ed8098443ced7de4410d1403302..e076ca663f27db3dc40da17b7755d7bb65f610b9 100644 (file)
@@ -4,11 +4,10 @@
 
 using System;
 using System.ComponentModel;
-using Crow.Cairo;
+using Crow.Drawing;
 
 namespace Crow {
-
-public class CircleMeter : Gauge {
+       public class CircleMeter : Gauge {
                #region CTOR
                protected CircleMeter () {}
                public CircleMeter (Interface iface, string style = null) : base (iface, style) { }
index 9ac4b8a012b37dbbd0cf2981fb2f48a449eb9ffa..183686daf2a78dcf99ac0c806839d04b567447ef 100644 (file)
@@ -1,11 +1,12 @@
-// Copyright (c) 2013-2019  Bruyère Jean-Philippe jp_bruyere@hotmail.com
+// Copyright (c) 2013-2021  Bruyère Jean-Philippe jp_bruyere@hotmail.com
 //
 // This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
 
 using System;
 using System.ComponentModel;
-using Crow.Cairo;
+
 using Glfw;
+using Crow.Drawing;
 
 namespace Crow
 {
index 7f36dad49532d9a316f2f51cf1675331e914a5b1..0edccaa534cda77c0dfa410fa9ad2b91981f6f00 100644 (file)
@@ -4,7 +4,7 @@
 
 using System;
 using System.Xml.Serialization;
-using Crow.Cairo;
+
 using Glfw;
 
 namespace Crow
@@ -198,8 +198,8 @@ namespace Crow
                                        r.Inflate (r.Width / -3, r.Height / -3);
                                        break;
                                }
-                   Surface dragImg = IFace.surf.CreateSimilar (Crow.Cairo.Content.ColorAlpha,  r.Width, r.Height);
-                               using (Crow.Cairo.Context gr = new Crow.Cairo.Context(dragImg)) {
+                   /*Surface dragImg = IFace.surf.CreateSimilar (Content.ColorAlpha,   r.Width, r.Height);
+                               using (Context gr = new Context(dragImg)) {
                                        gr.LineWidth = 1;
                                        gr.Rectangle (0,0,r.Width,r.Height);
                                        gr.SetSource (0.2,0.3,0.9,0.5);
@@ -207,7 +207,7 @@ namespace Crow
                                        gr.SetSource (0.1,0.2,1);
                                        gr.Stroke ();
                                }
-                               IFace.CreateDragImage (dragImg, r, false);
+                               IFace.CreateDragImage (dragImg, r, false);*/
                        }
                }
         protected override void onDragEnter (object sender, DragDropEventArgs e) {
index d63249bb2ba1c762859f49bfe8dcb6a814b4ab85..1e334c2e77f6687b18f1deca54642d21e7895457 100644 (file)
@@ -49,7 +49,7 @@ namespace Crow
                public override void OnDataSourceChanged(object sender, DataSourceChangeEventArgs e)
                {
                        base.OnDataSourceChanged(sender, e);
-                       NotifyValueChanged ("IsExpandable", IsExpandable);
+                       //NotifyValueChanged ("IsExpandable", IsExpandable);
 
                }
                /// <summary>
index 7384453e851a849ad379c604af287e345e9b21e0..c3c8491970ad14eaa88f3b85855ff055e1599cad 100644 (file)
@@ -4,7 +4,8 @@
 
 using System;
 using System.ComponentModel;
-using Crow.Cairo;
+
+using Crow.Drawing;
 
 namespace Crow {
        public class Gauge : Widget
index 01b8b4cbaa5314b2c874fefdd08453f7bf80166c..e041cfb249095c6187c807b65b8425952b69a81a 100644 (file)
@@ -2,7 +2,7 @@
 //
 // This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
 
-using Crow.Cairo;
+
 
 namespace Crow
 {
index e771426e8c26ee24d7c23f0e4e0277fff9d1bbbb..33e1b4c1601680478d9e76c0a15409ee26df8f1c 100644 (file)
@@ -5,7 +5,7 @@
 using System;
 using System.Collections.Generic;
 using System.ComponentModel;
-using Crow.Cairo;
+
 using System.Threading;
 
 using static Crow.Logger;
index 752c98ded7064e41595c969a986291f9a0f1cf96..13d99f0aa4c13a3d0c4341c38382df8be9164925 100644 (file)
@@ -5,10 +5,11 @@
 using System;
 using System.Collections.Generic;
 using System.ComponentModel;
-using Crow.Cairo;
+
 using System.Threading;
 
 using static Crow.Logger;
+using Crow.Drawing;
 
 namespace Crow
 {
@@ -255,7 +256,7 @@ namespace Crow
                                                gr.Rectangle(Clipping.GetRectangle(i));
                                        gr.ClipPreserve();
                                        gr.Operator = Operator.Clear;
-                                       gr.Fill();
+                                       gr.Fill();                                      
                                        gr.Operator = Operator.Over;
 
                                        base.onDraw (gr);
@@ -270,7 +271,7 @@ namespace Crow
                                                foreach (Widget c in Children) {
                                                        if (!c.IsVisible)
                                                                continue;
-                                                       if (Clipping.Contains (c.Slot + ClientRectangle.Position) == RegionOverlap.Out)
+                                                       if (Clipping.OverlapOut (c.Slot + ClientRectangle.Position))
                                                                continue;
                                                        c.Paint (gr);
                                                }
index 64f8217ee24720050d12168a4b289229331a37f8..c4d3172a592b4463521e90047b98c85e814157f4 100644 (file)
@@ -1,33 +1,12 @@
-//
-// HueSelector.cs
+// Copyright (c) 2013-2021  Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
 //
-// Author:
-//       Jean-Philippe Bruyère <jp.bruyere@hotmail.com>
-//
-// Copyright (c) 2013-2017 Jean-Philippe Bruyère
-//
-// 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.
+// This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
 
 using System;
 using System.Xml.Serialization;
 using System.ComponentModel;
-using Crow.Cairo;
+
+using Crow.Drawing;
 
 namespace Crow
 {
index 6969541f1e79de9391bd37e430561ae88a25a5a5..0473893b2a5984f944eb3d0e56df31bc2765d735 100644 (file)
@@ -1,13 +1,14 @@
-// Copyright (c) 2013-2019  Jean-Philippe Bruyère jp_bruyere@hotmail.com
+// Copyright (c) 2013-2021  Jean-Philippe Bruyère jp_bruyere@hotmail.com
 //
 // This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
 
 using System;
-using Crow.Cairo;
+
 using System.Xml.Serialization;
 using System.ComponentModel;
 using System.Diagnostics;
 
+using Crow.Drawing;
 
 namespace Crow
 {
@@ -161,6 +162,8 @@ namespace Crow
                {
                        if (_pic == null)
                                return 2 * Margin;
+                       if (!_pic.IsLoaded)
+                               _pic.load (IFace);
                                //_pic = "#Crow.Images.Icons.IconAlerte.svg";
                        //TODO:take scalling in account
                        if (lt == LayoutingType.Width)
index c2c68648ab20be1a1606342c26d8a79110141940..e01fe269474551d677a5e267aca4c771e4e07e7d 100644 (file)
@@ -4,9 +4,10 @@
 
 using System;
 using System.Linq;
-using Crow.Cairo;
+
 using System.ComponentModel;
 using Glfw;
+using Crow.Drawing;
 using Crow.Text;
 
 namespace Crow
@@ -637,6 +638,8 @@ namespace Crow
                
                protected override void onDraw (Context gr)
                {
+                       DbgLogger.StartEvent(DbgEvtType.GODraw, this);
+
                        base.onDraw (gr);
 
                        setFontForContext (gr);
@@ -657,6 +660,8 @@ namespace Crow
                        
                        if (ClipToClientRect)
                                gr.Restore ();
+
+                       DbgLogger.EndEvent (DbgEvtType.GODraw);
                }
                #endregion
 
diff --git a/Crow/src/Widgets/OldLabel.cs b/Crow/src/Widgets/OldLabel.cs
deleted file mode 100644 (file)
index 17179ae..0000000
+++ /dev/null
@@ -1,846 +0,0 @@
-// Copyright (c) 2013-2019  Bruyère Jean-Philippe jp_bruyere@hotmail.com
-//
-// This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using Crow.Cairo;
-using System.Text.RegularExpressions;
-using System.ComponentModel;
-
-namespace Crow {
-       [Obsolete]
-       public class OldLabel : Widget
-    {
-               #region CTOR
-               protected OldLabel () {}
-               public OldLabel(Interface iface, string style = null) : base (iface, style) { }
-               #endregion
-
-               public event EventHandler<TextChangeEventArgs> TextChanged;
-
-               public virtual void OnTextChanged(Object sender, TextChangeEventArgs e)
-               {
-                       textMeasureIsUpToDate = false;
-                       NotifyValueChanged ("Text", Text);
-                       TextChanged.Raise (this, e);
-               }
-        //TODO:change protected to private
-
-               #region private and protected fields
-               string _text = "label";
-        Alignment _textAlignment;
-               bool horizontalStretch;
-               bool verticalStretch;
-               bool _selectable;
-               bool _multiline;
-               Color selBackground;
-               Color selForeground;
-               Point mouseLocalPos = -1;//mouse coord in widget space, filled only when clicked
-               int _currentCol;        //0 based cursor position in string
-               int _currentLine;
-               Point _selBegin = -1;   //selection start (row,column)
-               Point _selRelease = -1; //selection end (row,column)
-               double textCursorPos;   //cursor position in cairo units in widget client coord.
-               double SelStartCursorPos = -1;
-               double SelEndCursorPos = -1;
-               bool SelectionInProgress = false;
-
-        protected Rectangle rText;
-               protected float widthRatio = 1f;
-               protected float heightRatio = 1f;
-               protected FontExtents fe;
-               protected TextExtents te;
-               #endregion
-
-               [DefaultValue("SteelBlue")]
-               public virtual Color SelectionBackground {
-                       get { return selBackground; }
-                       set {
-                               if (selBackground == value)
-                                       return;
-                               selBackground = value;
-                               NotifyValueChangedAuto (selBackground);
-                               RegisterForRedraw ();
-                       }
-               }
-               [DefaultValue("White")]
-               public virtual Color SelectionForeground {
-                       get { return selForeground; }
-                       set {
-                               if (selForeground == value)
-                                       return;
-                               selForeground = value;
-                               NotifyValueChangedAuto (selForeground);
-                               RegisterForRedraw ();
-                       }
-               }
-               [DefaultValue(Alignment.Left)]
-               public Alignment TextAlignment
-        {
-            get { return _textAlignment; }
-            set {
-                               if (value == _textAlignment)
-                                       return;
-                               _textAlignment = value;
-                               RegisterForRedraw ();
-                               NotifyValueChangedAuto (_textAlignment);
-                       }
-        }
-               [DefaultValue(false)]
-               public virtual bool HorizontalStretch {
-                       get { return horizontalStretch; }
-                       set {
-                               if (horizontalStretch == value)
-                                       return;
-                               horizontalStretch = value;
-                               RegisterForRedraw ();
-                               NotifyValueChangedAuto (horizontalStretch);
-                       }
-               }
-               [DefaultValue(false)]
-               public virtual bool VerticalStretch {
-                       get { return verticalStretch; }
-                       set {
-                               if (verticalStretch == value)
-                                       return;
-                               verticalStretch = value;
-                               RegisterForRedraw ();
-                               NotifyValueChangedAuto (verticalStretch);
-                       }
-               }
-               [DefaultValue("label")]
-        public string Text
-        {
-            get {
-                               return lines == null ?
-                                       _text : lines.Aggregate((i, j) => i + Interface.LineBreak + j);
-                       }
-            set
-            {
-                               if (string.Equals (value, _text, StringComparison.Ordinal))
-                    return;
-
-                _text = value;
-
-                               if (string.IsNullOrEmpty(_text))
-                                       _text = "";
-
-                               lines = getLines;
-
-                               OnTextChanged (this, new TextChangeEventArgs (default));
-                               RegisterForGraphicUpdate ();
-            }
-        }
-               [DefaultValue(false)]
-               public bool Selectable
-               {
-                       get { return _selectable; }
-                       set
-                       {
-                               if (value == _selectable)
-                                       return;
-                               _selectable = value;
-                               NotifyValueChangedAuto (_selectable);
-                               SelBegin = -1;
-                               SelRelease = -1;
-                               RegisterForRedraw ();
-                       }
-               }
-               [DefaultValue(false)]
-               public bool Multiline
-               {
-                       get { return _multiline; }
-                       set
-                       {
-                               if (value == _multiline)
-                                       return;
-                               _multiline = value;
-                               NotifyValueChangedAuto (_multiline);
-                               RegisterForGraphicUpdate();
-                       }
-               }
-               [DefaultValue(0)]
-               public int CurrentColumn{
-                       get { return _currentCol; }
-                       set {
-                               if (value == _currentCol)
-                                       return;
-                               if (value < 0)
-                                       _currentCol = 0;
-                               else if (value > lines [_currentLine].Length)
-                                       _currentCol = lines [_currentLine].Length;
-                               else
-                                       _currentCol = value;
-                               NotifyValueChangedAuto (_currentCol);
-
-                               Rectangle cb = ClientRectangle;
-
-                               if (Width == Measure.Fit || cb.Width >= cachedTextSize.Width) {
-                                       xTranslation = 0;
-                                       return;
-                               }
-                               int xpos = xposition;
-                               if (xTranslation + xpos > cb.Width)
-                                       xTranslation = cb.Width - xpos;
-                               else if (xpos < -xTranslation)
-                                       xTranslation = -xpos;
-                               RegisterForRedraw ();
-                       }
-               }
-               int xTranslation = 0;
-               int xposition {
-                       get {
-                               using (Context gr = new Context (IFace.surf)) {
-                                       //Cairo.FontFace cf = gr.GetContextFontFace ();
-                                       gr.SelectFontFace (Font.Name, Font.Slant, Font.Wheight);
-                                       gr.SetFontSize (Font.Size);
-                                       gr.FontOptions = Interface.FontRenderingOptions;
-                                       gr.Antialias = Interface.Antialias;
-                                       try {
-                                               string l = lines [_currentLine];
-                                               if (_currentCol < l.Length)
-                                                       l = l.Remove (Math.Min (_currentCol, l.Length));
-                                               l = l.Replace ("\t", new String (' ', Interface.TAB_SIZE));
-                                               return (int)Math.Ceiling (gr.TextExtents (l).XAdvance);
-                                       } catch {
-                                               System.Diagnostics.Debug.WriteLine ("xpos measuring fault in label");
-                                               return 0;
-                                       }
-                               }
-                       }
-               }
-
-               [DefaultValue(0)]
-               public int CurrentLine{
-                       get { return _currentLine; }
-                       set {
-                               if (value == _currentLine)
-                                       return;
-                               if (value >= lines.Count)
-                                       _currentLine = lines.Count-1;
-                               else if (value < 0)
-                                       _currentLine = 0;
-                               else
-                                       _currentLine = value;
-                               //force recheck of currentCol for bounding
-                               int cc = _currentCol;
-                               _currentCol = 0;
-                               CurrentColumn = cc;
-                               NotifyValueChangedAuto (_currentLine);
-                       }
-               }
-               [XmlIgnore]public Point CurrentPosition {
-                       get { return new Point(_currentCol, CurrentLine); }
-               }
-               //TODO:using HasFocus for drawing selection cause SelBegin and Release binding not to work
-               /// <summary>
-               /// Selection begin position in char units
-               /// </summary>
-               [DefaultValue("-1")]
-               public Point SelBegin {
-                       get {
-                               return _selBegin;
-                       }
-                       set {
-                               if (value == _selBegin)
-                                       return;
-                               _selBegin = value;
-                               NotifyValueChangedAuto (_selBegin);
-                               NotifyValueChanged ("SelectedText", SelectedText);
-                       }
-               }
-               [DefaultValue("-1")]
-               public Point SelRelease {
-                       get {
-                               return _selRelease;
-                       }
-                       set {
-                               if (value == _selRelease)
-                                       return;
-                               _selRelease = value;
-                               NotifyValueChangedAuto (_selRelease);
-                               NotifyValueChanged ("SelectedText", SelectedText);
-                       }
-               }
-               /// <summary>
-               /// return char at CurrentLine, CurrentColumn
-               /// </summary>
-               [XmlIgnore]protected Char CurrentChar
-               {
-                       get {
-                               return lines [CurrentLine][CurrentColumn];
-                       }
-               }
-               /// <summary>
-               /// ordered selection start and end positions in char units
-               /// </summary>
-               [XmlIgnore]protected Point selectionStart
-               {
-                       get {
-                               return SelRelease < 0 || SelBegin.Y < SelRelease.Y ? SelBegin :
-                                       SelBegin.Y > SelRelease.Y ? SelRelease :
-                                       SelBegin.X < SelRelease.X ? SelBegin : SelRelease;
-                       }
-               }
-               [XmlIgnore]public Point selectionEnd
-               {
-                       get {
-                               return SelRelease < 0 || SelBegin.Y > SelRelease.Y ? SelBegin :
-                                       SelBegin.Y < SelRelease.Y ? SelRelease :
-                                       SelBegin.X > SelRelease.X ? SelBegin : SelRelease;
-                       }
-               }
-               [XmlIgnore]public string SelectedText
-               {
-                       get {
-                               if (SelRelease < 0 || SelBegin < 0)
-                                       return "";
-                               if (selectionStart.Y == selectionEnd.Y)
-                                       return lines [selectionStart.Y].Substring (selectionStart.X, selectionEnd.X - selectionStart.X);
-                               string tmp = "";
-                               tmp = lines [selectionStart.Y].Substring (selectionStart.X);
-                               for (int l = selectionStart.Y + 1; l < selectionEnd.Y; l++) {
-                                       tmp += Interface.LineBreak + lines [l];
-                               }
-                               tmp += Interface.LineBreak + lines [selectionEnd.Y].Substring (0, selectionEnd.X);
-                               return tmp;
-                       }
-               }
-               [XmlIgnore]public bool selectionIsEmpty
-               { get { return SelRelease < 0; } }
-
-               List<string> lines;
-               List<string> getLines {
-                       get {
-                               return _multiline ?
-                                       Regex.Split (_text, "\r\n|\r|\n|\\\\n").ToList() :
-                                       new List<string>(new string[] { _text });
-                       }
-               }
-               /// <summary>
-               /// Moves cursor one char to the left.
-               /// </summary>
-               /// <returns><c>true</c> if move succeed</returns>
-               public bool MoveLeft(){
-                       int tmp = _currentCol - 1;
-                       if (tmp < 0) {
-                               if (_currentLine == 0)
-                                       return false;
-                               CurrentLine--;
-                               CurrentColumn = int.MaxValue;
-                       } else
-                               CurrentColumn = tmp;
-                       return true;
-               }
-               /// <summary>
-               /// Moves cursor one char to the right.
-               /// </summary>
-               /// <returns><c>true</c> if move succeed</returns>
-               public bool MoveRight(){
-                       int tmp = _currentCol + 1;
-                       if (tmp > lines [_currentLine].Length){
-                               if (CurrentLine == lines.Count - 1)
-                                       return false;
-                               CurrentLine++;
-                               CurrentColumn = 0;
-                       } else
-                               CurrentColumn = tmp;
-                       return true;
-               }
-               public void GotoWordStart(){
-                       CurrentColumn--;
-                       //skip white spaces
-                       while (!char.IsLetterOrDigit (this.CurrentChar) && CurrentColumn > 0)
-                               CurrentColumn--;
-                       while (char.IsLetterOrDigit (lines [CurrentLine] [CurrentColumn]) && CurrentColumn > 0)
-                               CurrentColumn--;
-                       if (!char.IsLetterOrDigit (this.CurrentChar))
-                               CurrentColumn++;
-               }
-               public void GotoWordEnd(){
-                       //skip white spaces
-                       if (CurrentColumn >= lines [CurrentLine].Length - 1)
-                               return;
-                       while (!char.IsLetterOrDigit (this.CurrentChar) && CurrentColumn < lines [CurrentLine].Length-1)
-                               CurrentColumn++;
-                       while (char.IsLetterOrDigit (this.CurrentChar) && CurrentColumn < lines [CurrentLine].Length-1)
-                               CurrentColumn++;
-                       if (char.IsLetterOrDigit (this.CurrentChar))
-                               CurrentColumn++;
-               }
-               public void DeleteChar()
-               {
-                       if (selectionIsEmpty) {
-                               if (CurrentColumn == 0) {
-                                       if (CurrentLine == 0 && lines.Count == 1)
-                                               return;
-                                       CurrentLine--;
-                                       CurrentColumn = lines [CurrentLine].Length;
-                                       lines [CurrentLine] += lines [CurrentLine + 1];
-                                       lines.RemoveAt (CurrentLine + 1);
-
-                                       OnTextChanged (this, new TextChangeEventArgs (default));
-                                       return;
-                               }
-                               CurrentColumn--;
-                               lines [CurrentLine] = lines [CurrentLine].Remove (CurrentColumn, 1);
-                       } else {
-                               int linesToRemove = selectionEnd.Y - selectionStart.Y + 1;
-                               int l = selectionStart.Y;
-
-                               if (linesToRemove > 0) {
-                                       lines [l] = lines [l].Remove (selectionStart.X, lines [l].Length - selectionStart.X) +
-                                               lines [selectionEnd.Y].Substring (selectionEnd.X, lines [selectionEnd.Y].Length - selectionEnd.X);
-                                       l++;
-                                       for (int c = 0; c < linesToRemove-1; c++)
-                                               lines.RemoveAt (l);
-                                       CurrentLine = selectionStart.Y;
-                                       CurrentColumn = selectionStart.X;
-                               } else
-                                       lines [l] = lines [l].Remove (selectionStart.X, selectionEnd.X - selectionStart.X);
-                               CurrentColumn = selectionStart.X;
-                               SelBegin = -1;
-                               SelRelease = -1;
-                       }
-                       OnTextChanged (this, new TextChangeEventArgs (default));
-               }
-               /// <summary>
-               /// Insert new string at caret position, should be sure no line break is inside.
-               /// </summary>
-               /// <param name="str">String.</param>
-               protected void Insert(string str)
-               {
-                       if (!selectionIsEmpty)
-                               this.DeleteChar ();
-                       if (_multiline) {
-                               string[] strLines = Regex.Split (str, "\r\n|\r|\n|" + @"\\n").ToArray();
-                               lines [CurrentLine] = lines [CurrentLine].Insert (CurrentColumn, strLines[0]);
-                               CurrentColumn += strLines[0].Length;
-                               for (int i = 1; i < strLines.Length; i++) {
-                                       InsertLineBreak ();
-                                       lines [CurrentLine] = lines [CurrentLine].Insert (CurrentColumn, strLines[i]);
-                                       CurrentColumn += strLines[i].Length;
-                               }
-                       } else {
-                               lines [CurrentLine] = lines [CurrentLine].Insert (CurrentColumn, str);
-                               CurrentColumn += str.Length;
-                       }
-                       OnTextChanged (this, new TextChangeEventArgs (default));
-               }
-               /// <summary>
-               /// Insert a line break.
-               /// </summary>
-               protected void InsertLineBreak()
-               {
-                       lines.Insert(CurrentLine + 1, lines[CurrentLine].Substring(CurrentColumn));
-                       lines [CurrentLine] = lines [CurrentLine].Substring (0, CurrentColumn);
-                       CurrentLine++;
-                       CurrentColumn = 0;
-                       OnTextChanged (this, new TextChangeEventArgs (default));
-               }
-               bool textMeasureIsUpToDate = false;
-               Size cachedTextSize = default(Size);
-
-               #region GraphicObject overrides
-               public override int measureRawSize(LayoutingType lt)
-               {
-                       if (lines == null)
-                               lines = getLines;
-                       if (!textMeasureIsUpToDate) {
-                               using (Context gr = new Context (IFace.surf)) {
-                                       //Cairo.FontFace cf = gr.GetContextFontFace ();
-
-                                       gr.SelectFontFace (Font.Name, Font.Slant, Font.Wheight);
-                                       gr.SetFontSize (Font.Size);
-                                       gr.FontOptions = Interface.FontRenderingOptions;
-                                       gr.Antialias = Interface.Antialias;
-
-                                       fe = gr.FontExtents;
-                                       te = new TextExtents ();
-
-                                       cachedTextSize.Height = (int)Math.Ceiling ((fe.Ascent+fe.Descent) * Math.Max (1, lines.Count));
-
-                                       try {
-                                               for (int i = 0; i < lines.Count; i++) {
-                                                       string l = lines[i].Replace ("\t", new String (' ', Interface.TAB_SIZE));
-
-                                                       TextExtents tmp = gr.TextExtents (l);
-
-                                                       if (tmp.XAdvance > te.XAdvance)
-                                                               te = tmp;
-                                               }
-                                               cachedTextSize.Width = (int)Math.Ceiling (te.XAdvance);
-                                               textMeasureIsUpToDate = true;
-                                       } catch {                                                       
-                                               return -1;
-                                       }                                       
-                               }
-                       }
-                       return Margin * 2 + (lt == LayoutingType.Height ? cachedTextSize.Height : cachedTextSize.Width);
-               }
-               protected override void onDraw (Context gr)
-               {
-                       DbgLogger.StartEvent(DbgEvtType.GODraw, this);
-
-                       base.onDraw (gr);
-
-                       gr.SelectFontFace (Font.Name, Font.Slant, Font.Wheight);
-                       gr.SetFontSize (Font.Size);
-                       gr.FontOptions = Interface.FontRenderingOptions;
-                       gr.Antialias = Interface.Antialias;
-
-                       gr.Save ();
-                       gr.Translate (xTranslation, 0);
-
-                       rText = new Rectangle(new Size(
-                               measureRawSize(LayoutingType.Width), measureRawSize(LayoutingType.Height)));
-                       rText.Width -= 2 * Margin;
-                       rText.Height -= 2 * Margin;
-
-                       widthRatio = 1f;
-                       heightRatio = 1f;
-
-                       Rectangle cb = ClientRectangle;
-
-                       rText.X = cb.X;
-                       rText.Y = cb.Y;
-
-                       if (horizontalStretch) {
-                               widthRatio = (float)cb.Width / (float)rText.Width;
-                               if (!verticalStretch)
-                                       heightRatio = widthRatio;
-                       }
-
-                       if (verticalStretch) {
-                               heightRatio = (float)cb.Height / (float)rText.Height;
-                               if (!horizontalStretch)
-                                       widthRatio = heightRatio;
-                       }
-
-                       rText.Width = (int)(widthRatio * (float)rText.Width);
-                       rText.Height = (int)(heightRatio * (float)rText.Height);
-
-                       switch (TextAlignment)
-                       {
-                       case Alignment.TopLeft:     //ok
-                               rText.X = cb.X;
-                               rText.Y = cb.Y;
-                               break;
-                       case Alignment.Top:   //ok
-                               rText.Y = cb.Y;
-                               rText.X = cb.X + cb.Width / 2 - rText.Width / 2;
-                               break;
-                       case Alignment.TopRight:    //ok
-                               rText.Y = cb.Y;
-                               rText.X = cb.Right - rText.Width;
-                               break;
-                       case Alignment.Left://ok
-                               rText.X = cb.X;
-                               rText.Y = cb.Y + cb.Height / 2 - rText.Height / 2;
-                               break;
-                       case Alignment.Right://ok
-                               rText.X = cb.X + cb.Width - rText.Width;
-                               rText.Y = cb.Y + cb.Height / 2 - rText.Height / 2;
-                               break;
-                       case Alignment.Bottom://ok
-                               rText.X = cb.Width / 2 - rText.Width / 2;
-                               rText.Y = cb.Height - rText.Height;
-                               break;
-                       case Alignment.BottomLeft://ok
-                               rText.X = cb.X;
-                               rText.Y = cb.Bottom - rText.Height;
-                               break;
-                       case Alignment.BottomRight://ok
-                               rText.Y = cb.Bottom - rText.Height;
-                               rText.X = cb.Right - rText.Width;
-                               break;
-                       case Alignment.Center://ok
-                               rText.X = cb.X + cb.Width / 2 - rText.Width / 2;
-                               //rText.Y = cb.Y + cb.Height / 2 - rText.Height / 2;
-                               rText.Y = cb.Y + (int)Math.Floor((double)cb.Height / 2.0 - (double)rText.Height / 2.0);
-                               break;
-                       }
-
-                       //gr.FontMatrix = new Matrix(widthRatio * (float)Font.Size, 0, 0, heightRatio * (float)Font.Size, 0, 0);
-                       fe = gr.FontExtents;
-
-                       #region draw text cursor
-                       if (HasFocus && Selectable)
-                       {
-                               if (mouseLocalPos >= 0)
-                               {
-                                       computeTextCursor(gr);
-
-                                       if (SelectionInProgress)
-                                       {
-                                               if (SelBegin < 0){
-                                                       SelBegin = new Point(CurrentColumn, CurrentLine);
-                                                       SelStartCursorPos = textCursorPos;
-                                                       SelRelease = -1;
-                                               }else{
-                                                       SelRelease = new Point(CurrentColumn, CurrentLine);
-                                                       if (SelRelease == SelBegin)
-                                                               SelRelease = -1;
-                                                       else
-                                                               SelEndCursorPos = textCursorPos;
-                                               }
-                                       }else
-                                               computeTextCursorPosition(gr);
-                               }else
-                                       computeTextCursorPosition(gr);
-
-                               Foreground.SetAsSource (IFace, gr);
-                               gr.LineWidth = 1.0;
-                               gr.MoveTo (0.5 + textCursorPos + rText.X, rText.Y + CurrentLine * (fe.Ascent+fe.Descent));
-                               gr.LineTo (0.5 + textCursorPos + rText.X, rText.Y + (CurrentLine + 1) * (fe.Ascent+fe.Descent));
-                               gr.Stroke();
-                       }
-                       #endregion
-
-                       //****** debug selection *************
-//                     if (SelRelease >= 0) {
-//                             new SolidColor(Color.DarkGreen).SetAsSource(gr);
-//                             Rectangle R = new Rectangle (
-//                                                  rText.X + (int)SelEndCursorPos - 3,
-//                                                  rText.Y + (int)(SelRelease.Y * (fe.Ascent+fe.Descent)),
-//                                                  6,
-//                                                  (int)(fe.Ascent+fe.Descent));
-//                             gr.Rectangle (R);
-//                             gr.Fill ();
-//                     }
-//                     if (SelBegin >= 0) {
-//                             new SolidColor(Color.DarkRed).SetAsSource(gr);
-//                             Rectangle R = new Rectangle (
-//                                     rText.X + (int)SelStartCursorPos - 3,
-//                                     rText.Y + (int)(SelBegin.Y * (fe.Ascent+fe.Descent)),
-//                                     6,
-//                                     (int)(fe.Ascent+fe.Descent));
-//                             gr.Rectangle (R);
-//                             gr.Fill ();
-//                     }
-                       //*******************
-
-                       for (int i = 0; i < lines.Count; i++) {
-                               string l = lines [i].Replace ("\t", new String (' ', Interface.TAB_SIZE));
-                               int lineLength = (int)gr.TextExtents (l).XAdvance;
-                               Rectangle lineRect = new Rectangle (
-                                       rText.X,
-                                       rText.Y + i * (int)(fe.Ascent+fe.Descent),
-                                       lineLength,
-                                       (int)(fe.Ascent+fe.Descent));
-
-//                             if (TextAlignment == Alignment.Center ||
-//                                     TextAlignment == Alignment.Top ||
-//                                     TextAlignment == Alignment.Bottom)
-//                                     lineRect.X += (rText.Width - lineLength) / 2;
-//                             else if (TextAlignment == Alignment.Right ||
-//                                     TextAlignment == Alignment.TopRight ||
-//                                     TextAlignment == Alignment.BottomRight)
-//                                     lineRect.X += (rText.Width - lineLength);
-                               if (string.IsNullOrWhiteSpace (l))
-                                       continue;
-
-                               Foreground.SetAsSource (IFace, gr);
-                               gr.MoveTo (lineRect.X,(double)rText.Y + fe.Ascent + (fe.Ascent+fe.Descent) * i) ;
-
-                gr.ShowText (l);
-                               gr.Fill ();
-
-                               if (Selectable) {
-                                       if (SelRelease >= 0 && i >= selectionStart.Y && i <= selectionEnd.Y) {
-                                               gr.SetSource (selBackground);
-
-                                               Rectangle selRect = lineRect;
-
-                                               int cpStart = (int)SelStartCursorPos,
-                                               cpEnd = (int)SelEndCursorPos;
-
-                                               if (SelBegin.Y > SelRelease.Y) {
-                                                       cpStart = cpEnd;
-                                                       cpEnd = (int)SelStartCursorPos;
-                                               }
-
-                                               if (i == selectionStart.Y) {
-                                                       selRect.Width -= cpStart;
-                                                       selRect.Left += cpStart;
-                                               }
-                                               if (i == selectionEnd.Y)
-                                                       selRect.Width -= (lineLength - cpEnd);
-
-                                               gr.Rectangle (selRect);
-                                               gr.FillPreserve ();
-                                               gr.Save ();
-                                               gr.Clip ();
-                                               gr.SetSource (SelectionForeground);
-                                               gr.MoveTo (lineRect.X, rText.Y + fe.Ascent + (fe.Ascent+fe.Descent) * i);
-                                               gr.ShowText (l);
-                                               gr.Fill ();
-                                               gr.Restore ();
-                                       }
-                               }
-                       }
-
-                       gr.Restore ();
-                       DbgLogger.EndEvent (DbgEvtType.GODraw);
-               }
-               #endregion
-
-               #region Mouse handling
-               void updatemouseLocalPos(Point mpos){
-                       mouseLocalPos = mpos - ScreenCoordinates(Slot).TopLeft - ClientRectangle.TopLeft;
-                       mouseLocalPos.X -= xTranslation;
-                       if (mouseLocalPos.X < 0)
-                               mouseLocalPos.X = 0;
-                       if (mouseLocalPos.Y < 0)
-                               mouseLocalPos.Y = 0;
-               }
-               protected override void onFocused (object sender, EventArgs e)
-               {
-                       base.onFocused (sender, e);
-
-                       if (!_selectable)
-                               return;
-                       SelBegin = new Point(0,0);
-                       SelRelease = new Point (lines.LastOrDefault ().Length, lines.Count-1);
-                       RegisterForRedraw ();
-               }
-               protected override void onUnfocused (object sender, EventArgs e)
-               {
-                       base.onUnfocused (sender, e);
-
-                       SelBegin = -1;
-                       SelRelease = -1;
-                       RegisterForRedraw ();
-               }
-               public override void onMouseMove (object sender, MouseMoveEventArgs e)
-               {
-                       base.onMouseMove (sender, e);
-
-                       if (!(SelectionInProgress && HasFocus && _selectable))
-                               return;
-
-                       updatemouseLocalPos (e.Position);
-
-                       RegisterForRedraw();
-               }
-               public override void onMouseDown (object sender, MouseButtonEventArgs e)
-               {
-                       if (HasFocus) {
-                               if (_selectable) {
-                                       updatemouseLocalPos (e.Position);
-                                       SelBegin = -1;
-                                       SelRelease = -1;
-                                       SelectionInProgress = true;
-                                       RegisterForRedraw ();//TODO:should put it in properties
-                               }
-                       }
-
-                       //done at the end to set 'hasFocus' value after testing it
-                       base.onMouseDown (sender, e);
-               }
-               public override void onMouseUp (object sender, MouseButtonEventArgs e)
-               {
-                       base.onMouseUp (sender, e);
-                       if (!(HasFocus || _selectable))
-                               return;
-                       if (!SelectionInProgress)
-                               return;
-
-                       updatemouseLocalPos (e.Position);
-                       SelectionInProgress = false;
-                       RegisterForRedraw ();
-               }
-               public override void onMouseDoubleClick (object sender, MouseButtonEventArgs e)
-               {
-                       base.onMouseDoubleClick (sender, e);
-                       if (!(this.HasFocus || _selectable))
-                               return;
-                       
-                       GotoWordStart ();
-                       SelBegin = CurrentPosition;
-                       GotoWordEnd ();
-                       SelRelease = CurrentPosition;
-                       SelectionInProgress = false;
-                       RegisterForRedraw ();
-               }
-               #endregion
-
-               /// <summary>
-               /// Update Current Column, line and TextCursorPos
-               /// from mouseLocalPos
-               /// </summary>
-               void computeTextCursor(Context gr)
-               {
-                       TextExtents te;
-
-                       double cPos = 0f;
-
-                       CurrentLine = (int)(mouseLocalPos.Y / (fe.Ascent+fe.Descent));
-
-                       //fix cu
-                       if (CurrentLine >= lines.Count)
-                               CurrentLine = lines.Count - 1;
-
-                       switch (TextAlignment) {
-                       case Alignment.Center:
-                       case Alignment.Top:
-                       case Alignment.Bottom:
-                               cPos+= ClientRectangle.Width - gr.TextExtents(lines [CurrentLine]).Width/2.0;
-                               break;
-                       case Alignment.Right:
-                       case Alignment.TopRight:
-                       case Alignment.BottomRight:
-                               cPos += ClientRectangle.Width - gr.TextExtents(lines [CurrentLine]).Width;
-                               break;
-                       }
-
-                       for (int i = 0; i < lines[CurrentLine].Length; i++)
-                       {
-                               string c = lines [CurrentLine].Substring (i, 1);
-                               if (c == "\t")
-                                       c = new string (' ', Interface.TAB_SIZE);
-
-                               te = gr.TextExtents(c);
-
-                               double halfWidth = te.XAdvance / 2;
-
-                               if (mouseLocalPos.X <= cPos + halfWidth)
-                               {
-                                       CurrentColumn = i;
-                                       textCursorPos = cPos;
-                                       mouseLocalPos = -1;
-                                       return;
-                               }
-
-                               cPos += te.XAdvance;
-                       }
-                       CurrentColumn = lines[CurrentLine].Length;
-                       textCursorPos = cPos;
-
-                       //reset mouseLocalPos
-                       mouseLocalPos = -1;
-               }
-               /// <summary> Computes offsets in cairo units </summary>
-               void computeTextCursorPosition(Context gr)
-               {
-                       if (SelBegin >= 0)
-                               SelStartCursorPos = GetXFromTextPointer (gr, SelBegin);
-                       if (SelRelease >= 0)
-                               SelEndCursorPos = GetXFromTextPointer (gr, SelRelease);
-                       textCursorPos = GetXFromTextPointer (gr, new Point(CurrentColumn, CurrentLine));
-               }
-               /// <summary> Compute x offset in cairo unit from text position </summary>
-               double GetXFromTextPointer(Context gr, Point pos)
-               {
-                       try {
-                               string l = lines [pos.Y].Substring (0, pos.X).
-                                       Replace ("\t", new String (' ', Interface.TAB_SIZE));
-                               return gr.TextExtents (l).XAdvance;
-                       } catch{
-                               return -1;
-                       }
-               }
-    }
-}
diff --git a/Crow/src/Widgets/OldTextBox.cs b/Crow/src/Widgets/OldTextBox.cs
deleted file mode 100644 (file)
index c236bf4..0000000
+++ /dev/null
@@ -1,186 +0,0 @@
-// Copyright (c) 2013-2021  Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
-//
-// This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
-
-using Crow.Cairo;
-using Glfw;
-using System;
-
-namespace Crow
-{
-       [Obsolete]
-       public class OldTextBox : OldLabel
-    {
-               #region CTOR
-               protected OldTextBox() {}
-               public OldTextBox(Interface iface, string style = null) : base (iface, style) { }
-               #endregion
-
-               #region GraphicObject overrides
-               [XmlIgnore]public override bool HasFocus   //trigger update when lost focus to errase text beam
-        {
-            get => base.HasFocus;
-            set {
-                               if (base.HasFocus == value)
-                                       return;
-                base.HasFocus = value;
-                RegisterForRedraw();
-            }
-        }
-
-               protected override void onDraw (Context gr)
-               {
-                       base.onDraw (gr);
-               }
-               #endregion
-                       
-        #region Keyboard handling
-               public override void onKeyDown (object sender, KeyEventArgs e)
-               {
-                       Key key = e.Key;
-
-                       switch (key)
-                       {
-                       case Key.Backspace:
-                               if (CurrentPosition == 0)
-                                       return;
-                               DeleteChar();
-                               break;
-                       case Key.Delete:
-                               if (selectionIsEmpty) {
-                                       if (!MoveRight ())
-                                               return;
-                               }else if (IFace.Shift)
-                                       IFace.Clipboard = SelectedText;
-                               DeleteChar ();
-                               break;
-                       case Key.KeypadEnter:
-                       case Key.Enter:
-                               if (!selectionIsEmpty)
-                                       DeleteChar ();
-                               if (Multiline)
-                                       InsertLineBreak ();
-                               else
-                                       OnTextChanged(this,new TextChangeEventArgs(default));
-                               break;
-                       case Key.Escape:
-                               Text = "";
-                               CurrentColumn = 0;
-                               SelRelease = -1;
-                               break;
-                       case Key.Home:
-                               if (IFace.Shift) {
-                                       if (selectionIsEmpty)
-                                               SelBegin = new Point (CurrentColumn, CurrentLine);
-                                       if (IFace.Ctrl)
-                                               CurrentLine = 0;
-                                       CurrentColumn = 0;
-                                       SelRelease = new Point (CurrentColumn, CurrentLine);
-                                       break;
-                               }
-                               SelRelease = -1;
-                               if (IFace.Ctrl)
-                                       CurrentLine = 0;
-                               CurrentColumn = 0;
-                               break;
-                       case Key.End:
-                               if (IFace.Shift) {
-                                       if (selectionIsEmpty)
-                                               SelBegin = CurrentPosition;
-                                       if (IFace.Ctrl)
-                                               CurrentLine = int.MaxValue;
-                                       CurrentColumn = int.MaxValue;
-                                       SelRelease = CurrentPosition;
-                                       break;
-                               }
-                               SelRelease = -1;
-                               if (IFace.Ctrl)
-                                       CurrentLine = int.MaxValue;
-                               CurrentColumn = int.MaxValue;
-                               break;
-                       case Key.Insert:
-                               if (IFace.Shift)
-                                       this.Insert (IFace.Clipboard);
-                               else if (IFace.Ctrl && !selectionIsEmpty)
-                                       IFace.Clipboard = this.SelectedText;
-                               break;
-                       case Key.Left:
-                               if (IFace.Shift) {
-                                       if (selectionIsEmpty)
-                                               SelBegin = new Point(CurrentColumn, CurrentLine);
-                                       if (IFace.Ctrl)
-                                               GotoWordStart ();
-                                       else if (!MoveLeft ())
-                                               return;
-                                       SelRelease = CurrentPosition;
-                                       break;
-                               }
-                               SelRelease = -1;
-                               if (IFace.Ctrl)
-                                       GotoWordStart ();
-                               else
-                                       MoveLeft();
-                               break;
-                       case Key.Right:
-                               if (IFace.Shift) {
-                                       if (selectionIsEmpty)
-                                               SelBegin = CurrentPosition;
-                                       if (IFace.Ctrl)
-                                               GotoWordEnd ();
-                                       else if (!MoveRight ())
-                                               return;
-                                       SelRelease = CurrentPosition;
-                                       break;
-                               }
-                               SelRelease = -1;
-                               if (IFace.Ctrl)
-                                       GotoWordEnd ();
-                               else
-                                       MoveRight ();
-                               break;
-                       case Key.Up:
-                               if (IFace.Shift) {
-                                       if (selectionIsEmpty)
-                                               SelBegin = CurrentPosition;
-                                       CurrentLine--;
-                                       SelRelease = CurrentPosition;
-                                       break;
-                               }
-                               SelRelease = -1;
-                               CurrentLine--;
-                               break;
-                       case Key.Down:
-                               if (IFace.Shift) {
-                                       if (selectionIsEmpty)
-                                               SelBegin = CurrentPosition;
-                                       CurrentLine++;
-                                       SelRelease = CurrentPosition;
-                                       break;
-                               }
-                               SelRelease = -1;
-                               CurrentLine++;                          
-                               break;
-                       case Key.Tab:
-                               this.Insert ("\t");
-                               break;
-                       default:
-                               break;
-                       }
-                       e.Handled = true;
-                       base.onKeyDown (sender, e);
-                       RegisterForGraphicUpdate ();
-               }
-               public override void onKeyPress (object sender, KeyPressEventArgs e)
-               {
-                       base.onKeyPress (sender, e);
-
-                       this.Insert (e.KeyChar.ToString());
-
-                       SelRelease = -1;
-                       SelBegin = new Point(CurrentColumn, SelBegin.Y);
-
-                       RegisterForGraphicUpdate();
-               }
-        #endregion
-       } 
-}
index d7d269b4922a9293f28f3145f46db8ff98b7674b..b08e18570ad9137f7a586b0b5ffca6172bfbbdc2 100644 (file)
@@ -3,7 +3,7 @@
 // This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
 
 using System;
-using Crow.Cairo;
+using Crow.Drawing;
 using static Crow.Logger;
 namespace Crow
 {
@@ -220,7 +220,7 @@ namespace Crow
                                                gr.Rectangle(Clipping.GetRectangle(i));
                                        gr.ClipPreserve();
                                        gr.Operator = Operator.Clear;
-                                       gr.Fill();
+                                       gr.Fill();                                      
                                        gr.Operator = Operator.Over;
 
                                        onDraw (gr);
index ca9a1a3dca27a05f7acf437f0fd00b30bd96966b..bcf9a5f9ef66c22782f05241d6704b9a9a3dc31c 100644 (file)
@@ -3,7 +3,7 @@
 // This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
 
 using System.ComponentModel;
-using Crow.Cairo;
+
 
 namespace Crow
 {
index c56dd30c69361c7932b5ee004c42eb95338d3890..6fc235225acdc629b8509652947286815c2783cf 100644 (file)
@@ -3,7 +3,7 @@
 // This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
 
 using System;
-using Crow.Cairo;
+using Crow.Drawing;
 
 namespace Crow
 {
index 314a7503ea6ca66e80c7ec4e7834b8ae64123b59..3a386e2d6b220082766a3e8871ae937caca5ca5b 100644 (file)
@@ -1,10 +1,10 @@
-// Copyright (c) 2013-2020  Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
+// Copyright (c) 2013-2021  Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
 //
 // This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
 
 using System;
 using System.ComponentModel;
-using Crow.Cairo;
+using Crow.Drawing;
 using Glfw;
 
 namespace Crow
@@ -187,8 +187,9 @@ namespace Crow
                        Background.SetAsSource (IFace, gr, rBack);
                        CairoHelpers.CairoRectangle(gr,rBack, CornerRadius);
                        gr.Fill ();
-
+               
                        gr.Save ();
+
                        if (ClipToClientRect) {
                                //clip to scrolled client zone
                                CairoHelpers.CairoRectangle (gr, ClientRectangle, CornerRadius);
@@ -196,8 +197,12 @@ namespace Crow
                        }
 
                        gr.Translate (-ScrollX, -ScrollY);
+
                        if (child != null)
                                child.Paint (gr);
+                       
+                       //gr.Translate (ScrollX, ScrollY);
+
                        gr.Restore ();
                }
 
index b00bb2113410b155457a0918dbca056fe1693c0f..6bda175c934e99c406b40ab7f485582bd4b04d45 100644 (file)
@@ -4,7 +4,7 @@
 
 using System;
 using System.ComponentModel;
-using Crow.Cairo;
+using Crow.Drawing;
 
 namespace Crow {
        public class ScrollingStack : GenericStack {
index dd8fefdf71430bb1f3852bd514b871d93b595890..a70a3a9ed2ac6ed22ec1f25c1778a422ed8d1ae1 100644 (file)
@@ -6,7 +6,7 @@ using System;
 using System.ComponentModel;
 using System.IO;
 using System.Text;
-using Crow.Cairo;
+using Crow.Drawing;
 
 namespace Crow
 {
@@ -219,7 +219,8 @@ namespace Crow
                                        widthRatio = heightRatio;
                        }
 
-                       gr.Save ();
+                       Matrix m = gr.Matrix;
+                       //gr.Save ();
 
                        gr.Translate (cr.Left, cr.Top);
                        gr.Scale (widthRatio, heightRatio);
@@ -231,7 +232,8 @@ namespace Crow
                        using (PathParser parser = new PathParser (path))
                                parser.Draw (gr);
 
-                       gr.Restore ();
+                       //gr.Restore ();
+                       gr.Matrix = m;
                }
 
 
index d89ae705cd77bd1363a859154bfa9f1532803f02..8e197fda72d7072eff58c24bcebe60cbdf38f863 100644 (file)
@@ -2,7 +2,7 @@
 //
 // This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
 
-using Crow.Cairo;
+
 using System;
 using System.ComponentModel;
 
index 8872b92b31de6e73004970f2d132c7498ae33e92..d8108695757481357385971955c1aa9d64d9ddb5 100644 (file)
@@ -4,7 +4,7 @@
 
 using System;
 using System.ComponentModel;
-using Crow.Cairo;
+
 using System.Linq;
 
 namespace Crow
index a683dd780a255ceb8919274f4873f3d1a9524770..c712cb3de95e3ad4edfdfe08a166cbf31de0ded3 100644 (file)
@@ -4,7 +4,7 @@
 using System;
 using System.ComponentModel;
 using System.Linq;
-using Crow.Cairo;
+using Crow.Drawing;
 
 namespace Crow
 {
index 2184d48663065ad057f89fab5084a46e74bcd6df..1579af7ad86f9305f14d320c9ba9e34059a8688e 100644 (file)
@@ -4,7 +4,7 @@
 using System;
 using System.ComponentModel;
 using System.Linq;
-using Crow.Cairo;
+
 using Glfw;
 
 namespace Crow
index fbb0e7c450f007d145cbb772aa90c539f24b78a8..2c6db331668f4a3c093d31fd75a30f30d517f746 100644 (file)
@@ -4,7 +4,7 @@
 using System;
 using System.ComponentModel;
 using System.Linq;
-using Crow.Cairo;
+
 using Glfw;
 
 namespace Crow
index 3d0d425802f6b184f04d0ba699357612204573cd..822ac5d06115b0046681434a84ab0aaa4e969ed6 100644 (file)
@@ -5,9 +5,7 @@
 using System;
 using System.ComponentModel;
 using System.IO;
-using System.Reflection;
-using System.Xml;
-using Crow.Cairo;
+using Crow.Drawing;
 
 namespace Crow
 {
@@ -82,26 +80,26 @@ namespace Crow
                //public override T FindByType<T> () => this is TemplatedControl tg ? tg : default (T);
                public Widget FindByNameInTemplate (string nameToFind) => child?.FindByName (nameToFind);
                /// <summary>
-               ///onDraw is overrided to prevent default drawing of background, template top container
+               ///onDraw is overriden to prevent default drawing of background, template top container
                ///may have a binding to root background or a fixed one.
                ///this allow applying root background to random template's component
                /// </summary>
                /// <param name="gr">Backend context</param>
                protected override void onDraw (Context gr)
                {
-                       DbgLogger.StartEvent (DbgEvtType.GODraw, this);
-
-                       gr.Save ();
+                       DbgLogger.StartEvent (DbgEvtType.GODraw, this);                 
 
                        if (ClipToClientRect) {
                                //clip to client zone
+                               gr.Save ();
                                CairoHelpers.CairoRectangle (gr, ClientRectangle, CornerRadius);
                                gr.Clip ();
                        }
                        
                        child?.Paint (gr);
 
-                       gr.Restore ();
+                       if (ClipToClientRect)
+                               gr.Restore ();
 
                        DbgLogger.EndEvent (DbgEvtType.GODraw);
                }
index 2ebede8e1f0164d0286340349c501f014447c305..11a206e98cab62660d2bb25bf65c2e9fc9e2eb49 100644 (file)
@@ -8,7 +8,7 @@ using System.Collections.Generic;
 using System.ComponentModel;
 using System.Linq;
 using System.Threading;
-using Crow.Cairo;
+
 using Crow.IML;
 
 namespace Crow {
diff --git a/Crow/src/Widgets/TestCairoPatch.cs b/Crow/src/Widgets/TestCairoPatch.cs
deleted file mode 100644 (file)
index 99230a0..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-// Copyright (c) 2013-2020  Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
-//
-// This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
-
-using System;
-using Crow.Cairo;
-
-namespace Crow
-{
-       public class TestCairoPatch : Widget
-       {
-               void computeControlPoints (
-                       double xc, double yc,
-                       double x1, double y1,
-                       out double x2, out double y2,
-                       out double x3, out double y3,
-                       double x4, double y4){
-                       double ax = x1 - xc;
-                       double ay = y1 - yc;
-                       double bx = x4 - xc;
-                       double byy = y4 - yc;
-                       double q1 = ax * ax + ay * ay;
-                       double q2 = q1 + ax * bx + ay * byy;
-                       double k2 = 4.0/3.0 * (Math.Sqrt(2.0 * q1 * q2) - q2) / (ax * byy - ay * bx);
-
-
-                       x2 = xc + ax - k2 * ay;
-                       y2 = yc + ay + k2 * ax;
-                       x3 = xc + bx + k2 * byy;
-                       y3 = yc + byy - k2 * bx;
-               }
-               protected override void onDraw (Context gr)
-               {
-                       base.onDraw (gr);
-
-                       double radius = Math.Min (ClientRectangle.Width, ClientRectangle.Height) / 2;
-
-                       double pi3 = Math.PI / 3.0;
-
-                       MeshPattern mp = new MeshPattern ();
-
-                       double x1 = radius,y1 = 0,
-                       x2 = 0, y2 = 0, x3 = 0, y3 = 0, x4 = 0, y4 = 0,
-                       xc = radius,yc = radius;
-
-                       double dx = Math.Sin (pi3) * radius;
-                       double dy = Math.Cos (pi3) * radius;
-
-                       mp.BeginPatch ();
-                       mp.MoveTo (xc, yc);
-                       mp.LineTo (x1, y1);
-                       x4 = xc + dx;
-                       y4 = yc - dy;
-                       computeControlPoints (xc, yc, x1, y1, out x2, out y2, out x3, out y3, x4, y4);
-                       mp.CurveTo (x2, y2, x3, y3, x4, y4);
-
-                       mp.SetCornerColorRGB (0, 1, 1, 1);
-                       mp.SetCornerColorRGB (1, 1, 0, 0);
-                       mp.SetCornerColorRGB (2, 1, 1, 0);
-
-                       x1 = x4;
-                       y1 = y4;
-                       y4 = yc + dy;
-
-                       computeControlPoints (xc, yc, x1, y1, out x2, out y2, out x3, out y3, x4, y4);
-                       mp.CurveTo (x2, y2, x3, y3, x4, y4);
-
-                       mp.SetCornerColorRGB (3, 0, 1, 0);
-                       mp.EndPatch ();
-
-                       x1 = x4;
-                       y1 = y4;
-                       x4 = xc;
-                       y4 = yc * 2.0;
-
-                       mp.BeginPatch ();
-                       mp.MoveTo (xc, yc);
-                       mp.LineTo (x1, y1);
-                       computeControlPoints (xc, yc, x1, y1, out x2, out y2, out x3, out y3, x4, y4);
-                       mp.CurveTo (x2, y2, x3, y3, x4, y4);
-
-                       mp.SetCornerColorRGB (0, 1, 1, 1);
-                       mp.SetCornerColorRGB (1, 0, 1, 0);
-                       mp.SetCornerColorRGB (2, 0, 1, 1);
-
-                       x1 = x4;
-                       y1 = y4;
-                       x4 = xc-dx;
-                       y4 = yc+dy;
-
-                       computeControlPoints (xc, yc, x1, y1, out x2, out y2, out x3, out y3, x4, y4);
-                       mp.CurveTo (x2, y2, x3, y3, x4, y4);
-
-                       mp.SetCornerColorRGB (3, 0, 0, 1);
-                       mp.EndPatch ();
-
-                       x1 = x4;
-                       y1 = y4;
-                       y4 = yc - dy;
-
-                       mp.BeginPatch ();
-                       mp.MoveTo (xc, yc);
-                       mp.LineTo (x1, y1);
-                       computeControlPoints (xc, yc, x1, y1, out x2, out y2, out x3, out y3, x4, y4);
-                       mp.CurveTo (x2, y2, x3, y3, x4, y4);
-
-                       mp.SetCornerColorRGB (0, 1, 1, 1);
-                       mp.SetCornerColorRGB (1, 0, 0, 1);
-                       mp.SetCornerColorRGB (2, 1, 0, 1);
-
-                       x1 = x4;
-                       y1 = y4;
-                       x4 = radius;
-                       y4 = 0;
-
-                       computeControlPoints (xc, yc, x1, y1, out x2, out y2, out x3, out y3, x4, y4);
-                       mp.CurveTo (x2, y2, x3, y3, x4, y4);
-
-                       mp.SetCornerColorRGB (3, 1, 0, 0);
-                       mp.EndPatch ();
-
-                       gr.SetSource (mp);
-                       gr.Paint ();
-               }
-       }
-}
-
index 8bce13221310ee84844322f5d22479b41238386a..aebcc071f57df7de028c3d34542c76a76225bece 100644 (file)
@@ -2,12 +2,13 @@
 //
 // This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
 
-using Crow.Cairo;
-using Crow.Text;
-using Glfw;
 using System;
 using System.ComponentModel;
 
+using Crow.Text;
+using Crow.Drawing;
+using Glfw;
+
 namespace Crow
 {
        public class TextBox : Label
diff --git a/Crow/src/Widgets/TextRun.cs b/Crow/src/Widgets/TextRun.cs
deleted file mode 100644 (file)
index d118974..0000000
+++ /dev/null
@@ -1,278 +0,0 @@
-// Copyright (c) 2013-2020  Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
-//
-// This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Linq;
-using System.Text.RegularExpressions;
-using Crow.Cairo;
-
-namespace Crow
-{
-       [DesignIgnore]
-       public class TextRun : Widget
-       {
-               #region CTOR
-               protected TextRun () {}
-               public TextRun (Interface iface, string style = null) : base (iface, style) { }
-               #endregion
-
-               #region private and protected fields
-               protected string _text = "label";
-               Alignment _textAlignment = Alignment.Left;
-               bool horizontalStretch = false;
-               bool verticalStretch = false;
-               bool _multiline;
-               bool wordWrap;
-               protected Rectangle rText;
-               protected float widthRatio = 1f;
-               protected float heightRatio = 1f;
-               protected FontExtents fe;
-               protected TextExtents te;
-               #endregion
-               
-               [DefaultValue (Alignment.Left)]
-               public Alignment TextAlignment {
-                       get { return _textAlignment; }
-                       set { _textAlignment = value; }
-               }
-               
-               [DefaultValue (false)]
-               public virtual bool HorizontalStretch {
-                       get { return horizontalStretch; }
-                       set {
-                               if (horizontalStretch == value)
-                                       return;
-                               horizontalStretch = value;
-                               RegisterForRedraw ();
-                               NotifyValueChangedAuto (horizontalStretch);
-                       }
-               }
-               
-               [DefaultValue (false)]
-               public virtual bool VerticalStretch {
-                       get { return verticalStretch; }
-                       set {
-                               if (verticalStretch == value)
-                                       return;
-                               verticalStretch = value;
-                               RegisterForRedraw ();
-                               NotifyValueChangedAuto (verticalStretch);
-                       }
-               }
-               
-               [DefaultValue ("label")]
-               public string Text {
-                       get {
-                               return lines == null ?
-                                       _text : lines.Aggregate ((i, j) => i + Interface.LineBreak + j);
-                       }
-                       set {
-                               if (_text == value)
-                                       return;
-
-                               RegisterForGraphicUpdate ();
-
-                               _text = value;
-
-                               if (string.IsNullOrEmpty (_text))
-                                       _text = "";
-
-                               lines = getLines;
-                       }
-               }
-               
-               [DefaultValue (false)]
-               public bool Multiline {
-                       get { return _multiline; }
-                       set {
-                               _multiline = value;
-                               RegisterForGraphicUpdate ();
-                       }
-               }
-               
-               [DefaultValue (false)]
-               public bool WordWrap {
-                       get {
-                               return wordWrap;
-                       }
-                       set {
-                               if (wordWrap == value)
-                                       return;
-                               wordWrap = value;
-                               RegisterForGraphicUpdate ();
-                       }
-               }
-
-               List<string> lines;
-               List<string> getLines {
-                       get {
-                               return _multiline ?
-                                       Regex.Split (_text, "\r\n|\r|\n").ToList () :
-                                       new List<string> (new string [] { _text });
-                       }
-               }
-
-               #region GraphicObject overrides
-               public override int measureRawSize (LayoutingType lt)
-               {
-                       if (lines == null)
-                               lines = getLines;
-                               
-                       using (Context gr = new Context (IFace.surf)) {
-                               //Cairo.FontFace cf = gr.GetContextFontFace ();
-
-                               gr.SelectFontFace (Font.Name, Font.Slant, Font.Wheight);
-                               gr.SetFontSize (Font.Size);
-
-
-                               fe = gr.FontExtents;
-                               te = new TextExtents ();
-
-                               if (lt == LayoutingType.Height) {
-                                       int lc = lines.Count;
-                                       //ensure minimal height = text line height
-                                       if (lc == 0)
-                                               lc = 1;
-
-                                       return (int)(fe.Height * lc) + Margin * 2;
-                               }
-
-                               foreach (string s in lines) {
-                                       string l = s.Replace("\t", new String (' ', Interface.TAB_SIZE));
-                                       TextExtents tmp = gr.TextExtents (l);
-                                       if (tmp.XAdvance > te.XAdvance)
-                                               te = tmp;
-                               }
-                               return (int)Math.Ceiling (te.XAdvance) + Margin * 2;
-                       }
-               }
-               protected override void onDraw (Context gr)
-               {
-                       base.onDraw (gr);
-
-                       gr.SelectFontFace (Font.Name, Font.Slant, Font.Wheight);
-                       gr.SetFontSize (Font.Size);
-                       gr.FontOptions = Interface.FontRenderingOptions;
-                       gr.Antialias = Interface.Antialias;
-
-                       rText = new Rectangle (new Size (
-                               measureRawSize (LayoutingType.Width), measureRawSize (LayoutingType.Height)));
-                       rText.Width -= 2 * Margin;
-                       rText.Height -= 2 * Margin;
-
-                       widthRatio = 1f;
-                       heightRatio = 1f;
-
-                       Rectangle cb = ClientRectangle;
-
-                       //ignore text alignment if size to content = true
-                       //or if text size is larger than client bounds
-                       if (Width < 0 || Height < 0 || rText.Width > cb.Width) {
-                               rText.X = cb.X;
-                               rText.Y = cb.Y;
-                       } else {
-                               if (horizontalStretch) {
-                                       widthRatio = (float)cb.Width / rText.Width;
-                                       if (!verticalStretch)
-                                               heightRatio = widthRatio;
-                               }
-                               if (verticalStretch) {
-                                       heightRatio = (float)cb.Height / rText.Height;
-                                       if (!horizontalStretch)
-                                               widthRatio = heightRatio;
-                               }
-
-                               rText.Width = (int)(widthRatio * cb.Width);
-                               rText.Height = (int)(heightRatio * cb.Height);
-
-                               switch (TextAlignment) {
-                               case Alignment.TopLeft:     //ok
-                                       rText.X = cb.X;
-                                       rText.Y = cb.Y;
-                                       break;
-                               case Alignment.Top:   //ok                                              
-                                       rText.Y = cb.Y;
-                                       rText.X = cb.X + cb.Width / 2 - rText.Width / 2;
-                                       break;
-                               case Alignment.TopRight:    //ok
-                                       rText.Y = cb.Y;
-                                       rText.X = cb.Right - rText.Width;
-                                       break;
-                               case Alignment.Left://ok
-                                       rText.X = cb.X;
-                                       rText.Y = cb.Y + cb.Height / 2 - rText.Height / 2;
-                                       break;
-                               case Alignment.Right://ok
-                                       rText.X = cb.X + cb.Width - rText.Width;
-                                       rText.Y = cb.Y + cb.Height / 2 - rText.Height / 2;
-                                       break;
-                               case Alignment.Bottom://ok
-                                       rText.X = cb.Width / 2 - rText.Width / 2;
-                                       rText.Y = cb.Height - rText.Height;
-                                       break;
-                               case Alignment.BottomLeft://ok
-                                       rText.X = cb.X;
-                                       rText.Y = cb.Bottom - rText.Height;
-                                       break;
-                               case Alignment.BottomRight://ok
-                                       rText.Y = cb.Bottom - rText.Height;
-                                       rText.X = cb.Right - rText.Width;
-                                       break;
-                               case Alignment.Center://ok
-                                       rText.X = cb.X + cb.Width / 2 - rText.Width / 2;
-                                       rText.Y = cb.Y + cb.Height / 2 - rText.Height / 2;
-                                       break;
-                               }
-                       }
-
-                       gr.FontMatrix = new Matrix (widthRatio * Font.Size, 0, 0, heightRatio * Font.Size, 0, 0);
-
-
-                       int curLineCount = 0;
-                       for (int i = 0; i < lines.Count; i++) {
-                               string l = lines [i].Replace ("\t", new String (' ', Interface.TAB_SIZE));
-                               List<string> wl = new List<string> ();
-                               int lineLength = (int)gr.TextExtents (l).XAdvance;
-
-                               if (wordWrap && lineLength > cb.Width) {
-                                       string tmpLine = "";
-                                       int curChar = 0;
-                                       while (curChar < l.Length) {
-                                               tmpLine += l [curChar];
-                                               if ((int)gr.TextExtents (tmpLine).XAdvance > cb.Width) {
-                                                       tmpLine = tmpLine.Remove (tmpLine.Length - 1);
-                                                       wl.Add (tmpLine);
-                                                       tmpLine = "";
-                                                       continue;
-                                               }
-                                               curChar++;
-                                       }
-                                       wl.Add (tmpLine);
-                               } else
-                                       wl.Add (l);
-
-                               foreach (string ll in wl) {
-                                       lineLength = (int)gr.TextExtents (ll).XAdvance;
-
-
-                                       if (string.IsNullOrWhiteSpace (ll)) {
-                                               curLineCount++;
-                                               continue;
-                                       }
-
-                                       Foreground.SetAsSource (IFace, gr);
-                                       gr.MoveTo (rText.X, rText.Y + fe.Ascent + fe.Height * curLineCount);
-
-                                       gr.ShowText (ll);
-                                       gr.Fill ();
-
-                                       curLineCount++;
-                               }
-                       }
-               }
-               #endregion
-       }
-}
diff --git a/Crow/src/Widgets/Trend.cs b/Crow/src/Widgets/Trend.cs
deleted file mode 100644 (file)
index 1a2d137..0000000
+++ /dev/null
@@ -1,164 +0,0 @@
-// Copyright (c) 2013-2020  Jean-Philippe Bruyère <jp_bruyere@hotmail.com>
-//
-// This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
-
-using System.Collections.Generic;
-using System.ComponentModel;
-using Crow.Cairo;
-
-namespace Crow
-{
-       public class Trend : Widget
-       {
-               #region private fields
-               double minValue, maxValue, lowThreshold, highThreshold;
-               Fill lowThresholdFill, highThresholdFill;
-               int nbValues;
-               List<double> values = new List<double>();
-               #endregion
-
-               #region CTOR
-               protected Trend () {}
-               public Trend (Interface iface, string style = null) : base (iface, style) { }
-               #endregion
-
-               public virtual void AddValue (double _value)
-               {
-                       values.Add (_value);
-                       while (values.Count > nbValues)
-                               values.RemoveAt (0);
-                       RegisterForRedraw ();
-               }
-
-               [XmlIgnore]public virtual int NewValue {
-                       set {
-                               AddValue (value);
-                       }
-               }
-               [DefaultValue(400)]
-               public virtual int NbValues {
-                       get { return nbValues; }
-                       set {
-                               if (nbValues == value)
-                                       return;
-
-                               nbValues = value;
-                               NotifyValueChangedAuto (minValue);
-                               RegisterForRedraw ();
-                       }
-               }
-               [DefaultValue(0.0)]
-               public virtual double Minimum {
-                       get { return minValue; }
-                       set {
-                               if (minValue == value)
-                                       return;
-
-                               minValue = value;
-                               NotifyValueChangedAuto (minValue);
-                               RegisterForRedraw ();
-                       }
-               }
-               [DefaultValue(100.0)]
-               public virtual double Maximum
-               {
-                       get { return maxValue; }
-                       set {
-                               if (maxValue == value)
-                                       return;
-
-                               maxValue = value;
-                               NotifyValueChangedAuto (maxValue);
-                               RegisterForRedraw ();
-                       }
-               }
-               [DefaultValue(1.0)]
-               public virtual double LowThreshold {
-                       get { return lowThreshold; }
-                       set {
-                               if (lowThreshold == value)
-                                       return;
-                               lowThreshold = value;
-                               NotifyValueChangedAuto (lowThreshold);
-                               RegisterForGraphicUpdate ();
-                       }
-               }
-               [DefaultValue(80.0)]
-               public virtual double HighThreshold {
-                       get { return highThreshold; }
-                       set {
-                               if (highThreshold == value)
-                                       return;
-                               highThreshold = value;
-                               NotifyValueChangedAuto (highThreshold);
-                               RegisterForGraphicUpdate ();
-                       }
-               }
-               [DefaultValue("DarkRed")]
-               public virtual Fill LowThresholdFill {
-                       get { return lowThresholdFill; }
-                       set {
-                               if (lowThresholdFill == value)
-                                       return;
-                               lowThresholdFill = value;
-                               NotifyValueChangedAuto (lowThresholdFill);
-                               RegisterForRedraw ();
-                       }
-               }
-               [DefaultValue("DarkGreen")]
-               public virtual Fill HighThresholdFill {
-                       get { return highThresholdFill; }
-                       set {
-                               if (highThresholdFill == value)
-                                       return;
-                               highThresholdFill = value;
-                               NotifyValueChangedAuto (highThresholdFill);
-                               RegisterForRedraw ();
-                       }
-               }
-               protected override void onDraw (Context gr)
-               {
-                       base.onDraw (gr);
-
-                       if (values.Count == 0)
-                               return;
-                       Rectangle r = ClientRectangle;
-
-                       int i = values.Count -1;
-
-                       double ptrX = (double)r.Right;
-                       double scaleY = (double)r.Height / (Maximum - Minimum);
-                       double stepX = (double)r.Width / (double)(nbValues-1);
-
-                       gr.LineWidth = 1.0;
-                       gr.SetDash (new double[]{ 1.0 },0.0);
-
-
-
-                       LowThresholdFill.SetAsSource (IFace, gr);
-                       gr.MoveTo (r.Left, r.Bottom - LowThreshold * scaleY);
-                       gr.LineTo (r.Right, r.Bottom - LowThreshold * scaleY);
-//                     gr.Rectangle (r.Left, r.Bottom - LowThreshold * scaleY, r.Width, LowThreshold * scaleY);
-                       gr.Stroke();
-
-                       HighThresholdFill.SetAsSource (IFace, gr);
-                       gr.MoveTo (r.Left, (Maximum - HighThreshold) * scaleY);
-                       gr.LineTo (r.Right, (Maximum - HighThreshold) * scaleY);
-//                     gr.Rectangle (r.Left, r.Top, r.Width, (Maximum - HighThreshold) * scaleY);
-                       gr.Stroke();
-
-                       gr.MoveTo (ptrX, values [i] * scaleY);
-
-                       Foreground.SetAsSource (IFace, gr);
-                       gr.SetDash (new double[]{ }, 0.0);
-
-                       while (i >= 0) {
-                                       gr.LineTo (ptrX, r.Bottom - values [i] * scaleY);
-                               ptrX -= stepX;
-                               i--;
-                       }
-                       gr.Stroke ();
-               }
-       }
-}
-
index d595e1648e1b4cccc235d3129e119424b5b071d7..245dddf3892d7b94e35f493bf900c787fce8f581 100644 (file)
@@ -8,9 +8,10 @@ using System.ComponentModel;
 using System.Reflection;
 using System.Reflection.Emit;
 using System.Runtime.CompilerServices;
-using Crow.Cairo;
+
 using System.Diagnostics;
 using Crow.IML;
+using Crow.Drawing;
 using System.Threading;
 using Glfw;
 using System.Linq;
@@ -118,7 +119,11 @@ namespace Crow
                        parentElem.AppendChild (xe);
                }
                public Surface CreateIcon (int dragIconSize = 32) {
+#if VKVG                       
+                       Surface di = new Surface (IFace.vkvgDevice, dragIconSize, dragIconSize);
+#else
                        ImageSurface di = new ImageSurface (Format.Argb32, dragIconSize, dragIconSize);
+#endif
                        using (Context ctx = new Context (di)) {
                                double div = Math.Max (LastPaintedSlot.Width, LastPaintedSlot.Height);
                                double s = (double)dragIconSize / div;
@@ -1886,10 +1891,16 @@ namespace Crow
                #endregion
 
                protected void setFontForContext (Context gr) {
+#if VKVG
+                       gr.FontFace = Font.Name;
+                       gr.FontSize = (uint)Font.Size;
+
+#else
                        gr.SelectFontFace (Font.Name, Font.Slant, Font.Wheight);
                        gr.SetFontSize (Font.Size);
                        gr.FontOptions = Interface.FontRenderingOptions;
                        gr.Antialias = Interface.Antialias;
+#endif
                }
 
                #region Rendering
@@ -1919,10 +1930,19 @@ namespace Crow
                        else if (LastPaintedSlot.Width != Slot.Width || LastPaintedSlot.Height != Slot.Height)
                                bmp.SetSize (Slot.Width, Slot.Height);*/
                        bmp?.Dispose ();
+#if (VKVG)
+                       DbgLogger.StartEvent (DbgEvtType.GOCreateSurface, this);
+                       bmp = new Surface (IFace.vkvgDevice, Slot.Width, Slot.Height);
+                       DbgLogger.EndEvent (DbgEvtType.GOCreateSurface);
+                       //bmp.Clear();
+#else
                        bmp = IFace.surf.CreateSimilar (Content.ColorAlpha, Slot.Width, Slot.Height);
+#endif
                        //bmp = new ImageSurface(Format.Argb32, Slot.Width, Slot.Height);
 
+                       DbgLogger.StartEvent (DbgEvtType.GOCreateContext, this);
                        using (Context gr = new Context (bmp)) {
+                               DbgLogger.EndEvent (DbgEvtType.GOCreateContext);
                                gr.Antialias = Interface.Antialias;
                                onDraw (gr);
                        }
@@ -1940,8 +1960,9 @@ namespace Crow
                                ctx.Operator = Operator.Over;
                        }
 
-                       ctx.SetSource (bmp, rb.X, rb.Y);
+                       ctx.SetSource (bmp, rb.X, rb.Y);                        
                        ctx.Paint ();
+                       ctx.Flush ();
                        DbgLogger.EndEvent(DbgEvtType.GOPaintCache);    
                }
                protected virtual void UpdateCache(Context ctx){
@@ -1991,13 +2012,15 @@ namespace Crow
                                                paintDisabled (ctx, Slot + Parent.ClientRectangle.Position);                                    
                                } else {
                                        Rectangle rb = Slot + Parent.ClientRectangle.Position;
-                                       ctx.Save ();
+                                       //ctx.Save ();
 
                                        ctx.Translate (rb.X, rb.Y);
 
                                        onDraw (ctx);
 
-                                       ctx.Restore ();
+                                       ctx.Translate (-rb.X, -rb.Y);
+
+                                       //ctx.Restore ();
 
                                        if (!IsEnabled)
                                                paintDisabled (ctx, rb);
diff --git a/Crow/src/rsvg/DimensionData.cs b/Crow/src/rsvg/DimensionData.cs
deleted file mode 100644 (file)
index 66aab91..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-//Copyright GPL2
-namespace Rsvg {
-
-       using System;
-       using System.Collections;
-       using System.Runtime.InteropServices;
-
-       [StructLayout(LayoutKind.Sequential)]
-       public struct DimensionData {
-
-               public int Width;
-               public int Height;
-               public double Em;
-               public double Ex;
-
-               public static Rsvg.DimensionData Zero = new Rsvg.DimensionData ();
-
-               public static Rsvg.DimensionData New(IntPtr raw) {
-                       if (raw == IntPtr.Zero)
-                               return Rsvg.DimensionData.Zero;
-                       return (Rsvg.DimensionData) Marshal.PtrToStructure (raw, typeof (Rsvg.DimensionData));
-               }
-       }
-}
diff --git a/Crow/src/rsvg/Handle.cs b/Crow/src/rsvg/Handle.cs
deleted file mode 100644 (file)
index ca06ad2..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-//Copyright GPL2
-using Crow.Cairo;
-
-
-namespace Rsvg {
-
-       using System;
-       using System.Collections;
-       using System.Runtime.InteropServices;
-
-       public sealed class Handle {
-               const string lib = "rsvg-2.40";
-
-               public IntPtr Raw;
-
-               [DllImport (lib)]
-               static extern IntPtr rsvg_handle_new();
-               [DllImport (lib)]
-               static extern IntPtr rsvg_handle_new_from_data (byte[] data, UIntPtr n_data, out IntPtr error);
-               [DllImport (lib)]
-               static extern IntPtr rsvg_handle_new_from_file (string file_name, out IntPtr error);
-               [DllImport (lib)]
-               static extern IntPtr rsvg_handle_get_base_uri (IntPtr raw);
-               [DllImport (lib)]
-               static extern void rsvg_handle_set_dpi (IntPtr raw, double dpi);
-               [DllImport (lib)]
-               static extern void rsvg_handle_set_dpi_x_y (IntPtr raw, double dpi_x, double dpi_y);
-
-               [DllImport (lib)]
-               static extern void rsvg_handle_render_cairo (IntPtr raw, IntPtr cr);
-               [DllImport (lib)]
-               static extern void rsvg_handle_render_cairo_sub (IntPtr raw, IntPtr cr, string id);
-
-               [DllImport (lib)]
-               static extern void rsvg_handle_get_dimensions (IntPtr raw, IntPtr dimension_data);
-               [DllImport (lib)]
-               static extern bool rsvg_handle_close (IntPtr raw, out IntPtr error);
-               [DllImport (lib)]
-               static extern IntPtr rsvg_handle_get_title (IntPtr raw);
-               [DllImport (lib)]
-               static extern IntPtr rsvg_handle_get_metadata (IntPtr raw);
-
-               public Handle ()
-               {
-                       Raw = rsvg_handle_new();
-               }
-               public  Handle (byte[] data)
-               {                       
-                       Raw = rsvg_handle_new_from_data(data, new UIntPtr ((ulong) (data == null ? 0 : data.Length)), out IntPtr error);
-                       if (error != IntPtr.Zero) throw new Exception (error.ToString());
-               }
-               public Handle (string file_name)
-               {                       
-                       Raw = rsvg_handle_new_from_file(file_name, out IntPtr error);
-                       if (error != IntPtr.Zero) throw new Exception (error.ToString());
-               }
-
-
-               public double Dpi { set => rsvg_handle_set_dpi (Raw, value); }
-               public void SetDpiXY (double dpi_x, double dpi_y) => rsvg_handle_set_dpi_x_y (Raw, dpi_x, dpi_y);
-
-
-               public void RenderCairo(Context cr) =>
-                       rsvg_handle_render_cairo (Raw, cr == null ? IntPtr.Zero : cr.Handle);
-               
-               public void RenderCairoSub (Context cr, string id) =>
-                       rsvg_handle_render_cairo_sub (Raw, cr == null ? IntPtr.Zero : cr.Handle, id);
-               
-               public DimensionData Dimensions {
-                       get {
-                               DimensionData dimension_data;
-                               IntPtr native_dimension_data = Marshal.AllocHGlobal (Marshal.SizeOf (typeof (DimensionData)));
-                               rsvg_handle_get_dimensions(Raw, native_dimension_data);
-                               dimension_data = DimensionData.New (native_dimension_data);
-                               Marshal.FreeHGlobal (native_dimension_data);
-                               return dimension_data;
-                       }
-               }
-
-               public bool Close() {                   
-                       bool raw_ret = rsvg_handle_close(Raw, out IntPtr error);
-                       if (error != IntPtr.Zero) throw new Exception (error.ToString());
-                       return raw_ret;
-               }
-
-               public string Title => throw new NotSupportedException ();
-               public string Metadata => throw new NotSupportedException ();
-       }
-}
index 11fcc00499c7461ee25edbef59ba8ac0aa65d65b..917e7dfc53c095f66dceb2d91bb99650def8513a 100644 (file)
@@ -11,8 +11,8 @@
                <CrowStbSharp>true</CrowStbSharp>
                <CrowDebugLogEnabled>false</CrowDebugLogEnabled>
                <CrowDebugStatsEnabled>true</CrowDebugStatsEnabled>
-               <CrowDesignModeEnabled>true</CrowDesignModeEnabled>
-               
-               <GlfwSharpVersion>0.2.11-beta</GlfwSharpVersion>
+               <CrowDesignModeEnabled>false</CrowDesignModeEnabled>
+               <CrowVkvgBackend>true</CrowVkvgBackend>
+               <GlfwSharpVersion>0.2.12-beta</GlfwSharpVersion>
        </PropertyGroup>
 </Project>
index b369d2488ae04901d30dc5a793debb62fa9349ec..3e11aa3f23c459a96b9583a2065c1cbec1cd5c05 100644 (file)
@@ -4,7 +4,7 @@
 using System;
 using System.Collections.Generic;
 using System.ComponentModel;
-using Crow.Cairo;
+using Crow.Drawing;
 using Crow.DebugLogger;
 using DebugLogAnalyzer;
 
index 2ac0326f9849c5697e4097508017f9f5311a412b..086e71520611d40c135b4bda48b8ac2f78aae868 100644 (file)
@@ -10,7 +10,7 @@ using System.ComponentModel;
 using System.IO;
 using System.Linq;
 using System.Threading.Tasks;
-using Crow.Cairo;
+using Crow.Drawing;
 using Crow.DebugLogger;
 using DebugLogAnalyzer;
 
index a15b63aa6bd878f517bc622b2e84b859d003f37c..d37b07524504a325aba0852df6d022829d360c1d 100644 (file)
@@ -3,7 +3,7 @@
 // This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
 
 using System;
-using Crow.Cairo;
+using Crow.Drawing;
 using System.Threading;
 using Samples;
 
index c74bae6409878a9460343f130edc744c2eb79f64..70c4f9b1db92f582533aadbbb08695ce58ed16a7 100644 (file)
@@ -7,7 +7,7 @@ using Glfw;
 using System.Reflection;
 using System.Runtime.Loader;
 using System.IO;
-using Crow.Cairo;
+using Crow.Drawing;
 using System.Diagnostics;
 using System.Collections.Generic;
 using Crow.DebugLogger;
index 686afaed9b4914b905b6c55e47dd5bf9302cf87b..22418f31624d141c6f82022fd3ce3251788e5635 100644 (file)
@@ -6,7 +6,7 @@ using System;
 using Glfw;
 using Crow.Text;
 using System.Collections.Generic;
-using Crow.Cairo;
+using Crow.Drawing;
 using System.Threading.Tasks;
 using System.Linq;
 using System.Diagnostics.CodeAnalysis;
index 8d7718ed3374d65b3fe0c184c84bd20b6059c0c1..9784304a2388c98f27b872071ef852adbd46803c 100644 (file)
@@ -10,6 +10,8 @@ using System.Runtime.CompilerServices;
 using System.Runtime.InteropServices;
 using System.Threading;
 
+using Crow.Drawing;
+
 namespace Samples
 {
        public class SampleBase : Interface
@@ -376,7 +378,7 @@ namespace Samples
                        initCommands();
                        base.OnInitialized();
                }
-               protected override void processDrawing(Crow.Cairo.Context ctx)
+               protected override void processDrawing(Context ctx)
                {
                        base.processDrawing(ctx);
                }
index 63590efdea111cce1fbc617794d7c1b44957cbcd..1e6e03fab62aeb71789341452b757076e1f4b616 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0"?>
 <VerticalStack Spacing="5" Margin="5">
-       <EnumSelector Caption="Vertical Alignemnt" EnumValue="{²CurrentVAlign}" Width="200">
+       <EnumSelector Caption="Vertical Alignemnt" EnumValue="{²CurrentVAlign}" Width="200" Background="Onyx">
                <Template>
                        <Popper Caption="{./Caption}" CornerRadius="{./CornerRadius}" Foreground="{./Foreground}" Background="{./Background}">
                                <Template>