]> O.S.I.I.S - jp/crow.git/commitdiff
wip
authorJean-Philippe Bruyère <jp_bruyere@hotmail.com>
Thu, 6 Dec 2018 16:36:21 +0000 (17:36 +0100)
committerJean-Philippe Bruyère <jp_bruyere@hotmail.com>
Thu, 6 Dec 2018 16:36:21 +0000 (17:36 +0100)
32 files changed:
Crow.csproj
Default.style
Templates/DockWindow.template
Templates/Expandable.template
Templates/TreeView.template
Tests/BasicTests.cs
Tests/GraphicObjects/LaggingGraphicObject.cs
Tests/Interfaces/Container/0.crow
Tests/Interfaces/Divers/testVisibility.crow [new file with mode: 0755]
Tests/Tests.csproj
Tests/test.style
Tests/ui/MenuItem.style
Tests/ui/MenuItem.template
src/Cairo/CairoHelpers.cs
src/Colors.cs
src/CompilerServices/CompilerServices.cs
src/ExtensionsMethods.cs
src/GraphicObjects/DockStack.cs
src/GraphicObjects/DockWindow.cs
src/GraphicObjects/GraphicObject.cs
src/GraphicObjects/TabItem.cs
src/GraphicObjects/TemplatedGroup.cs
src/GraphicObjects/TreeView.cs
src/Interface.cs
src/Mono.Cairo/Color.cs [deleted file]
src/Mono.Cairo/Context.cs
src/Mono.Cairo/Gradient.cs
src/Mono.Cairo/NativeMethods-internal.cs [new file with mode: 0644]
src/Mono.Cairo/NativeMethods.cs
src/Mono.Cairo/Rectangle.cs [deleted file]
src/Mono.Cairo/SolidPattern.cs
src/debug/DebugLogViewer.cs

index f181f154f47edb312f667da028c15f1e00a6560a..e06c7c71eb92691a6cd8098b1666b4a96c7a71a0 100644 (file)
@@ -32,7 +32,7 @@
     <CheckForOverflowUnderflow>true</CheckForOverflowUnderflow>
     <Optimize>false</Optimize>
     <OutputPath>$(SolutionDir)build\Debug</OutputPath>
-    <DefineConstants>DEBUG_DRAGNDROP0;DEBUG_LOG;XLIB_BACKEND0;DESIGN_MODE;DEBUG_UPDATE0;DEBUG_FOCUS0;DEBUG_DISPOSE0;TRACE0;DEBUG;MEASURE_TIME;DEBUG_LOAD0;DEBUG_BINDING0;DEBUG_CLIP_RECTANGLE0</DefineConstants>
+    <DefineConstants>DEBUG_DRAGNDROP0;DEBUG_LOG0;XLIB_BACKEND0;DESIGN_MODE;DEBUG_UPDATE0;DEBUG_FOCUS;DEBUG_DISPOSE0;TRACE0;DEBUG;MEASURE_TIME;DEBUG_LOAD0;DEBUG_BINDING0;DEBUG_CLIP_RECTANGLE0</DefineConstants>
     <EnvironmentVariables>
       <EnvironmentVariables>
         <Variable name="MONO_CAIRO_DEBUG_DISPOSE" value="1" />
     <Compile Include="src\Mono.Cairo\Antialias.cs" />
     <Compile Include="src\Mono.Cairo\Cairo.cs" />
     <Compile Include="src\Mono.Cairo\CairoDebug.cs" />
-    <Compile Include="src\Mono.Cairo\Color.cs" />
     <Compile Include="src\Mono.Cairo\Content.cs" />
     <Compile Include="src\Mono.Cairo\Context.cs" />
     <Compile Include="src\Mono.Cairo\DRMDevice.cs" />
     <Compile Include="src\Mono.Cairo\LineJoin.cs" />
     <Compile Include="src\Mono.Cairo\LinearGradient.cs" />
     <Compile Include="src\Mono.Cairo\Matrix.cs" />
-    <Compile Include="src\Mono.Cairo\NativeMethods.cs" />
     <Compile Include="src\Mono.Cairo\Operator.cs" />
     <Compile Include="src\Mono.Cairo\PSSurface.cs" />
     <Compile Include="src\Mono.Cairo\Path.cs" />
     <Compile Include="src\Mono.Cairo\Point.cs" />
     <Compile Include="src\Mono.Cairo\PointD.cs" />
     <Compile Include="src\Mono.Cairo\RadialGradient.cs" />
-    <Compile Include="src\Mono.Cairo\Rectangle.cs" />
     <Compile Include="src\Mono.Cairo\Region.cs" />
     <Compile Include="src\Mono.Cairo\ScaledFont.cs" />
     <Compile Include="src\Mono.Cairo\SolidPattern.cs" />
     <Compile Include="src\Mono.Cairo\XcbSurface.cs" />
     <Compile Include="src\Mono.Cairo\XlibSurface.cs" />
     <Compile Include="src\IML\IMLContext.cs" />
-    <Compile Include="src\Mono.Cairo\MeshPattern.cs" />
     <Compile Include="src\GraphicObjects\Shape.cs" />
     <Compile Include="src\IListChanged.cs" />
     <Compile Include="src\ObservableList.cs" />
     <Compile Include="src\backends\xlib\XLibBackend.cs" />
     <Compile Include="src\debug\DbgLogViewer.cs" />
     <Compile Include="src\debug\DbgEventTypeColors.cs" />
+    <Compile Include="src\Mono.Cairo\NativeMethods.cs" />
+    <Compile Include="src\Mono.Cairo\MeshPattern.cs" />
   </ItemGroup>
   <ItemGroup>
     <Reference Include="System" />
     <None Include="Icons\compiler_warning.svg" />
     <None Include="Icons\compiler_warning_orange.svg" />
     <None Include="src\debug\DebugLogViewer.cs" />
+    <None Include="src\Mono.Cairo\NativeMethods-internal.cs" />
   </ItemGroup>
 </Project>
index c2f553e4b419862bf4ec8672ab7154a80cab6ebe..43c4cab86988727a01ec184b91e9e858ed4f2626 100644 (file)
@@ -56,8 +56,8 @@ MenuItem {
        //Background = "vgradient|0:DimGrey|1:Black";
        //Background = "Transparent";
        Foreground = "LightGrey";
-       MouseEnter = "{Background=SteelBlue;}";
-       MouseLeave = "{Background=Transparent;}";
+       //MouseEnter = "{Background=SteelBlue;}";
+       //MouseLeave = "{Background=Transparent;}";
        //MouseEnter = "{Background = vgradient|0:SteelBlue|1:Jet;Foreground=White;}";
        //MouseLeave = "{Foreground=LightGrey;Background=Transparent;}";
        SelectionBackground = "Transparent";
index b293e536184f113292c600201dbc31de0375968a..d69b471806769e30917cff16090b4e2ac7f3c476 100755 (executable)
@@ -5,7 +5,7 @@
                                MouseEnter="./onBorderMouseEnter"
                                MouseLeave="./onBorderMouseLeave">
        <VerticalStack Spacing="0">
-               <HorizontalStack Visible="{./IsDocked}" Height="Fit" Margin="0" Background="Black">
+               <HorizontalStack Visible="{./IsDocked}" Height="Fit" Margin="1" Background="vgradient|0:0.3,0.5,0.8,0.9|1:0.1,0.1,0.1,0.9">
                        <Label  Text="{./Caption}" TextAlignment="Left" Width="Stretched"
                                         Foreground="White" />
                        <Border CornerRadius="6" BorderWidth="1" Foreground="Transparent"  Height="10" Width="10"
index 20bc8f49221e94307c09faf8644ab4a3dc37f22c..1dbb07755cf49948cce119731d0079a8cf1d8032 100755 (executable)
@@ -1,8 +1,8 @@
 <?xml version="1.0"?>
 <Border Style="ControlBorder" Foreground="{./Foreground}" Background="{./Background}">
        <VerticalStack>
-               <HorizontalStack Spacing="1" Height="Fit" MouseDoubleClick="./onClickForExpand">
-                       <Container Margin="1" Width="9" Height="9" Focusable="true" MouseDown="./onClickForExpand"
+               <HorizontalStack Spacing="1" Height="Fit" Focusable="true" MouseDoubleClick="./onClickForExpand">
+                       <Container Margin="1" Width="9" Height="9" MouseDown="./onClickForExpand"
                                                                                                                MouseEnter="{Background=LightGrey}"
                                                                                                                MouseLeave="{Background=Transparent}">
                                <Image
index 9c18120ec65940de55a899f88f4af7aea211dcbc..b8603d92e680a5a0abb95baa18f182e1cceff0b2 100644 (file)
@@ -12,5 +12,5 @@
                CursorSize="{../scroller1.ChildHeightRatio}"
                Value="{²../scroller1.ScrollY}"
                Maximum="{../scroller1.MaxScrollY}"
-               Width="14" Orientation="Vertical"/>
+               Width="12" Orientation="Vertical"/>
 </HorizontalStack>
index c8f71d9d8a9676f2ae8ebf4ccb534c6f22cc35c4..8984951b5aee076a75f776f150b4f8839b082e35 100644 (file)
@@ -4,15 +4,71 @@ using Crow;
 using System.Threading;
 using System.Collections.Generic;
 using System.Linq;
+using System.Runtime.CompilerServices;
 
 namespace tests
 {
        class MainClass : Interface
        {
+               [DllImport ("dl", CallingConvention=CallingConvention.Cdecl)]
+               static extern IntPtr dlopen (string file, dlmode mode);
+               [DllImport ("dl", CallingConvention=CallingConvention.Cdecl)]
+               static extern int dlclose (IntPtr handle);
+               //void *dlsym(void *restrict handle, const char *restrict name); [Option End]
+               [DllImport ("dl", CallingConvention=CallingConvention.Cdecl)]
+               static extern IntPtr dlsym (IntPtr libHnd, string funcName);
+               [DllImport ("mono-2.0", CallingConvention=CallingConvention.Cdecl)]
+               static extern void mono_add_internal_call (string signature, IntPtr funcPtr);
+
+               [DllImport ("__Internal", EntryPoint="cairo_stroke", CallingConvention=CallingConvention.Cdecl)]
+               public static extern void cairo_stroke_internal (IntPtr ctx);
+               [DllImport ("__Internal", EntryPoint="cairo_rectangle", CallingConvention=CallingConvention.Cdecl)]
+               public static extern void cairo_rect_internal (IntPtr ctx, double x, double y, double w, double h);
+               [DllImport ("__Internal", EntryPoint="cairo_set_source_rgba", CallingConvention=CallingConvention.Cdecl)]
+               public static extern void cairo_rgba_internal (IntPtr ctx, double r, double g, double b, double a);
+
+               [MethodImplAttribute(MethodImplOptions.InternalCall)]
+               public static extern void cairo_stroke (IntPtr ctx);
+
+               [Flags]
+               enum dlmode {
+                       RTLD_LOCAL = 0,
+                       RTLD_LAZY = 0x00001,        /* Lazy function call binding.  */
+                       RTLD_NOW = 0x00002,        /* Immediate function call binding.  */
+                       RTLD_BINDING_MASK = 0x3,        /* Mask of binding time value.  */
+                       RTLD_NOLOAD = 0x00004,        /* Do not load the object.  */
+                       RTLD_DEEPBIND = 0x00008,        /* Use deep binding.  */
+                       RTLD_GLOBAL = 0x00100,
+               }
+
+               const string cairoLibPath = @"/opt/cairo/lib/libcairo.so";
+               //static const string cairoLibPath = @"/opt/cairo/lib/libcairo.so.2.11513.0";
+
+               public delegate void Stroke(IntPtr ctx);
+               public delegate void Cairo4Doubles (IntPtr ctx, double x, double y, double z, double w);
+
+               public static Stroke cairo_stroke_func;
+               public static Cairo4Doubles cairo_rect_func;
+               public static Cairo4Doubles cairo_set_rgba_func;
+
+               /*[DllImport (cairoLibPath, EntryPoint="cairo_stroke")]
+               [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
+               public static extern void cairo_stroke_icall (IntPtr cr);*/
+
+
                static MainClass app;
                public Command CMDTest;
                public Measure TestWidth = 100;
 
+               public Crow.IML.Instantiator instFileDlg;
+
+               public string CurrentDirectory {
+                       get { return Crow.Configuration.Global.Get<string>("CurrentDirectory");}
+                       set {
+                               Crow.Configuration.Global.Set ("CurrentDirectory", value);
+                       }
+               }
+
                IList<Color> testList = Color.ColorDic.Values.ToList();
                public IList<Color> TestList {
                        set{
@@ -21,11 +77,11 @@ namespace tests
                        }
                        get { return testList; }
                }
-               public List<KeyValuePair<DbgEvtType, Color>> ColorsKVPList {
+               /*public List<KeyValuePair<DbgEvtType, Color>> ColorsKVPList {
                        get {
                                return DbgLogViewer.colors.ToList();
                        }
-               }
+               }*/
 
                protected override void InitBackend ()
                {
@@ -34,18 +90,35 @@ namespace tests
                }
                public static void Main(string[] args)
                {
+                       //IntPtr cairoLib = dlopen (cairoLibPath, dlmode.RTLD_LAZY);
+
+
+
+                       //mono_add_internal_call ("tests.MainClass:cairo_stroke_icall(IntPtr cr)", strokeFuncPtr);
+
+                       /*cairo_stroke_func = Marshal.GetDelegateForFunctionPointer<Stroke>(dlsym (cairoLib, "cairo_stroke"));
+                       cairo_rect_func = Marshal.GetDelegateForFunctionPointer<Cairo4Doubles>(dlsym (cairoLib, "cairo_rectangle"));
+                       cairo_set_rgba_func = Marshal.GetDelegateForFunctionPointer<Cairo4Doubles>(dlsym (cairoLib, "cairo_set_source_rgba"));
+*/
+
+
                        using (app = new MainClass ()) {
                                //                              XWindow win = new XWindow (app);
                                //                              win.Show ();
                                //app.LoadIMLFragment (@"<SimpleGauge Level='40' Margin='5' Background='Jet' Foreground='Grey' Width='30' Height='50%'/>");
 
-                               app.CMDTest = new Command(new Action(() => Console.WriteLine("test cmd"))) { Caption = "Test", Icon = new SvgPicture("#Tests.image.blank-file.svg"), CanExecute = true};
+                               app.CMDTest = new Command(new Action(() => app.AddWidget (app.instFileDlg.CreateInstance()).DataSource = app)) { Caption = "Test", Icon = new SvgPicture("#Tests.image.blank-file.svg"), CanExecute = true};
                                //app.AddWidget (@"Interfaces/Divers/testFocus.crow").DataSource = app;
                                //app.AddWidget (@"Interfaces/Divers/testMenu.crow").DataSource = app;
+                               app.AddWidget (@"Interfaces/Divers/testVisibility.crow").DataSource = app;
                                //app.AddWidget (@"Interfaces/Divers/0.crow").DataSource = app;
                                //app.AddWidget (@"Interfaces/Splitter/1.crow").DataSource = app;
                                //app.AddWidget (@"Interfaces/Container/0.crow").DataSource = app;
+                               //app.AddWidget (@"Interfaces/TemplatedContainer/test_Listbox.crow").DataSource = app;
 
+                               app.instFileDlg = Crow.IML.Instantiator.CreateFromImlFragment
+                                       (app, "<FileDialog Caption='Open File' CurrentDirectory='{²CurrentDirectory}'/>");
+                               
 
                                //app.AddWidget (@"Interfaces/Divers/colorPicker.crow").DataSource = app;
                                //app.AddWidget ("Interfaces/Divers/perfMeasures.crow").DataSource = app;
@@ -58,7 +131,7 @@ namespace tests
                                (go.FindByName("combo") as ComboBox).SelectedItemChanged += combo_selectedItemChanged;
                                (go.FindByName("kvpList") as ListBox).SelectedItemChanged += kvpList_selectedItemChanged;*/
 
-                               app.AddWidget (@"Interfaces/Experimental/testDock.crow").DataSource = app;
+                               //app.AddWidget (@"Interfaces/Experimental/testDock.crow").DataSource = app;
 
                                /*app.LoadIMLFragment (@"<DockWindow Width='150' Height='150' Name='dock1'/>");
                                app.LoadIMLFragment (@"<DockWindow Width='150' Height='150' Name='dock2'/>");
@@ -116,15 +189,18 @@ namespace tests
                     }
                 }
             }*/
+
+
+                       //dlclose (cairoLib);
                }
 
-               void onColorUpdate (object sender, MouseButtonEventArgs e)
+               /*void onColorUpdate (object sender, MouseButtonEventArgs e)
                {
                        DbgLogViewer.colorsConf.Set (selectedEvtType.ToString (), newColor);
                        DbgLogViewer.colors [selectedEvtType] = newColor;
                        NotifyValueChanged ("ColorsKVPList", ColorsKVPList);
                }
-               static DbgEvtType selectedEvtType;
+               //static DbgEvtType selectedEvtType;
                static Color newColor;
 
                static void kvpList_selectedItemChanged (object sender, SelectionChangeEventArgs e)
@@ -137,7 +213,7 @@ namespace tests
                {
                        newColor = (Color)e.NewValue;
 
-               }
+               }*/
 
                void App_KeyboardKeyDown (object sender, KeyEventArgs e)
                {
@@ -145,16 +221,17 @@ namespace tests
                        //#if DEBUG_LOG
                        switch (e.Key) {
                        case Key.F2:                            
-                               DebugLog.save (app);
+                               //DebugLog.save (app);
                                break;
                        case Key.F4:                            
-                               app.NotifyValueChanged ("ColorsKVPList", app.ColorsKVPList);
+                               //app.NotifyValueChanged ("ColorsKVPList", app.ColorsKVPList);
                                break;
-                       case Key.F6:                            
-                               saveDocking ();
+                       case Key.F6:
+                               app.LoadIMLFragment (@"<FileDialog Caption='Open File'/>");
+                               //saveDocking ();
                                break;
                        case Key.F7:                            
-                               reloadDocking ();
+                               //reloadDocking ();
                                break;
                        case Key.F8:                            
                                app.LoadIMLFragment (@"<DockWindow Width='150' Height='150'/>");
index 98aeaf15b4c209f05f0e703831feb866a1d533bd..82cf0bfcf359f532993706ae7896f92568822bd0 100644 (file)
@@ -27,6 +27,7 @@ using System;
 using Crow;
 using System.ComponentModel;
 using Cairo;
+using System.Diagnostics;
 
 namespace Crow
 {
@@ -36,14 +37,40 @@ namespace Crow
                {
                        base.onDraw (gr);
 
+                       Stopwatch t = Stopwatch.StartNew ();
 
-                       for (int i = 0; i < 100000; i++) {
-                               gr.SetSourceColor (Color.Red);
+                       IntPtr ctxHnd = gr.Handle;
+
+                       for (int i = 0; i < 1000000; i++) {
+                               
+                               /*gr.SetSourceRGBA (1.0,0.0,0.0,1.0);
                                gr.Rectangle (0, 0, 100, 100);
-                               gr.Stroke ();
+                               gr.Stroke ();*/
+
+                               /*Cairo.NativeMethods.SetSourceRGBA (ctxHnd, 1.0,0.0,0.0,1.0);
+                               Cairo.NativeMethods.Rectangle (ctxHnd, 0, 0, 100, 100);
+                               Cairo.NativeMethods.Stroke (ctxHnd);*/
+
+
+                               //tests.MainClass.cairo_set_rgba_func (ctxHnd, 1.0,0.0,0.0,1.0);
+                               //tests.MainClass.cairo_rect_func (ctxHnd, 0, 0, 100, 100);
+                               //tests.MainClass.cairo_stroke_func (ctxHnd);
+
+                               tests.MainClass.cairo_rgba_internal (ctxHnd, 1.0,0.0,0.0,1.0);
+                               tests.MainClass.cairo_rect_internal (ctxHnd, 0, 0, 100, 100);
+                               tests.MainClass.cairo_stroke_internal (ctxHnd);
+                               //tests.MainClass.cairo_stroke (ctxHnd);
+                               //tests.MainClass.cairo_stroke_icall (ctxHnd);
+
+
 
                        }
 
+
+                       t.Stop ();
+
+                       Console.WriteLine("elapsed ticks = {0}", t.ElapsedTicks);
+
                        //System.Threading.Thread.Sleep (1000);
 
                }
index 2f662fe81f7dd37fcef8b95ff2af80cacd33660f..ee5ccdcf214f5bc3ea65fef6a6ac73c7421319a0 100755 (executable)
@@ -1,6 +1,5 @@
 <?xml version="1.0"?>
-<VerticalStack Margin="10" Background="Jet" >
-       <Label Text="{CPT}" Background="Red" Font="mono, 60" Margin="0"/>
+<VerticalStack Margin="10" Background="Jet" >  
        <LaggingGraphicObject Name="lagging" Margin="10"  Background="{TestColor}"/>
 </VerticalStack>
                
diff --git a/Tests/Interfaces/Divers/testVisibility.crow b/Tests/Interfaces/Divers/testVisibility.crow
new file mode 100755 (executable)
index 0000000..70abcbd
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<Container Margin="20" Background="Red" >
+       <Container Margin="20" Background="Green" MouseDown="{../go1.Visible=True}" >
+               <GraphicObject Name="go1" Margin="20" Background="DimGrey" Visible="false" MouseDown="{Visible=false}"
+                       MouseEnter="{Background=Blue}"
+                       MouseLeave="{Background=DimGrey}"/>
+       </Container>
+</Container>
index 2d3717cfe69e17a744d57a4c2c55c0c4d4ccb36d..a6c010315bbd8286e8714e6f8a7549119c773413 100644 (file)
     <None Include="Interfaces\Divers\testMenu.crow">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </None>
+    <None Include="Interfaces\Divers\testVisibility.crow">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
   </ItemGroup>
   <ItemGroup>
     <Folder Include="Interfaces\" />
index 7f912f5424c1090c9f181125feb52b245753b0ff..e650a05b753531b2618df07b8623fb8129e70a0b 100644 (file)
@@ -40,4 +40,4 @@ DbgLogViewer{
 }
 DockWindow{
        Background = "0.1,0.1,0.1,0.5";
-}
+}
\ No newline at end of file
index 15778e687da5a09e4d94bf6f063424003d748080..2c0ada73d67016a240614ac141c8ee8d54168c28 100644 (file)
@@ -5,7 +5,7 @@ Margin="2";
 CornerRadius="0";
 TextAlignment="Left";
 Foreground="Grey";
-MouseEnter = "{Background=SeaGreen;Foreground=White;}";
-MouseLeave = "{Background=Transparent;Foreground=Grey;}";
+//MouseEnter = "{Background=SeaGreen;Foreground=White;}";
+//MouseLeave = "{Background=Transparent;Foreground=Grey;}";
 MouseDown = "{Background=White;Foreground=DimGrey;}";
 MouseUp = "{Background=SeaGreen;Foreground=White;}";
index bf01f99ddbb867e8e1fa4c29e347028d1b016b1c..e959b7d2955af39621ed81a2a28aecc43737fe33 100644 (file)
@@ -6,10 +6,6 @@
                <CheckBox IsChecked="{²./IsPopped}" Caption="{./Caption}" Background="{./Background}" Foreground="{./Foreground}">
                        <Template>
                                <Border Name="border1"
-                                               MouseEnter="{Foreground=vgradient|0:White|0.2:Grey|0.9:Grey|1:Black}"
-                                               MouseLeave="{Foreground=Transparent}"
-                                               MouseDown="{Foreground=vgradient|0:Black|0.05:Grey|0.85:Grey|1:White}"
-                                               MouseUp="{Foreground=vgradient|0:White|0.2:Grey|0.9:Grey|1:Black}"
                                                MinimumSize = "40,0"
                                                Foreground="Transparent"
                                                Background="{./Background}">
index 3b771c3800042b809c892184a04b2327e3e767c2..032980d0164142991507c5787dd88e35c7d59634 100644 (file)
@@ -73,7 +73,7 @@ namespace Crow
                        if (stroke>0.0) {
                                gr.LineWidth = stroke;
                                double hsw = stroke / 2.0;
-                               DrawRoundedRectangle (gr, r.X + hsw, r.Y + hsw, r.Width - stroke, r.Height - stroke, radius);
+                               DrawRoundedRectangle (gr, hsw + r.X, hsw + r.Y, (double)r.Width - stroke, (double)r.Height - stroke, radius);
                                gr.Stroke ();
                        }else
                                DrawRoundedRectangle(gr, r.X, r.Y, r.Width, r.Height, radius);
index 8e501b336c14255332ecefb55a845183e37d9b37..1da991357871f300c4bc072210a1e6f3b89c0ce3 100644 (file)
@@ -130,16 +130,6 @@ namespace Crow
                                double.Parse(c[3]));
                }
 
-//             public static implicit operator OpenTK.Vector4(Color c)
-//             {
-//                     return new OpenTK.Vector4 ((float)c.R, (float)c.G, (float)c.B, (float)c.A);
-//             }
-//             public static implicit operator Color(OpenTK.Vector4 v)
-//             {
-//                     return new Color (v.X, v.Y, v.Z, v.W);
-//             }
-
-
                public static bool operator ==(Color left, Color right)
                {
                        if (left.predefinied & right.predefinied)
index e315f7616d951cfa8f0c267186ca559f3280a1ca..6ceff045af8239bffc3e761d7f79c388c23f555d 100644 (file)
@@ -804,7 +804,7 @@ namespace Crow.IML
                                                il.Emit (OpCodes.Ldstr, operandes [1].Trim ());
                                        }
                                        il.Emit (OpCodes.Callvirt, lopParseMi);
-                                       il.Emit (OpCodes.Unbox_Any, lopPI.PropertyType);
+                                       //il.Emit (OpCodes.Unbox_Any, lopPI.PropertyType);
                                        //emit left operand assignment
                                        il.Emit (OpCodes.Callvirt, lopPI.GetSetMethod());
                                } else {//tree parsing and propert gets
index 340a8ceb511eabb01fb80179d04e727132259755..ecbc8a7234449f04f7bc74c5f5ded99feef57014 100644 (file)
@@ -153,13 +153,14 @@ namespace Crow
                        ctx.LineWidth = stroke;
                        ctx.Stroke ();
                }
+
                public static void SetSourceColor(this Cairo.Context ctx, Color c)
                {
                        ctx.SetSourceRGBA(c.R,c.G,c.B,c.A);
                }
                public static void AddColorStop(this Cairo.Gradient grad, double offset, Color c)
                {
-                       grad.AddColorStop (offset, new Cairo.Color (c.R, c.G, c.B, c.A));
+                       grad.AddColorStop (offset, c);
                }
                #endregion
 
index aa7c33da7fdd5a0ad8bd3cd6ca41b16c7f24ea7c..75f0d2bb1b0a6a8a82bd88a584016bd76cb33c14 100644 (file)
@@ -116,9 +116,9 @@ namespace Crow
                {
                        if (IsDropTarget) {                             
                                DockWindow dw = IFace.DragAndDropOperation.DragSource as DockWindow;
-                               if (dw.IsDocked) {
-                                               base.onMouseMove (sender, e);
-                                               return;
+                               if (dw == null || dw.IsDocked) {
+                                       base.onMouseMove (sender, e);
+                                       return;
                                }
 
                                Alignment curDockPos = dw.DockingPosition;
@@ -416,6 +416,9 @@ namespace Crow
                                        dw.Width = Measure.Parse (getConfAttrib (conf, ref i));
                                        dw.Height = Measure.Parse (getConfAttrib (conf, ref i));
                                        dw.DockingPosition = (Alignment)Enum.Parse (typeof(Alignment), getConfAttrib (conf, ref i));
+                                       dw.savedSlot = Rectangle.Parse (getConfAttrib (conf, ref i));
+                                       dw.wasResizable = Boolean.Parse (getConfAttrib (conf, ref i));
+
                                        dw.IsDocked = true;
                                        dw.DataSource = dataSource;
                                        this.AddChild (dw);
@@ -450,7 +453,7 @@ namespace Crow
                        for (int i = 0; i < Children.Count; i++) {
                                if (Children [i] is DockWindow) {
                                        DockWindow dw = Children [i] as DockWindow;
-                                       tmp.Append (string.Format("WIN;{0};{1};{2};{3};",dw.Name, dw.Width, dw.Height, dw.DockingPosition));
+                                       tmp.Append (string.Format("WIN;{0};{1};{2};{3};{4};{5};",dw.Name, dw.Width, dw.Height, dw.DockingPosition, dw.savedSlot, dw.wasResizable));
                                } else if (Children [i] is DockStack) {
                                        DockStack ds = Children [i] as DockStack;
                                        tmp.Append (string.Format("STK;{0};{1};{2};{3}", ds.Width, ds.Height, ds.Orientation, ds.exportConfig()));
index d6385057a4fcbb62c11b4aa95928494e1449d49b..e368db516795081abfe0f6b49d0e92d14058329f 100644 (file)
@@ -40,8 +40,8 @@ namespace Crow
                Alignment docking = Alignment.Undefined;
 
                Point undockingMousePosOrig; //mouse pos when docking was donne, use for undocking on mouse move
-               Rectangle savedSlot;    //last undocked slot recalled when view is undocked
-               bool wasResizable;
+               internal Rectangle savedSlot;   //last undocked slot recalled when view is undocked
+               internal bool wasResizable;
 
                public bool IsDocked {
                        get { return isDocked; }
@@ -64,7 +64,6 @@ namespace Crow
                                NotifyValueChanged ("DockingPosition", DockingPosition);
                        }
                }
-
                public override bool PointIsIn (ref Point m)
                {                       
                        if (!base.PointIsIn(ref m))
@@ -136,10 +135,10 @@ namespace Crow
 
                                IFace.AddWidget (this);
 
-                               this.Left = savedSlot.Left;
-                               this.Top = savedSlot.Top;
-                               this.Width = savedSlot.Width;
-                               this.Height = savedSlot.Height;
+                               Left = savedSlot.Left;
+                               Top = savedSlot.Top;
+                               Width = savedSlot.Width;
+                               Height = savedSlot.Height;
 
                                IsDocked = false;
                                DockingPosition = Alignment.Undefined;
index 747609b08619976dcae527d0f7650cf2fce9b140..ec4fa173ba2bcccafc1935ad12c4bfcdaacb1511 100644 (file)
@@ -277,14 +277,14 @@ namespace Crow
                Fill background = Color.Transparent;
                Fill foreground = Color.White;
                Font font = "droid, 10";
-               Measure width, height;
+               protected Measure width, height;
                int left, top;
                double cornerRadius = 0;
                int margin = 0;
                bool focusable = false;
                bool hasFocus = false;
                bool isActive = false;
-               bool isHover = false;
+               //bool isHover = false;
                bool mouseRepeat;
                protected bool isVisible = true;
                bool isEnabled = true;
@@ -436,9 +436,9 @@ namespace Crow
                /// <summary>Occurs when this object loose focus</summary>
                public event EventHandler Unfocused;
                /// <summary>Occurs when mouse is over</summary>
-               public event EventHandler Hover;
+               //public event EventHandler Hover;
                /// <summary>Occurs when this control is no longer the Hover one</summary>
-               public event EventHandler UnHover;
+               //public event EventHandler UnHover;
                /// <summary>Occurs when this object loose focus</summary>
                public event EventHandler Enabled;
                /// <summary>Occurs when the enabled state this object is set to false</summary>
@@ -744,7 +744,7 @@ namespace Crow
                /// <summary>
                /// true if this control has the pointer hover
                /// </summary>
-               [XmlIgnore]public virtual bool IsHover {
+               /*[XmlIgnore]public virtual bool IsHover {
                        get { return isHover; }
                        set {
                                if (value == isHover)
@@ -759,7 +759,7 @@ namespace Crow
 
                                NotifyValueChanged ("IsHover", isHover);
                        }
-               }
+               }*/
                /// <summary>
                /// true if holding mouse button down should trigger multiple click events
                /// </summary>
@@ -866,8 +866,12 @@ namespace Crow
 
                                RegisterForLayouting (LayoutingType.Sizing);
 
-                               if (!isVisible)
-                                       unshownPostActions ();
+                               if (!isVisible && IFace.HoverWidget != null) {                                  
+                                       if (IFace.HoverWidget.IsOrIsInside (this)) {
+                                               //IFace.HoverWidget = null;
+                                               IFace.ProcessMouseMove (IFace.Mouse.X, IFace.Mouse.Y);
+                                       }
+                               }
 
                                NotifyValueChanged ("Visible", isVisible);
                        }
@@ -1877,20 +1881,7 @@ namespace Crow
                        #if DEBUG_FOCUS
                        Debug.WriteLine("MouseEnter => " + this.ToString());
                        #endif
-                       MouseEnter.Raise (this, e);
-               }
-               public virtual void onMouseLeave(object sender, MouseMoveEventArgs e)
-               {
-                       #if DEBUG_FOCUS
-                       Debug.WriteLine("MouseLeave => " + this.ToString());
-                       #endif
-                       MouseLeave.Raise (this, e);
-               }
-               public virtual void onHover(object sender, EventArgs e)
-               {
-                       #if DEBUG_FOCUS
-                       Debug.WriteLine("MouseHover => " + this.ToString());
-                       #endif
+
                        if (IFace.DragAndDropOperation != null) {
                                GraphicObject g = this;
                                while (g != null) {
@@ -1905,15 +1896,18 @@ namespace Crow
                                        g = g.focusParent;
                                }
                        }
-                       Hover.Raise (this, e);
+
+                       MouseEnter.Raise (this, e);
                }
-               public virtual void onUnHover(object sender, EventArgs e)
+               public virtual void onMouseLeave(object sender, MouseMoveEventArgs e)
                {
                        #if DEBUG_FOCUS
-                       Debug.WriteLine("MouseUnHover => " + this.ToString());
+                       Debug.WriteLine("MouseLeave => " + this.ToString());
                        #endif
-                       UnHover.Raise (this, e);
+
+                       MouseLeave.Raise (this, e);
                }
+
                #endregion
 
                protected virtual void onFocused(object sender, EventArgs e){
@@ -1981,6 +1975,12 @@ namespace Crow
                /// Checks to handle when widget is removed from the visible graphic tree
                /// </summary>
                void unshownPostActions () {
+                       if (IFace.HoverWidget != null) {
+                               if (IFace.HoverWidget.IsOrIsInside (this)) {
+                                       IFace.HoverWidget = null;
+                                       IFace.ProcessMouseMove (IFace.Mouse.X, IFace.Mouse.Y);
+                               }
+                       }
                        if (IFace.ActiveWidget != null) {
                                if (IFace.ActiveWidget.IsOrIsInside (this))
                                        IFace.ActiveWidget = null;
@@ -1989,12 +1989,6 @@ namespace Crow
                                if (IFace.FocusedWidget.IsOrIsInside (this))
                                        IFace.FocusedWidget = null;
                        }                                       
-                       if (IFace.HoverWidget != null) {
-                               if (IFace.HoverWidget.IsOrIsInside (this)) {
-                                       IFace.HoverWidget = null;
-                                       IFace.ProcessMouseMove (IFace.Mouse.X, IFace.Mouse.Y);
-                               }
-                       }
                }
        }
 }
index 8ddd7a8ecf3b6388b1d70fa46f96db7b5f798b9b..52fdbfef6744488d85ea18a714f549b94a03f881 100644 (file)
@@ -49,6 +49,7 @@ namespace Crow
                int tabOffset;
                bool isSelected;
                Measure tabThickness;
+               Fill selectedBackground = Color.Transparent;
                #endregion
 
                #region TemplatedControl overrides
@@ -115,8 +116,30 @@ namespace Crow
                        set {
                                if (isSelected == value)
                                        return;
+
+                               if (tview != null)
+                                       tview.SelectedTab = tview.Children.IndexOf(this);
+                               
                                isSelected = value;
                                NotifyValueChanged ("IsSelected", isSelected);
+                               RegisterForRedraw ();
+                       }
+               }
+
+               /// <summary>
+               /// background fill of the control, maybe solid color, gradient, image, or svg
+               /// </summary>
+               [DesignCategory ("Appearance")][DefaultValue("DimGrey")]
+               public virtual Fill SelectedBackground {
+                       get { return selectedBackground; }
+                       set {
+                               if (selectedBackground == value)
+                                       return;                         
+                               if (value == null)
+                                       return;
+                               selectedBackground = value;
+                               NotifyValueChanged ("SelectedBackground", selectedBackground);
+                               RegisterForRedraw ();
                        }
                }
                protected override void onDraw (Context gr)
@@ -150,7 +173,11 @@ namespace Crow
                        gr.StrokePreserve ();
                        gr.ClipPreserve ();
 
-                       Background.SetAsSource (gr);
+                       if (IsSelected)
+                               SelectedBackground.SetAsSource (gr, ClientRectangle);
+                       else
+                               Background.SetAsSource (gr, ClientRectangle);
+
                        gr.Fill ();
 
                        base.onDraw (gr);
@@ -162,14 +189,8 @@ namespace Crow
                int dragThreshold = 16;
                int dis = 128;
                internal TabView savedParent = null;
-               public override Fill Background {
-                       get {
-                               return base.Background;
-                       }
-                       set {
-                               base.Background = value;
-                       }
-               }
+
+
                void makeFloating (TabView tv) {                        
                        lock (IFace.UpdateMutex) {                              
                                ImageSurface di = new ImageSurface (Format.Argb32, dis, dis);
@@ -252,7 +273,7 @@ namespace Crow
                public override void onMouseUp (object sender, MouseButtonEventArgs e)
                {
                        base.onMouseUp (sender, e);
-                       tview.UpdateLayout (LayoutingType.ArrangeChildren);
+                       tview?.UpdateLayout (LayoutingType.ArrangeChildren);
                }
                public override void onMouseMove (object sender, MouseMoveEventArgs e)
                {
index 73681b9de7fe0c3f12d930157c6ed2f18c22465a..4d236dab2c66b1098fdd21ff513ffe0df63bd72c 100644 (file)
@@ -148,7 +148,7 @@ namespace Crow
                                : items.Children;
                        }
                }
-               [XmlAttributeAttribute][DefaultValue(-1)]public virtual int SelectedIndex{
+               [DefaultValue(-1)]public virtual int SelectedIndex{
                        get { return _selectedIndex; }
                        set {
                                if (value == _selectedIndex)
index 2c3f817f6f11b0117583771967c140f2a1bc6bf2..12a99fb3619d756c701cc11bc10c21b893b194ed 100644 (file)
@@ -67,13 +67,13 @@ namespace Crow
                        GraphicObject tmp = sender as GraphicObject;
                        if (!tmp.HasFocus)
                                return;
-                       if (selectedItemContainer != null) {
+                       /*if (selectedItemContainer != null) {
                                selectedItemContainer.Foreground = Color.Transparent;
                                selectedItemContainer.Background = Color.Transparent;
-                       }
+                       }*/
                        selectedItemContainer = tmp;
-                       selectedItemContainer.Foreground = SelectionForeground;
-                       selectedItemContainer.Background = SelectionBackground;
+                       //selectedItemContainer.Foreground = SelectionForeground;
+                       //selectedItemContainer.Background = SelectionBackground;
                        NotifyValueChanged ("SelectedItem", SelectedItem);
                        raiseSelectedItemChanged ();
                }
index f2d6a1ce9e3cd34a0c9167f31f336c2318f98bdd..9a11fa18100d76d7f572e042ec74cd7eddea2985 100644 (file)
@@ -129,8 +129,8 @@ namespace Crow
                        Keyboard.KeyUp += Keyboard_KeyUp;
                        Keyboard.KeyPress += Keyboard_KeyPress;
 
-                       initTooltip ();
-                       initContextMenus ();
+                       /*initTooltip ();
+                       initContextMenus ();*/
 
                        running = true;
 
@@ -605,14 +605,15 @@ namespace Crow
                                if (_hoverWidget == value)
                                        return;
 
-                               if (_hoverWidget != null)
-                                       _hoverWidget.IsHover = false;
+                               //if (_hoverWidget != null)
+                               //      _hoverWidget.IsHover = false;
 
                                _hoverWidget = value;
+
                                #if DEBUG_FOCUS
                                NotifyValueChanged("HoverWidget", _hoverWidget);
                                #endif
-
+                               /*
                                if (_hoverWidget != null)
                                {
                                        _hoverWidget.IsHover = true;
@@ -623,6 +624,7 @@ namespace Crow
                                        #else
                                }
                                        #endif
+                                       */
                        }
                }
                /// <summary>Widget has the keyboard or mouse focus</summary>
@@ -860,10 +862,11 @@ namespace Crow
                        if (newW != null) {
                                while (ptr < GraphicTree.Count) {
                                        Window w = GraphicTree [ptr] as Window;
-                                       if (w != null) {
-                                               if (newW.AlwaysOnTop || !w.AlwaysOnTop)
-                                                       break;
-                                       }
+                                       if (w == null)
+                                               break;
+                                       if (newW.AlwaysOnTop || !w.AlwaysOnTop)
+                                               break;
+                                       
                                        ptr++;
                                }
                        }
@@ -1001,10 +1004,10 @@ namespace Crow
                /// <returns>true if mouse is in the interface</returns>
                public virtual bool ProcessMouseMove(int x, int y)
                {
-                       if (armedClickSender != null) {
-                               armedClickSender.onMouseClick (armedClickSender, armedClickEvtArgs);
+                       /*if (armedClickSender != null) {
+                               //armedClickSender.onMouseClick (armedClickSender, armedClickEvtArgs);
                                armedClickSender = null;
-                       }
+                       }*/
                        int deltaX = x - Mouse.X;
                        int deltaY = y - Mouse.Y;
                        Mouse.X = x;
@@ -1130,7 +1133,15 @@ namespace Crow
                        if (HoverWidget == null)
                                return false;
 
-                       if (HoverWidget == armedClickSender) {
+                       GraphicObject hoverFocused = HoverWidget;
+                       while (!hoverFocused.Focusable) {
+                               hoverFocused = hoverFocused.focusParent;
+                               if (hoverFocused == null) {
+                                       hoverFocused = HoverWidget;
+                                       break;
+                               }
+                       }
+                       if (hoverFocused == armedClickSender) {
                                if (clickTimer.ElapsedMilliseconds < Interface.DoubleClick) {
                                        armedClickSender.onMouseDoubleClick (armedClickSender, e);
                                        armedClickSender = null;
diff --git a/src/Mono.Cairo/Color.cs b/src/Mono.Cairo/Color.cs
deleted file mode 100644 (file)
index 030089e..0000000
+++ /dev/null
@@ -1,75 +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 Cairo {
-
-       public struct Color
-       {
-               public Color(double r, double g, double b) : this (r, g, b, 1.0)
-               {
-               }
-
-               public Color(double r, double g, double b, double a)
-               {
-                       this.r = r;
-                       this.g = g;
-                       this.b = b;
-                       this.a = a;
-               }
-
-               double r, g, b, a;
-
-               public double R {
-                       get { return r; }
-                       set { r = value; }
-               }
-
-               public double G {
-                       get { return g; }
-                       set { g = value; }
-               }
-
-               public double B {
-                       get { return b; }
-                       set { b = value; }
-               }
-
-               public double A {
-                       get { return a; }
-                       set { a = value; }
-               }
-       }
-}
index 264774dd49922bdbe6684e837521407ec7601d51..74c2e444b6f2465835f1911fa05259b212634c3e 100644 (file)
@@ -38,8 +38,9 @@ using System;
 using System.Runtime.InteropServices;
 using System.Text;
 using Cairo;
+using Color = Crow.Color;
 
-namespace Cairo {
+namespace Cairo {      
 
        [Obsolete ("Renamed Cairo.Context per suggestion from cairo binding guidelines.")]
        public class Graphics : Context {
@@ -161,20 +162,6 @@ namespace Cairo {
                        }
                }
 
-               [Obsolete ("Use SetSourceColor method")]
-               public Color Color {
-                       set {
-                               SetSourceColor (value);
-                       }
-               }
-
-               [Obsolete ("Use SetSourceRGBA method")]
-               public Cairo.Color ColorRgb {
-                       set {
-                               Color = new Color (value.R, value.G, value.B);
-                       }
-               }
-
                public double Tolerance {
                        get {
                                return NativeMethods.cairo_get_tolerance (handle);
@@ -870,13 +857,9 @@ namespace Cairo {
 
                public void ShowText(string str)
                {
-                       NativeMethods.cairo_show_text (handle, TerminateUtf8(str));
+                       NativeMethods.cairo_show_text (handle, str);
                }
 
-               public void ShowText(byte[] utf8)
-               {
-                       NativeMethods.cairo_show_text (handle, TerminateUtf8(utf8));
-               }
 
                public void TextPath(string str)
                {
@@ -891,16 +874,10 @@ namespace Cairo {
                public TextExtents TextExtents(string s)
                {
                        TextExtents extents;
-                       NativeMethods.cairo_text_extents (handle, TerminateUtf8(s), out extents);
+                       NativeMethods.cairo_text_extents (handle, s, out extents);
                        return extents;
                }
 
-               public TextExtents TextExtents(byte[] utf8)
-               {
-                       TextExtents extents;
-                       NativeMethods.cairo_text_extents (handle, TerminateUtf8(utf8), out extents);
-                       return extents;
-               }
 
                public TextExtents GlyphExtents (Glyph[] glyphs)
                {
index 0fb617e421fa7c092508982d140ad13b63197b72..c7bc53c6f958e2bbf691e335506e7b6bdad18e08 100644 (file)
@@ -28,7 +28,7 @@
 //
 
 using System;
-
+using Color = Crow.Color;
 namespace Cairo {
 
        public class Gradient : Pattern
diff --git a/src/Mono.Cairo/NativeMethods-internal.cs b/src/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
index 535013699587ee9d5c7a61f9914d3d7b19966f32..24384fe7da1777a2e564433f819cf9e525476ff3 100644 (file)
@@ -752,7 +752,7 @@ namespace Cairo
                internal static extern void cairo_show_page (IntPtr cr);
 
                [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_show_text (IntPtr cr, byte[] utf8);
+               internal static extern void cairo_show_text (IntPtr cr, string text);
 
                [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
                internal static extern Status cairo_status (IntPtr cr);
@@ -840,7 +840,7 @@ namespace Cairo
                #endregion
 
                [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
-               internal static extern void cairo_text_extents (IntPtr cr, byte[] utf8, out TextExtents extents);
+               internal static extern void cairo_text_extents (IntPtr cr, string text, out TextExtents extents);
 
                [DllImport (cairo, CallingConvention=CallingConvention.Cdecl)]
                internal static extern void cairo_text_path (IntPtr ct, byte[] utf8);
diff --git a/src/Mono.Cairo/Rectangle.cs b/src/Mono.Cairo/Rectangle.cs
deleted file mode 100644 (file)
index 6766aa4..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-//
-// Mono.Cairo.Rectangle.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 Cairo
-{
-//     public struct Rectangle
-//     {
-//             double x;
-//             double y;
-//             double width;
-//             double height;
-//             
-//             public Rectangle (double x, double y, double width, double height)
-//             {
-//                     this.x = x;
-//                     this.y = y;
-//                     this.width = width;
-//                     this.height = height;
-//             }
-//             
-//             public Rectangle (Point point, double width, double height)
-//             {
-//                     x = point.X;
-//                     y = point.Y;
-//                     this.width = width;
-//                     this.height = height;
-//             }
-//             
-//             public double X {
-//                     get { return x; }
-//             }
-//             
-//             public double Y {
-//                     get { return y; }
-//             }
-//             
-//             public double Width {
-//                     get { return width; }
-//             }
-//             
-//             public double Height {
-//                     get { return height; }
-//             }
-//             
-//             public override bool Equals (object obj)
-//             {
-//                     if (obj is Rectangle)
-//                             return this == (Rectangle)obj;
-//                     return false;
-//             }
-//             
-//             public override int GetHashCode ()
-//             {
-//                     return (int) (x + y + width + height);
-//             }
-//
-//             public override string ToString ()
-//             {
-//                     return String.Format ("x:{0} y:{1} w:{2} h:{3}", x, y, width, height);
-//             }
-//             
-//             public static bool operator == (Rectangle rectangle, Rectangle other)
-//             {
-//                     return rectangle.X == other.X && rectangle.Y == other.Y && rectangle.Width == other.Width && rectangle.Height == other.Height;
-//             }
-//             
-//             public static bool operator != (Rectangle rectangle, Rectangle other)
-//             {
-//                     return !(rectangle == other);
-//             }
-//     }
-}
index 875b3fbf155d9ff19cfe56bda148a7b96f058c21..37864e5b8f1c40960b7d813c94b39ff969be4c52 100644 (file)
@@ -28,7 +28,7 @@
 //
 
 using System;
-
+using Color = Crow.Color;
 namespace Cairo {
 
        public class SolidPattern : Pattern
index 5b6ca360ec7a4f3560a73b05e79516fb1fa563b7..36a29f962e37d9da2e9887bd662e93d64bf7b62c 100644 (file)
@@ -289,7 +289,7 @@ namespace Crow
                }
                void Buffer_PositionChanged (object sender, EventArgs e)
                {
-                       Console.WriteLine ("Position changes: ({0},{1})", buffer.CurrentLine, buffer.CurrentColumn);
+                       //Console.WriteLine ("Position changes: ({0},{1})", buffer.CurrentLine, buffer.CurrentColumn);
                        int cc = buffer.CurrentTabulatedColumn;
 
                        if (cc > visibleColumns + ScrollX) {