Esempio n. 1
0
ReturnStatus NvCtrlSetAttribute(NvCtrlAttributeHandle *handle,
                                int attr, int val)
{
    if (!handle) return NvCtrlBadArgument;
    return NvCtrlSetDisplayAttribute(handle, 0, attr, val);

} /* NvCtrlSetAttribute() */
static void dfp_scaling_changed(GtkWidget *widget, gpointer user_data)
{
    CtkDisplayDeviceDfp *ctk_display_device_dfp =
        CTK_DISPLAY_DEVICE_DFP(user_data);
    gboolean enabled;
    int scaling_target;
    int scaling_method;
    gint value;
    int i;
    GtkWidget *radio;

    /* Get the scaling target */

    enabled = gtk_toggle_button_get_active
        (GTK_TOGGLE_BUTTON(ctk_display_device_dfp->scaling_gpu_button));

    if (enabled) {
        scaling_target = NV_CTRL_GPU_SCALING_TARGET_FLATPANEL_NATIVE;
    } else {
        scaling_target = NV_CTRL_GPU_SCALING_TARGET_FLATPANEL_BEST_FIT;
    }

    /* Get the scaling method */

    scaling_method = NV_CTRL_GPU_SCALING_METHOD_INVALID;

    for (i = 0; i < NV_CTRL_GPU_SCALING_METHOD_ASPECT_SCALED; i++) {
        radio = ctk_display_device_dfp->scaling_method_buttons[i];
        
        if (!radio) continue;

        enabled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(radio));

        if (enabled) {
            user_data = g_object_get_data(G_OBJECT(radio), "scaling_value");
            scaling_method = GPOINTER_TO_INT(user_data);
            break;
        }
    }

    if (scaling_method == NV_CTRL_GPU_SCALING_METHOD_INVALID) {
        return;
    }
    
    value = MAKE_SCALING_VALUE(scaling_target, scaling_method);
        
    NvCtrlSetDisplayAttribute(ctk_display_device_dfp->handle,
                              ctk_display_device_dfp->display_device_mask,
                              NV_CTRL_GPU_SCALING, value);
    
    gtk_widget_set_sensitive(ctk_display_device_dfp->reset_button, TRUE);

    post_dfp_scaling_update(ctk_display_device_dfp, value);

} /* dfp_scaling_changed() */
static void reset_button_clicked(GtkButton *button, gpointer user_data)
{
    CtkDisplayDeviceDfp *ctk_display_device_dfp =
        CTK_DISPLAY_DEVICE_DFP(user_data);

    gint value;
    
    ctk_image_sliders_reset
        (CTK_IMAGE_SLIDERS(ctk_display_device_dfp->image_sliders));
 
    /*
     * if scaling is active, send the default scaling value to the
     * server and update the radio button group
     */
   
    if (ctk_display_device_dfp->active_attributes & __SCALING) {
        
        value =
            MAKE_SCALING_VALUE(ctk_display_device_dfp->default_scaling_target,
                               ctk_display_device_dfp->default_scaling_method);


        NvCtrlSetDisplayAttribute(ctk_display_device_dfp->handle,
                                  ctk_display_device_dfp->display_device_mask,
                                  NV_CTRL_GPU_SCALING, value);

        dfp_scaling_setup(ctk_display_device_dfp);
    }

    /* Reset the color configuration */
    if (ctk_display_device_dfp->color_controls) {
        ctk_color_controls_reset
            (CTK_COLOR_CONTROLS(ctk_display_device_dfp->color_controls));
    }

    /* Reset the dithering configuration */
    if (ctk_display_device_dfp->dithering_controls) {
        ctk_dithering_controls_reset
            (CTK_DITHERING_CONTROLS(ctk_display_device_dfp->dithering_controls));
    }

    /* Update the reset button */

    gtk_widget_set_sensitive(ctk_display_device_dfp->reset_button, FALSE);

    /* status bar message */

    ctk_config_statusbar_message(ctk_display_device_dfp->ctk_config,
                                 "Reset hardware defaults for %s.",
                                 ctk_display_device_dfp->name);
    
} /* reset_button_clicked() */