display: Simplify scale filtering

This is prone to miss intermediate values that users might actually
want to use so, for now, just show the 5 first scales.
This commit is contained in:
Rui Matos 2017-08-28 18:24:21 +02:00
parent a4a243cee4
commit bbccf27488

View file

@ -1115,55 +1115,27 @@ make_label_for_scale (double scale)
}
#define MAX_N_SCALES 5
static void
get_display_scales (CcDisplayMonitor *output,
double *scales)
{
CcDisplayMode *mode;
const double *all_scales;
double preferred;
double increment;
guint n, i, j;
mode = cc_display_monitor_get_mode (output);
if (!mode)
return;
all_scales = cc_display_mode_get_supported_scales (mode);
n = n_supported_scales (mode);
if (n <= MAX_N_SCALES)
{
memcpy (scales, all_scales, n * sizeof (double));
return;
}
preferred = cc_display_mode_get_preferred_scale (mode);
increment = (all_scales[n - 1] - all_scales[0]) / (double) (MAX_N_SCALES - 1);
scales[0] = all_scales[0];
for (i = j = 1; i < n && j < MAX_N_SCALES; i++)
if (all_scales[i] >= scales[0] + increment*j || all_scales[i] == preferred)
scales[j++] = all_scales[i];
}
static void
setup_scale_buttons (GtkWidget *bbox,
CcDisplayMonitor *output)
{
CcDisplayPanel *panel;
GtkRadioButton *group;
double scales[MAX_N_SCALES + 1] = { 0 };
double *scale;
CcDisplayMode *mode;
const double *scales, *scale;
guint i;
panel = g_object_get_data (G_OBJECT (bbox), "panel");
gtk_container_foreach (GTK_CONTAINER (bbox), (GtkCallback) gtk_widget_destroy, NULL);
get_display_scales (output, scales);
mode = cc_display_monitor_get_mode (output);
if (!mode)
return;
scales = cc_display_mode_get_supported_scales (mode);
group = NULL;
for (scale = scales; *scale != 0.0; scale++)
for (scale = scales, i = 0; *scale != 0.0 && i < MAX_N_SCALES; scale++, i++)
{
GtkWidget *button = gtk_radio_button_new_from_widget (group);