Example #1
0
        public override void DrawLine(Color c, Point p1, Point p2)
        {
            Gdk.GC g = new Gdk.GC(window);

            g.RgbFgColor = GdkColor(c);
            window.DrawLine(g, (int)p1.X, (int)p1.Y, (int)p2.X, (int)p2.Y);
        }
Example #2
0
        void DrawLines(Gdk.Window win, Cairo.Context g, int height, int width)
        {
            if (Environment.OSVersion.Platform == PlatformID.Unix)
            {
                Cairo.Color color = new Cairo.Color(0, 0, 0);
                CairoUtils.DrawLine(g, currentFrame / pixelRatio, 0, currentFrame / pixelRatio, height,
                                    1, color);
                CairoUtils.DrawLine(g, 0, 0, width, 0, 1, color);
                CairoUtils.DrawLine(g, 0, height, width, height, 1, color);
            }

            else
            {
                win.DrawLine(Style.DarkGC(StateType.Normal), 0, 0, width, 0);
                win.DrawLine(Style.DarkGC(StateType.Normal),
                             (int)(currentFrame / pixelRatio), 0,
                             (int)(currentFrame / pixelRatio), height);
            }
        }
        public void Step4_Draw(Window window, Gdk.GC gc)
        {
            if (m_islands == null) return;
            if (!m_startSet) return;
            if (!m_endSet) return;

            // Draw a line from start point to ending point.
            gc.RgbFgColor = new Color(255, 0, 255);
            window.DrawLine(gc, m_startx, m_starty, m_endx, m_endy);
        }
Example #4
0
    protected override void OnExpose(object o, ExposeEventArgs args)
    {
        Gdk.GC    gc1;
        Gdk.Color color = new Gdk.Color();

        EventExpose eventExpose = args.Event;

        Gdk.Window window = eventExpose.Window;
        gc1 = new Gdk.GC(window);

        color.Red      = 0;
        color.Green    = 0;
        color.Blue     = 0;
        gc1.RgbFgColor = color;

        color.Red      = 65535;
        color.Green    = 65535;
        color.Blue     = 65535;
        gc1.RgbBgColor = color;

        window.DrawLine(gc1, 20, 20, 350, 399);


        using (Graphics g = args.Window){
            Pen p = new Pen(Color.Black, 1.0f);

            foreach (object[] row in store)
            {
                string   a  = row[0] + "";
                string[] ps = a.Split(new Char [] { ' ' });
                switch (ps[0].ToLower().ToCharArray()[0])
                {
                case 's': {
                    CurrentPoint.x = Single.Parse(ps[1]);
                    CurrentPoint.y = Single.Parse(ps[2]);
                    break;
                }

                case 'l': {
                    drawLineTo(new Point(Single.Parse(ps[1]), Single.Parse(ps[2])), g);
                    break;
                }

                case 'c': {
                    drawBezier(new Point(Single.Parse(ps[1]), Single.Parse(ps[2])),
                               new Point(Single.Parse(ps[3]), Single.Parse(ps[4])),
                               new Point(Single.Parse(ps[5]), Single.Parse(ps[6])),
                               g);
                    break;
                }
                }
            }
        }
    }
Example #5
0
        void Draw_Graph(Rectangle area, Gdk.Window window, double y_grid, double y_max, bool grid, IEnumerable <double> data, Gdk.GC gc)
        {
            int y_intervals = (int)Math.Ceiling(y_max / y_grid);

            double offset_x = area.Left;
            double offset_y = area.Bottom;
            double scale_x  = area.Width / (double)(data.Count() + 1);
            double scale_y  = -area.Height / (y_grid * y_intervals);

            if (grid)
            {
                for (int i = 0; i <= y_intervals; i++)
                {
                    int y = (int)Math.Round(offset_y + scale_y * y_grid * i);
                    window.DrawLine(drawingArea.Style.MidGC(Gtk.StateType.Normal), area.Left, y, area.Right, y);
                }
            }

            var points = data.Select((y, i) => new Point(
                                         (int)Math.Round(offset_x + scale_x * i),
                                         (int)Math.Round(offset_y + scale_y * y)));

            window.DrawLines(gc, points.ToArray());
        }
Example #6
0
        void DrawTicks(Gdk.Window win, Gdk.GC gc, TickEnumerator e, AxisPosition pos, AxisDimension ad, int tickSize, bool showLabels)
        {
            int rwidth, rheight;

            win.GetSize(out rwidth, out rheight);

            Pango.Layout layout = null;

            if (showLabels)
            {
                layout = new Pango.Layout(this.PangoContext);
                layout.FontDescription = Pango.FontDescription.FromString("Tahoma 8");
            }

            bool isX   = pos == AxisPosition.Top || pos == AxisPosition.Bottom;
            bool isTop = pos == AxisPosition.Top || pos == AxisPosition.Right;

            double start = GetStart(ad);
            double end   = GetEnd(ad);

            e.Init(GetOrigin(ad));

            while (e.CurrentValue > start)
            {
                e.MovePrevious();
            }

            int lastPosLabel;
            int lastPos;
            int lastTw = 0;

            if (isX)
            {
                lastPosLabel = reverseXAxis ? left + width + MinLabelGapX : left - MinLabelGapX;
                lastPos      = left - minTickStep * 2;
            }
            else
            {
                lastPosLabel = reverseYAxis ? top - MinLabelGapY : rheight + MinLabelGapY;
                lastPos      = top + height + minTickStep * 2;
            }

            for ( ; e.CurrentValue <= end; e.MoveNext())
            {
                int px, py;
                int tw = 0, th = 0;
                int tick = tickSize;

                GetPoint(e.CurrentValue, e.CurrentValue, out px, out py);

                if (showLabels)
                {
                    layout.SetMarkup(e.CurrentLabel);
                    layout.GetPixelSize(out tw, out th);
                }

                if (isX)
                {
                    if (Math.Abs((long)px - (long)lastPos) < minTickStep || px < left || px > left + width)
                    {
                        continue;
                    }
                    lastPos = px;

                    bool labelFits = false;
                    if ((Math.Abs(px - lastPosLabel) - (tw / 2) - (lastTw / 2)) >= MinLabelGapX)
                    {
                        lastPosLabel = px;
                        lastTw       = tw;
                        labelFits    = true;
                    }

                    if (isTop)
                    {
                        if (showLabels)
                        {
                            if (labelFits)
                            {
                                win.DrawLayout(gc, px - (tw / 2), top - AreaBorderWidth - th, layout);
                            }
                            else
                            {
                                tick = tick / 2;
                            }
                        }
                        win.DrawLine(gc, px, top, px, top + tick);
                    }
                    else
                    {
                        if (showLabels)
                        {
                            if (labelFits)
                            {
                                win.DrawLayout(gc, px - (tw / 2), top + height + AreaBorderWidth, layout);
                            }
                            else
                            {
                                tick = tick / 2;
                            }
                        }
                        win.DrawLine(gc, px, top + height, px, top + height - tick);
                    }
                }
                else
                {
                    if (Math.Abs((long)lastPos - (long)py) < minTickStep || py < top || py > top + height)
                    {
                        continue;
                    }
                    lastPos = py;

                    bool labelFits = false;
                    if ((Math.Abs(py - lastPosLabel) - (th / 2) - (lastTw / 2)) >= MinLabelGapY)
                    {
                        lastPosLabel = py;
                        lastTw       = th;
                        labelFits    = true;
                    }

                    if (isTop)
                    {
                        if (showLabels)
                        {
                            if (labelFits)
                            {
                                win.DrawLayout(gc, left + width + AreaBorderWidth + 1, py - (th / 2), layout);
                            }
                            else
                            {
                                tick = tick / 2;
                            }
                        }
                        win.DrawLine(gc, left + width, py, left + width - tick, py);
                    }
                    else
                    {
                        if (showLabels)
                        {
                            if (labelFits)
                            {
                                win.DrawLayout(gc, left - AreaBorderWidth - tw - 1, py - (th / 2), layout);
                            }
                            else
                            {
                                tick = tick / 2;
                            }
                        }
                        win.DrawLine(gc, left, py, left + tick, py);
                    }
                }
            }
        }