2016-12-29 4 views
2

Я создаю программу, которая имитирует физические явления (в частности, электрические заряды) в произвольной области (чтобы иметь смысл больше смысла, она должна быть где-то вокруг шкалы пикометра, но, тем не менее, идея чтобы пользователь немного поиграл со значениями, например, пытаясь увидеть, что заряды взаимодействуют на километры), используя область рисования Каира, которая масштабируется для обеспечения адекватных возможностей масштабирования.Создание переменной шкалы

С точки зрения пользователя должен быть удобный способ изменения масштаба, как больших, так и малых значений, поэтому для меня наиболее логичным является создание gtk_scale, значение корректировки которого изменяется по мере приближения пользователя к любому ребру. Теперь, я должен признаться, что я не самый опытный программист здесь, совсем наоборот, поэтому я извиняюсь за любую тупость, которую я могу сделать, но не должен ли работать следующий код?

gboolean scale_change(GtkWidget *w, gpointer p) 
{ 
    pdata *data = (pdata *) p; 

    //A struct with all the program data. 

    double temp; 
    data->scale = gtk_range_get_value(GTK_RANGE(data->vis_scale)); 

    //data->scale is the value used to later scale cairo. 

    temp = log10(data->scale); 
    if (temp - floor(temp + 0.5) < DBL_EPSILON) 

    //Check if the value is a power of ten, to change the scale 

    { 
     data->sadj = gtk_adjustment_new(data->scale, 0.1*data->scale, 10.0*data->scale, 
             data->scale, 1, (data->scale) * 
             max(gtk_widget_get_allocated_height(data->drawarea), 
             gtk_widget_get_allocated_width(data->drawarea))); 

     gtk_range_set_adjustment(GTK_SCALE(data->vis_scale), data->sadj); 
     gtk_scale_set_digits(GTK_SCALE(data->vis_scale), (int) temp); 
    } 
    return TRUE; 
} 

Но, так как это не так, есть лучший способ сделать это, или моя идея вообще невозможно, или, по крайней мере, очень непрактично?

ответ

0

Вы можете использовать GtkSpinButton и изменить его range. Он будет иметь такой же эффект без особых хлопот ...

Смежные вопросы