/* * Updates the display device page to reflect the current * configuration of the display device. */ static void display_device_setup(CtkDisplayDevice *ctk_object) { CtrlTarget *ctrl_target = ctk_object->ctrl_target; /* Disable the reset button here and allow the controls below to (re)enable * it if need be,. */ gtk_widget_set_sensitive(ctk_object->reset_button, FALSE); update_display_enabled_flag(ctrl_target, &ctk_object->display_enabled); /* Update info */ update_device_info(ctk_object); ctk_edid_setup(CTK_EDID(ctk_object->edid)); /* Update controls */ ctk_color_controls_setup(CTK_COLOR_CONTROLS(ctk_object->color_controls)); ctk_dithering_controls_setup (CTK_DITHERING_CONTROLS(ctk_object->dithering_controls)); ctk_image_sliders_setup(CTK_IMAGE_SLIDERS(ctk_object->image_sliders)); } /* display_device_setup() */
/* * Updates the display device TV page to reflect the current * configuration of the display device. */ static void ctk_display_device_tv_setup(CtkDisplayDeviceTv *ctk_display_device_tv) { /* Disable the reset button here and allow the controls below to (re)enable * it if need be,. */ gtk_widget_set_sensitive(ctk_display_device_tv->reset_button, FALSE); /* Update info */ tv_info_setup(ctk_display_device_tv); /* update acquire EDID button */ ctk_edid_setup(CTK_EDID(ctk_display_device_tv->edid)); /* Update controls */ /* NV_CTRL_TV_OVERSCAN */ setup_scale(ctk_display_device_tv, NV_CTRL_TV_OVERSCAN, ctk_display_device_tv->overscan); /* NV_CTRL_TV_FLICKER_FILTER */ setup_scale(ctk_display_device_tv, NV_CTRL_TV_FLICKER_FILTER, ctk_display_device_tv->flicker_filter); /* NV_CTRL_TV_BRIGHTNESS */ setup_scale(ctk_display_device_tv, NV_CTRL_TV_BRIGHTNESS, ctk_display_device_tv->brightness); /* NV_CTRL_TV_HUE */ setup_scale(ctk_display_device_tv, NV_CTRL_TV_HUE, ctk_display_device_tv->hue); /* NV_CTRL_TV_CONTRAST */ setup_scale(ctk_display_device_tv, NV_CTRL_TV_CONTRAST, ctk_display_device_tv->contrast); /* NV_CTRL_TV_SATURATION */ setup_scale(ctk_display_device_tv, NV_CTRL_TV_SATURATION, ctk_display_device_tv->saturation); ctk_image_sliders_setup (CTK_IMAGE_SLIDERS(ctk_display_device_tv->image_sliders)); } /* ctk_display_device_tv_setup() */
void ctk_image_sliders_reset(CtkImageSliders *ctk_image_sliders) { GtkAdjustment *adj; gint val; if (!ctk_image_sliders) return; if (GTK_WIDGET_SENSITIVE(ctk_image_sliders->digital_vibrance)) { adj = CTK_SCALE(ctk_image_sliders->digital_vibrance)->gtk_adjustment; val = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(adj), "attribute default value")); NvCtrlSetAttribute(ctk_image_sliders->handle, NV_CTRL_DIGITAL_VIBRANCE, val); } if (GTK_WIDGET_SENSITIVE(ctk_image_sliders->image_sharpening)) { adj = CTK_SCALE(ctk_image_sliders->image_sharpening)->gtk_adjustment; val = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(adj), "attribute default value")); NvCtrlSetAttribute(ctk_image_sliders->handle, NV_CTRL_IMAGE_SHARPENING, val); } /* * The above may have triggered events. Such an event will * cause scale_value_changed() and post_scale_value_changed() to * be called when control returns to the gtk_main loop. * post_scale_value_changed() will write a status message to the * statusbar. * * However, the caller of ctk_image_sliders_reset() (e.g., * ctkdisplaydevice.c:reset_button_clicked()) may also want to * write a status message to the statusbar. To ensure that the * caller's statusbar message takes precedence (i.e., is the last * thing written to the statusbar), process any generated events * now, before returning to the caller. */ while (gtk_events_pending()) { gtk_main_iteration_do(FALSE); } ctk_image_sliders_setup(ctk_image_sliders); } /* ctk_image_sliders_reset() */
GtkWidget* ctk_image_sliders_new(NvCtrlAttributeHandle *handle, CtkConfig *ctk_config, CtkEvent *ctk_event, GtkWidget *reset_button, char *name) { CtkImageSliders *ctk_image_sliders; GObject *object; GtkWidget *frame; GtkWidget *vbox; ReturnStatus status; gint val; /* * now that we know that we will have atleast one attribute, * create the object */ object = g_object_new(CTK_TYPE_IMAGE_SLIDERS, NULL); if (!object) return NULL; ctk_image_sliders = CTK_IMAGE_SLIDERS(object); ctk_image_sliders->handle = handle; ctk_image_sliders->ctk_config = ctk_config; ctk_image_sliders->ctk_event = ctk_event; ctk_image_sliders->reset_button = reset_button; ctk_image_sliders->name = name; /* create the frame and vbox */ frame = gtk_frame_new(NULL); vbox = gtk_vbox_new(FALSE, 0); gtk_container_set_border_width(GTK_CONTAINER(vbox), FRAME_PADDING); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_box_pack_start(GTK_BOX(object), frame, FALSE, FALSE, 0); ctk_image_sliders->frame = frame; /* Digital Vibrance */ ctk_image_sliders->digital_vibrance = add_scale(ctk_config, NV_CTRL_DIGITAL_VIBRANCE, "Digital Vibrance", __digital_vibrance_help, G_TYPE_INT, 0, /* default value */ ctk_image_sliders); g_signal_connect(G_OBJECT(ctk_event), CTK_EVENT_NAME(NV_CTRL_DIGITAL_VIBRANCE), G_CALLBACK(scale_value_received), (gpointer) ctk_image_sliders); gtk_box_pack_start(GTK_BOX(vbox), ctk_image_sliders->digital_vibrance, TRUE, TRUE, 0); /* Image Sharpening */ status = NvCtrlGetAttribute(ctk_image_sliders->handle, NV_CTRL_IMAGE_SHARPENING_DEFAULT, &val); if (status != NvCtrlSuccess) { val = 0; } ctk_image_sliders->image_sharpening = add_scale(ctk_config, NV_CTRL_IMAGE_SHARPENING, "Image Sharpening", __image_sharpening_help, G_TYPE_INT, val, ctk_image_sliders); g_signal_connect(G_OBJECT(ctk_event), CTK_EVENT_NAME(NV_CTRL_IMAGE_SHARPENING), G_CALLBACK(scale_value_received), (gpointer) ctk_image_sliders); gtk_box_pack_start(GTK_BOX(vbox), ctk_image_sliders->image_sharpening, TRUE, TRUE, 0); gtk_widget_show_all(GTK_WIDGET(object)); /* update the GUI */ ctk_image_sliders_setup(ctk_image_sliders); return GTK_WIDGET(object); } /* ctk_image_sliders_new() */