コード例 #1
0
        private void scene_design(DrawingArea area, Cairo.Context cr)
        {
            area.AddEvents((int)Gdk.EventMask.ButtonPressMask);
            area.ButtonPressEvent += delegate(object o, ButtonPressEventArgs arg) {
                area.GetPointer(out xo, out yo);
                pressed = true;
            };

            area.AddEvents((int)Gdk.EventMask.ButtonReleaseMask);
            area.ButtonReleaseEvent += delegate(object o, ButtonReleaseEventArgs args) {
                pressed = false;
                UpdateViewSurface();
            };


            if (pressed)
            {
                area.GetPointer(out xt, out yt);
                if (ventana.circulo.Active)
                {
                    cr.LineWidth = 2;
                    cr.SetSourceRGBA(0, 0, 1, 0.5);
                    cr.Arc(xo, yo, Constantes.distancia(xt, xo), 0, Math.PI * 2);
                    cr.Stroke();
                }
                else if (ventana.linea.Active)
                {
                    cr.LineWidth = 2;
                    cr.SetSourceRGBA(0, 1, 0, 0.5);
                    cr.MoveTo(xo, yo);
                    cr.LineTo(xt, yt);
                    cr.Stroke();
                }
                else if (ventana.rectangulo.Active)
                {
                    cr.LineWidth = 2;
                    cr.SetSourceRGBA(1, 0, 0, 0.5);
                    cr.Rectangle(xo, yo, xt - xo, yt - yo);
                    cr.Stroke();
                }
            }

            cr.SetSourceSurface(Constantes.viewSurface, 0, 0);
            cr.Paint();
        }
コード例 #2
0
        private void UpdateViewSurface()
        {
            if (Constantes.escenario)
            {
                //whenever we want
                //draw onto our surface in memory
                using (Context cr = new Context(Constantes.viewSurface)) {
                    if (ventana.circulo.Active)
                    {
                        if (!Constantes.contiene(Logica.circulos, new Obstaculo(xo, yo, Constantes.distancia(xt, xo), 0, (int)ventana.intermitencia.Value)) && Constantes.distancia(xt, xo) != 0)
                        {
                            Logica.circulos.Add(new Obstaculo(xo, yo, Constantes.distancia(xt, xo), 0, (int)ventana.intermitencia.Value));
                        }
                        cr.LineWidth = 2;
                        cr.SetSourceRGBA(0, 0, 1, 1);
                        cr.Arc(xo, yo, Constantes.distancia(xt, xo), 0, Math.PI * 2);
                        cr.Stroke();
                    }
                    else if (ventana.linea.Active)
                    {
                        if (!Constantes.contiene(Logica.lineas, new Obstaculo(xo, yo, xt, yt, (int)ventana.intermitencia.Value)) && Constantes.distancia_dos_puntos(xo, yo, xt, yt) != 0)
                        {
                            Logica.lineas.Add(new Obstaculo(xo, yo, xt, yt, (int)ventana.intermitencia.Value));
                        }
                        cr.LineWidth = 2;
                        cr.SetSourceRGBA(0, 1, 0, 1);
                        cr.MoveTo(xo, yo);
                        cr.LineTo(xt, yt);
                        cr.Stroke();
                    }
                    else if (ventana.rectangulo.Active)
                    {
                        if (!Constantes.contiene(Logica.rectangulos, new Obstaculo(xo, yo, xt - xo, yt - yo, (int)ventana.intermitencia.Value)) && (Constantes.distancia(xt, xo) != 0 || Constantes.distancia(yt, yo) != 0))
                        {
                            Logica.rectangulos.Add(new Obstaculo(xo, yo, xt - xo, yt - yo, (int)ventana.intermitencia.Value));
                        }
                        cr.Rectangle(xo, yo, xt - xo, yt - yo);
                        cr.LineWidth = 2;
                        cr.SetSourceRGBA(1, 0, 0, 1);
                        cr.Stroke();
                    }
                    else if (ventana.puntoInicio.Active)
                    {
                        if (!Logica.puntos_inicio.Contains(new System.Drawing.Point(xo, yo)))
                        {
                            Logica.puntos_inicio.Add(new System.Drawing.Point(xo, yo));
                        }
                        cr.SetSourceRGBA(1, 0, 1, 0.8);
                        cr.Arc(xo, yo, 10, 0, 2 * Math.PI);
                        cr.Fill();
                        cr.Stroke();
                    }
                    else if (ventana.puntoObjetivo.Active)
                    {
                        int n = (int)ventana.nivel.Value;
                        if (ventana.nivel.Value == Constantes.max_nivel)
                        {
                            Logica.puntos_objetivo.Add(new Objetivo());
                            Constantes.max_nivel++;
                            ventana.nivel.SetRange(1, Constantes.max_nivel);
                        }
                        if (!Logica.puntos_objetivo [(int)ventana.nivel.Value - 1].contains(xo, yo))
                        {
                            Logica.puntos_objetivo [(int)ventana.nivel.Value - 1].add_objetivo(xo, yo);
                        }
                        cr.SetSourceRGBA(1, 0, 0, 0.6);
                        cr.Arc(xo, yo, Constantes.radio_objetivos, 0, 2 * Math.PI);
                        cr.Fill();
                        cr.Stroke();
                        cr.SetSourceRGB(0, 0, 0);
                        cr.SelectFontFace("Arial", FontSlant.Normal, FontWeight.Normal);
                        cr.SetFontSize(12);
                        TextExtents t = cr.TextExtents(n.ToString());
                        cr.MoveTo(xo - 4, yo + 4);
                        cr.ShowText(n.ToString());
                    }


                    cr.Dispose();
                }
            }
        }