void gui_init (dt_iop_module_t *self) { // init the slider (more sophisticated layouts are possible with gtk tables and boxes): self->gui_data = malloc(sizeof(dt_iop_colorcontrast_gui_data_t)); dt_iop_colorcontrast_gui_data_t *g = (dt_iop_colorcontrast_gui_data_t *)self->gui_data; dt_iop_colorcontrast_params_t *p = (dt_iop_colorcontrast_params_t *)self->params; self->widget = gtk_vbox_new(FALSE, DT_BAUHAUS_SPACE); /* a scale */ g->a_scale = dt_bauhaus_slider_new_with_range(self, 0.0, 5.0, 0.01, p->a_steepness, 2); dt_bauhaus_widget_set_label(g->a_scale, _("green vs magenta")); gtk_box_pack_start(GTK_BOX(self->widget), GTK_WIDGET(g->a_scale), TRUE, TRUE, 0); g_object_set(G_OBJECT(g->a_scale), "tooltip-text", _("steepness of the a* curve in Lab"), (char *)NULL); g_signal_connect(G_OBJECT(g->a_scale), "value-changed", G_CALLBACK(a_slider_callback), self); /* b scale */ g->b_scale = dt_bauhaus_slider_new_with_range(self, 0.0, 5.0, 0.01, p->b_steepness, 2); dt_bauhaus_widget_set_label(g->b_scale, _("blue vs yellow")); gtk_box_pack_start(GTK_BOX(self->widget), GTK_WIDGET(g->b_scale), TRUE, TRUE, 0); g_object_set(G_OBJECT(g->b_scale), "tooltip-text", _("steepness of the b* curve in Lab"), (char *)NULL); g_signal_connect(G_OBJECT(g->b_scale), "value-changed", G_CALLBACK(b_slider_callback), self); }
void gui_init(struct dt_iop_module_t *self) { self->gui_data = malloc(sizeof(dt_iop_colisa_gui_data_t)); dt_iop_colisa_gui_data_t *g = (dt_iop_colisa_gui_data_t *)self->gui_data; dt_iop_colisa_params_t *p = (dt_iop_colisa_params_t *)self->params; self->widget = gtk_box_new(GTK_ORIENTATION_VERTICAL, DT_BAUHAUS_SPACE); g->contrast = dt_bauhaus_slider_new_with_range(self, -1.0, 1.0, 0.01, p->contrast, 2); g->brightness = dt_bauhaus_slider_new_with_range(self, -1.0, 1.0, 0.01, p->brightness, 2); g->saturation = dt_bauhaus_slider_new_with_range(self, -1.0, 1.0, 0.01, p->saturation, 2); dt_bauhaus_widget_set_label(g->contrast, NULL, _("contrast")); dt_bauhaus_widget_set_label(g->brightness, NULL, _("brightness")); dt_bauhaus_widget_set_label(g->saturation, NULL, _("saturation")); gtk_box_pack_start(GTK_BOX(self->widget), g->contrast, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(self->widget), g->brightness, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(self->widget), g->saturation, TRUE, TRUE, 0); g_object_set(g->contrast, "tooltip-text", _("contrast adjustment"), (char *)NULL); g_object_set(g->brightness, "tooltip-text", _("brightness adjustment"), (char *)NULL); g_object_set(g->saturation, "tooltip-text", _("color saturation adjustment"), (char *)NULL); g_signal_connect(G_OBJECT(g->contrast), "value-changed", G_CALLBACK(contrast_callback), self); g_signal_connect(G_OBJECT(g->brightness), "value-changed", G_CALLBACK(brightness_callback), self); g_signal_connect(G_OBJECT(g->saturation), "value-changed", G_CALLBACK(saturation_callback), self); }
void gui_init(struct dt_iop_module_t *self) { self->gui_data = malloc(sizeof(dt_iop_grain_gui_data_t)); dt_iop_grain_gui_data_t *g = (dt_iop_grain_gui_data_t *)self->gui_data; dt_iop_grain_params_t *p = (dt_iop_grain_params_t *)self->params; self->widget = gtk_vbox_new(FALSE, DT_BAUHAUS_SPACE); /* courseness */ g->scale1 = dt_bauhaus_slider_new_with_range(self, 100.0, 3200.0, 20.0, p->scale*53.3, 0); dt_bauhaus_widget_set_label(g->scale1, _("coarseness")); dt_bauhaus_slider_set_format(g->scale1,"%.0fISO"); gtk_box_pack_start(GTK_BOX(self->widget), GTK_WIDGET(g->scale1), TRUE, TRUE, 0); g_object_set(G_OBJECT(g->scale1), "tooltip-text", _("the grain size (~iso of the film)"), (char *)NULL); g_signal_connect (G_OBJECT (g->scale1), "value-changed", G_CALLBACK (scale_callback), self); /* strength */ g->scale2 = dt_bauhaus_slider_new_with_range(self, 0.0, 100.0, 1.0, p->strength, 2); dt_bauhaus_widget_set_label(g->scale2, _("strength")); dt_bauhaus_slider_set_format(g->scale2,"%.0f%%"); gtk_box_pack_start(GTK_BOX(self->widget), GTK_WIDGET(g->scale2), TRUE, TRUE, 0); g_object_set(G_OBJECT(g->scale2), "tooltip-text", _("the strength of applied grain"), (char *)NULL); g_signal_connect (G_OBJECT (g->scale2), "value-changed", G_CALLBACK (strength_callback), self); }
void gui_init(struct dt_iop_module_t *self) { self->gui_data = malloc(sizeof(dt_iop_grain_gui_data_t)); dt_iop_grain_gui_data_t *g = (dt_iop_grain_gui_data_t *)self->gui_data; dt_iop_grain_params_t *p = (dt_iop_grain_params_t *)self->params; self->widget = gtk_box_new(GTK_ORIENTATION_VERTICAL, DT_BAUHAUS_SPACE); dt_gui_add_help_link(self->widget, dt_get_help_url(self->op)); /* courseness */ g->scale1 = dt_bauhaus_slider_new_with_range(self, 20.0, 6400.0, 20.0, p->scale * GRAIN_SCALE_FACTOR, 0); dt_bauhaus_widget_set_label(g->scale1, NULL, _("coarseness")); dt_bauhaus_slider_set_format(g->scale1, "%.0fISO"); gtk_box_pack_start(GTK_BOX(self->widget), GTK_WIDGET(g->scale1), TRUE, TRUE, 0); gtk_widget_set_tooltip_text(g->scale1, _("the grain size (~ISO of the film)")); g_signal_connect(G_OBJECT(g->scale1), "value-changed", G_CALLBACK(scale_callback), self); /* strength */ g->scale2 = dt_bauhaus_slider_new_with_range(self, 0.0, 100.0, 1.0, p->strength, 2); dt_bauhaus_widget_set_label(g->scale2, NULL, _("strength")); dt_bauhaus_slider_set_format(g->scale2, "%.0f%%"); gtk_box_pack_start(GTK_BOX(self->widget), GTK_WIDGET(g->scale2), TRUE, TRUE, 0); gtk_widget_set_tooltip_text(g->scale2, _("the strength of applied grain")); g_signal_connect(G_OBJECT(g->scale2), "value-changed", G_CALLBACK(strength_callback), self); /* midtones bias */ g->scale3 = dt_bauhaus_slider_new_with_range(self, 0.0, 100.0, 1.0, p->midtones_bias, 2); dt_bauhaus_widget_set_label(g->scale3, NULL, _("midtones bias")); dt_bauhaus_slider_set_format(g->scale3, "%.0f%%"); gtk_box_pack_start(GTK_BOX(self->widget), GTK_WIDGET(g->scale3), TRUE, TRUE, 0); gtk_widget_set_tooltip_text(g->scale3, _("amount of midtones bias from the photographic paper response modeling. the greater the bias, the more pronounced the fall off of the grain in shadows and highlights")); g_signal_connect(G_OBJECT(g->scale3), "value-changed", G_CALLBACK(midtones_bias_callback), self); }
void gui_init(struct dt_iop_module_t *self) { self->gui_data = malloc(sizeof(dt_iop_rlce_gui_data_t)); dt_iop_rlce_gui_data_t *g = (dt_iop_rlce_gui_data_t *)self->gui_data; dt_iop_rlce_params_t *p = (dt_iop_rlce_params_t *)self->params; self->widget = GTK_WIDGET(gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0)); g->vbox1 = GTK_BOX(gtk_box_new(GTK_ORIENTATION_VERTICAL, DT_GUI_IOP_MODULE_CONTROL_SPACING)); g->vbox2 = GTK_BOX(gtk_box_new(GTK_ORIENTATION_VERTICAL, DT_GUI_IOP_MODULE_CONTROL_SPACING)); gtk_box_pack_start(GTK_BOX(self->widget), GTK_WIDGET(g->vbox1), FALSE, FALSE, 5); gtk_box_pack_start(GTK_BOX(self->widget), GTK_WIDGET(g->vbox2), TRUE, TRUE, 5); g->label1 = dtgtk_reset_label_new(_("radius"), self, &p->radius, sizeof(float)); gtk_box_pack_start(GTK_BOX(g->vbox1), g->label1, TRUE, TRUE, 0); g->label2 = dtgtk_reset_label_new(_("amount"), self, &p->slope, sizeof(float)); gtk_box_pack_start(GTK_BOX(g->vbox1), g->label2, TRUE, TRUE, 0); g->scale1 = dt_bauhaus_slider_new_with_range(NULL, 0.0, 256.0, 1.0, p->radius, 0); g->scale2 = dt_bauhaus_slider_new_with_range(NULL, 1.0, 3.0, 0.05, p->slope, 2); // dtgtk_slider_set_format_type(g->scale2,DARKTABLE_SLIDER_FORMAT_PERCENT); gtk_box_pack_start(GTK_BOX(g->vbox2), GTK_WIDGET(g->scale1), TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(g->vbox2), GTK_WIDGET(g->scale2), TRUE, TRUE, 0); gtk_widget_set_tooltip_text(GTK_WIDGET(g->scale1), _("size of features to preserve")); gtk_widget_set_tooltip_text(GTK_WIDGET(g->scale2), _("strength of the effect")); g_signal_connect(G_OBJECT(g->scale1), "value-changed", G_CALLBACK(radius_callback), self); g_signal_connect(G_OBJECT(g->scale2), "value-changed", G_CALLBACK(slope_callback), self); }
void gui_init(dt_iop_module_t *self) { self->gui_data = malloc(sizeof(dt_iop_profilegamma_gui_data_t)); dt_iop_profilegamma_gui_data_t *g = (dt_iop_profilegamma_gui_data_t *)self->gui_data; dt_iop_profilegamma_params_t *p = (dt_iop_profilegamma_params_t *)self->params; self->widget = gtk_vbox_new(TRUE, DT_BAUHAUS_SPACE); g->linear = dt_bauhaus_slider_new_with_range(self, 0.0, 1.0, 0.0001, p->linear, 4); g->gamma = dt_bauhaus_slider_new_with_range(self, 0.0, 1.0, 0.0001, p->gamma, 4); dt_bauhaus_widget_set_label(g->linear, NULL, _("linear")); dt_bauhaus_widget_set_label(g->gamma, NULL, _("gamma")); gtk_box_pack_start(GTK_BOX(self->widget), g->linear, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(self->widget), g->gamma, TRUE, TRUE, 0); g_object_set(g->linear, "tooltip-text", _("linear part"), (char *)NULL); g_object_set(g->gamma, "tooltip-text", _("gamma exponential factor"), (char *)NULL); g_signal_connect (G_OBJECT (g->linear), "value-changed", G_CALLBACK (linear_callback), self); g_signal_connect (G_OBJECT (g->gamma), "value-changed", G_CALLBACK (gamma_callback), self); }
void gui_init(struct dt_iop_module_t *self) { self->gui_data = malloc(sizeof(dt_iop_relight_gui_data_t)); dt_iop_relight_gui_data_t *g = (dt_iop_relight_gui_data_t *)self->gui_data; dt_iop_relight_params_t *p = (dt_iop_relight_params_t *)self->params; self->widget = gtk_vbox_new(FALSE, DT_BAUHAUS_SPACE); g_signal_connect (G_OBJECT (self->widget), "expose-event", G_CALLBACK (expose), self); /* exposure */ g->scale1 = dt_bauhaus_slider_new_with_range(self,-2.0, 2.0,0.05, p->ev, 2); dt_bauhaus_slider_set_format(g->scale1,"%.2fEV"); dt_bauhaus_widget_set_label(g->scale1,_("exposure")); g_object_set(G_OBJECT(g->scale1), "tooltip-text", _("the fill-light in EV"), (char *)NULL); g_signal_connect (G_OBJECT (g->scale1), "value-changed", G_CALLBACK (ev_callback), self); /* width*/ g->scale2 = dt_bauhaus_slider_new_with_range(self,2, 10, 0.5, p->width, 1); dt_bauhaus_slider_set_format(g->scale2,"%.1f"); dt_bauhaus_widget_set_label(g->scale2,_("width")); /* xgettext:no-c-format */ g_object_set(G_OBJECT(g->scale2), "tooltip-text", _("width of fill-light area defined in zones"), (char *)NULL); g_signal_connect (G_OBJECT (g->scale2), "value-changed", G_CALLBACK (width_callback), self); /* lightnessslider */ GtkBox *hbox=GTK_BOX (gtk_hbox_new (FALSE,2)); int lightness=32768; g->gslider1=DTGTK_GRADIENT_SLIDER (dtgtk_gradient_slider_new_with_color ((GdkColor) { 0,0,0,0 },(GdkColor) { 0,lightness,lightness,lightness })); g_object_set(G_OBJECT (g->gslider1), "tooltip-text", _("select the center of fill-light"), (char *)NULL); g_signal_connect (G_OBJECT (g->gslider1), "value-changed", G_CALLBACK (center_callback), self); g->tbutton1 = DTGTK_TOGGLEBUTTON (dtgtk_togglebutton_new (dtgtk_cairo_paint_colorpicker, CPF_STYLE_FLAT)); gtk_widget_set_size_request(GTK_WIDGET(g->tbutton1),22,22); g_signal_connect (G_OBJECT (g->tbutton1), "toggled", G_CALLBACK (picker_callback), self); gtk_box_pack_start (hbox,GTK_WIDGET (g->gslider1),TRUE,TRUE,0); gtk_box_pack_start (hbox,GTK_WIDGET (g->tbutton1),FALSE,FALSE,0); /* add controls to widget ui */ gtk_box_pack_start(GTK_BOX(self->widget), GTK_WIDGET (g->scale1),TRUE,FALSE,0); gtk_box_pack_start(GTK_BOX(self->widget), GTK_WIDGET (hbox), TRUE,FALSE,0); gtk_box_pack_start(GTK_BOX(self->widget), GTK_WIDGET (g->scale2),TRUE,FALSE,0); g_object_set(G_OBJECT(g->tbutton1), "tooltip-text", _("toggle tool for picking median lightness in image"), (char *)NULL); }
void gui_init(struct dt_iop_module_t *self) { self->gui_data = malloc(sizeof(dt_iop_splittoning_gui_data_t)); dt_iop_splittoning_gui_data_t *g = (dt_iop_splittoning_gui_data_t *)self->gui_data; dt_iop_splittoning_params_t *p = (dt_iop_splittoning_params_t *)self->params; self->widget = GTK_WIDGET(gtk_vbox_new(FALSE, DT_BAUHAUS_SPACE)); // Shadows gui_init_tab(self, _("shadows"), &g->colorpick1, &g->gslider1, &g->gslider2); // Highlights gui_init_tab(self, _("highlights"), &g->colorpick2, &g->gslider3, &g->gslider4); // Additional parameters GtkWidget* hbox=GTK_WIDGET(gtk_hbox_new(FALSE, 0)); GtkWidget* vbox = GTK_WIDGET(gtk_vbox_new(FALSE, 0)); gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(vbox), TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(self->widget), GTK_WIDGET(hbox), TRUE, TRUE, 0); g->scale1 = dt_bauhaus_slider_new_with_range(self, 0.0, 100.0, 0.1, p->balance*100.0, 2); dt_bauhaus_slider_set_format(g->scale1, "%.2f"); dt_bauhaus_widget_set_label(g->scale1, _("balance")); gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(g->scale1), TRUE, TRUE, 0); g->scale2 = dt_bauhaus_slider_new_with_range(self, 0.0, 100.0, 1.0, p->compress, 2); dt_bauhaus_slider_set_format(g->scale2, "%.2f%%"); dt_bauhaus_widget_set_label(g->scale2,_("compress")); gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(g->scale2), TRUE, TRUE, 0); g_object_set(G_OBJECT(g->scale1), "tooltip-text", _("the balance of center of splittoning"), (char *)NULL); g_object_set(G_OBJECT(g->scale2), "tooltip-text", _("compress the effect on highlights/shadows and\npreserve midtones"), (char *)NULL); g_signal_connect (G_OBJECT (g->gslider1), "value-changed", G_CALLBACK (hue_callback), self); g_signal_connect (G_OBJECT (g->gslider3), "value-changed", G_CALLBACK (hue_callback), self); g_signal_connect (G_OBJECT (g->gslider2), "value-changed", G_CALLBACK (saturation_callback), self); g_signal_connect (G_OBJECT (g->gslider4), "value-changed", G_CALLBACK (saturation_callback), self); g_signal_connect (G_OBJECT (g->scale1), "value-changed", G_CALLBACK (balance_callback), self); g_signal_connect (G_OBJECT (g->scale2), "value-changed", G_CALLBACK (compress_callback), self); g_signal_connect (G_OBJECT (g->colorpick1), "clicked", G_CALLBACK (colorpick_callback), self); g_signal_connect (G_OBJECT (g->colorpick2), "clicked", G_CALLBACK (colorpick_callback), self); }
void gui_init(struct dt_iop_module_t *self) { self->gui_data = malloc(sizeof(dt_iop_lowpass_gui_data_t)); dt_iop_lowpass_gui_data_t *g = (dt_iop_lowpass_gui_data_t *)self->gui_data; dt_iop_lowpass_params_t *p = (dt_iop_lowpass_params_t *)self->params; self->widget = gtk_vbox_new(TRUE, DT_BAUHAUS_SPACE); #if 0 // gaussian is order not user selectable here, as it does not make much sense for a lowpass filter GtkBox *hbox = GTK_BOX(gtk_hbox_new(FALSE, 5)); gtk_box_pack_start(GTK_BOX(self->widget), GTK_WIDGET(hbox), FALSE, FALSE, 0); GtkWidget *label = dtgtk_reset_label_new(_("filter order"), self, &p->order, sizeof(float)); gtk_box_pack_start(hbox, label, FALSE, FALSE, 0); g->order = GTK_COMBO_BOX(gtk_combo_box_new_text()); gtk_combo_box_append_text(g->order, _("0th order")); gtk_combo_box_append_text(g->order, _("1st order")); gtk_combo_box_append_text(g->order, _("2nd order")); gtk_object_set(GTK_OBJECT(g->order), "tooltip-text", _("filter order of gaussian blur"), (char *)NULL); gtk_box_pack_start(hbox, GTK_WIDGET(g->order), TRUE, TRUE, 0); #endif g->scale1 = dt_bauhaus_slider_new_with_range(self,0.1, 200.0, 0.1, p->radius, 2); g->scale2 = dt_bauhaus_slider_new_with_range(self,-3.0, 3.0, 0.01, p->contrast, 2); g->scale3 = dt_bauhaus_slider_new_with_range(self,-3.0, 3.0, 0.01, p->saturation, 2); dt_bauhaus_widget_set_label(g->scale1,_("radius")); dt_bauhaus_widget_set_label(g->scale2,_("contrast")); dt_bauhaus_widget_set_label(g->scale3,_("saturation")); g->bilat = dt_bauhaus_combobox_new(self); dt_bauhaus_widget_set_label(g->bilat, _("soften with")); dt_bauhaus_combobox_add(g->bilat, _("gaussian")); dt_bauhaus_combobox_add(g->bilat, _("bilateral filter")); gtk_box_pack_start(GTK_BOX(self->widget), g->scale1, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(self->widget), g->bilat, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(self->widget), g->scale2, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(self->widget), g->scale3, TRUE, TRUE, 0); gtk_object_set(GTK_OBJECT(g->scale1), "tooltip-text", _("radius of gaussian/bilateral blur"), (char *)NULL); gtk_object_set(GTK_OBJECT(g->scale2), "tooltip-text", _("contrast of lowpass filter"), (char *)NULL); gtk_object_set(GTK_OBJECT(g->scale3), "tooltip-text", _("color saturation of lowpass filter"), (char *)NULL); gtk_object_set(GTK_OBJECT(g->bilat), "tooltip-text", _("which filter to use for blurring"), (char *)NULL); g_signal_connect (G_OBJECT (g->scale1), "value-changed", G_CALLBACK (radius_callback), self); g_signal_connect (G_OBJECT (g->bilat), "value-changed", G_CALLBACK (bilat_callback), self); g_signal_connect (G_OBJECT (g->scale2), "value-changed", G_CALLBACK (contrast_callback), self); g_signal_connect (G_OBJECT (g->scale3), "value-changed", G_CALLBACK (saturation_callback), self); #if 0 // gaussian order not user selectable g_signal_connect (G_OBJECT (g->order), "changed", G_CALLBACK (order_changed), self); #endif }
void gui_init(dt_iop_module_t *self) { self->gui_data = malloc(sizeof(dt_iop_rawprepare_gui_data_t)); dt_iop_rawprepare_gui_data_t *g = (dt_iop_rawprepare_gui_data_t *)self->gui_data; dt_iop_rawprepare_params_t *p = (dt_iop_rawprepare_params_t *)self->params; self->widget = gtk_box_new(GTK_ORIENTATION_VERTICAL, DT_BAUHAUS_SPACE); g->box_raw = gtk_box_new(GTK_ORIENTATION_VERTICAL, DT_BAUHAUS_SPACE); for(int i = 0; i < 4; i++) { gchar *label = g_strdup_printf(_("black level %i"), i); g->black_level_separate[i] = dt_bauhaus_slider_new_with_range(self, 0, 16384, 1, p->raw_black_level_separate[i], 0); dt_bauhaus_widget_set_label(g->black_level_separate[i], NULL, label); gtk_widget_set_tooltip_text(g->black_level_separate[i], label); gtk_box_pack_start(GTK_BOX(g->box_raw), g->black_level_separate[i], FALSE, FALSE, 0); dt_bauhaus_slider_enable_soft_boundaries(g->black_level_separate[i], 0, UINT16_MAX); g_signal_connect(G_OBJECT(g->black_level_separate[i]), "value-changed", G_CALLBACK(callback), self); g_free(label); } g->white_point = dt_bauhaus_slider_new_with_range(self, 0, 16384, 1, p->raw_white_point, 0); dt_bauhaus_widget_set_label(g->white_point, NULL, _("white point")); gtk_widget_set_tooltip_text(g->white_point, _("white point")); gtk_box_pack_start(GTK_BOX(g->box_raw), g->white_point, FALSE, FALSE, 0); dt_bauhaus_slider_enable_soft_boundaries(g->white_point, 0, UINT16_MAX); g_signal_connect(G_OBJECT(g->white_point), "value-changed", G_CALLBACK(callback), self); if(dt_conf_get_bool("plugins/darkroom/rawprepare/allow_editing_crop")) { for(int i = 0; i < 4; i++) { g->crop[i] = dt_bauhaus_slider_new_with_range(self, 0, 256, 1, p->crop.array[i], 0); dt_bauhaus_widget_set_label(g->crop[i], NULL, gettext(crop_labels[i].label)); gtk_widget_set_tooltip_text(g->crop[i], gettext(crop_labels[i].tooltip)); gtk_box_pack_start(GTK_BOX(g->box_raw), g->crop[i], FALSE, FALSE, 0); dt_bauhaus_slider_enable_soft_boundaries(g->crop[i], 0, UINT16_MAX); g_signal_connect(G_OBJECT(g->crop[i]), "value-changed", G_CALLBACK(callback), self); } } gtk_box_pack_start(GTK_BOX(self->widget), g->box_raw, FALSE, FALSE, 0); g->label_non_raw = gtk_label_new(_("raw black/white point correction\nonly works for the sensors that need it.")); gtk_widget_set_halign(g->label_non_raw, GTK_ALIGN_START); gtk_box_pack_start(GTK_BOX(self->widget), g->label_non_raw, FALSE, FALSE, 0); }
void gui_init(struct dt_iop_module_t *self) { self->gui_data = malloc(sizeof(dt_iop_relight_gui_data_t)); dt_iop_relight_gui_data_t *g = (dt_iop_relight_gui_data_t *)self->gui_data; dt_iop_relight_params_t *p = (dt_iop_relight_params_t *)self->params; self->widget = gtk_box_new(GTK_ORIENTATION_VERTICAL, DT_BAUHAUS_SPACE); g_signal_connect(G_OBJECT(self->widget), "draw", G_CALLBACK(draw), self); /* exposure */ g->scale1 = dt_bauhaus_slider_new_with_range(self, -2.0, 2.0, 0.05, p->ev, 2); dt_bauhaus_slider_set_format(g->scale1, "%.2fEV"); dt_bauhaus_widget_set_label(g->scale1, NULL, _("exposure")); g_object_set(G_OBJECT(g->scale1), "tooltip-text", _("the fill-light in EV"), (char *)NULL); g_signal_connect(G_OBJECT(g->scale1), "value-changed", G_CALLBACK(ev_callback), self); /* width*/ g->scale2 = dt_bauhaus_slider_new_with_range(self, 2, 10, 0.5, p->width, 1); dt_bauhaus_slider_set_format(g->scale2, "%.1f"); dt_bauhaus_widget_set_label(g->scale2, NULL, _("width")); /* xgettext:no-c-format */ g_object_set(G_OBJECT(g->scale2), "tooltip-text", _("width of fill-light area defined in zones"), (char *)NULL); g_signal_connect(G_OBJECT(g->scale2), "value-changed", G_CALLBACK(width_callback), self); /* lightnessslider */ GtkBox *hbox = GTK_BOX(gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 2)); #define NEUTRAL_GRAY 0.5 static const GdkRGBA _gradient_L[] = { { 0, 0, 0, 1.0 }, { NEUTRAL_GRAY, NEUTRAL_GRAY, NEUTRAL_GRAY, 1.0 } }; g->gslider1 = DTGTK_GRADIENT_SLIDER(dtgtk_gradient_slider_new_with_color(_gradient_L[0], _gradient_L[1])); g_object_set(G_OBJECT(g->gslider1), "tooltip-text", _("select the center of fill-light"), (char *)NULL); g_signal_connect(G_OBJECT(g->gslider1), "value-changed", G_CALLBACK(center_callback), self); g->tbutton1 = DTGTK_TOGGLEBUTTON(dtgtk_togglebutton_new(dtgtk_cairo_paint_colorpicker, CPF_STYLE_FLAT)); gtk_widget_set_size_request(GTK_WIDGET(g->tbutton1), DT_PIXEL_APPLY_DPI(22), DT_PIXEL_APPLY_DPI(22)); g_signal_connect(G_OBJECT(g->tbutton1), "toggled", G_CALLBACK(picker_callback), self); gtk_box_pack_start(hbox, GTK_WIDGET(g->gslider1), TRUE, TRUE, 0); gtk_box_pack_start(hbox, GTK_WIDGET(g->tbutton1), FALSE, FALSE, 0); /* add controls to widget ui */ gtk_box_pack_start(GTK_BOX(self->widget), GTK_WIDGET(g->scale1), TRUE, FALSE, 0); gtk_box_pack_start(GTK_BOX(self->widget), GTK_WIDGET(hbox), TRUE, FALSE, 0); gtk_box_pack_start(GTK_BOX(self->widget), GTK_WIDGET(g->scale2), TRUE, FALSE, 0); g_object_set(G_OBJECT(g->tbutton1), "tooltip-text", _("toggle tool for picking median lightness in image"), (char *)NULL); }
void gui_init(dt_iop_module_t *self) { self->gui_data = malloc(sizeof(dt_iop_hotpixels_gui_data_t)); dt_iop_hotpixels_gui_data_t *g = (dt_iop_hotpixels_gui_data_t *)self->gui_data; dt_iop_hotpixels_params_t *p = (dt_iop_hotpixels_params_t *)self->params; g->pixels_fixed = -1; self->widget = gtk_box_new(GTK_ORIENTATION_VERTICAL, DT_BAUHAUS_SPACE); g->box_raw = gtk_box_new(GTK_ORIENTATION_VERTICAL, DT_BAUHAUS_SPACE); g_signal_connect(G_OBJECT(g->box_raw), "draw", G_CALLBACK(draw), self); /* threshold */ g->threshold = dt_bauhaus_slider_new_with_range(self, 0.0, 1.0, 0.005, p->threshold, 4); dt_bauhaus_slider_set_format(g->threshold, "%.4f"); dt_bauhaus_widget_set_label(g->threshold, NULL, _("threshold")); g_object_set(G_OBJECT(g->threshold), "tooltip-text", _("lower threshold for hot pixel"), NULL); gtk_box_pack_start(GTK_BOX(g->box_raw), GTK_WIDGET(g->threshold), TRUE, TRUE, 0); g_signal_connect(G_OBJECT(g->threshold), "value-changed", G_CALLBACK(threshold_callback), self); /* strength */ g->strength = dt_bauhaus_slider_new_with_range(self, 0.0, 1.0, 0.01, p->strength, 4); dt_bauhaus_slider_set_format(g->threshold, "%.4f"); dt_bauhaus_widget_set_label(g->strength, NULL, _("strength")); g_object_set(G_OBJECT(g->strength), "tooltip-text", _("strength of hot pixel correction"), NULL); gtk_box_pack_start(GTK_BOX(g->box_raw), GTK_WIDGET(g->strength), TRUE, TRUE, 0); g_signal_connect(G_OBJECT(g->strength), "value-changed", G_CALLBACK(strength_callback), self); /* 3 neighbours */ g->permissive = GTK_TOGGLE_BUTTON(gtk_check_button_new_with_label(_("detect by 3 neighbors"))); gtk_toggle_button_set_active(g->permissive, p->permissive); gtk_box_pack_start(GTK_BOX(g->box_raw), GTK_WIDGET(g->permissive), TRUE, TRUE, 0); g_signal_connect(G_OBJECT(g->permissive), "toggled", G_CALLBACK(permissive_callback), self); GtkBox *hbox1 = GTK_BOX(gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0)); g->markfixed = GTK_TOGGLE_BUTTON(gtk_check_button_new_with_label(_("mark fixed pixels"))); gtk_toggle_button_set_active(g->markfixed, p->markfixed); gtk_box_pack_start(GTK_BOX(hbox1), GTK_WIDGET(g->markfixed), TRUE, TRUE, 0); g_signal_connect(G_OBJECT(g->markfixed), "toggled", G_CALLBACK(markfixed_callback), self); g->message = GTK_LABEL(gtk_label_new("")); // This gets filled in by process gtk_box_pack_start(GTK_BOX(hbox1), GTK_WIDGET(g->message), TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(g->box_raw), GTK_WIDGET(hbox1), TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(self->widget), g->box_raw, FALSE, FALSE, 0); g->label_non_raw = gtk_label_new(_("hot pixel correction\nonly works for raw images.")); gtk_widget_set_halign(g->label_non_raw, GTK_ALIGN_START); gtk_box_pack_start(GTK_BOX(self->widget), g->label_non_raw, FALSE, FALSE, 0); }
void gui_init(struct dt_iop_module_t *self) { self->gui_data = malloc(sizeof(dt_iop_channelmixer_gui_data_t)); dt_iop_channelmixer_gui_data_t *g = (dt_iop_channelmixer_gui_data_t *)self->gui_data; dt_iop_channelmixer_params_t *p = (dt_iop_channelmixer_params_t *)self->params; self->widget = gtk_vbox_new(FALSE, DT_BAUHAUS_SPACE); /* output */ g->combo1 = dt_bauhaus_combobox_new(self); dt_bauhaus_widget_set_label(g->combo1, NULL, _("destination")); dt_bauhaus_combobox_add(g->combo1,_("hue")); dt_bauhaus_combobox_add(g->combo1,_("saturation")); dt_bauhaus_combobox_add(g->combo1,_("lightness")); dt_bauhaus_combobox_add(g->combo1,_("red")); dt_bauhaus_combobox_add(g->combo1,_("green")); dt_bauhaus_combobox_add(g->combo1,_("blue")); dt_bauhaus_combobox_add(g->combo1,C_("channelmixer", "gray")); dt_bauhaus_combobox_set(g->combo1, CHANNEL_RED ); g_signal_connect (G_OBJECT (g->combo1), "value-changed", G_CALLBACK (output_callback), self); /* red */ g->scale1 = dt_bauhaus_slider_new_with_range(self, -2.0, 2.0, 0.005, p->red[CHANNEL_RED] , 3); g_object_set (GTK_OBJECT(g->scale1), "tooltip-text", _("amount of red channel in the output channel"), (char *)NULL); dt_bauhaus_widget_set_label(g->scale1, NULL, _("red")); g_signal_connect (G_OBJECT (g->scale1), "value-changed", G_CALLBACK (red_callback), self); /* green */ g->scale2 = dt_bauhaus_slider_new_with_range(self, -2.0, 2.0, 0.005, p->green[CHANNEL_RED] , 3); g_object_set (GTK_OBJECT(g->scale2), "tooltip-text", _("amount of green channel in the output channel"), (char *)NULL); dt_bauhaus_widget_set_label(g->scale2, NULL, _("green")); g_signal_connect (G_OBJECT (g->scale2), "value-changed", G_CALLBACK (green_callback), self); /* blue */ g->scale3 = dt_bauhaus_slider_new_with_range(self, -2.0, 2.0, 0.005, p->blue[CHANNEL_RED] , 3); g_object_set(g->scale3, "tooltip-text", _("amount of blue channel in the output channel"), (char *)NULL); dt_bauhaus_widget_set_label(g->scale3, NULL, _("blue")); g_signal_connect (G_OBJECT (g->scale3), "value-changed", G_CALLBACK (blue_callback), self); gtk_box_pack_start(GTK_BOX(self->widget), GTK_WIDGET(g->combo1), TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(self->widget), GTK_WIDGET(g->scale1), TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(self->widget), GTK_WIDGET(g->scale2), TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(self->widget), GTK_WIDGET(g->scale3), TRUE, TRUE, 0); }
void gui_init(struct dt_iop_module_t *self) { self->gui_data = malloc(sizeof(dt_iop_global_tonemap_gui_data_t)); dt_iop_global_tonemap_gui_data_t *g = (dt_iop_global_tonemap_gui_data_t *)self->gui_data; dt_iop_global_tonemap_params_t *p = (dt_iop_global_tonemap_params_t *)self->params; dt_pthread_mutex_init(&g->lock, NULL); g->lwmax = NAN; g->hash = 0; self->widget = gtk_box_new(GTK_ORIENTATION_VERTICAL, DT_BAUHAUS_SPACE); dt_gui_add_help_link(self->widget, dt_get_help_url(self->op)); /* operator */ g->operator= dt_bauhaus_combobox_new(self); dt_bauhaus_widget_set_label(g->operator, NULL, _("operator")); dt_bauhaus_combobox_add(g->operator, "reinhard"); dt_bauhaus_combobox_add(g->operator, "filmic"); dt_bauhaus_combobox_add(g->operator, "drago"); gtk_widget_set_tooltip_text(g->operator, _("the global tonemap operator")); g_signal_connect(G_OBJECT(g->operator), "value-changed", G_CALLBACK(operator_callback), self); gtk_box_pack_start(GTK_BOX(self->widget), GTK_WIDGET(g->operator), TRUE, TRUE, 0); /* drago bias */ g->drago.bias = dt_bauhaus_slider_new_with_range(self, 0.5, 1.0, 0.05, p->drago.bias, 2); dt_bauhaus_widget_set_label(g->drago.bias, NULL, _("bias")); gtk_widget_set_tooltip_text(g->drago.bias, _("the bias for tonemapper controls the linearity, " "the higher the more details in blacks")); g_signal_connect(G_OBJECT(g->drago.bias), "value-changed", G_CALLBACK(_drago_bias_callback), self); gtk_box_pack_start(GTK_BOX(self->widget), g->drago.bias, TRUE, TRUE, 0); /* drago bias */ g->drago.max_light = dt_bauhaus_slider_new_with_range(self, 1, 500, 10, p->drago.max_light, 2); dt_bauhaus_widget_set_label(g->drago.max_light, NULL, _("target")); gtk_widget_set_tooltip_text(g->drago.max_light, _("the target light for tonemapper specified as cd/m2")); g_signal_connect(G_OBJECT(g->drago.max_light), "value-changed", G_CALLBACK(_drago_max_light_callback), self); gtk_box_pack_start(GTK_BOX(self->widget), g->drago.max_light, TRUE, TRUE, 0); /* detail */ g->detail = dt_bauhaus_slider_new_with_range(self, -1.0, 1.0, 0.01, 0.0, 3); gtk_box_pack_start(GTK_BOX(self->widget), g->detail, TRUE, TRUE, 0); dt_bauhaus_widget_set_label(g->detail, NULL, _("detail")); g_signal_connect(G_OBJECT(g->detail), "value-changed", G_CALLBACK(detail_callback), self); }
void gui_init(struct dt_iop_module_t *self) { self->gui_data = malloc(sizeof(dt_iop_highlights_gui_data_t)); dt_iop_highlights_gui_data_t *g = (dt_iop_highlights_gui_data_t *)self->gui_data; dt_iop_highlights_params_t *p = (dt_iop_highlights_params_t *)self->params; self->widget = gtk_vbox_new(FALSE, DT_BAUHAUS_SPACE); g->clip = dt_bauhaus_slider_new_with_range(self, 0.0, 2.0, 0.01, p->clip, 3); g_object_set(G_OBJECT(g->clip), "tooltip-text", _("manually adjust the clipping threshold against magenta highlights"), (char *)NULL); dt_bauhaus_widget_set_label(g->clip, _("clipping threshold")); gtk_box_pack_start(GTK_BOX(self->widget), g->clip, TRUE, TRUE, 0); g->mode = dt_bauhaus_combobox_new(self); gtk_box_pack_start(GTK_BOX(self->widget), g->mode, TRUE, TRUE, 0); dt_bauhaus_widget_set_label(g->mode, _("method")); dt_bauhaus_combobox_add(g->mode, _("clip highlights")); dt_bauhaus_combobox_add(g->mode, _("reconstruct in LCh")); g_object_set(G_OBJECT(g->mode), "tooltip-text", _("highlight reconstruction method"), (char *)NULL); g->slider_box = GTK_BOX(gtk_vbox_new(TRUE, DT_BAUHAUS_SPACE)); gtk_widget_set_no_show_all(GTK_WIDGET(g->slider_box), TRUE); gtk_box_pack_start(GTK_BOX(self->widget), GTK_WIDGET(g->slider_box), FALSE, FALSE, 0); g->blendL = dt_bauhaus_slider_new_with_range(self,0.0, 1.0, 0.01, p->blendL, 3); g->blendC = dt_bauhaus_slider_new_with_range(self,0.0, 1.0, 0.01, p->blendC, 3); g->blendh = dt_bauhaus_slider_new_with_range(self,0.0, 1.0, 0.01, p->blendh, 3); g_object_set(G_OBJECT(g->blendL), "tooltip-text", _("blend lightness (0 is same as clipping)"), (char *)NULL); g_object_set(G_OBJECT(g->blendC), "tooltip-text", _("blend colorness (0 is same as clipping)"), (char *)NULL); g_object_set(G_OBJECT(g->blendh), "tooltip-text", _("blend hue (0 is same as clipping)"), (char *)NULL); dt_bauhaus_widget_set_label(g->blendL,_("blend L")); dt_bauhaus_widget_set_label(g->blendC,_("blend C")); dt_bauhaus_widget_set_label(g->blendh,_("blend h")); gtk_box_pack_start(g->slider_box, g->blendL, TRUE, TRUE, 0); gtk_box_pack_start(g->slider_box, g->blendC, TRUE, TRUE, 0); gtk_box_pack_start(g->slider_box, g->blendh, TRUE, TRUE, 0); g_signal_connect (G_OBJECT (g->clip), "value-changed", G_CALLBACK (clip_callback), self); g_signal_connect (G_OBJECT (g->blendL), "value-changed", G_CALLBACK (blend_callback), self); g_signal_connect (G_OBJECT (g->blendC), "value-changed", G_CALLBACK (blend_callback), self); g_signal_connect (G_OBJECT (g->blendh), "value-changed", G_CALLBACK (blend_callback), self); g_signal_connect (G_OBJECT (g->mode), "value-changed", G_CALLBACK (mode_changed), self); }
void gui_init(struct dt_iop_module_t *self) { self->gui_data = malloc(sizeof(dt_iop_highlights_gui_data_t)); dt_iop_highlights_gui_data_t *g = (dt_iop_highlights_gui_data_t *)self->gui_data; dt_iop_highlights_params_t *p = (dt_iop_highlights_params_t *)self->params; self->widget = gtk_vbox_new(FALSE, DT_BAUHAUS_SPACE); g->mode = dt_bauhaus_combobox_new(self); gtk_box_pack_start(GTK_BOX(self->widget), g->mode, TRUE, TRUE, 0); dt_bauhaus_widget_set_label(g->mode, _("method")); dt_bauhaus_combobox_add(g->mode, _("clip highlights")); dt_bauhaus_combobox_add(g->mode, _("reconstruct in LCh")); g_object_set(G_OBJECT(g->mode), "tooltip-text", _("highlight reconstruction method"), (char *)NULL); g->clip = dt_bauhaus_slider_new_with_range(self, 0.0, 2.0, 0.01, p->clip, 3); g_object_set(G_OBJECT(g->clip), "tooltip-text", _("manually adjust the clipping threshold against" " magenta highlights (you shouldn't ever need to touch this)"), (char *)NULL); dt_bauhaus_widget_set_label(g->clip, _("clipping threshold")); gtk_box_pack_start(GTK_BOX(self->widget), g->clip, TRUE, TRUE, 0); g_signal_connect (G_OBJECT (g->clip), "value-changed", G_CALLBACK (clip_callback), self); g_signal_connect (G_OBJECT (g->mode), "value-changed", G_CALLBACK (mode_changed), self); }
static inline void gui_init_tab( struct dt_iop_module_t *self, const char* name, GtkDarktableButton** ppcolor, GtkWidget** pphue, GtkWidget** ppsaturation) { gtk_box_pack_start(GTK_BOX(self->widget), GTK_WIDGET(dtgtk_label_new(name,DARKTABLE_LABEL_TAB|DARKTABLE_LABEL_ALIGN_RIGHT)), FALSE, FALSE, 5); // color button GtkDarktableButton* color; *ppcolor = color = DTGTK_BUTTON(dtgtk_button_new(dtgtk_cairo_paint_color,CPF_IGNORE_FG_STATE|CPF_STYLE_FLAT|CPF_DO_NOT_USE_BORDER)); gtk_widget_set_size_request(GTK_WIDGET(color),32,32); // hue slider GtkWidget* hue; *pphue = hue =( dt_bauhaus_slider_new_with_range(self, 0.0f, 1.0f, 0.01f, 0.0f, 2)); dt_bauhaus_slider_set_stop(hue, 0.0f, 1.0f, 0.0f, 0.0f); dt_bauhaus_widget_set_label(hue, _("hue")); dt_bauhaus_slider_set_stop(hue, 0.166f, 1.0f, 1.0f, 0.0f); dt_bauhaus_slider_set_stop(hue, 0.322f, 0.0f, 1.0f, 0.0f); dt_bauhaus_slider_set_stop(hue, 0.498f, 0.0f, 1.0f, 1.0f); dt_bauhaus_slider_set_stop(hue, 0.664f, 0.0f, 0.0f, 1.0f); dt_bauhaus_slider_set_stop(hue, 0.830f, 1.0f, 0.0f, 1.0f); dt_bauhaus_slider_set_stop(hue, 1.0f, 1.0f, 0.0f, 0.0f); g_object_set(G_OBJECT(hue), "tooltip-text", _("select the hue tone"), (char *)NULL); // saturation slider GtkWidget* saturation; *ppsaturation = saturation = dt_bauhaus_slider_new_with_range(self, 0.0f, 1.0f, 0.01f, 0.0f, 2); dt_bauhaus_widget_set_label(saturation, _("saturation")); dt_bauhaus_slider_set_stop(saturation, 0.0f, 1.0f, 1.0f, 1.0f); dt_bauhaus_slider_set_stop(saturation, 1.0f, 1.0f, 1.0f, 1.0f); g_object_set(G_OBJECT(saturation), "tooltip-text", _("select the saturation tone"), (char *)NULL); // pack the widgets GtkWidget* vbox = gtk_vbox_new(FALSE, DT_BAUHAUS_SPACE); gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(hue), FALSE, TRUE, 0); gtk_box_pack_end(GTK_BOX(vbox), GTK_WIDGET(saturation), FALSE, TRUE, 0); GtkWidget* hbox = GTK_WIDGET(gtk_hbox_new(FALSE, 0)); gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(vbox), TRUE, TRUE, 0); gtk_box_pack_end(GTK_BOX(hbox), GTK_WIDGET(color),FALSE,FALSE,0); gtk_box_pack_start(GTK_BOX(self->widget), GTK_WIDGET(hbox), TRUE, TRUE, 0); }
void gui_init(dt_iop_module_t *self) { // init the slider (more sophisticated layouts are possible with gtk tables and boxes): self->gui_data = malloc(sizeof(dt_iop_useless_gui_data_t)); dt_iop_useless_gui_data_t *g = (dt_iop_useless_gui_data_t *)self->gui_data; g->scale = dt_bauhaus_slider_new_with_range(self, 1, 100, 1, 50, 0); self->widget = g->scale; g_signal_connect (G_OBJECT (g->scale), "value-changed", G_CALLBACK (slider_callback), self); }
void gui_init (dt_iop_module_t *self) { // init the slider (more sophisticated layouts are possible with gtk tables and boxes): self->gui_data = malloc(sizeof(dt_iop_nlmeans_gui_data_t)); dt_iop_nlmeans_gui_data_t *g = (dt_iop_nlmeans_gui_data_t *)self->gui_data; self->widget = gtk_vbox_new(TRUE, DT_BAUHAUS_SPACE); g->luma = dt_bauhaus_slider_new_with_range(self, 0.0f, 100.0f, 1., 10.f, 0); g->chroma = dt_bauhaus_slider_new_with_range(self, 0.0f, 100.0f, 1., 30.f, 0); gtk_box_pack_start(GTK_BOX(self->widget), g->luma, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(self->widget), g->chroma, TRUE, TRUE, 0); dt_bauhaus_widget_set_label(g->luma, _("luma")); dt_bauhaus_slider_set_format(g->luma, "%.0f%%"); dt_bauhaus_widget_set_label(g->chroma, _("chroma")); dt_bauhaus_slider_set_format(g->chroma, "%.0f%%"); g_object_set (GTK_OBJECT(g->luma), "tooltip-text", _("how much to smooth brightness"), (char *)NULL); g_object_set (GTK_OBJECT(g->chroma), "tooltip-text", _("how much to smooth colors"), (char *)NULL); g_signal_connect (G_OBJECT (g->luma), "value-changed", G_CALLBACK (luma_callback), self); g_signal_connect (G_OBJECT (g->chroma), "value-changed", G_CALLBACK (chroma_callback), self); }
void gui_init(dt_iop_module_t *module) { module->gui_data = malloc(sizeof(dt_iop_defringe_gui_data_t)); dt_iop_defringe_gui_data_t *g = (dt_iop_defringe_gui_data_t *)module->gui_data; dt_iop_defringe_params_t *p = (dt_iop_defringe_params_t *)module->params; module->widget = gtk_box_new(GTK_ORIENTATION_VERTICAL, DT_BAUHAUS_SPACE); /* mode selection */ g->mode_select = dt_bauhaus_combobox_new(module); gtk_box_pack_start(GTK_BOX(module->widget), g->mode_select, TRUE, TRUE, 0); dt_bauhaus_widget_set_label(g->mode_select, NULL, _("operation mode")); dt_bauhaus_combobox_add(g->mode_select, _("global average (fast)")); // 0 dt_bauhaus_combobox_add(g->mode_select, _("local average (slow)")); // 1 dt_bauhaus_combobox_add(g->mode_select, _("static threshold (fast)")); // 2 g_object_set( G_OBJECT(g->mode_select), "tooltip-text", _("method for color protection:\n - global average: fast, might show slightly wrong previews in high " "magnification; might sometimes protect saturation too much or too low in comparison to local " "average\n - local average: slower, might protect saturation better than global average by using " "near pixels as color reference, so it can still allow for more desaturation where required\n - " "static: fast, only uses the threshold as a static limit"), (char *)NULL); g_signal_connect(G_OBJECT(g->mode_select), "value-changed", G_CALLBACK(mode_callback), module); /* radius and threshold sliders */ g->radius_scale = dt_bauhaus_slider_new_with_range(module, 0.5, 20.0, 0.1, p->radius, 1); dt_bauhaus_widget_set_label(g->radius_scale, NULL, _("edge detection radius")); g->thresh_scale = dt_bauhaus_slider_new_with_range(module, 0.5, 128.0, 0.1, p->thresh, 1); dt_bauhaus_widget_set_label(g->thresh_scale, NULL, _("threshold")); gtk_box_pack_start(GTK_BOX(module->widget), GTK_WIDGET(g->radius_scale), TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(module->widget), GTK_WIDGET(g->thresh_scale), TRUE, TRUE, 0); g_object_set(G_OBJECT(g->radius_scale), "tooltip-text", _("radius for detecting fringe"), (char *)NULL); g_object_set(G_OBJECT(g->thresh_scale), "tooltip-text", _("threshold for defringe, higher values mean less defringing"), (char *)NULL); g_signal_connect(G_OBJECT(g->radius_scale), "value-changed", G_CALLBACK(radius_slider_callback), module); g_signal_connect(G_OBJECT(g->thresh_scale), "value-changed", G_CALLBACK(thresh_slider_callback), module); }
void gui_init(struct dt_iop_module_t *self) { self->gui_data = malloc(sizeof(dt_iop_overexposed_gui_data_t)); dt_iop_overexposed_gui_data_t *g = (dt_iop_overexposed_gui_data_t *)self->gui_data; dt_iop_overexposed_params_t *p = (dt_iop_overexposed_params_t *)self->params; // g->mask = NULL; self->widget =gtk_vbox_new(FALSE, DT_BAUHAUS_SPACE); /* lower */ g->lower = dt_bauhaus_slider_new_with_range(self,0.0, 100.0, 0.1, p->lower, 2); dt_bauhaus_slider_set_format(g->lower,"%.0f%%"); dt_bauhaus_widget_set_label(g->lower,_("lower threshold")); g_object_set(G_OBJECT(g->lower), "tooltip-text", _("threshold of what shall be considered underexposed"), (char *)NULL); g_signal_connect (G_OBJECT (g->lower), "value-changed", G_CALLBACK (lower_callback), self); gtk_box_pack_start(GTK_BOX(self->widget), GTK_WIDGET(g->lower), TRUE, TRUE, 0); /* upper */ g->upper = dt_bauhaus_slider_new_with_range(self, 0.0, 100.0, 0.1, p->upper, 2); dt_bauhaus_slider_set_format(g->upper,"%.0f%%"); dt_bauhaus_widget_set_label(g->upper,_("upper threshold")); g_object_set(G_OBJECT(g->upper), "tooltip-text", _("threshold of what shall be considered overexposed"), (char *)NULL); g_signal_connect (G_OBJECT (g->upper), "value-changed", G_CALLBACK (upper_callback), self); gtk_box_pack_start(GTK_BOX(self->widget), GTK_WIDGET(g->upper), TRUE, TRUE, 0); /* add quicktool button for enable/disable the plugin */ GtkWidget *button = dtgtk_button_new(dtgtk_cairo_paint_overexposed, CPF_STYLE_FLAT|CPF_DO_NOT_USE_BORDER); g_object_set(G_OBJECT(button), "tooltip-text", _("toggle over/under exposed indication"), (char *)NULL); g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (_iop_overexposed_quickbutton), self); dt_view_manager_module_toolbox_add(darktable.view_manager, button); }
void gui_init (struct dt_iop_module_t *self) { self->gui_data = malloc(sizeof(dt_iop_temperature_gui_data_t)); dt_iop_temperature_gui_data_t *g = (dt_iop_temperature_gui_data_t *)self->gui_data; dt_iop_temperature_params_t *p = (dt_iop_temperature_params_t*)self->default_params; self->request_color_pick = 0; self->widget = gtk_vbox_new(TRUE, DT_BAUHAUS_SPACE); g_signal_connect(G_OBJECT(self->widget), "expose-event", G_CALLBACK(expose), self); for(int k=0; k<3; k++) g->daylight_wb[k] = 1.0f; g->scale_tint = dt_bauhaus_slider_new_with_range(self,0.1, 8.0, .01,1.0,3); g->scale_k = dt_bauhaus_slider_new_with_range(self,DT_IOP_LOWEST_TEMPERATURE, DT_IOP_HIGHEST_TEMPERATURE, 10.,5000.0,0); g->scale_r = dt_bauhaus_slider_new_with_range(self,0.0, 8.0, .001,p->coeffs[0],3); g->scale_g = dt_bauhaus_slider_new_with_range(self,0.0, 8.0, .001,p->coeffs[1],3); g->scale_b = dt_bauhaus_slider_new_with_range(self,0.0, 8.0, .001,p->coeffs[2],3); dt_bauhaus_slider_set_format(g->scale_k,"%.0fK"); dt_bauhaus_widget_set_label(g->scale_tint, NULL, _("tint")); dt_bauhaus_widget_set_label(g->scale_k, NULL, _("temperature")); dt_bauhaus_widget_set_label(g->scale_r, NULL, _("red")); dt_bauhaus_widget_set_label(g->scale_g, NULL, _("green")); dt_bauhaus_widget_set_label(g->scale_b, NULL, _("blue")); gtk_box_pack_start(GTK_BOX(self->widget), g->scale_tint, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(self->widget), g->scale_k, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(self->widget), g->scale_r, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(self->widget), g->scale_g, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(self->widget), g->scale_b, TRUE, TRUE, 0); g->presets = dt_bauhaus_combobox_new(self); dt_bauhaus_widget_set_label(g->presets, NULL, _("preset")); gtk_box_pack_start(GTK_BOX(self->widget), g->presets, TRUE, TRUE, 0); g_object_set(G_OBJECT(g->presets), "tooltip-text", _("choose white balance preset from camera"), (char *)NULL); g->finetune = dt_bauhaus_slider_new_with_range(self,-9.0, 9.0, 1.0, 0.0, 0); dt_bauhaus_widget_set_label(g->finetune, NULL, _("finetune")); dt_bauhaus_slider_set_format(g->finetune, _("%.0f mired")); // initially doesn't have fine tuning stuff (camera wb) gtk_widget_set_sensitive(g->finetune, FALSE); gtk_box_pack_start(GTK_BOX(self->widget), g->finetune, TRUE, TRUE, 0); g_object_set(G_OBJECT(g->finetune), "tooltip-text", _("fine tune white balance preset"), (char *)NULL); self->gui_update(self); g_signal_connect (G_OBJECT (g->scale_tint), "value-changed", G_CALLBACK (tint_callback), self); g_signal_connect (G_OBJECT (g->scale_k), "value-changed", G_CALLBACK (temp_callback), self); g_signal_connect (G_OBJECT (g->scale_r), "value-changed", G_CALLBACK (rgb_callback), self); g_signal_connect (G_OBJECT (g->scale_g), "value-changed", G_CALLBACK (rgb_callback), self); g_signal_connect (G_OBJECT (g->scale_b), "value-changed", G_CALLBACK (rgb_callback), self); g_signal_connect (G_OBJECT (g->presets), "value-changed", G_CALLBACK (presets_changed), self); g_signal_connect (G_OBJECT (g->finetune), "value-changed", G_CALLBACK (finetune_changed), self); }
void gui_init(dt_iop_module_t *self) { // init the slider (more sophisticated layouts are possible with gtk tables and boxes): self->gui_data = malloc(sizeof(dt_iop_bilat_gui_data_t)); dt_iop_bilat_gui_data_t *g = (dt_iop_bilat_gui_data_t *)self->gui_data; self->widget = gtk_box_new(GTK_ORIENTATION_VERTICAL, DT_BAUHAUS_SPACE); g->spatial = dt_bauhaus_slider_new_with_range(self, 1, 100, 1, 50, 0); dt_bauhaus_widget_set_label(g->spatial, NULL, _("coarseness")); gtk_box_pack_start(GTK_BOX(self->widget), g->spatial, TRUE, TRUE, 0); g->range = dt_bauhaus_slider_new_with_range(self, 1, 100, 1, 20, 0); gtk_box_pack_start(GTK_BOX(self->widget), g->range, TRUE, TRUE, 0); dt_bauhaus_widget_set_label(g->range, NULL, _("contrast")); g->detail = dt_bauhaus_slider_new_with_range(self, -1.0, 2.0, 0.01, 0.2, 3); gtk_box_pack_start(GTK_BOX(self->widget), g->detail, TRUE, TRUE, 0); dt_bauhaus_widget_set_label(g->detail, NULL, _("detail")); g_signal_connect(G_OBJECT(g->spatial), "value-changed", G_CALLBACK(spatial_callback), self); g_signal_connect(G_OBJECT(g->range), "value-changed", G_CALLBACK(range_callback), self); g_signal_connect(G_OBJECT(g->detail), "value-changed", G_CALLBACK(detail_callback), self); }
void gui_init(struct dt_iop_module_t *self) { self->gui_data = malloc(sizeof(dt_iop_bloom_gui_data_t)); dt_iop_bloom_gui_data_t *g = (dt_iop_bloom_gui_data_t *)self->gui_data; dt_iop_bloom_params_t *p = (dt_iop_bloom_params_t *)self->params; self->widget = gtk_vbox_new(FALSE, DT_BAUHAUS_SPACE); /* size */ g->scale1 = dt_bauhaus_slider_new_with_range(self, 0.0, 100.0, 1.0, p->size, 0); dt_bauhaus_slider_set_format(g->scale1,"%.0f%%"); dt_bauhaus_widget_set_label(g->scale1,_("size")); g_object_set(G_OBJECT(g->scale1), "tooltip-text", _("the size of bloom"), (char *)NULL); /* threshold */ g->scale2 = dt_bauhaus_slider_new_with_range(self, 0.0, 100.0, 1.0, p->threshold, 0); dt_bauhaus_slider_set_format(g->scale2,"%.0f%%"); dt_bauhaus_widget_set_label(g->scale2,_("threshold")); g_object_set(G_OBJECT(g->scale2), "tooltip-text", _("the threshold of light"), (char *)NULL); /* strength */ g->scale3 = dt_bauhaus_slider_new_with_range(self, 0.0, 100.0, 1.0, p->strength, 0); dt_bauhaus_slider_set_format(g->scale3,"%.0f%%"); dt_bauhaus_widget_set_label(g->scale3,_("strength")); g_object_set(G_OBJECT(g->scale3), "tooltip-text", _("the strength of bloom"), (char *)NULL); gtk_box_pack_start(GTK_BOX(self->widget), GTK_WIDGET(g->scale1), TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(self->widget), GTK_WIDGET(g->scale2), TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(self->widget), GTK_WIDGET(g->scale3), TRUE, TRUE, 0); g_signal_connect (G_OBJECT (g->scale1), "value-changed", G_CALLBACK (size_callback), self); g_signal_connect (G_OBJECT (g->scale2), "value-changed", G_CALLBACK (threshold_callback), self); g_signal_connect (G_OBJECT (g->scale3), "value-changed", G_CALLBACK (strength_callback), self); }
void gui_init(struct dt_iop_module_t *self) { self->gui_data = malloc(sizeof(dt_iop_grain_gui_data_t)); dt_iop_grain_gui_data_t *g = (dt_iop_grain_gui_data_t *)self->gui_data; dt_iop_grain_params_t *p = (dt_iop_grain_params_t *)self->params; self->widget = gtk_box_new(GTK_ORIENTATION_VERTICAL, DT_BAUHAUS_SPACE); /* courseness */ g->scale1 = dt_bauhaus_slider_new_with_range(self, 20.0, 6400.0, 20.0, p->scale * GRAIN_SCALE_FACTOR, 0); dt_bauhaus_widget_set_label(g->scale1, NULL, _("coarseness")); dt_bauhaus_slider_set_format(g->scale1, "%.0fISO"); gtk_box_pack_start(GTK_BOX(self->widget), GTK_WIDGET(g->scale1), TRUE, TRUE, 0); gtk_widget_set_tooltip_text(g->scale1, _("the grain size (~ISO of the film)")); g_signal_connect(G_OBJECT(g->scale1), "value-changed", G_CALLBACK(scale_callback), self); /* strength */ g->scale2 = dt_bauhaus_slider_new_with_range(self, 0.0, 100.0, 1.0, p->strength, 2); dt_bauhaus_widget_set_label(g->scale2, NULL, _("strength")); dt_bauhaus_slider_set_format(g->scale2, "%.0f%%"); gtk_box_pack_start(GTK_BOX(self->widget), GTK_WIDGET(g->scale2), TRUE, TRUE, 0); gtk_widget_set_tooltip_text(g->scale2, _("the strength of applied grain")); g_signal_connect(G_OBJECT(g->scale2), "value-changed", G_CALLBACK(strength_callback), self); }
void gui_init(struct dt_iop_module_t *self) { self->gui_data = malloc(sizeof(dt_iop_vibrance_gui_data_t)); dt_iop_vibrance_gui_data_t *g = (dt_iop_vibrance_gui_data_t *)self->gui_data; dt_iop_vibrance_params_t *p = (dt_iop_vibrance_params_t *)self->params; self->widget = gtk_vbox_new(FALSE, DT_BAUHAUS_SPACE);; /* vibrance */ g->amount_scale = dt_bauhaus_slider_new_with_range(self,0.0, 100.0, 1, p->amount, 0); dt_bauhaus_slider_set_format(g->amount_scale,"%.0f%%"); dt_bauhaus_widget_set_label(g->amount_scale,_("vibrance")); gtk_box_pack_start(GTK_BOX(self->widget), GTK_WIDGET(g->amount_scale), TRUE, TRUE, 0); g_object_set(G_OBJECT(g->amount_scale), "tooltip-text", _("the amount of vibrance"), (char *)NULL); g_signal_connect (G_OBJECT (g->amount_scale), "value-changed", G_CALLBACK (amount_callback), self); }
void gui_init(struct dt_iop_module_t *self) { self->gui_data = malloc(sizeof(dt_iop_monochrome_gui_data_t)); dt_iop_monochrome_gui_data_t *g = (dt_iop_monochrome_gui_data_t *)self->gui_data; g->dragging = 0; self->request_color_pick = DT_REQUEST_COLORPICK_OFF; self->widget = gtk_box_new(GTK_ORIENTATION_VERTICAL, DT_BAUHAUS_SPACE); dt_gui_add_help_link(self->widget, dt_get_help_url(self->op)); g->area = GTK_DRAWING_AREA(dtgtk_drawing_area_new_with_aspect_ratio(1.0)); gtk_box_pack_start(GTK_BOX(self->widget), GTK_WIDGET(g->area), TRUE, TRUE, 0); gtk_widget_set_tooltip_text(GTK_WIDGET(g->area), _("drag and scroll mouse wheel to adjust the virtual color filter")); gtk_widget_add_events(GTK_WIDGET(g->area), GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_LEAVE_NOTIFY_MASK | darktable.gui->scroll_mask); g_signal_connect(G_OBJECT(g->area), "draw", G_CALLBACK(dt_iop_monochrome_draw), self); g_signal_connect(G_OBJECT(g->area), "button-press-event", G_CALLBACK(dt_iop_monochrome_button_press), self); g_signal_connect(G_OBJECT(g->area), "button-release-event", G_CALLBACK(dt_iop_monochrome_button_release), self); g_signal_connect(G_OBJECT(g->area), "motion-notify-event", G_CALLBACK(dt_iop_monochrome_motion_notify), self); g_signal_connect(G_OBJECT(g->area), "leave-notify-event", G_CALLBACK(dt_iop_monochrome_leave_notify), self); g_signal_connect(G_OBJECT(g->area), "scroll-event", G_CALLBACK(dt_iop_monochrome_scrolled), self); GtkWidget *box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, DT_BAUHAUS_SPACE); g->highlights = dt_bauhaus_slider_new_with_range(self, 0.0, 1.0, 0.01, 0.0, 2); gtk_widget_set_tooltip_text(g->highlights, _("how much to keep highlights")); dt_bauhaus_widget_set_label(g->highlights, NULL, _("highlights")); gtk_box_pack_start(GTK_BOX(box), g->highlights, TRUE, TRUE, 0); g_signal_connect(G_OBJECT(g->highlights), "value-changed", G_CALLBACK(highlights_callback), self); g->colorpicker = dtgtk_togglebutton_new(dtgtk_cairo_paint_colorpicker, CPF_STYLE_FLAT | CPF_DO_NOT_USE_BORDER, NULL); gtk_widget_set_size_request(GTK_WIDGET(g->colorpicker), DT_PIXEL_APPLY_DPI(14), DT_PIXEL_APPLY_DPI(14)); gtk_box_pack_end(GTK_BOX(box), GTK_WIDGET(g->colorpicker), FALSE, FALSE, 0); g_signal_connect(G_OBJECT(g->colorpicker), "toggled", G_CALLBACK(picker_callback), self); gtk_box_pack_end(GTK_BOX(self->widget), GTK_WIDGET(box), TRUE, TRUE, 0); cmsHPROFILE hsRGB = dt_colorspaces_get_profile(DT_COLORSPACE_SRGB, "", DT_PROFILE_DIRECTION_IN)->profile; cmsHPROFILE hLab = dt_colorspaces_get_profile(DT_COLORSPACE_LAB, "", DT_PROFILE_DIRECTION_ANY)->profile; g->xform = cmsCreateTransform(hLab, TYPE_Lab_DBL, hsRGB, TYPE_RGB_DBL, INTENT_PERCEPTUAL, 0); // cmsFLAGS_NOTPRECALC); }
void gui_init(struct dt_iop_module_t *self) { self->gui_data = malloc(sizeof(dt_iop_lowlight_gui_data_t)); dt_iop_lowlight_gui_data_t *c = (dt_iop_lowlight_gui_data_t *)self->gui_data; dt_iop_lowlight_params_t *p = (dt_iop_lowlight_params_t *)self->params; c->transition_curve = dt_draw_curve_new(0.0, 1.0, CATMULL_ROM); (void)dt_draw_curve_add_point(c->transition_curve, p->transition_x[DT_IOP_LOWLIGHT_BANDS - 2] - 1.0, p->transition_y[DT_IOP_LOWLIGHT_BANDS - 2]); for(int k = 0; k < DT_IOP_LOWLIGHT_BANDS; k++) (void)dt_draw_curve_add_point(c->transition_curve, p->transition_x[k], p->transition_y[k]); (void)dt_draw_curve_add_point(c->transition_curve, p->transition_x[1] + 1.0, p->transition_y[1]); c->mouse_x = c->mouse_y = c->mouse_pick = -1.0; c->dragging = 0; c->x_move = -1; c->mouse_radius = 1.0 / DT_IOP_LOWLIGHT_BANDS; self->widget = gtk_box_new(GTK_ORIENTATION_VERTICAL, DT_BAUHAUS_SPACE); c->area = GTK_DRAWING_AREA(dtgtk_drawing_area_new_with_aspect_ratio(0.75)); gtk_box_pack_start(GTK_BOX(self->widget), GTK_WIDGET(c->area), FALSE, FALSE, 0); gtk_widget_add_events(GTK_WIDGET(c->area), GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_SCROLL_MASK | GDK_SMOOTH_SCROLL_MASK); g_signal_connect(G_OBJECT(c->area), "draw", G_CALLBACK(lowlight_draw), self); g_signal_connect(G_OBJECT(c->area), "button-press-event", G_CALLBACK(lowlight_button_press), self); g_signal_connect(G_OBJECT(c->area), "button-release-event", G_CALLBACK(lowlight_button_release), self); g_signal_connect(G_OBJECT(c->area), "motion-notify-event", G_CALLBACK(lowlight_motion_notify), self); g_signal_connect(G_OBJECT(c->area), "leave-notify-event", G_CALLBACK(lowlight_leave_notify), self); g_signal_connect(G_OBJECT(c->area), "scroll-event", G_CALLBACK(lowlight_scrolled), self); c->scale_blueness = dt_bauhaus_slider_new_with_range(self, 0.0, 100.0, 1.0, p->blueness, 2); dt_bauhaus_widget_set_label(c->scale_blueness, NULL, _("blue shift")); dt_bauhaus_slider_set_format(c->scale_blueness, "%0.2f%%"); gtk_widget_set_tooltip_text(c->scale_blueness, _("blueness in shadows")); gtk_box_pack_start(GTK_BOX(self->widget), GTK_WIDGET(c->scale_blueness), TRUE, TRUE, 5); g_signal_connect(G_OBJECT(c->scale_blueness), "value-changed", G_CALLBACK(blueness_callback), self); }
static inline void gui_init_tab(struct dt_iop_module_t *self, const char *name, GtkWidget **ppcolor, const GdkRGBA *c, GtkWidget **pphue, GtkWidget **ppsaturation) { gtk_box_pack_start(GTK_BOX(self->widget), dt_ui_section_label_new(name), FALSE, FALSE, 5); // color button GtkWidget *color; *ppcolor = color = gtk_color_button_new_with_rgba(c); gtk_widget_set_size_request(GTK_WIDGET(color), DT_PIXEL_APPLY_DPI(32), DT_PIXEL_APPLY_DPI(32)); gtk_color_chooser_set_use_alpha(GTK_COLOR_CHOOSER(color), FALSE); gtk_color_button_set_title(GTK_COLOR_BUTTON(color), _("select tone color")); // hue slider GtkWidget *hue; *pphue = hue = (dt_bauhaus_slider_new_with_range_and_feedback(self, 0.0f, 1.0f, 0.01f, 0.0f, 2, 0)); dt_bauhaus_slider_set_stop(hue, 0.0f, 1.0f, 0.0f, 0.0f); dt_bauhaus_widget_set_label(hue, NULL, _("hue")); dt_bauhaus_slider_set_stop(hue, 0.166f, 1.0f, 1.0f, 0.0f); dt_bauhaus_slider_set_stop(hue, 0.322f, 0.0f, 1.0f, 0.0f); dt_bauhaus_slider_set_stop(hue, 0.498f, 0.0f, 1.0f, 1.0f); dt_bauhaus_slider_set_stop(hue, 0.664f, 0.0f, 0.0f, 1.0f); dt_bauhaus_slider_set_stop(hue, 0.830f, 1.0f, 0.0f, 1.0f); dt_bauhaus_slider_set_stop(hue, 1.0f, 1.0f, 0.0f, 0.0f); g_object_set(G_OBJECT(hue), "tooltip-text", _("select the hue tone"), (char *)NULL); // saturation slider GtkWidget *saturation; *ppsaturation = saturation = dt_bauhaus_slider_new_with_range(self, 0.0f, 1.0f, 0.01f, 0.0f, 2); dt_bauhaus_widget_set_label(saturation, NULL, _("saturation")); dt_bauhaus_slider_set_stop(saturation, 0.0f, 0.2f, 0.2f, 0.2f); dt_bauhaus_slider_set_stop(saturation, 1.0f, 1.0f, 1.0f, 1.0f); g_object_set(G_OBJECT(saturation), "tooltip-text", _("select the saturation tone"), (char *)NULL); // pack the widgets GtkWidget *vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, DT_BAUHAUS_SPACE); gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(hue), FALSE, TRUE, 0); gtk_box_pack_end(GTK_BOX(vbox), GTK_WIDGET(saturation), FALSE, TRUE, 0); GtkWidget *hbox = GTK_WIDGET(gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0)); gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(vbox), TRUE, TRUE, 0); gtk_box_pack_end(GTK_BOX(hbox), GTK_WIDGET(color), FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(self->widget), GTK_WIDGET(hbox), TRUE, TRUE, 0); }
void gui_init(struct dt_iop_module_t *self) { self->gui_data = malloc(sizeof(dt_iop_monochrome_gui_data_t)); dt_iop_monochrome_gui_data_t *g = (dt_iop_monochrome_gui_data_t *)self->gui_data; g->dragging = 0; self->widget = gtk_vbox_new(FALSE, DT_BAUHAUS_SPACE); g->area = GTK_DRAWING_AREA(gtk_drawing_area_new()); // GtkWidget *asp = gtk_aspect_frame_new(NULL, 0.5, 0.5, 1.0, TRUE); // gtk_box_pack_start(GTK_BOX(self->widget), asp, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(self->widget), GTK_WIDGET(g->area), TRUE, TRUE, 0); // gtk_container_add(GTK_CONTAINER(asp), GTK_WIDGET(g->area)); gtk_drawing_area_size(g->area, 0, 258); g_object_set(G_OBJECT(g->area), "tooltip-text", _("drag and scroll mouse wheel to adjust the virtual color filter"), (char *)NULL); gtk_widget_add_events(GTK_WIDGET(g->area), GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_LEAVE_NOTIFY_MASK); g_signal_connect (G_OBJECT (g->area), "expose-event", G_CALLBACK (dt_iop_monochrome_expose), self); g_signal_connect (G_OBJECT (g->area), "button-press-event", G_CALLBACK (dt_iop_monochrome_button_press), self); g_signal_connect (G_OBJECT (g->area), "button-release-event", G_CALLBACK (dt_iop_monochrome_button_release), self); g_signal_connect (G_OBJECT (g->area), "motion-notify-event", G_CALLBACK (dt_iop_monochrome_motion_notify), self); g_signal_connect (G_OBJECT (g->area), "leave-notify-event", G_CALLBACK (dt_iop_monochrome_leave_notify), self); g_signal_connect (G_OBJECT (g->area), "scroll-event", G_CALLBACK (dt_iop_monochrome_scrolled), self); g->highlights = dt_bauhaus_slider_new_with_range(self, 0.0, 1.0, 0.01, 0.0, 2); g_object_set (GTK_OBJECT(g->highlights), "tooltip-text", _("how much to keep highlights"), (char *)NULL); dt_bauhaus_widget_set_label(g->highlights, _("highlights")); gtk_box_pack_start(GTK_BOX(self->widget), g->highlights, TRUE, TRUE, 0); g_signal_connect (G_OBJECT (g->highlights), "value-changed", G_CALLBACK (highlights_callback), self); g->hsRGB = dt_colorspaces_create_srgb_profile(); g->hLab = dt_colorspaces_create_lab_profile(); g->xform = cmsCreateTransform(g->hLab, TYPE_Lab_DBL, g->hsRGB, TYPE_RGB_DBL, INTENT_PERCEPTUAL, 0);//cmsFLAGS_NOTPRECALC); }