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; }
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; }
/*! \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); }
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); }
/*! \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); } }