2007-01-05 Alp Toker <alp@atoker.com>
[mono.git] / mcs / class / Mono.Cairo / Mono.Cairo / Surface.cs
index b386db0eeffdc7eedcf76ce61871a2fff2410b96..527ffe621414ebc3ada331cf46ee694656f082c5 100644 (file)
@@ -66,7 +66,36 @@ namespace Cairo {
                                return (Surface) o;
                        }
                }               
-               
+
+               static internal Surface LookupSurface (IntPtr surface)
+               {
+                               SurfaceType st = CairoAPI.cairo_surface_get_type (surface);
+                               switch (st) {
+                                       case SurfaceType.Image:
+                                               return new ImageSurface (surface, true);
+                                       case SurfaceType.XLib:
+                                               return new XlibSurface (surface, true);
+                                       case SurfaceType.Xcb:
+                                               return new XcbSurface (surface, true);
+                                       case SurfaceType.Glitz:
+                                               return new GlitzSurface (surface, true);
+                                       case SurfaceType.Win32:
+                                               return new Win32Surface (surface, true);
+#if CAIRO_1_2
+                                       case SurfaceType.Pdf:
+                                               return new PdfSurface (surface, true);
+                                       case SurfaceType.PS:
+                                               return new PSSurface (surface, true);
+                                       case SurfaceType.DirectFB:
+                                               return new DirectFBSurface (surface, true);
+                                       case SurfaceType.Svg:
+                                               return new SvgSurface (surface, true);
+#endif
+                                       default:
+                                               return Surface.LookupExternalSurface (surface);
+                               }
+               }
+
                [Obsolete ("Use an ImageSurface constructor instead.")]
                 public static Cairo.Surface CreateForImage (
                         ref byte[] data, Cairo.Format format, int width, int height, int stride)
@@ -102,9 +131,9 @@ namespace Cairo {
                        Dispose (false);
                }
 
-               public void Show (Context gr, int width, int height
+               public void Show (Context gr, double x, double y
                {
-                       CairoAPI.cairo_set_source_surface (gr.Handle, surface, width, height);
+                       CairoAPI.cairo_set_source_surface (gr.Handle, surface, x, y);
                        CairoAPI.cairo_paint (gr.Handle);
                }
 
@@ -154,6 +183,13 @@ namespace Cairo {
                 }
 
                public PointD DeviceOffset {
+#if CAIRO_1_2
+                       get {
+                               double x, y;
+                               CairoAPI.cairo_surface_get_device_offset (surface, out x, out y);
+                               return new PointD (x, y);
+                       }
+#endif
                        set {
                                CairoAPI.cairo_surface_set_device_offset (surface, value.X, value.Y);
                        }
@@ -187,5 +223,14 @@ namespace Cairo {
                        get { return CairoAPI.cairo_surface_status (surface); }
                }
 
+#if CAIRO_1_2
+               public Content Content {
+                       get { return CairoAPI.cairo_surface_get_content (surface); }
+               }
+
+               public SurfaceType SurfaceType {
+                       get { return CairoAPI.cairo_surface_get_type (surface); }
+               }
+#endif
         }
 }