private static void PaintImage(Context context, CairoRenderObject ro)
 {
     throw new NotImplementedException();
 }
 private static Rectangle AdjustForLabel(Context context, CairoRenderObject ro)
 {
     throw new NotImplementedException();
 }
        private void RenderObject(CairoRenderObject ro, Context g)
        {
            if (ro.State == RenderState.Unknown)
            {
                return;
            }

            CreatePath(g, ro.Path);

            switch (ro.State)
            {
            case RenderState.Normal:
                if (ro.Path != null)
                {
                    if (ro.Line != null)
                    {
                        if (ro.Outline != null)
                        {
                            StrokePath(g, ro.Outline);
                        }

                        StrokePath(g, ro.Line);
                    }
                    else if (ro.Fill != null)
                    {
                        FillPath(g, ro.Fill);

                        if (ro.Outline != null)
                        {
                            StrokePath(g, ro.Outline);
                        }
                    }
                }

                if (ro.Text != null)
                {
                    Rectangle newBounds = AdjustForLabel(g, ro);
                    DrawText(g, ro.Text, ro.Font, ro.Fill, newBounds);
                    //g.DrawString(ro.Text, ro.Font, ro.Fill, newBounds);
                }

                break;

            case RenderState.Highlighted:
                if (ro.Path != null)
                {
                    if (ro.HighlightLine != null)
                    {
                        if (ro.HighlightOutline != null)
                        {
                            StrokePath(g, ro.HighlightOutline);
                        }

                        StrokePath(g, ro.HighlightLine);
                    }
                    else if (ro.HighlightFill != null)
                    {
                        FillPath(g, ro.HighlightFill);

                        if (ro.HighlightOutline != null)
                        {
                            StrokePath(g, ro.HighlightOutline);
                        }
                    }
                }

                if (ro.Text != null)
                {
                    Rectangle newBounds = AdjustForLabel(g, ro);
                    DrawText(g, ro.Text, ro.Font, ro.HighlightFill, newBounds);
                    //g.DrawString(ro.Text, ro.Font, ro.HighlightFill, newBounds);
                }

                break;

            case RenderState.Selected:
                if (ro.Path != null)
                {
                    if (ro.SelectLine != null)
                    {
                        if (ro.SelectOutline != null)
                        {
                            StrokePath(g, ro.SelectOutline);
                        }

                        StrokePath(g, ro.SelectLine);
                    }
                    else if (ro.SelectFill != null)
                    {
                        FillPath(g, ro.SelectFill);

                        if (ro.SelectOutline != null)
                        {
                            StrokePath(g, ro.SelectOutline);
                        }
                    }
                }

                if (ro.Text != null)
                {
                    Rectangle newBounds = AdjustForLabel(g, ro);
                    DrawText(g, ro.Text, ro.Font, ro.SelectFill, newBounds);
                    //g.DrawString(ro.Text, ro.Font, ro.SelectFill, newBounds);
                }
                break;

            default:
                break;
            }

            if (ro.Image == null)
            {
                return;
            }


            PaintImage(g, ro);
            //g.DrawImage(ro.Image,
            //            GetPoints(ro.Bounds),
            //            GetSourceRegion(ro.Image.Size),
            //            GraphicsUnit.Pixel,
            //            imageAttributes);
        }