/// <summary>Pinta una punta de flecha al final del cable.</summary> /// <param name="color">El color en el que se pintará la flecha. /// </param> protected void PintarFlechaFin(EnuColor color) { int x = puntos.Length; PintarFlecha(color, new int[] { puntos[x - 4], puntos[x - 3], puntos[x - 2], puntos[x - 1] }); }
/// <summary>Crea una instancia de la clase.</summary> /// <param name="dib">La superfice sobre la que se dibujará /// la etiqueta.</param> /// <param name="x">La coordenada x de la etiqueta.</param> /// <param name="y">La coordenada y de la etiqueta.</param> /// <param name="texto">El texto de la etiqueta.</param> /// <param name="color">El color en el que se escribirá el texto. /// </param> /// <param name="centrado>Indica si el texto se mostrará centrado. /// </param> public Etiqueta (InterfaceDibujo dib, int x, int y, String texto, EnuColor color, bool centrado) : base(dib) { this.x = x; this.y = y; this.color = color; this.centrado = centrado; this.texto = texto; }
/// <summary>Dibuja una recta en la superficie de dibujo.</summary> /// <param name="c">El color de la recta.</param> /// <param name="x1">La coordenada x del punto inicial de la recta. /// </param> /// <param name="y1">La coordenada y del punto inicial de la recta. /// </param> /// <param name="x2">La coordenada x del punto final de la recta. /// </param> /// <param name="y2">La coordenada y del punto final de la recta. /// </param> public void DibujarRecta(EnuColor c, int x1, int y1, int x2, int y2) { lock (this) { if (pixmap != null) { pixmap.DrawLine(GetGC(c), CoordX(x1), CoordY(y1), CoordX(x2), CoordY(y2)); } } }
/// <summary> Pinta una punta de flecha al final de la /// línea indicada.(Sólo lineas horizontales y verticales). /// </summary> /// <param name="color">El color en el que se pintará la flecha. /// </param> /// <param name="linea">Las coordenadas de la linea al fin de la /// cual se pondrá la flecha.</param> private void PintarFlecha(EnuColor color, int[] linea) { if (linea.Length != 4) { return; } int x1 = 0; int x2 = 0; int y1 = 0; int y2 = 0; if (linea[0] == linea[2]) // es una línea vertical { x1 = linea[0] - 5; x2 = linea[0] + 5; if (linea[1] < linea[3]) //La linea va hacia abajo { y1 = linea[3] - 5; } else { y1 = linea[3] + 5; } y2 = y1; } else if (linea[1] == linea[3]) // es una linea horizontal { y1 = linea[1] - 5; y2 = linea[1] + 5; if (linea[0] < linea[2]) // La linea va hacia la derecha { x1 = linea[2] - 5; } else { x1 = linea[2] + 5; } x2 = x1; } else { return; } dibujo.DibujarRecta(color, linea[2], linea[3], x1, y1); dibujo.DibujarRecta(color, linea[2], linea[3], x2, y2); }
/// <summary>Pinta la linea que compone el cable.</summary> /// <param name="color">El color en el que se pintará el cable. /// </param> private void PintarCable(EnuColor color) { int x = 0; while (x < (puntos.Length - 2)) { int x1 = puntos[x]; int y1 = puntos[x + 1]; int x2 = puntos[x + 2]; int y2 = puntos[x + 3]; x += 2; dibujo.DibujarRecta(color, x1, y1, x2, y2); } }
/// <summary>Dibuja los bordes de un rectángulo en la superficie /// de dibujo.</summary> /// <param name="c">El color de las líneas del rectángulo.</param> /// <param name="x1">La posición x de la esquina superior /// izquierda del rectángulo.</param> /// <param name="y1">La posición y de la esquina superior /// izquierda del rectángulo.</param> /// <param name="ancho">El ancho del rectángulo.</param> /// <param name="alto">El alto del rectángulo.</param> public void DibujarRectangulo (EnuColor c, int x1, int y1, int ancho, int alto) { lock (this) { if (pixmap != null) { pixmap.DrawRectangle( GetGC(c), false, CoordX(x1), CoordY(y1), CoordX(ancho), CoordY(alto)); } } }
/// <summary>Dibuja un texto en la superficie de dibujo.</summary> /// <param name="c">El color del texto.</param> /// <param name="x">La posición x del texto.</param> /// <param name="y">La posición y del texto.</param> /// <param name="texto">El texto a dibujar en la superficie de dibujo. /// </param> /// <param name="cent">Indica si el texto está centrado (x e y se /// refieren al centro del texto) o no (x e y se refieren a la /// esquina superior del texto)</param> public void DibujarTexto (EnuColor c, int x, int y, String texto, bool cent) { int anc; int alt; lock (this) { if (pixmap != null) { if (texto != null) { layout.SetText(texto); } else { layout.SetText(" "); } x = CoordX(x); y = CoordY(y); if (cent) { try { layout.GetSize(out anc, out alt); } catch (System.NullReferenceException) { this.layout = new Pango.Layout(this.PangoContext); return; } x = x - (anc / 2200); y = y - (alt / 2200); } pixmap.DrawLayout(GetGC(c), x, y, layout); } } }
/// <summary>Nos obtiene el entorno gráfico (Gdk.GC) para el color c. /// </summary> /// <param name="c">El color.</param> /// <returns>El entorno gráfico para ese color.</returns> private Gdk.GC GetGC(EnuColor c) { if (tabla_gc == null) { tabla_gc = new Gdk.GC[Enum.GetValues(typeof(EnuColor)).Length]; tabla_gc[(int)EnuColor.Blanco] = new Gdk.GC(pixmap); tabla_gc[(int)EnuColor.Negro] = new Gdk.GC(pixmap); tabla_gc[(int)EnuColor.Rojo] = new Gdk.GC(pixmap); tabla_gc[(int)EnuColor.Verde] = new Gdk.GC(pixmap); tabla_gc[(int)EnuColor.Azul] = new Gdk.GC(pixmap); tabla_gc[(int)EnuColor.Amarillo] = new Gdk.GC(pixmap); tabla_gc[(int)EnuColor.Blanco]. RgbBgColor = GetColor(COLOR_FONDO); tabla_gc[(int)EnuColor.Negro]. RgbBgColor = GetColor(COLOR_FONDO); tabla_gc[(int)EnuColor.Rojo]. RgbBgColor = GetColor(COLOR_FONDO); tabla_gc[(int)EnuColor.Verde]. RgbBgColor = GetColor(COLOR_FONDO); tabla_gc[(int)EnuColor.Azul]. RgbBgColor = GetColor(COLOR_FONDO); tabla_gc[(int)EnuColor.Amarillo]. RgbBgColor = GetColor(COLOR_FONDO); tabla_gc[(int)EnuColor.Blanco]. RgbFgColor = GetColor(EnuColor.Blanco); tabla_gc[(int)EnuColor.Negro]. RgbFgColor = GetColor(EnuColor.Negro); tabla_gc[(int)EnuColor.Rojo]. RgbFgColor = GetColor(EnuColor.Rojo); tabla_gc[(int)EnuColor.Verde]. RgbFgColor = GetColor(EnuColor.Verde); tabla_gc[(int)EnuColor.Azul]. RgbFgColor = GetColor(EnuColor.Azul); tabla_gc[(int)EnuColor.Amarillo]. RgbFgColor = GetColor(EnuColor.Amarillo); } return(tabla_gc[(int)c]); }
/// <summary>Transforma un color de EnuColor en un color de /// Gdk.Color.</summary> /// <param name="c">El color.</param> /// <returns>El color en tipo Gdk.Color.</returns> private static Gdk.Color GetColor(EnuColor c) { if (tabla_colores == null) { tabla_colores = new Gdk.Color[Enum.GetValues(typeof(EnuColor)).Length]; tabla_colores[(int)EnuColor.Blanco] = new Gdk.Color(255, 255, 255); tabla_colores[(int)EnuColor.Negro] = new Gdk.Color(0, 0, 0); tabla_colores[(int)EnuColor.Rojo] = new Gdk.Color(255, 0, 0); tabla_colores[(int)EnuColor.Verde] = new Gdk.Color(0, 255, 0); tabla_colores[(int)EnuColor.Azul] = new Gdk.Color(0, 0, 255); tabla_colores[(int)EnuColor.Amarillo] = new Gdk.Color(255, 255, 0); } return(tabla_colores[(int)c]); }
/// <summary>Dibuja una punta de flecha al principio del cable. /// </summary> /// <param name="color">El color en el que se pintará la flecha. /// </param> protected void PintarFlechaInicio(EnuColor color) { PintarFlecha(color, new int[] { puntos[2], puntos[3], puntos[0], puntos[1] }); }