Exemplo n.º 1
0
static void
draw_crosshair (render_priv *priv)
{
  GdkWindow *window = gtk_widget_get_window (gport->drawing_area);
  GtkStyle *style = gtk_widget_get_style (gport->drawing_area);
  gint x, y;
  static GdkGC *xor_gc;
  static GdkColor cross_color;

  if (gport->crosshair_x < 0 || ghidgui->creating || !gport->has_entered)
    return;

  if (!xor_gc)
    {
      xor_gc = gdk_gc_new (window);
      gdk_gc_copy (xor_gc, style->white_gc);
      gdk_gc_set_function (xor_gc, GDK_XOR);
      gdk_gc_set_clip_origin (xor_gc, 0, 0);
      set_clip (priv, xor_gc);
      /* FIXME: when CrossColor changed from config */
      ghid_map_color_string (Settings.CrossColor, &cross_color);
    }

  gdk_gc_set_foreground (xor_gc, &cross_color);

  x = DRAW_X (gport->crosshair_x);
  y = DRAW_Y (gport->crosshair_y);

  draw_right_cross (xor_gc, x, y);
  if (Crosshair.shape == Union_Jack_Crosshair_Shape)
    draw_slanted_cross (xor_gc, x, y);
  if (Crosshair.shape == Dozen_Crosshair_Shape)
    draw_dozen_cross (xor_gc, x, y);
}
Exemplo n.º 2
0
bool
ghid_pcb_to_event_coords (Coord pcb_x, Coord pcb_y, int *event_x, int *event_y)
{
  *event_x = DRAW_X (pcb_x);
  *event_y = DRAW_Y (pcb_y);

  return true;
}
Exemplo n.º 3
0
static void
show_crosshair (gboolean paint_new_location)
{
  render_priv *priv = gport->render_priv;
  GdkWindow *window = gtk_widget_get_window (gport->drawing_area);
  GtkStyle *style = gtk_widget_get_style (gport->drawing_area);
  gint x, y;
  static gint x_prev = -1, y_prev = -1;
  static GdkGC *xor_gc;
  static GdkColor cross_color;

  if (gport->crosshair_x < 0 || ghidgui->creating || !gport->has_entered)
    return;

  if (!xor_gc)
    {
      xor_gc = gdk_gc_new (window);
      gdk_gc_copy (xor_gc, style->white_gc);
      gdk_gc_set_function (xor_gc, GDK_XOR);
      gdk_gc_set_clip_origin (xor_gc, 0, 0);
      set_clip (priv, xor_gc);
      /* FIXME: when CrossColor changed from config */
      ghid_map_color_string (Settings.CrossColor, &cross_color);
    }
  x = DRAW_X (gport->crosshair_x);
  y = DRAW_Y (gport->crosshair_y);

  gdk_gc_set_foreground (xor_gc, &cross_color);

  if (x_prev >= 0 && !paint_new_location)
    draw_crosshair (xor_gc, x_prev, y_prev);

  if (x >= 0 && paint_new_location)
    {
      draw_crosshair (xor_gc, x, y);
      x_prev = x;
      y_prev = y;
    }
  else
    x_prev = y_prev = -1;
}
Exemplo n.º 4
0
void
ghid_show_crosshair (gboolean show)
{
    gint x, y;
    static gint x_prev = -1, y_prev = -1;
    static gboolean draw_markers, draw_markers_prev = FALSE;
    static GdkGC *xor_gc;
    static GdkColor cross_color;

    if (gport->x_crosshair < 0 || ghidgui->creating || !gport->has_entered)
        return;

    if (!xor_gc)
    {
        xor_gc = gdk_gc_new (ghid_port.drawing_area->window);
        gdk_gc_copy (xor_gc, ghid_port.drawing_area->style->white_gc);
        gdk_gc_set_function (xor_gc, GDK_XOR);
        /* FIXME: when CrossColor changed from config */
        ghid_map_color_string (Settings.CrossColor, &cross_color);
    }
    x = DRAW_X (gport->x_crosshair);
    y = DRAW_Y (gport->y_crosshair);

    gdk_gc_set_foreground (xor_gc, &cross_color);

    if (x_prev >= 0)
    {
        draw_crosshair (xor_gc, x_prev, y_prev);
        if (draw_markers_prev)
        {
            gdk_draw_rectangle (gport->drawing_area->window, xor_gc, TRUE,
                                0, y_prev - VCD, VCD, VCW);
            gdk_draw_rectangle (gport->drawing_area->window, xor_gc, TRUE,
                                gport->width - VCD, y_prev - VCD, VCD, VCW);
            gdk_draw_rectangle (gport->drawing_area->window, xor_gc, TRUE,
                                x_prev - VCD, 0, VCW, VCD);
            gdk_draw_rectangle (gport->drawing_area->window, xor_gc, TRUE,
                                x_prev - VCD, gport->height - VCD, VCW, VCD);
        }
    }

    if (x >= 0 && show)
    {
        draw_crosshair (xor_gc, x, y);
        draw_markers = ghidgui->auto_pan_on && have_crosshair_attachments ();
        if (draw_markers)
        {
            gdk_draw_rectangle (gport->drawing_area->window, xor_gc, TRUE,
                                0, y - VCD, VCD, VCW);
            gdk_draw_rectangle (gport->drawing_area->window, xor_gc, TRUE,
                                gport->width - VCD, y - VCD, VCD, VCW);
            gdk_draw_rectangle (gport->drawing_area->window, xor_gc, TRUE,
                                x - VCD, 0, VCW, VCD);
            gdk_draw_rectangle (gport->drawing_area->window, xor_gc, TRUE,
                                x - VCD, gport->height - VCD, VCW, VCD);
        }
        x_prev = x;
        y_prev = y;
        draw_markers_prev = draw_markers;
    }
    else
    {
        x_prev = y_prev = -1;
        draw_markers_prev = FALSE;
    }
}