gboolean ghid_port_drawing_area_configure_event_cb (GtkWidget * widget, GdkEventConfigure * ev, GHidPort * out) { static gboolean first_time_done; HideCrosshair (TRUE); gport->width = ev->width; gport->height = ev->height; if (gport->pixmap) gdk_pixmap_unref (gport->pixmap); gport->pixmap = gdk_pixmap_new (widget->window, gport->width, gport->height, -1); gport->drawable = gport->pixmap; if (!first_time_done) { gport->colormap = gtk_widget_get_colormap (gport->top_window); gport->bg_gc = gdk_gc_new (gport->drawable); if (gdk_color_parse (Settings.BackgroundColor, &gport->bg_color)) gdk_color_alloc (gport->colormap, &gport->bg_color); else gdk_color_white (gport->colormap, &gport->bg_color); gdk_gc_set_foreground (gport->bg_gc, &gport->bg_color); gport->offlimits_gc = gdk_gc_new (gport->drawable); if (gdk_color_parse (Settings.OffLimitColor, &gport->offlimits_color)) gdk_color_alloc (gport->colormap, &gport->offlimits_color); else gdk_color_white (gport->colormap, &gport->offlimits_color); gdk_gc_set_foreground (gport->offlimits_gc, &gport->offlimits_color); first_time_done = TRUE; PCBChanged (0, NULL, 0, 0); } if (gport->mask) { gdk_pixmap_unref (gport->mask); gport->mask = gdk_pixmap_new (0, gport->width, gport->height, 1); } ghid_port_ranges_scale (FALSE); ghid_invalidate_all (); RestoreCrosshair (TRUE); return 0; }
void ghid_port_ranges_zoom (gdouble zoom) { gdouble xtmp, ytmp; gint x0, y0; /* figure out zoom values in that would just make the width fit and * that would just make the height fit */ xtmp = (gdouble) PCB->MaxWidth / gport->width; ytmp = (gdouble) PCB->MaxHeight / gport->height; /* if we've tried to zoom further out than what would make the * entire board fit or we passed 0, then pick a zoom that just makes * the board fit. */ if ((zoom > xtmp && zoom > ytmp) || zoom == 0.0) zoom = (xtmp > ytmp) ? xtmp : ytmp; xtmp = (gport->view_x - gport->view_x0) / (gdouble) gport->view_width; ytmp = (gport->view_y - gport->view_y0) / (gdouble) gport->view_height; gport->zoom = zoom; pixel_slop = zoom; ghid_port_ranges_scale(FALSE); x0 = gport->view_x - xtmp * gport->view_width; if (x0 < 0) x0 = 0; gport->view_x0 = x0; y0 = gport->view_y - ytmp * gport->view_height; if (y0 < 0) y0 = 0; gport->view_y0 = y0; ghidgui->adjustment_changed_holdoff = TRUE; gtk_range_set_value (GTK_RANGE (ghidgui->h_range), gport->view_x0); gtk_range_set_value (GTK_RANGE (ghidgui->v_range), gport->view_y0); ghidgui->adjustment_changed_holdoff = FALSE; ghid_port_ranges_changed(); }
gboolean ghid_port_drawing_area_configure_event_cb (GtkWidget * widget, GdkEventConfigure * ev, GHidPort * out) { static gboolean first_time_done; gport->width = ev->width; gport->height = ev->height; if (gport->pixmap) gdk_pixmap_unref (gport->pixmap); gport->pixmap = gdk_pixmap_new (gtk_widget_get_window (widget), gport->width, gport->height, -1); gport->drawable = gport->pixmap; if (!first_time_done) { gport->colormap = gtk_widget_get_colormap (gport->top_window); if (gdk_color_parse (Settings.BackgroundColor, &gport->bg_color)) gdk_color_alloc (gport->colormap, &gport->bg_color); else gdk_color_white (gport->colormap, &gport->bg_color); if (gdk_color_parse (Settings.OffLimitColor, &gport->offlimits_color)) gdk_color_alloc (gport->colormap, &gport->offlimits_color); else gdk_color_white (gport->colormap, &gport->offlimits_color); first_time_done = TRUE; ghid_drawing_area_configure_hook (out); PCBChanged (0, NULL, 0, 0); } else { ghid_drawing_area_configure_hook (out); } ghid_port_ranges_scale (); ghid_invalidate_all (); return 0; }