diff options
author | Aaron Plattner <aplattner@nvidia.com> | 2012-12-11 12:39:46 -0800 |
---|---|---|
committer | Aaron Plattner <aplattner@nvidia.com> | 2012-12-11 12:39:46 -0800 |
commit | 88f50388a0866128d4192196a14267916d1ea68f (patch) | |
tree | 95d7eb62636e5143ccdc86aa2fe80c46664b3e29 | |
parent | e9f8e835f4e9ac4c59383feed05bb055d3405bf4 (diff) |
313.09313.09
-rw-r--r-- | doc/version.mk | 2 | ||||
-rw-r--r-- | samples/version.mk | 2 | ||||
-rw-r--r-- | src/gtk+-2.x/ctkdisplayconfig-utils.c | 24 | ||||
-rw-r--r-- | src/gtk+-2.x/ctkdisplayconfig.c | 30 | ||||
-rw-r--r-- | src/gtk+-2.x/ctkdisplaylayout.c | 22 | ||||
-rw-r--r-- | src/gtk+-2.x/ctkdropdownmenu.c | 172 | ||||
-rw-r--r-- | src/gtk+-2.x/ctkdropdownmenu.h | 9 | ||||
-rw-r--r-- | src/gtk+-2.x/ctkevent.c | 3 | ||||
-rw-r--r-- | src/gtk+-2.x/ctkmultisample.c | 76 | ||||
-rw-r--r-- | src/gtk+-2.x/ctkmultisample.h | 2 | ||||
-rw-r--r-- | src/gtk+-2.x/ctkwindow.c | 9 | ||||
-rw-r--r-- | src/libXNVCtrl/NVCtrl.c | 43 | ||||
-rw-r--r-- | src/libXNVCtrl/NVCtrl.h | 68 | ||||
-rw-r--r-- | src/libXNVCtrl/NVCtrlLib.h | 59 | ||||
-rw-r--r-- | src/libXNVCtrl/nv_control.h | 17 | ||||
-rw-r--r-- | src/parse.c | 1 | ||||
-rw-r--r-- | src/version.mk | 2 | ||||
-rw-r--r-- | version.mk | 2 |
18 files changed, 384 insertions, 159 deletions
diff --git a/doc/version.mk b/doc/version.mk index 6db0208..f91d9f6 100644 --- a/doc/version.mk +++ b/doc/version.mk @@ -1 +1 @@ -NVIDIA_VERSION = 310.19 +NVIDIA_VERSION = 313.09 diff --git a/samples/version.mk b/samples/version.mk index 6db0208..f91d9f6 100644 --- a/samples/version.mk +++ b/samples/version.mk @@ -1 +1 @@ -NVIDIA_VERSION = 310.19 +NVIDIA_VERSION = 313.09 diff --git a/src/gtk+-2.x/ctkdisplayconfig-utils.c b/src/gtk+-2.x/ctkdisplayconfig-utils.c index 78ddf58..b2f1901 100644 --- a/src/gtk+-2.x/ctkdisplayconfig-utils.c +++ b/src/gtk+-2.x/ctkdisplayconfig-utils.c @@ -548,13 +548,13 @@ static void apply_mode_attribute_token(char *token, char *value, void *data) mode->passive_stereo_eye = PASSIVE_STEREO_EYE_RIGHT; } - /* ViewPort In */ + /* ViewPortIn */ } else if (!strcasecmp("viewportin", token)) { parse_read_integer_pair(value, 'x', &(mode->viewPortIn[W]), &(mode->viewPortIn[H])); - /* ViewPort Out */ + /* ViewPortOut */ } else if (!strcasecmp("viewportout", token)) { const char *str; @@ -668,10 +668,6 @@ nvModePtr mode_parse(nvDisplayPtr display, const char *mode_str) free(mode_name); - /* Setup default size and panning of display values */ - mode_set_dims_from_modeline(mode, mode->modeline); - - /* Read mode information */ while (*str) { @@ -720,6 +716,16 @@ nvModePtr mode_parse(nvDisplayPtr display, const char *mode_str) if (!str) goto fail; } + /* Initialize defaults for the viewports if unspecified */ + if ((mode->viewPortOut[W] == 0) || (mode->viewPortOut[H] == 0)) { + mode->viewPortOut[W] = mode->modeline->data.hdisplay; + mode->viewPortOut[H] = mode->modeline->data.vdisplay; + } + if ((mode->viewPortIn[W] == 0) || (mode->viewPortIn[H] == 0)) { + mode->viewPortIn[W] = mode->viewPortOut[W]; + mode->viewPortIn[H] = mode->viewPortOut[H]; + } + /* If rotation is specified, swap W/H if they are still set to the * modeline's unrotated dimentions. Panning should not be rotated * here since it is returned rotated by the X driver. @@ -929,13 +935,13 @@ static gchar *mode_get_str(nvModePtr mode, int be_generic) } } - /* ViewPort in */ + /* ViewPortIn */ { int width; int height; /* Only write out the ViewPortIn if it is specified and differes from - * the viewport out. + * the ViewPortOut. */ if ((mode->rotation == ROTATION_90) || (mode->rotation == ROTATION_270)) { @@ -957,7 +963,7 @@ static gchar *mode_get_str(nvModePtr mode, int be_generic) } } - /* ViewPort out */ + /* ViewPortOut */ if (mode->viewPortOut[X] || mode->viewPortOut[Y] || (mode->viewPortOut[W] && mode->viewPortOut[H] && diff --git a/src/gtk+-2.x/ctkdisplayconfig.c b/src/gtk+-2.x/ctkdisplayconfig.c index 4b5caed..6437e26 100644 --- a/src/gtk+-2.x/ctkdisplayconfig.c +++ b/src/gtk+-2.x/ctkdisplayconfig.c @@ -1484,7 +1484,7 @@ GtkWidget* ctk_display_config_new(NvCtrlAttributeHandle *handle, "activate", G_CALLBACK(display_position_offset_activate), (gpointer) ctk_object); - /* Display ViewPort In */ + /* Display ViewPortIn */ ctk_object->txt_display_viewport_in = gtk_entry_new(); ctk_config_set_tooltip(ctk_config, ctk_object->txt_display_viewport_in, __dpy_viewport_in_help); @@ -1495,7 +1495,7 @@ GtkWidget* ctk_display_config_new(NvCtrlAttributeHandle *handle, G_CALLBACK(txt_focus_out), (gpointer) ctk_object); - /* Display ViewPort Out */ + /* Display ViewPortOut */ ctk_object->txt_display_viewport_out = gtk_entry_new(); ctk_config_set_tooltip(ctk_config, ctk_object->txt_display_viewport_out, __dpy_viewport_out_help); @@ -1876,8 +1876,8 @@ GtkWidget* ctk_display_config_new(NvCtrlAttributeHandle *handle, TRUE, TRUE, 0); ctk_object->box_display_position = hbox; - /* Display ViewPort In */ - label = gtk_label_new("ViewPort In:"); + /* Display ViewPortIn */ + label = gtk_label_new("ViewPortIn:"); labels = g_slist_append(labels, label); hbox = gtk_hbox_new(FALSE, 5); @@ -1888,8 +1888,8 @@ GtkWidget* ctk_display_config_new(NvCtrlAttributeHandle *handle, TRUE, TRUE, 0); ctk_object->box_display_viewport_in = hbox; - /* Display ViewPort Out */ - label = gtk_label_new("ViewPort Out:"); + /* Display ViewPortOut */ + label = gtk_label_new("ViewPortOut:"); labels = g_slist_append(labels, label); hbox = gtk_hbox_new(FALSE, 5); @@ -2186,9 +2186,9 @@ GtkTextBuffer *ctk_display_config_create_help(GtkTextTagTable *table, ctk_help_para(b, &i, __dpy_position_relative_help); ctk_help_heading(b, &i, "Position Offset"); ctk_help_para(b, &i, __dpy_position_offset_help); - ctk_help_heading(b, &i, "ViewPort In"); + ctk_help_heading(b, &i, "ViewPortIn"); ctk_help_para(b, &i, __dpy_viewport_in_help); - ctk_help_heading(b, &i, "ViewPort Out"); + ctk_help_heading(b, &i, "ViewPortOut"); ctk_help_para(b, &i, __dpy_viewport_out_help); ctk_help_heading(b, &i, "Panning"); ctk_help_para(b, &i, "%s This is only available when advanced " @@ -3173,7 +3173,7 @@ static void setup_display_reflection_dropdown(CtkDisplayConfig *ctk_object) /** setup_display_viewport_in() ************************************** * - * Sets up the display viewport in text entry to reflect the currently + * Sets up the display ViewPortIn text entry to reflect the currently * selected display device/mode. * **/ @@ -3215,7 +3215,7 @@ static void setup_display_viewport_in(CtkDisplayConfig *ctk_object) /** setup_display_viewport_out() ************************************* * - * Sets up the display viewport out text entry to reflect the currently + * Sets up the display ViewPortOut text entry to reflect the currently * selected display device/mode. * **/ @@ -5820,7 +5820,7 @@ static void display_position_offset_activate(GtkWidget *widget, /** display_viewport_in_activate() *********************************** * - * Called when user modifies the display viewport in text entry. + * Called when user modifies the display ViewPortIn text entry. * **/ @@ -5839,7 +5839,7 @@ static void display_viewport_in_activate(GtkWidget *widget, gpointer user_data) str = parse_read_integer_pair(str, 'x', &w, &h); if (!str) { - /* Reset the mode's viewport in */ + /* Reset the mode's ViewPortIn */ setup_display_viewport_in(ctk_object); return; } @@ -5853,7 +5853,7 @@ static void display_viewport_in_activate(GtkWidget *widget, gpointer user_data) /** display_viewport_out_activate() ********************************** * - * Called when user modifies the display viewport out text entry. + * Called when user modifies the display ViewPortOut text entry. * **/ @@ -5872,13 +5872,13 @@ static void display_viewport_out_activate(GtkWidget *widget, gpointer user_data) str = parse_read_integer_pair(str, 'x', &w, &h); if (!str) { - /* Reset the mode's viewport out */ + /* Reset the mode's ViewPortOut */ setup_display_viewport_out(ctk_object); return; } str = parse_read_integer_pair(str, 0, &x, &y); if (!str) { - /* Reset the mode's viewport out */ + /* Reset the mode's ViewPortOut */ setup_display_viewport_out(ctk_object); return; } diff --git a/src/gtk+-2.x/ctkdisplaylayout.c b/src/gtk+-2.x/ctkdisplaylayout.c index 1735a0b..2066d99 100644 --- a/src/gtk+-2.x/ctkdisplaylayout.c +++ b/src/gtk+-2.x/ctkdisplaylayout.c @@ -2156,7 +2156,7 @@ static int pan_selected(CtkDisplayLayout *ctk_object, int x, int y, int snap) info->dst_dim[H] = y; } - /* Panning domain can never be smaller then the display viewport */ + /* Panning domain can never be smaller then the display ViewPortIn */ if (info->display) { dim = info->display->cur_mode->viewPortIn; if (info->dst_dim[W] < dim[W]) { @@ -3046,7 +3046,7 @@ static void draw_display(CtkDisplayLayout *ctk_object, draw_rect(ctk_object, mode->pan, &(ctk_object->fg_color), 0); - /* Draw viewport */ + /* Draw ViewPortIn */ color_idx = base_color_idx + ((mode->modeline) ? BG_SCR_ON : BG_SCR_OFF); draw_rect(ctk_object, mode->viewPortIn, &(ctk_object->color_palettes[color_idx]), 1); @@ -3733,15 +3733,15 @@ void ctk_display_layout_set_mode_modeline(CtkDisplayLayout *ctk_object, /*! - * Sets the ViewPort In for the given mode. + * Sets the ViewPortIn for the given mode. * * If a modification occurs, this function will call the modified_callback * handler registered, if any. * * \param[in] ctk_object The Display Layout object * \param[in] mode The mode to be modified - * \param[in] w The width of the ViewPort In to set - * \param[in] h The height of the ViewPort In to set + * \param[in] w The width of the ViewPortIn to set + * \param[in] h The height of the ViewPortIn to set */ void ctk_display_layout_set_mode_viewport_in(CtkDisplayLayout *ctk_object, nvModePtr mode, @@ -3763,7 +3763,7 @@ void ctk_display_layout_set_mode_viewport_in(CtkDisplayLayout *ctk_object, mode->viewPortIn[W] = w; mode->viewPortIn[H] = h; - /* Clamp the panning domain to the new viewport dimensions */ + /* Clamp the panning domain to the new ViewPortIn dimensions */ if (mode->pan[W] < mode->viewPortIn[W]) { mode->pan[W] = mode->viewPortIn[W]; } @@ -3785,17 +3785,17 @@ void ctk_display_layout_set_mode_viewport_in(CtkDisplayLayout *ctk_object, /*! - * Sets the ViewPort Out for the given mode. + * Sets the ViewPortOut for the given mode. * * If a modification occurs, this function will call the modified_callback * handler registered, if any. * * \param[in] ctk_object The Display Layout object * \param[in] mode The mode to be modified - * \param[in] x The X offset of the ViewPort Out to set - * \param[in] y The Y offset of the ViewPort Out to set - * \param[in] w The width of the ViewPort Out to set - * \param[in] h The height of the ViewPort Out to set + * \param[in] x The X offset of the ViewPortOut to set + * \param[in] y The Y offset of the ViewPortOut to set + * \param[in] w The width of the ViewPortOut to set + * \param[in] h The height of the ViewPortOut to set */ void ctk_display_layout_set_mode_viewport_out(CtkDisplayLayout *ctk_object, nvModePtr mode, diff --git a/src/gtk+-2.x/ctkdropdownmenu.c b/src/gtk+-2.x/ctkdropdownmenu.c index 0593a44..7166be0 100644 --- a/src/gtk+-2.x/ctkdropdownmenu.c +++ b/src/gtk+-2.x/ctkdropdownmenu.c @@ -18,6 +18,7 @@ */ #include <gtk/gtk.h> +#include <string.h> #include "ctkdropdownmenu.h" @@ -86,7 +87,7 @@ ctk_drop_down_menu_class_init(CtkDropDownMenuClass *ctk_drop_down_menu_class) * changed() - emit the "changed" signal */ -static void changed(GtkOptionMenu *option_menu, gpointer user_data) +static void changed(GtkWidget *menu, gpointer user_data) { CtkDropDownMenu *d = CTK_DROP_DOWN_MENU(user_data); @@ -113,6 +114,47 @@ static void ctk_drop_down_menu_free(GObject *object) +/* + * ctk_drop_down_menu_change_object() - abstract out the actual widget + * that is being used, so that users of CtkDropDownMenu don't have to + * know if the gtk widget is GtkCombo or GtkOptionMenu or anything else. + */ + +GObject *ctk_drop_down_menu_change_object(GtkWidget* widget) +{ + CtkDropDownMenu *d = CTK_DROP_DOWN_MENU(widget); + + if (d->flags & CTK_DROP_DOWN_MENU_FLAG_COMBO) { + return G_OBJECT(GTK_EDITABLE(GTK_COMBO(d->menu)->entry)); + } else { + return G_OBJECT(d->option_menu); + } +} /* ctk_drop_down_menu_change_object() */ + + + +/* + * ctk_drop_down_menu_changed() - callback function for GtkCombo menu + * changed. + */ + +static void ctk_drop_down_menu_changed(GtkEditable *editable, gpointer user_data) +{ + int i; + CtkDropDownMenu *d = CTK_DROP_DOWN_MENU(user_data); + const gchar *str = gtk_entry_get_text(GTK_ENTRY(editable)); + + for (i = 0; i < d->num_entries; i++) { + if (strcmp(d->values[i].glist_item, str) == 0) { + d->current_selected_item = i; + break; + } + } + g_signal_emit(G_OBJECT(d), __signals[DROP_DOWN_MENU_CHANGED_SIGNAL], 0); +} + + + /* * ctk_drop_down_menu_new() - constructor for the CtkDropDownMenu widget */ @@ -121,6 +163,7 @@ GtkWidget* ctk_drop_down_menu_new(guint flags) { GObject *object; CtkDropDownMenu *d; + GtkWidget *menu_widget; // used to emit "changed" signal object = g_object_new(CTK_TYPE_DROP_DOWN_MENU, NULL); @@ -129,17 +172,26 @@ GtkWidget* ctk_drop_down_menu_new(guint flags) d->flags = flags; d->values = NULL; d->num_entries = 0; - - d->option_menu = gtk_option_menu_new(); - d->menu = gtk_menu_new(); - gtk_option_menu_set_menu(GTK_OPTION_MENU(d->option_menu), d->menu); + if (flags & CTK_DROP_DOWN_MENU_FLAG_COMBO) { + d->menu = gtk_combo_new(); + menu_widget = d->menu; + g_signal_connect(G_OBJECT(GTK_EDITABLE(GTK_COMBO(d->menu)->entry)), + "changed", + G_CALLBACK(ctk_drop_down_menu_changed), + (gpointer) d); + } else { + d->option_menu = gtk_option_menu_new(); + d->menu = gtk_menu_new(); + gtk_option_menu_set_menu(GTK_OPTION_MENU(d->option_menu), d->menu); + menu_widget = d->option_menu; + g_signal_connect(G_OBJECT(d->option_menu), "changed", + G_CALLBACK(changed), (gpointer) d); - gtk_box_set_spacing(GTK_BOX(d), 0); - gtk_box_pack_start(GTK_BOX(d), d->option_menu, FALSE, FALSE, 0); + } - g_signal_connect(G_OBJECT(d->option_menu), "changed", - G_CALLBACK(changed), (gpointer) d); + gtk_box_set_spacing(GTK_BOX(d), 0); + gtk_box_pack_start(GTK_BOX(d), menu_widget, FALSE, FALSE, 0); return GTK_WIDGET(d); @@ -153,8 +205,14 @@ GtkWidget* ctk_drop_down_menu_new(guint flags) void ctk_drop_down_menu_reset(CtkDropDownMenu *d) { - g_free(d->values); - d->values = NULL; + if (d->glist) { + g_free(d->glist); + d->glist = NULL; + } + if (d->values) { + g_free(d->values); + d->values = NULL; + } d->num_entries = 0; @@ -175,30 +233,41 @@ GtkWidget *ctk_drop_down_menu_append_item(CtkDropDownMenu *d, const gchar *name, const gint value) { - GtkWidget *menu_item, *label, *alignment; - gchar *str; + GtkWidget *label = NULL; - menu_item = gtk_menu_item_new(); - gtk_menu_shell_append(GTK_MENU_SHELL(d->menu), menu_item); + d->values = g_realloc(d->values, + sizeof(CtkDropDownMenuValue) * (d->num_entries + 1)); - if (d->flags & CTK_DROP_DOWN_MENU_FLAG_MONOSPACE) { - str = g_strconcat("<tt><small>", name, "</small></tt>", NULL); - label = gtk_label_new(NULL); - gtk_label_set_markup(GTK_LABEL(label), str); - g_free(str); + if (d->flags & CTK_DROP_DOWN_MENU_FLAG_COMBO) { + d->glist = g_list_append(d->glist, + g_strdup(name)); + + gtk_combo_set_popdown_strings(GTK_COMBO(d->menu), d->glist); + gtk_editable_set_editable(GTK_EDITABLE(GTK_COMBO(d->menu)->entry), FALSE); + d->values[d->num_entries].glist_item = g_strdup(name); } else { - label = gtk_label_new(name); + GtkWidget *menu_item, *alignment; + gchar *str; + + menu_item = gtk_menu_item_new(); + gtk_menu_shell_append(GTK_MENU_SHELL(d->menu), menu_item); + + if (d->flags & CTK_DROP_DOWN_MENU_FLAG_MONOSPACE) { + str = g_strconcat("<tt><small>", name, "</small></tt>", NULL); + label = gtk_label_new(NULL); + gtk_label_set_markup(GTK_LABEL(label), str); + g_free(str); + } else { + label = gtk_label_new(name); + } + alignment = gtk_alignment_new(0, 0, 0, 0); + gtk_container_add(GTK_CONTAINER(alignment), label); + gtk_container_add(GTK_CONTAINER(menu_item), alignment); + d->values[d->num_entries].menu_item = menu_item; + } - - alignment = gtk_alignment_new(0, 0, 0, 0); - gtk_container_add(GTK_CONTAINER(alignment), label); - gtk_container_add(GTK_CONTAINER(menu_item), alignment); - - d->values = g_realloc(d->values, - sizeof(CtkDropDownMenuValue) * (d->num_entries + 1)); - d->values[d->num_entries].menu_item = menu_item; + d->values[d->num_entries].value = value; - d->num_entries++; return label; @@ -215,15 +284,18 @@ GtkWidget *ctk_drop_down_menu_append_item(CtkDropDownMenu *d, gint ctk_drop_down_menu_get_current_value(CtkDropDownMenu *d) { gint i; - - i = gtk_option_menu_get_history(GTK_OPTION_MENU(d->option_menu)); - - if (i < d->num_entries) { - return d->values[i].value; + + if (d->flags & CTK_DROP_DOWN_MENU_FLAG_COMBO) { + return d->current_selected_item; } else { - return 0; /* XXX??? */ + i = gtk_option_menu_get_history(GTK_OPTION_MENU(d->option_menu)); + + if (i < d->num_entries) { + return d->values[i].value; + } } - + return 0; /* XXX??? */ + } /* ctk_drop_down_menu_get_current_value() */ @@ -239,7 +311,13 @@ void ctk_drop_down_menu_set_current_value(CtkDropDownMenu *d, gint value) for (i = 0; i < d->num_entries; i++) { if (d->values[i].value == value) { - gtk_option_menu_set_history(GTK_OPTION_MENU(d->option_menu), i); + if (d->flags & CTK_DROP_DOWN_MENU_FLAG_COMBO) { + gtk_entry_set_text + (GTK_ENTRY(GTK_COMBO(d->menu)->entry), + d->values[i].glist_item); + } else { + gtk_option_menu_set_history(GTK_OPTION_MENU(d->option_menu), i); + } return; } } @@ -255,12 +333,18 @@ void ctk_drop_down_menu_set_current_value(CtkDropDownMenu *d, gint value) void ctk_drop_down_menu_set_value_sensitive(CtkDropDownMenu *d, gint value, gboolean sensitive) { - gint i; - - for (i = 0; i < d->num_entries; i++) { - if (d->values[i].value == value) { - gtk_widget_set_sensitive(d->values[i].menu_item, sensitive); - return; + + if (d->flags & CTK_DROP_DOWN_MENU_FLAG_COMBO) { + ctk_drop_down_menu_set_current_value(d, value); + gtk_widget_set_sensitive(GTK_WIDGET(GTK_COMBO(d->menu)->entry), + sensitive); + } else { + gint i; + for (i = 0; i < d->num_entries; i++) { + if (d->values[i].value == value) { + gtk_widget_set_sensitive(d->values[i].menu_item, sensitive); + return; + } } } } /* ctk_drop_down_menu_set_value_sensitive() */ diff --git a/src/gtk+-2.x/ctkdropdownmenu.h b/src/gtk+-2.x/ctkdropdownmenu.h index 10fb50c..f1d0557 100644 --- a/src/gtk+-2.x/ctkdropdownmenu.h +++ b/src/gtk+-2.x/ctkdropdownmenu.h @@ -47,6 +47,7 @@ G_BEGIN_DECLS #define CTK_DROP_DOWN_MENU_FLAG_MONOSPACE 0x1 +#define CTK_DROP_DOWN_MENU_FLAG_COMBO 0x2 typedef struct _CtkDropDownMenu CtkDropDownMenu; @@ -57,6 +58,7 @@ typedef struct _CtkDropDownMenuValue CtkDropDownMenuValue; struct _CtkDropDownMenuValue { GtkWidget *menu_item; gint value; + gchar *glist_item; }; @@ -70,6 +72,11 @@ struct _CtkDropDownMenu guint flags; gint num_entries; + gint current_selected_item; + + GList *glist; + // currently selected item in the drop down + GtkWidget *current_selected_item_widget; CtkDropDownMenuValue *values; }; @@ -91,7 +98,7 @@ void ctk_drop_down_menu_set_value_sensitive (CtkDropDownMenu *d, gboolean sensitive); void ctk_drop_down_menu_reset (CtkDropDownMenu *d); - +GObject *ctk_drop_down_menu_change_object(GtkWidget* widget); G_END_DECLS diff --git a/src/gtk+-2.x/ctkevent.c b/src/gtk+-2.x/ctkevent.c index 8a7956a..6c77ec4 100644 --- a/src/gtk+-2.x/ctkevent.c +++ b/src/gtk+-2.x/ctkevent.c @@ -327,10 +327,11 @@ static void ctk_event_class_init(CtkEventClass *ctk_event_class) MAKE_SIGNAL(NV_CTRL_FRAMELOCK_INCOMING_HOUSE_SYNC_RATE); MAKE_SIGNAL(NV_CTRL_FXAA); MAKE_SIGNAL(NV_CTRL_DISPLAY_RANDR_OUTPUT_ID); + MAKE_SIGNAL(NV_CTRL_FRAMELOCK_DISPLAY_CONFIG); MAKE_SIGNAL(NV_CTRL_TOTAL_DEDICATED_GPU_MEMORY); MAKE_SIGNAL(NV_CTRL_USED_DEDICATED_GPU_MEMORY); #undef MAKE_SIGNAL - + /* * When new integer attributes are added to NVCtrl.h, a * MAKE_SIGNAL() line should be added above. The below #if should diff --git a/src/gtk+-2.x/ctkmultisample.c b/src/gtk+-2.x/ctkmultisample.c index 050240d..be35e9a 100644 --- a/src/gtk+-2.x/ctkmultisample.c +++ b/src/gtk+-2.x/ctkmultisample.c @@ -49,7 +49,7 @@ static GtkWidget *create_fsaa_setting_menu(CtkMultisample *ctk_multisample, static void fsaa_setting_checkbox_toggled(GtkWidget *widget, gpointer user_data); -static void fsaa_setting_menu_changed(GtkWidget *widget, gpointer user_data); +static void fsaa_setting_menu_changed(GtkObject *object, gpointer user_data); static void fsaa_setting_update_received(GtkObject *object, gpointer arg1, @@ -109,6 +109,11 @@ static void update_fxaa_from_fsaa_change(CtkMultisample *ctk_multisample, int fsaa_value); static void update_fsaa_from_fxaa_change(CtkMultisample *ctk_multisample, gboolean fxaa_enabled); +static gchar *applicationSettings[] = { + "Use Application Settings", + "Override Application Settings", + "Enhance Application Settings" +}; static const char *__aa_override_app_help = "Enable the Antialiasing \"Override Application Setting\" " @@ -138,7 +143,8 @@ static const char *__aniso_slider_help = static const char *__fxaa_enable_help = "Enable Fast Approximate Anti-Aliasing. This option is applied to " "OpenGL applications that are started after this option is set. Enabling " -"FXAA disables antialiasing and other antialiasing setting methods."; +"FXAA disables triple buffering, antialiasing, and other antialiasing " +"setting methods."; static const char *__texture_sharpening_help = "To improve image quality, select this option " @@ -690,30 +696,18 @@ static GtkWidget *create_fsaa_setting_menu(CtkMultisample *ctk_multisample, CtkEvent *ctk_event, gboolean override, gboolean enhance) { - GtkWidget *omenu; - GtkWidget *menu; - GtkWidget *menu_item; - gint idx; + CtkDropDownMenu *d; - /* Create the menu */ + gint idx, i; - omenu = gtk_option_menu_new(); + /* Create the menu */ - menu = gtk_menu_new(); + d = (CtkDropDownMenu *) + ctk_drop_down_menu_new(CTK_DROP_DOWN_MENU_FLAG_COMBO); - menu_item = gtk_menu_item_new_with_label("Use Application Settings"); - gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item); - gtk_widget_show(menu_item); - - menu_item = gtk_menu_item_new_with_label("Override Application Settings"); - gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item); - gtk_widget_show(menu_item); - - menu_item = gtk_menu_item_new_with_label("Enhance Application Settings"); - gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item); - gtk_widget_show(menu_item); - - /* Set the state of the menu */ + for (i = 0; i < ARRAY_LEN(applicationSettings); i++) { + ctk_drop_down_menu_append_item(d, applicationSettings[i], i); + } if (!override) { idx = 0; @@ -725,14 +719,14 @@ static GtkWidget *create_fsaa_setting_menu(CtkMultisample *ctk_multisample, } } - gtk_option_menu_set_menu(GTK_OPTION_MENU(omenu), menu); + /* set the menu item */ + ctk_drop_down_menu_set_current_value(d, idx); - gtk_option_menu_set_history(GTK_OPTION_MENU(omenu), idx); - - ctk_config_set_tooltip(ctk_multisample->ctk_config, omenu, + ctk_config_set_tooltip(ctk_multisample->ctk_config, d->menu, __aa_menu_help); - g_signal_connect(G_OBJECT(omenu), "changed", + g_signal_connect(ctk_drop_down_menu_change_object(GTK_WIDGET(d)), + "changed", G_CALLBACK(fsaa_setting_menu_changed), (gpointer) ctk_multisample); @@ -742,7 +736,7 @@ static GtkWidget *create_fsaa_setting_menu(CtkMultisample *ctk_multisample, G_CALLBACK(fsaa_setting_update_received), (gpointer) ctk_multisample); - return omenu; + return GTK_WIDGET(d); } /* create_fsaa_setting_menu() */ @@ -847,15 +841,18 @@ static void fsaa_setting_checkbox_toggled(GtkWidget *widget, * the fsaa slider. */ -static void fsaa_setting_menu_changed(GtkWidget *widget, gpointer user_data) +static void fsaa_setting_menu_changed(GtkObject *object, gpointer user_data) { CtkMultisample *ctk_multisample = CTK_MULTISAMPLE(user_data); gint idx; gboolean override; gboolean enhance; - - idx = gtk_option_menu_get_history(GTK_OPTION_MENU(widget)); - + + CTK_DROP_DOWN_MENU(ctk_multisample->fsaa_menu)->current_selected_item_widget + = GTK_WIDGET(object); + idx = ctk_drop_down_menu_get_current_value + (CTK_DROP_DOWN_MENU(ctk_multisample->fsaa_menu)); + /* The FSAA dropdown menu is setup this way: * * 0 == app @@ -943,13 +940,16 @@ static void fsaa_setting_update_received(GtkObject *object, GtkWidget *menu = ctk_multisample->fsaa_menu; g_signal_handlers_block_by_func - (G_OBJECT(menu), G_CALLBACK(fsaa_setting_menu_changed), + (ctk_drop_down_menu_change_object(GTK_WIDGET(menu)), + G_CALLBACK(fsaa_setting_menu_changed), (gpointer) ctk_multisample); - - gtk_option_menu_set_history(GTK_OPTION_MENU(menu), idx); + + ctk_drop_down_menu_set_current_value + (CTK_DROP_DOWN_MENU(ctk_multisample->fsaa_menu), idx); g_signal_handlers_unblock_by_func - (G_OBJECT(menu), G_CALLBACK(fsaa_setting_menu_changed), + (ctk_drop_down_menu_change_object(GTK_WIDGET(menu)), + G_CALLBACK(fsaa_setting_menu_changed), (gpointer) ctk_multisample); } else { /* Update the checkbox */ @@ -1004,7 +1004,7 @@ static void update_fxaa_from_fsaa_change(CtkMultisample *ctk_multisample, gboolean fxaa_value; /* The FSAA dropdown menu is: 0 == app, 1 == override, 2 == enhance */ - gint fsaa_idx = gtk_option_menu_get_history(GTK_OPTION_MENU(fsaa_menu)) ; + gint fsaa_idx = CTK_DROP_DOWN_MENU(fsaa_menu)->current_selected_item; if (fsaa_value != NV_CTRL_FSAA_MODE_NONE) { g_signal_handlers_block_by_func(G_OBJECT(fxaa_checkbox), @@ -1042,7 +1042,7 @@ static void update_fsaa_from_fxaa_change (CtkMultisample *ctk_multisample, GtkWidget *fsaa_menu = ctk_multisample->fsaa_menu; /* The FSAA dropdown menu is: 0 == app, 1 == override, 2 == enhance */ - gint fsaa_idx = gtk_option_menu_get_history(GTK_OPTION_MENU(fsaa_menu)) ; + gint fsaa_idx = CTK_DROP_DOWN_MENU(fsaa_menu)->current_selected_item; gint fsaa_val; diff --git a/src/gtk+-2.x/ctkmultisample.h b/src/gtk+-2.x/ctkmultisample.h index a72621b..b7d0690 100644 --- a/src/gtk+-2.x/ctkmultisample.h +++ b/src/gtk+-2.x/ctkmultisample.h @@ -22,6 +22,7 @@ #include "ctkevent.h" #include "ctkconfig.h" +#include "ctkdropdownmenu.h" G_BEGIN_DECLS @@ -61,6 +62,7 @@ struct _CtkMultisample GtkWidget *log_aniso_app_override_check_button; GtkWidget *log_aniso_scale; GtkWidget *texture_sharpening_button; + CtkDropDownMenu *d; guint active_attributes; diff --git a/src/gtk+-2.x/ctkwindow.c b/src/gtk+-2.x/ctkwindow.c index 034a014..c3dd54b 100644 --- a/src/gtk+-2.x/ctkwindow.c +++ b/src/gtk+-2.x/ctkwindow.c @@ -888,7 +888,7 @@ GtkWidget *ctk_window_new(ParsedAttribute *p, ConfigProperties *conf, /* add the per-vcs (e.g. Quadro Plex) entries into the tree model */ for (i = 0; i < h->targets[VCS_TARGET].n; i++) { - + gchar *vcs_product_name; gchar *vcs_name; GtkWidget *child; @@ -906,16 +906,17 @@ GtkWidget *ctk_window_new(ParsedAttribute *p, ConfigProperties *conf, vcs_name = g_strdup_printf("VCS %d - (%s)", NvCtrlGetTargetId(vcs_handle), vcs_product_name); + XFree(vcs_product_name); } else { vcs_name = g_strdup_printf("VCS %d - (Unknown)", NvCtrlGetTargetId(vcs_handle)); } if (!vcs_name) continue; - + /* create the object for receiving NV-CONTROL events */ - + ctk_event = CTK_EVENT(ctk_event_new(vcs_handle)); - + /* create the vcs entry */ gtk_tree_store_append(ctk_window->tree_store, &iter, NULL); diff --git a/src/libXNVCtrl/NVCtrl.c b/src/libXNVCtrl/NVCtrl.c index fe6240f..4db4533 100644 --- a/src/libXNVCtrl/NVCtrl.c +++ b/src/libXNVCtrl/NVCtrl.c @@ -1129,6 +1129,49 @@ Bool XNVCTRLStringOperation ( return ret; } +Bool XNVCTRLBindWarpPixmapName ( + Display *dpy, + int screen, + Pixmap pix, + const char *name, + unsigned int dataType, + unsigned int vertexCount +) { + XExtDisplayInfo *info = find_display(dpy); + xnvCtrlBindWarpPixmapNameReq *req; + unsigned int nameLen; + + if (!XextHasExtension(info)) + return False; + + if (!name) + return False; + + nameLen = strlen(name) + 1; + + XNVCTRLCheckExtension(dpy, info, False); + + LockDisplay(dpy); + GetReq(nvCtrlBindWarpPixmapName, req); + + req->reqType = info->codes->major_opcode; + req->nvReqType = X_nvCtrlBindWarpPixmapName; + + req->length += ((nameLen + 3) & ~3) >> 2; + req->num_bytes = nameLen; + + req->screen = screen; + req->pixmap = pix; + req->dataType = dataType; + req->vertexCount = vertexCount; + + Data(dpy, name, nameLen); + + UnlockDisplay(dpy); + SyncHandle(); + + return True; +} static Bool wire_to_event (Display *dpy, XEvent *host, xEvent *wire) { diff --git a/src/libXNVCtrl/NVCtrl.h b/src/libXNVCtrl/NVCtrl.h index 53bf930..2b6a302 100644 --- a/src/libXNVCtrl/NVCtrl.h +++ b/src/libXNVCtrl/NVCtrl.h @@ -406,21 +406,13 @@ /* - * NV_CTRL_FRAMELOCK_MASTER - get/set which display device to use - * as the frame lock master for the entire sync group. Note that only - * one node in the sync group should be configured as the master. - * - * This attribute can only be queried through XNVCTRLQueryTargetAttribute() - * using a NV_CTRL_TARGET_TYPE_GPU target. This attribute cannot be - * queried using a NV_CTRL_TARGET_TYPE_X_SCREEN. + * NV_CTRL_FRAMELOCK_MASTER is deprecated; NV_CTRL_FRAMELOCK_DISPLAY_CONFIG + * should be used instead. */ #define NV_CTRL_FRAMELOCK_MASTER 22 /* RW-G */ - -/* These are deprecated. NV_CTRL_FRAMELOCK_MASTER now takes and - returns a display mask as value. */ -#define NV_CTRL_FRAMELOCK_MASTER_FALSE 0 -#define NV_CTRL_FRAMELOCK_MASTER_TRUE 1 +#define NV_CTRL_FRAMELOCK_MASTER_FALSE 0 // deprecated +#define NV_CTRL_FRAMELOCK_MASTER_TRUE 1 // deprecated /* @@ -520,7 +512,7 @@ /* * NV_CTRL_FRAMELOCK_SYNC - enable/disable the syncing of display * devices to the frame lock pulse as specified by previous calls to - * NV_CTRL_FRAMELOCK_MASTER and NV_CTRL_FRAMELOCK_SLAVES. + * NV_CTRL_FRAMELOCK_DISPLAY_CONFIG. * * This attribute can only be queried through XNVCTRLQueryTargetAttribute() * using a NV_CTRL_TARGET_TYPE_GPU target. This attribute cannot be @@ -1708,24 +1700,15 @@ #define NV_CTRL_ASSOCIATED_DISPLAY_DEVICES 231 /* RW- */ /* - * NV_CTRL_FRAMELOCK_SLAVES - get/set whether the display device(s) - * given should listen or ignore the master's sync signal. - * - * This attribute can only be queried through XNVCTRLQueryTargetAttribute() - * using a NV_CTRL_TARGET_TYPE_GPU target. This attribute cannot be - * queried using a NV_CTRL_TARGET_TYPE_X_SCREEN. + * NV_CTRL_FRAMELOCK_SLAVES is deprecated; NV_CTRL_FRAMELOCK_DISPLAY_CONFIG + * should be used instead. */ #define NV_CTRL_FRAMELOCK_SLAVES 232 /* RW-G */ /* - * NV_CTRL_FRAMELOCK_MASTERABLE - Can any of the given display devices - * be set as master of the frame lock group. Returns a bitmask of the - * corresponding display devices that can be set as master. - * - * This attribute can only be queried through XNVCTRLQueryTargetAttribute() - * using a NV_CTRL_TARGET_TYPE_GPU target. This attribute cannot be - * queried using a NV_CTRL_TARGET_TYPE_X_SCREEN. + * NV_CTRL_FRAMELOCK_MASTERABLE is deprecated; NV_CTRL_FRAMELOCK_DISPLAY_CONFIG + * should be used instead. */ #define NV_CTRL_FRAMELOCK_MASTERABLE 233 /* R-DG */ @@ -2307,10 +2290,9 @@ #define NV_CTRL_GVO_CSC_CHANGED_EVENT 294 /* --- */ -/* - * NV_CTRL_FRAMELOCK_SLAVEABLE - Returns a bitmask of the display devices - * that are (currently) allowed to be selected as slave devices for the - * given GPU +/* + * NV_CTRL_FRAMELOCK_SLAVEABLE is deprecated; NV_CTRL_FRAMELOCK_DISPLAY_CONFIG + * should be used instead. */ #define NV_CTRL_FRAMELOCK_SLAVEABLE 295 /* R-DG */ @@ -3205,6 +3187,24 @@ #define NV_CTRL_DISPLAY_RANDR_OUTPUT_ID 391 /* R-D- */ /* + * NV_CTRL_FRAMELOCK_DISPLAY_CONFIG - Configures whether the display device + * should listen, ignore or drive the framelock sync signal. + * + * Note that whether or not a display device may be set as a client/server + * depends on the current configuration. For example, only one server may be + * set per Quadro Sync device, and displays can only be configured as a client + * if their refresh rate sufficiently matches the refresh rate of the server + * device. + * + * Note that when querying the ValidValues for this data type, the values are + * reported as bits within a bitmask (ATTRIBUTE_TYPE_INT_BITS); + */ +#define NV_CTRL_FRAMELOCK_DISPLAY_CONFIG 392 /* RWD */ +#define NV_CTRL_FRAMELOCK_DISPLAY_CONFIG_DISABLED 0 +#define NV_CTRL_FRAMELOCK_DISPLAY_CONFIG_CLIENT 1 +#define NV_CTRL_FRAMELOCK_DISPLAY_CONFIG_SERVER 2 + +/* * NV_CTRL_TOTAL_DEDICATED_GPU_MEMORY - Returns the total amount of dedicated * GPU video memory, in MB, on the specified GPU. This excludes any TurboCache * padding included in the value returned by NV_CTRL_TOTAL_GPU_MEMORY. @@ -4612,5 +4612,13 @@ typedef struct _NVCTRLAttributePermissions { #define TARGET_STRING_ATTRIBUTE_CHANGED_EVENT 3 #define TARGET_BINARY_ATTRIBUTE_CHANGED_EVENT 4 +/* + * To be used with XNVCTRLBindWarpPixmapName to specify the data type. + */ + +#define NV_CTRL_WARP_DATA_TYPE_BLEND_OR_OFFSET_TEXTURE 0 +#define NV_CTRL_WARP_DATA_TYPE_MESH_TRIANGLESTRIP_XYUVRQ 1 +#define NV_CTRL_WARP_DATA_TYPE_MESH_TRIANGLES_XYUVRQ 2 + #endif /* __NVCTRL_H */ diff --git a/src/libXNVCtrl/NVCtrlLib.h b/src/libXNVCtrl/NVCtrlLib.h index f2f4bd6..0d6f910 100644 --- a/src/libXNVCtrl/NVCtrlLib.h +++ b/src/libXNVCtrl/NVCtrlLib.h @@ -632,7 +632,66 @@ Bool XNVCTRLStringOperation ( char **ppOut ); +/* + * XNVCTRLBindWarpPixmapName - + * + * Binds a Pixmap to a string name and some meta-data. If the Pixmap is None, + * a previously bound name will be released from its Pixmap. + * + * These names are to be used with the "WarpMesh", "BlendTexture" and + * "OffsetTexture" MetaMode attributes. + * + * Returns True if successful, or False if the screen is not + * controlled by the NVIDIA driver. + * + * dataType should be one of: + * - NV_CTRL_WARP_DATA_TYPE_BLEND_OR_OFFSET_TEXTURE + * - NV_CTRL_WARP_DATA_TYPE_MESH_TRIANGLESTRIP_XYUVRQ + * - NV_CTRL_WARP_DATA_TYPE_MESH_TRIANGLES_XYUVRQ + * + * For dataType = NV_CTRL_WARP_DATA_TYPE_MESH_*, the named Pixmap is expected + * to have a width multiple of 1024 pixels, have a depth of 32 and contain a + * binary representation of a list of six-component vertices. Each of these + * components is a 32-bit floating point value. + * + * The XY components should contain normalized vertex coordinates, to be + * rendered as a triangle list or strip. The X and Y components' [0,1] range + * map to the display's MetaMode ViewportOut X and Y, respectively. + * + * The U, V, R, and Q components should contain normalized, projective texture + * coordinates: + * U, V: 2D texture coordinate. U and V components' [0,1] range maps to the + * display's MetaMode ViewportIn X and Y, respectively. + * R: unused + * Q: Used for interpolation purposes. This is typically the third component + * of the result of a multiplication by a 3x3 projective transform matrix. + * + * vertexCount should contain the amount of vertices represented by the Pixmap + * and is ignored if dataType = NV_CTRL_WARP_DATA_TYPE_BLEND_OR_OFFSET_TEXTURE. + * + * Possible errors: + * BadValue - The screen index is out of range + * BadMatch - The screen isn't being driven by the NVIDIA driver + * BadMatch - If pixmap_id is None, couldn't find the name to release. + * BadPixmap - Couldn't find the Pixmap referenced by pixmap_id. + * BadMatch - pixmap_id names a Pixmap owned by a different screen. + * BadValue - dataType isn't one of NV_CTRL_WARP_DATA_TYPE_*. + * BadAlloc - Insufficient resources to fulfill the request. + * Possible errors if dataType is NV_CTRL_WARP_DATA_TYPE_MESH_*: + * BadMatch - The Pixmap's width isn't a multiple of 1024. + * BadMatch - The Pixmap's depth isn't 32. + * BadMatch - The Pixmap cannot contain vertexCount XYUVRQ vertices. + * BadValue - Invalid vertexCount for the data type. + */ +Bool XNVCTRLBindWarpPixmapName ( + Display *dpy, + int screen, + Pixmap pixmap_id, + const char *name, + unsigned int dataType, + unsigned int vertexCount +); /* * XNVCtrlSelectNotify - diff --git a/src/libXNVCtrl/nv_control.h b/src/libXNVCtrl/nv_control.h index 0124c87..723609c 100644 --- a/src/libXNVCtrl/nv_control.h +++ b/src/libXNVCtrl/nv_control.h @@ -66,7 +66,7 @@ #define NV_CONTROL_NAME "NV-CONTROL" #define NV_CONTROL_MAJOR 1 -#define NV_CONTROL_MINOR 28 +#define NV_CONTROL_MINOR 29 #define X_nvCtrlQueryExtension 0 #define X_nvCtrlIsNv 1 @@ -101,8 +101,9 @@ #define X_nvCtrlQueryStringAttributePermissions 30 #define X_nvCtrlQueryBinaryDataAttributePermissions 31 #define X_nvCtrlQueryStringOperationAttributePermissions 32 +#define X_nvCtrlBindWarpPixmapName 33 -#define X_nvCtrlLastRequest (X_nvCtrlQueryStringOperationAttributePermissions + 1) +#define X_nvCtrlLastRequest (X_nvCtrlBindWarpPixmapName + 1) /* Define 32 bit floats */ @@ -533,6 +534,18 @@ typedef struct { #define sz_xnvCtrlStringOperationReply 32 typedef struct { + CARD8 reqType; + CARD8 nvReqType; + CARD16 length B16; + CARD32 screen B32; + CARD32 pixmap B32; + CARD32 num_bytes B32; /* Length of string */ + CARD32 dataType B32; + CARD32 vertexCount B32; +} xnvCtrlBindWarpPixmapNameReq; +#define sz_xnvCtrlBindWarpPixmapNameReq 24 + +typedef struct { union { struct { BYTE type; diff --git a/src/parse.c b/src/parse.c index a27664d..73eb006 100644 --- a/src/parse.c +++ b/src/parse.c @@ -308,6 +308,7 @@ AttributeTableEntry attributeTable[] = { { "CurrentMetaMode", NV_CTRL_STRING_CURRENT_METAMODE_VERSION_2, S|N, "Controls the current MetaMode." }, { "XineramaInfoOrder", NV_CTRL_STRING_NVIDIA_XINERAMA_INFO_ORDER, S|N, "Controls the nvidiaXineramaInfoOrder." }, { "RandROutputID", NV_CTRL_DISPLAY_RANDR_OUTPUT_ID, N, "The RandR Output ID that corresponds to the display device." }, + { "FrameLockDisplayConfig", NV_CTRL_FRAMELOCK_DISPLAY_CONFIG, N, "Controls the FrameLock mode of operation for the display device." }, /* TV */ { "TVOverScan", NV_CTRL_TV_OVERSCAN, 0, "Adjusts the amount of overscan on the specified display device." }, diff --git a/src/version.mk b/src/version.mk index 6db0208..f91d9f6 100644 --- a/src/version.mk +++ b/src/version.mk @@ -1 +1 @@ -NVIDIA_VERSION = 310.19 +NVIDIA_VERSION = 313.09 @@ -1 +1 @@ -NVIDIA_VERSION = 310.19 +NVIDIA_VERSION = 313.09 |