Пример #1
0
gboolean
ghid_pinout_preview_expose (GtkWidget *widget,
                            GdkEventExpose *ev)
{
  GhidPinoutPreview *pinout = GHID_PINOUT_PREVIEW (widget);
  GdkWindow *window = gtk_widget_get_window (widget);
  GdkDrawable *save_drawable;
  GtkAllocation allocation;
  view_data save_view;
  int save_width, save_height;
  Coord save_max_width;
  Coord save_max_height;
  double xz, yz;
  render_priv *priv = gport->render_priv;

  /* Setup drawable and zoom factor for drawing routines
   */
  save_drawable = gport->drawable;
  save_view = gport->view;
  save_width = gport->width;
  save_height = gport->height;
  save_max_width = PCB->MaxWidth;
  save_max_height = PCB->MaxHeight;

  gtk_widget_get_allocation (widget, &allocation);
  xz = (double) pinout->x_max / allocation.width;
  yz = (double) pinout->y_max / allocation.height;
  if (xz > yz)
    gport->view.coord_per_px = xz;
  else
    gport->view.coord_per_px = yz;

  gport->drawable = window;
  gport->width = allocation.width;
  gport->height = allocation.height;
  gport->view.width = allocation.width * gport->view.coord_per_px;
  gport->view.height = allocation.height * gport->view.coord_per_px;
  gport->view.x0 = (pinout->x_max - gport->view.width) / 2;
  gport->view.y0 = (pinout->y_max - gport->view.height) / 2;
  PCB->MaxWidth =  pinout->x_max;
  PCB->MaxHeight = pinout->y_max;

  /* clear background */
  gdk_draw_rectangle (window, priv->bg_gc, TRUE,
                      0, 0, allocation.width, allocation.height);

  /* call the drawing routine */
  hid_expose_callback (&ghid_hid, NULL, &pinout->element);

  gport->drawable = save_drawable;
  gport->view = save_view;
  gport->width = save_width;
  gport->height = save_height;
  PCB->MaxWidth = save_max_width;
  PCB->MaxHeight = save_max_height;

  return FALSE;
}
Пример #2
0
static gboolean
ghid_pinout_preview_expose (GtkWidget * widget, GdkEventExpose * event)
{
  extern HID ghid_hid;
  GhidPinoutPreview *pinout = GHID_PINOUT_PREVIEW (widget);
  GdkDrawable *save_drawable;
  double save_zoom;
  int da_w, da_h;
  int save_left, save_top;
  int save_width, save_height;
  int save_view_width, save_view_height;
  double xz, yz;

  save_zoom = gport->zoom;
  save_width = gport->width;
  save_height = gport->height;
  save_left = gport->view_x0;
  save_top = gport->view_y0;
  save_view_width = gport->view_width;
  save_view_height = gport->view_height;

  /* Setup drawable and zoom factor for drawing routines
   */
  save_drawable = gport->drawable;

  gdk_window_get_geometry (widget->window, 0, 0, &da_w, &da_h, 0);
  xz = (double) pinout->x_max / da_w;
  yz = (double) pinout->y_max / da_h;
  if (xz > yz)
    gport->zoom = xz;
  else
    gport->zoom = yz;

  gport->drawable = widget->window;
  gport->width = da_w;
  gport->height = da_h;
  gport->view_width = da_w * gport->zoom;
  gport->view_height = da_h * gport->zoom;
  gport->view_x0 = (pinout->x_max - gport->view_width) / 2;
  gport->view_y0 = (pinout->y_max - gport->view_height) / 2;

  /* clear background */
  gdk_draw_rectangle (widget->window, gport->bg_gc, TRUE, 0, 0, da_w, da_h);

  /* call the drawing routine */
  hid_expose_callback (&ghid_hid, NULL, &pinout->element);

  gport->drawable = save_drawable;
  gport->zoom = save_zoom;
  gport->width = save_width;
  gport->height = save_height;
  gport->view_x0 = save_left;
  gport->view_y0 = save_top;
  gport->view_width = save_view_width;
  gport->view_height = save_view_height;

  return FALSE;
}
Пример #3
0
/*! \brief GObject finalise handler
 *
 *  \par Function Description
 *  Just before the GhidPinoutPreview GObject is finalized, free our
 *  allocated data, and then chain up to the parent's finalize handler.
 *
 *  \param [in] widget  The GObject being finalized.
 */
static void
ghid_pinout_preview_finalize (GObject * object)
{
  GhidPinoutPreview *pinout = GHID_PINOUT_PREVIEW (object);

  /* Passing NULL for element data will free the old memory */
  pinout_set_data (pinout, NULL);

  G_OBJECT_CLASS (ghid_pinout_preview_parent_class)->finalize (object);
}
Пример #4
0
void
ghid_pinout_window_show (GHidPort * out, ElementType * element)
{
    GtkWidget *button, *vbox, *hbox, *preview, *top_window;
    gchar *title;
    int width, height;

    if (!element)
        return;
    title = g_strdup_printf ("%s [%s,%s]",
                             UNKNOWN (DESCRIPTION_NAME (element)),
                             UNKNOWN (NAMEONPCB_NAME (element)),
                             UNKNOWN (VALUE_NAME (element)));

    top_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title (GTK_WINDOW (top_window), title);
    g_free (title);
    gtk_window_set_wmclass (GTK_WINDOW (top_window), "PCB_Pinout", "PCB");
    gtk_container_set_border_width (GTK_CONTAINER (top_window), 4);

    vbox = gtk_vbox_new (FALSE, 0);
    gtk_container_add (GTK_CONTAINER (top_window), vbox);


    preview = ghid_pinout_preview_new (element);
    gtk_box_pack_start (GTK_BOX (vbox), preview, TRUE, TRUE, 0);

    ghid_pinout_preview_get_natural_size (GHID_PINOUT_PREVIEW (preview),
                                          &width, &height);

    gtk_window_set_default_size (GTK_WINDOW (top_window),
                                 width + 50, height + 50);

    hbox = gtk_hbutton_box_new ();
    gtk_button_box_set_layout (GTK_BUTTON_BOX (hbox), GTK_BUTTONBOX_END);
    gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
    button = gtk_button_new_from_stock (GTK_STOCK_CLOSE);
    g_signal_connect (G_OBJECT (button), "clicked",
                      G_CALLBACK (pinout_close_cb), top_window);
    gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);

    gtk_widget_realize (top_window);
    if (Settings.AutoPlace)
        gtk_window_move (GTK_WINDOW (top_window), 10, 10);
    gtk_widget_show_all (top_window);
}
Пример #5
0
/*! \brief GObject property setter function
 *
 *  \par Function Description
 *  Setter function for GhidPinoutPreview's GObject properties,
 *  "settings-name" and "toplevel".
 *
 *  \param [in]  object       The GObject whose properties we are setting
 *  \param [in]  property_id  The numeric id. under which the property was
 *                            registered with g_object_class_install_property()
 *  \param [in]  value        The GValue the property is being set from
 *  \param [in]  pspec        A GParamSpec describing the property being set
 */
static void
ghid_pinout_preview_set_property (GObject * object, guint property_id,
				  const GValue * value, GParamSpec * pspec)
{
  GhidPinoutPreview *pinout = GHID_PINOUT_PREVIEW (object);

  switch (property_id)
    {
    case PROP_ELEMENT_DATA:
      pinout_set_data (pinout, g_value_get_pointer (value));
      if (GTK_WIDGET_REALIZED (GTK_WIDGET (pinout)))
	gdk_window_invalidate_rect (GTK_WIDGET (pinout)->window, NULL, FALSE);
      break;
    default:
      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
    }

}