static void preview(TipModelControls *controls, TipModelArgs *args) { tip_process(args, controls); tip_update(controls, args); }
static void split_to_stripes_changed(GtkToggleButton *toggle, TipBlindControls *controls) { gboolean sens = gtk_toggle_button_get_active(toggle); controls->args->split_to_stripes = sens; gwy_table_hscale_set_sensitive(controls->stripeno, sens); gtk_widget_set_sensitive(controls->create_images, sens); gtk_widget_set_sensitive(controls->plot_size_graph, sens); tip_update(controls); }
static void tip_process(TipModelArgs *args, TipModelControls *controls) { const GwyTipModelPreset *preset; GwyDataField *dfield; GwyDataField *sfield; GQuark quark; gchar label[64]; gint xres, yres; gdouble xstep, ystep, min, max, zrange; gdouble params[2]; preset = gwy_tip_model_get_preset(args->type); g_return_if_fail(preset); tip_model_dialog_update_values(controls, args); /* estimate x and y size */ dfield = controls->tip; quark = gwy_app_get_data_key_for_id(args->object.id); sfield = GWY_DATA_FIELD(gwy_container_get_object(args->object.data, quark)); gwy_data_field_set_xreal(dfield, gwy_data_field_get_xmeasure(sfield) *gwy_data_field_get_xres(dfield)); gwy_data_field_set_yreal(dfield, gwy_data_field_get_ymeasure(sfield) *gwy_data_field_get_yres(dfield)); params[0] = args->nsides; params[1] = args->angle*G_PI/180; gwy_data_field_get_min_max(sfield, &min, &max); zrange = max - min; preset->guess(sfield, zrange, args->radius, params, &xres, &yres); /* process tip */ /* FIXME: this must be solved within guess functions */ xres = CLAMP(xres, 20, 1000); yres = CLAMP(yres, 20, 1000); g_snprintf(label, sizeof(label), _("Tip resolution: %d × %d pixels"), xres, yres); gtk_label_set_text(GTK_LABEL(controls->labsize), label); xstep = gwy_data_field_get_xmeasure(dfield); ystep = gwy_data_field_get_ymeasure(dfield); gwy_data_field_resample(dfield, xres, yres, GWY_INTERPOLATION_NONE); gwy_data_field_set_xreal(dfield, xstep*xres); gwy_data_field_set_yreal(dfield, ystep*yres); preset->func(dfield, zrange, args->radius, args->theta*G_PI/180, params); tip_update(controls, args); }
static void reset(TipBlindControls *controls, TipBlindArgs *args) { GwyGraphModel *gmodel; gwy_data_field_clear(controls->tip); if (args->stripetips) { guint i; for (i = 0; i < controls->oldnstripes; i++) gwy_data_field_clear(args->stripetips[i]); } controls->good_tip = FALSE; gmodel = gwy_graph_model_new(); gwy_graph_set_model(GWY_GRAPH(controls->graph), gmodel); g_object_unref(gmodel); gtk_dialog_set_response_sensitive(GTK_DIALOG(controls->dialog), GTK_RESPONSE_OK, controls->good_tip); tip_update(controls); }
static void same_resolution_changed(GtkToggleButton *button, TipBlindControls *controls) { TipBlindArgs *args; args = controls->args; args->same_resolution = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)); if (!args->same_resolution) return; controls->in_update = TRUE; gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->yres), args->xres); controls->in_update = FALSE; tip_update(controls); }
static void height_changed(GtkAdjustment *adj, TipBlindControls *controls) { TipBlindArgs *args; gdouble v; args = controls->args; v = gtk_adjustment_get_value(adj); args->yres = GWY_ROUND(v); if (controls->in_update) return; if (args->same_resolution) { controls->in_update = TRUE; gtk_adjustment_set_value(GTK_ADJUSTMENT(controls->xres), v); controls->in_update = FALSE; } tip_update(controls); }
static void stripeno_changed(G_GNUC_UNUSED GtkAdjustment *adj, TipBlindControls *controls) { tip_update(controls); }